<?php
	/**
	* phpGroupWare - property: a Facilities Management System.
	*
	* @author Sigurd Nes <sigurdne@online.no>
	* @copyright Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc. http://www.fsf.org/
	* This file is part of phpGroupWare.
	*
	* phpGroupWare is free software; you can redistribute it and/or modify
	* it under the terms of the GNU General Public License as published by
	* the Free Software Foundation; either version 2 of the License, or
	* (at your option) any later version.
	*
	* phpGroupWare is distributed in the hope that it will be useful,
	* but WITHOUT ANY WARRANTY; without even the implied warranty of
	* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	* GNU General Public License for more details.
	*
	* You should have received a copy of the GNU General Public License
	* along with phpGroupWare; if not, write to the Free Software
	* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
	*
	* @license http://www.gnu.org/licenses/gpl.html GNU General Public License
	* @internal Development of this application was funded by http://www.bergen.kommune.no/bbb_/ekstern/
	* @package property
	* @subpackage import
 	* @version $Id: Import_fra_Service,v 1.19 2007/03/18 16:33:16 sigurdne Exp $
	*/

	/**
	 * Description
	 * @package property
	 */

	class import_conv
	{
		var $currentrecord = array(); //used for buffering to allow uid lines to go first
		var $id = -1;
		var $kildeid=1;
		var $splitt=0;
		var $type = 'csv';
		var $header_count = 18;
		var $soXport;
		var $invoice;

		var $import = array(
			'Bestilling' => 'pmwrkord_code', 
			'Fakt. Nr' => 'fakturanr',
			'Konto' => 'spbudact_code',
			'Objekt' => 'dima',
			'DIM 6' => 'dimd',//utgår fra import - kopieres fra kategori
			'MVA' => 'mvakode',
			'Tjeneste'=> 'kostra_id',
			'Belop [kr]' => 'belop'
			);

		var $header = array('Bestilling','Fakt. Nr','Konto','Objekt','DIM 6','MVA','Belop [kr]');

		function import_conv()
		{
			$this->db 				= clone($GLOBALS['phpgw']->db);
			$this->soXport 			= CreateObject('property.soXport');	
			$this->invoice 			= CreateObject('property.boinvoice');
			$this->bocommon			= CreateObject('property.bocommon');
			$this->dateformat		= $GLOBALS['phpgw']->db->date_format();
			$this->datetimeformat	= $GLOBALS['phpgw']->db->datetime_format();
			$this->next_bilagsnr	= $this->invoice->next_bilagsnr();
		}

		function import($invoice_common,$download)
		{
			$tsvfile	= $invoice_common['tsvfile'];

			$conv_type	= $invoice_common['conv_type'];
			$buffer = array();

//-----------

			phpgw::import_class('phpgwapi.phpexcel');

			$objPHPExcel = PHPExcel_IOFactory::load($tsvfile);

			$data = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);

			$result = array();

			$rows = count($data)+1;

			for ($row = $this->header_count; $row < $rows; $row++ )
			{
				$this->currentrecord = array();

				$j=0;
				foreach($data[$row] as $key => $_dummy)
				{
					$value = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow($j,$row)->getCalculatedValue();

					if ($name = $this->import[$this->header[$j]])
					{
						
						$value = str_replace(array('\n','\r'),array('<BR>',''),$value);
						$this->currentrecord += array($name => $value);
					}
					$j++;
				}

				if($this->currentrecord['fakturanr'] && $this->currentrecord['belop']) // fakturanr og beløp
				{
					++$this->id;
					$buffer = $this->import_end_record($buffer,$invoice_common);
				}
			}

//----------

			if(!$download)
			{
				$buffer = $this->import_end_file($buffer,$invoice_common['bilagsnr']);
			}

			return $buffer;
		}
		

		function import_end_record($buffer,$invoice_common)
		{
			$buffer[$this->id] = array();

			foreach ($this->currentrecord as $name => $value)
			{
				if($name=='belop')
				{
					$value = str_replace('kr','',$value);
					$value = str_replace(' ','',$value);
					$value = str_replace(',','.',$value);
					
					if( $invoice_common['art'] == 2 ) // kreditnota
					{
						$value = -1 * abs($value);
					}
					
					$buffer[$this->id]['godkjentbelop'] = $value;
				}
				if($name=='pmwrkord_code')
				{
					if(!$this->soXport->check_order((int)$value))
					{
						$value='';
					}
					else
					{
						$workorder = execMethod('property.soworkorder.read_single', (int)$value);
						$buffer[$this->id]['project_id'] = $this->soXport->get_project((int)$value);//Agresso prosjekt
						$buffer[$this->id]['dime']	= $workorder['cat_id']; // Dim 6
						$buffer[$this->id]['dimb']	= $workorder['ecodimb']; // Ansvarssted
					}
				}

				if($name=='spbudact_code')
				{
					continue;
				//	$value = $this->check_spbudact_code($value);

				}

				if($name=='dima')
				{
					$value = $this->check_dima($value);
					$buffer[$this->id]['loc1'] = $loc1=substr($value,0,4);
				}

				if($name=='mvakode')
				{
					if( $invoice_common['auto_tax'])
					{
						$value = (int)$this->soXport->auto_tax($buffer[$this->id]['loc1']);
					}
					else
					{
						$value = (int) $value;
					}
				}
				
				$buffer[$this->id][$name] = $value;
			}

			$buffer[$this->id]['bilagsnr'] = $this->next_bilagsnr;
			$buffer[$this->id]['splitt'] = $this->splitt;
			$buffer[$this->id]['kildeid'] = $this->kildeid;
			$buffer[$this->id]['kidnr'] = $invoice_common['kid_nr'];
			$buffer[$this->id]['typeid'] = $invoice_common['type'];
			$buffer[$this->id]['periode'] = $invoice_common['syear'] . sprintf("%02d",$invoice_common['smonth']);
			$buffer[$this->id]['regtid'] = date($this->datetimeformat);
			$buffer[$this->id]['artid'] = $invoice_common['art'];
			$buffer[$this->id]['spvend_code'] = $invoice_common['vendor_id'];
			$buffer[$this->id]['oppsynsmannid'] = $invoice_common['janitor'];
			$buffer[$this->id]['saksbehandlerid'] = $invoice_common['supervisor'];
			$buffer[$this->id]['budsjettansvarligid'] = $invoice_common['budget_responsible'];
			
			$buffer[$this->id]['dimd'] = $buffer[$this->id]['dime'];

			$invoice_date = date($this->dateformat,mktime(2,0,0,$invoice_common['smonth'],$invoice_common['sday'],$invoice_common['syear']));

			if($invoice_common['num_days'])
			{
				$payment_date = date($this->dateformat,mktime(2,0,0,$invoice_common['smonth'],$invoice_common['sday'],$invoice_common['syear'])+(86400*$invoice_common['num_days']));
			}
			else
			{
				$payment_date = date($this->dateformat,mktime(2,0,0,$invoice_common['emonth'],$invoice_common['eday'],$invoice_common['eyear']));			
			}

			$buffer[$this->id]['fakturadato'] = $invoice_date;
			$buffer[$this->id]['forfallsdato'] = $payment_date;


			if($workorder)
			{
				$buffer[$this->id]['spbudact_code'] = $workorder['b_account_id'];
			}
			else
			{
				$buffer[$this->id]['spbudact_code'] = '123014';			
			}

			if($invoice_common['auto_tax'])
			{
				$buffer[$this->id]['mvakode'] = $this->soXport->tax_b_account_override($buffer[$this->id]['mvakode'] ,$buffer[$this->id]['spbudact_code']);
				$buffer[$this->id]['mvakode'] = $this->soXport->tax_vendor_override($buffer[$this->id]['mvakode'] ,$buffer[$this->id]['spvend_code']);
			}

			$buffer[$this->id]['kostra_id'] = $this->soXport->get_kostra_id($buffer[$this->id]['loc1']);

			if(!isset($buffer[$this->id]['fakturanr']) || !$buffer[$this->id]['fakturanr']) // fakturanr
			{
				$buffer[$this->id]['dimb'] = $invoice_common['invoice_num'];
			}

			if(!isset($buffer[$this->id]['dimb']) || !$buffer[$this->id]['dimb']) // Ansvarssted
			{
				$buffer[$this->id]['dimb'] = $invoice_common['dim_b'];
			}
			

			return $buffer;
		}
		
		function check_spbudact_code($id)
		{
			$b_account='';
			$this->db->query("select id from fm_b_account where id='$id'");
			$this->db->next_record();
			if ($this->db->f('id'))
			{ 
				$b_account = $this->db->f('id');
			}
			else
			{
				$this->db->query("select id from fm_b_account_convert where old_id='$id'");
				$this->db->next_record();
				$b_account = $this->db->f('id');
			}
			
			return $b_account;
		}

		function check_dima($id)
		{
			$loc1=substr($id,0,4);
			$loc2=substr($id,4,2);
			
			$this->db->query("select loc1 from fm_location1 where loc1='$loc1' AND ((fm_location1.category <> 99) OR (fm_location1.category IS NULL))");
			$this->db->next_record();
			if ($this->db->f('loc1'))
			{ 
				$dima = $this->db->f('loc1');
				
				if ($loc2)
				{
					$this->db->query("select location_code from fm_location2 where loc1='$loc1' AND loc2='$loc2'  AND ((fm_location2.category <> 99) OR (fm_location2.category IS NULL))");
					$this->db->next_record();
					if ($this->db->f('location_code'))
					{ 
						$dima = str_replace('-','',$this->db->f('location_code'));
					}
					else
					{
						unset($dima);
					}
				}
			}
			
			return $dima;
		}

		function import_end_file($buffer,$bilagsnr)
		{
			$num	= $this->soXport->add($buffer);
			$receipt['message'][]= array('msg' => lang('Successfully imported %1 records into your invoice register.',$num).' '.lang('ID').': '. $bilagsnr);
			return $receipt;
		}
	}
