<?php
  

	function ist_0_oder_1($string)
	{
		$string=rtrim($string,");");
		if ($string=='0x01') return 1;
		else if ($string=='0x00') return 0;
	}
	
	// CSB Arbeitet offesichtlich mit 16byte, a-trust versteht aber nur 32byte zum decrypten
	// deswegen muss ich das selber schreiben
	
	// 32bit php unterstützt kein pack "J" also 64bit big endian, also muss ich das auch selbst machen
	function convert_big_endian_to_decimal($bigendian)
	{
		// Big Endian ist nicht supported in php 5.5 - deswegen wird es hier simuliert
		$hexStringValue = bin2hex($bigendian);
		$decimal = base_convert($hexStringValue, 16, 10);
		return($decimal);
		// Ende Big Endian convertierung
	}
	
	function decimal_to_big_endian($decimal)
	{
		// Big Endian ist nicht supported in php 5.5 - deswegen wird es hier simuliert
		echo $decimal;
		$hexStringValue = base_convert($decimal, 10, 16);
		$hexStringValue = str_pad($hexStringValue, 16, '0', STR_PAD_LEFT);
		$bigendian = hex2bin($hexStringValue);
		echo $bigendian;
		return($bigendian);
		// Ende Big Endian convertierung
	}
	
	// Umsatzzähler verschlüsseln und entschlüsseln
	// eigentlich das gleiche wie decrypt von a-trust aber halt auch mit 16byte byte array
	function encrypt_umsatzzaehler($bon_id, $umsatzzaehler, $aes_key, $kassa_id)
	{
		$method = 'AES-256-CTR';
		$library = 'OpenSSL';
		if(!extension_loaded($library))
		  die("Sorry, the PHP-$library extension is not loaded!\n");
		if(array_search($method, openssl_get_cipher_methods()) === false)
		  die("Sorry, your $library library doesn't support $method!\n");
		$tc_bin = decimal_to_big_endian($umsatzzaehler);
		$key_bin = base64_decode($aes_key);
		$iv_bin = substr(hash('sha256', $kassa_id . $bon_id, true), 0, 16);
		$tc_encrypted_base64 = openssl_encrypt($tc_bin, $method, $key_bin, false, $iv_bin);
		return($tc_encrypted_base64);
	}
	
	function decrypt_umsatzzaehler($bon_id, $umsatzzaehler_verschl, $aes_key, $kassa_id)
	{
		$method = 'AES-256-CTR';
		$library = 'OpenSSL';
		if(!extension_loaded($library))
		  die("Sorry, the PHP-$library extension is not loaded!\n");
		if(array_search($method, openssl_get_cipher_methods()) === false)
		  die("Sorry, your $library library doesn't support $method!\n");
		
		$key_bin = base64_decode($aes_key);
		$iv_bin = substr(hash('sha256', $kassa_id . $bon_id, true), 0, 16);
		$binStringValue = openssl_decrypt($umsatzzaehler_verschl, $method, $key_bin, false, $iv_bin);
		$umsatz=convert_big_endian_to_decimal($binStringValue);
		return($umsatz);
	}
	// *************************************************
	// Ende Umsatzzähler verschlüsseln Funktionen
	
	function calculate_aes_checksum($aeskey)
	{
		# Prüfsummen berechnung vom AES Key
		$hashResult = hash('sha256', $aeskey);			
		$cH1=substr($hashResult, 0, 2);							
		$cH2=substr($hashResult, 2, 2);
		$cH3=substr($hashResult, 4, 2);
				
		$xStr=chr('0x'.$cH1).chr('0x'.$cH2).chr('0x'.$cH3);		# lt AES_Pruefsummenberechnung_200716_3.pdf werden die ersten 3bytes genommen, s		
			
		$extractedHashBase64=base64_encode($xStr);		
		$valSumCalc=preg_replace('/=/', '', $extractedHashBase64);
		return($valSumCalc);
	}
	
	function get_csb_version($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 26 ) === "INSERT INTO `applications`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];
					$name=$csv_arr[1];
					$version=$csv_arr[2];
					$version=substr($version, 0, strpos($version, "_CSBPOS);"));
					echo "Version: ".$version . "\n";
				}
			}  
		}                                               
		fclose($myfile);
		return($version);
	}
	
	function import_csb_global_parameter($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 31 ) === "INSERT INTO `cashboxparameters`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$kassen_id=$csv_arr[0];
					$aes_key=$csv_arr[1];
					echo $kassen_id . " " . $aes_key . "\n";
					insert_into_konfiguration("KASSA_ID", $kassen_id);
					insert_into_konfiguration("AES_KEY", $aes_key);
					
				}
				insert_into_konfiguration("ZDA_ID", "AT1");
				$aes_checksum=calculate_aes_checksum($aes_key);
				insert_into_konfiguration("AES_CECKSUM", $aes_checksum);
			}  
		}                                               
		fclose($myfile);
		if (KASSA_ID !== $kassen_id) 
		{
			// Kassa ID muss gesetzt werden, deswegen muss die Seite neu geladen werden.
			echo KASSA_ID . " <-kassaid-> ".$kassen_id. "\n"; 
			mysql_query("COMMIT");
			header('Location: '.$_SERVER['REQUEST_URI']);
		}
	}
	
	function jws_to_qr_code($jws)
	{
		//$signString='eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMV8xMDAxXzYzOF8yMDE3LTAyLTEzVDExOjE0OjQzXzg2LDQwXzAsMDBfMCwwMF8wLDAwXzAsMDBfSXZVRFZFSHYzWmM9XzcyYTNlMTkzX29VcFBQazFxS1cwPQ.sywS-_TGLK9qnpcfyWude8FoRSh0WpVmaGcaWM8aGBfUiFjB3BdegLJrTbCzDYpL_lotR2qgKVERI0uGIOX8cg';
		$getQrData=explode(".", $jws);
		# $qrString=base64_decode($getQrData[1]);
				
		if(defined('SIGNATUR_MODUS') && strtolower(SIGNATUR_MODUS) == 'com')
		{
			$base64Class= new COM("ATrustRegistrierkasseCom.Base64");
			# für QR-Code wird der signaturteil aus dem gesamten signaturstring (3. teil) von Base64 Url auf Base64 umcodiert. 
			$qr_3="";
			$retVal=$base64Class->ReencodeUrlToNormal($getQrData[2], $qr_3);
					
			# aus dem zweiten Teil des Signaturstrings wir ein Klartxt gemacht
			$qr_2="";			
			$retVal1=$base64Class->DecodeUrl($getQrData[1], $qr_2);
					
			$qrString=$qr_2."_".$qr_3;
		
		}
		return $qrString;
	}
	
	function import_csb_dep($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
		$aes_key = AES_KEY;
		$kassa_id = KASSA_ID;
		
		$summenzaehler=0;
		while ($line=fgets($myfile)) 
		{
			// Tickets raussuchen
			if (substr( $line, 0, 17 ) === "INSERT INTO `dep`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$receipt_id=$csv_arr[1];
					$receiptdate=$csv_arr[2];
					$sumtaxnormal=$csv_arr[3];
					$sumtaxermaessigt1=$csv_arr[4];
					$sumtaxermaessigt2=$csv_arr[5];
					$sumtaxnull=$csv_arr[6];
					$sumtaxbesonders=$csv_arr[7];
					$encryptedturnovervalue=$csv_arr[8];
					$signaturecertificateserialnumber=$csv_arr[9];
					$signaturevaluepreviousreceipt=$csv_arr[10];
					$jwscompactrepresentation=$csv_arr[11];
					$cashboxid=$csv_arr[12];
					$signed=$csv_arr[13];
					
					//$sitpos_bon_id=get_sitpos_bon_id($receipt_id);
					$summenzaehler=$summenzaehler+$sumtaxbesonders*100+$sumtaxnull*100+$sumtaxermaessigt2*100+$sumtaxermaessigt1*100+$sumtaxnormal*100;
					$umsatzzaehler_csb=decrypt_umsatzzaehler($receipt_id, $encryptedturnovervalue, $aes_key, $kassa_id);
					echo "Bon: $receipt_id \t\t Reini: $summenzaehler	\t\t CSB: $umsatzzaehler_csb \n";

					$qr_string=jws_to_qr_code($jwscompactrepresentation);
					$sql="INSERT into dep SET kassen_id='".$cashboxid."',beleg_nr='".$receipt_id."',datum_zeit='".$receiptdate."',betr_satz_norm='".$sumtaxnormal."',betr_satz_erm_1='".$sumtaxermaessigt1."',betr_satz_erm_2='".$sumtaxermaessigt2."',betr_satz_null='".$sumtaxnull."',betr_satz_besonder='".$sumtaxbesonders."',umsatz_zaehler_aes='".$encryptedturnovervalue."',umsatz_zaehler='".$summenzaehler."',zertif_nr='".$signaturecertificateserialnumber."',signatur_vorigerbeleg='".$signaturevaluepreviousreceipt."',qr_string='".$qr_string."',signjws='".$jwscompactrepresentation."'";
					mysql_query($sql);
					//echo $sql ."\n";
				}
				
				
			}
		}    
		// CSB speichert die Seriennummer in hex - wir in dezimal
		$signatur_seriennummer=hexdec($signaturecertificateserialnumber);
		insert_into_konfiguration("ZERTIFIKATS_NR", $signatur_seriennummer);
		fclose($myfile);
		$sqlE=mysql_query("SELECT * FROM dep ORDER BY dep_id ASC LIMIT 0, 1");
		while ($row=mysql_fetch_array($sqlE))
		{
			$beleg_nr=$row['beleg_nr']; 
			$datum_zeit=$row['datum_zeit']; 
			mysql_query("INSERT INTO abschluss_belege SET beleg_kennung='signatur_start_beleg', 
							bon_id='".$beleg_nr."', abschluss_monat='".$datum_zeit."'");
		}
	}
	
	function import_csb_raum($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 20 ) === "INSERT INTO `floors`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$name=$csv_arr[1];

					$sql="INSERT into raum SET id='".$id."',name='".$name."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	
	function import_csb_tax($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 19 ) === "INSERT INTO `taxes`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$name=$csv_arr[1];
					$category=$csv_arr[2];
					$rate=$csv_arr[5];
					$sql="INSERT into taxes SET id='".$category."',name='".$name."',rate='".$rate."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	
	// Sucht die Taxrate (z.b. 0.20) von der taxcat
	function get_taxrate_from_taxcat($taxcat)
	{
		$taxrate=false;
		$sql="SELECT rate from taxes where id='".$taxcat."'";
		$sql_q=mysql_query($sql);
		if (! $sql_q) echo "Fehler: " . $sql ."\n" . mysql_error() ."\n";
		while ($sql_ret=mysql_fetch_assoc($sql_q))
		{
			$taxrate=$sql_ret['rate'];
		}
		return($taxrate);
	}
	
	function import_csb_produkte($filePath)
	{
		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen	
		while ($line=fgets($myfile)) 
		{
			// Tickets raussuchen
			if (substr( $line, 0, 22 ) === "INSERT INTO `products`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$reference=$csv_arr[1];
					$code=$csv_arr[2];
					$name=$csv_arr[4];
					$pricesell=$csv_arr[6];
					$category=$csv_arr[7];
					$taxcat=$csv_arr[8];
					$display=$csv_arr[20];
					$varprice=$csv_arr[21];
					$varprice=ist_0_oder_1($varprice);
					$printname=$csv_arr[22];
					if ($printname === 'NULL') $printname="";
					$negativprice=$csv_arr[23];
					$negativprice=ist_0_oder_1($negativprice);
					
					// Hier noch den pricesell berechnen - der ist in Brutto gespeicher - gehört auf netto konvertiert!
					
					$taxrate=get_taxrate_from_taxcat($taxcat);
					if ($taxrate>0)
					{
						$netto=$pricesell/(1+$taxrate);
					}
					else $netto=$pricesell;
					echo "CSB Preis: $pricesell  TaxRate: $taxrate   Netto: $netto \n";
					$sql="INSERT into products SET id='".$id."',reference='".$reference."',code='".$code."',name='".$name."',pricesell='".$netto."',category='".$category."',taxcat='".$taxcat."',display='".$display."',varprice='".$varprice."',printname='".$printname."',negativeprice='".$negativprice."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	
	function import_csb_warengruppen($filePath)
	{
		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen	
		while ($line=fgets($myfile)) 
		{
			// Tickets raussuchen
			if (substr( $line, 0, 24 ) === "INSERT INTO `categories`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$name=$csv_arr[1];
					$parentid=$csv_arr[2];
					$rank=$csv_arr[6];
					$visible=$csv_arr[7];
					$visible=ist_0_oder_1($visible);
					
					$sql="INSERT into categories SET id='".$id."',name='".$name."',parentid='".$parentid."',anzeige_reihenfolge='".$rank."',anzeigen='".$visible."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	
	function import_csb_tisch($filePath)
	{
		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen	
		while ($line=fgets($myfile)) 
		{
			// Tickets raussuchen
			if (substr( $line, 0, 20 ) === "INSERT INTO `places`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$name=$csv_arr[1];
					$x=$csv_arr[2];
					$y=$csv_arr[3];
					$floor=$csv_arr[4];

					$sql="INSERT into tische SET id='".$id."',tischName='".$name."',bgImg=false,raum='".$floor."',posLeft='".$x."',posTop='".$y."',breite='".TISCH_BREITE."',hoehe='".TISCH_HOEHE."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	
	function import_csb_zahlungen($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 22 ) === "INSERT INTO `payments`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$receipt=$csv_arr[1];
					$payment=$csv_arr[2];
					$total=$csv_arr[3];
					$transid=$csv_arr[4];
					//echo $ticket_id . " " . $datum . " ".$kassenabschluss_id . " " . $gesamtsumme . "\n";
					
					$sitpos_zahlart=translate_csb_zahlung_to_sitpos($payment);
					$sitpos_bon_id=get_sitpos_bon_id($receipt);
					$sql="INSERT into abgeschlossener_bon_zahlung SET bon_id='".$sitpos_bon_id."',Name='".$sitpos_zahlart."',zahlbetrag='".$total."',zahlbetrag_tatsaechlich='".$total."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	
	function import_csb_benutzer($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 20 ) === "INSERT INTO `people`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$name=$csv_arr[1];
					$hidden=$csv_arr[7];
					$hidden=ist_0_oder_1($hidden);
					
					if ($hidden != 1)
					{
						$sql="INSERT into benutzer SET id='".$id."',name='".$name."',ausblenden='".$hidden."', ist_admin='1'";
						mysql_query($sql);
						echo $sql ."\n";
					}
				}
				$sql="INSERT into benutzer SET name='admin',ausblenden='0', ist_admin='3'";
					mysql_query($sql);
			}
		}                                               
		fclose($myfile);
	}
	
	function import_csb_kunden($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 23 ) === "INSERT INTO `customers`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$searchkey=$csv_arr[1];
					$name=$csv_arr[3];
					$address=$csv_arr[7];
					$address2=$csv_arr[8];
					$postal=$csv_arr[9];
					$city=$csv_arr[10];
					$country=$csv_arr[12];
					$firstname=$csv_arr[13];
					$lastname=$csv_arr[14];
					$email=$csv_arr[15];
					$phone=$csv_arr[16];
					$phone2=$csv_arr[17];
					$fax=$csv_arr[18];
					$notes=$csv_arr[19];
					if ($searchkey==="NULL") $searchkey="";
					if ($name==="NULL") $name="";
					if ($address==="NULL") $address="";
					if ($address2==="NULL") $address2="";
					if ($postal==="NULL") $postal="";
					if ($city==="NULL") $city="";
					if ($country==="NULL") $country="";
					if ($firstname==="NULL") $firstname="";
					if ($lastname==="NULL") $lastname="";
					if ($email==="NULL") $email="";
					if ($phone==="NULL") $phone="";
					if ($phone2==="NULL") $phone2="";
					if ($fax==="NULL") $fax="";
					if ($notes==="NULL") $notes="";
					//echo $ticket_id . " " . $datum . " ".$kassenabschluss_id . " " . $gesamtsumme . "\n";
					$sql="INSERT into kunden SET id='".$id."',firma='".$name."',vorname='".$firstname."', nachname='".$lastname."', strasse1='".$address."', strasse2='".$address2."', plz='".$postal."', ort='".$city."', land='".$country."', telefon1='".$phone."', telefon2='".$phone2."', email='".$email."', fax='".$fax."', sachbearbeiter='".$notes."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	
	function import_csb_kassenabschluss($filePath)
	{

		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 24 ) === "INSERT INTO `closedcash`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$money=$csv_arr[0];    // Das ist die interne ID von CSB
					$host=$csv_arr[1];
					$hostsequence=$csv_arr[2];
					$datestart=$csv_arr[3];
					$dateend=$csv_arr[4];
					//echo $ticket_id . " " . $datum . " ".$kassenabschluss_id . " " . $gesamtsumme . "\n";
					//$sql="INSERT into kassa_abschluesse SET id='".$hostsequence."',kassen_id='".KASSA_ID."',datum_start='".$datestart."', datum_ende='".$dateend."'";
					$sql="INSERT into kassa_abschluesse SET id='".$money."',kassen_id='".KASSA_ID."',datum_start='".$datestart."', datum_ende='".$dateend."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
		
		

		$sqlE=mysql_query("SELECT * FROM kassa_abschluesse ORDER BY id DESC LIMIT 0, 1");
		while ($row=mysql_fetch_array($sqlE))
		{
			if ($row['datum_ende']=="0000-00-00 00:00:00") 
				mysql_query("UPDATE kassa_abschluesse SET datum_ende=NOW() WHERE id='".$row[id]."'");
		}


	}
	
	function import_csb_tickets($filePath)
	{
		echo "<pre>";
		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 21 ) === "INSERT INTO `tickets`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				$last_id=0;
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$fremd_id=$csv_arr[0];    // Das ist die interne ID von CSB
					$ticket_type=$csv_arr[1];
					$ticket_id=$csv_arr[2];
					$person=$csv_arr[3];
					$customer=$csv_arr[4];
					$kassenabschluss_id=$csv_arr[10];
					$gesamtsumme=$csv_arr[18];
					$datum=$csv_arr[24];
					//echo $ticket_id . " " . $datum . " ".$kassenabschluss_id . " " . $gesamtsumme . "\n";
					// Mal zwei rechne ich, um zu sehen ob das ein "alter" Storno ist, da hat CSB einen eigenen Nummern Kreis
					// gehabt, hat also mit 0 angefangen. Da sonst die Nummern auch nicht in der Reihenfolge sind hab ich das
					// so komisch gelöscht. Sollte eigentlich funktionieren, ausser einer der ersten Belege ist gleich ein Storno
					if ($ticket_id!=="NULL")
					{
						if ($ticket_id*2 < $last_id)
						{
							echo "Ticket ID $ticket_id ist ein Storno Produkt \n";
						}
						else 
						{
							$sql="INSERT into abgeschlossener_bon SET bon_id='".$ticket_id."',fremd_id='".$fremd_id."',kunden_id='".$customer."',verkaufer_id='".$person."', bon_erstellt_datum='".$datum."', gesamt_summe='".$gesamtsumme."',kassa_abschluss_id='".$kassenabschluss_id."'";
							mysql_query($sql);
							echo $sql ."\n";
							$last_id=$ticket_id;
						}
					}
				}
			}
		}
		
                                                           
		fclose($myfile);
		echo "</pre>";
	}
	
	// Die ticket_id von CSB wird im Feld fremd_id verspeichert!!
	function get_sitpos_bon_id($csb_bon_id)
	{
		//echo $ticket_id . " " . $product_id . " ".$stueck . " " . $preis_brutto . " ".$tax_id ." ".$steuer ." ".$printname ."\n";
		$sql="SELECT bon_id from abgeschlossener_bon WHERE fremd_id='".$csb_bon_id."'";
		$sql_q=mysql_query($sql);
		//echo $sql. "\n";
		$sql_ret=mysql_fetch_assoc($sql_q);
		return($sql_ret['bon_id']);
	}
	
		


	function import_csb_attributesets($filePath)
	{
		$sql="create temporary table attributesetinstance
				(
					id int(11) not null,
					attributeset_id int(11) not null,
					description varchar(255) not null
				)";
				mysql_query($sql);
					
		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Tickets raussuchen
			if (substr( $line, 0, 34 ) === "INSERT INTO `attributesetinstance`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben

				$arr=explode("),(", $line);
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					$id=$csv_arr[0];    // Das ist die interne ID von CSB
					$attributeset_id=$csv_arr[1];
					$description=$csv_arr[2];
					$description = str_replace(');', '', $description);
					$sql="INSERT into attributesetinstance SET id='".$id."',attributeset_id='".$attributeset_id."',description='".$description."'";
					mysql_query($sql);
					echo $sql ."\n";
				}
			}
		}                                               
		fclose($myfile);
	}
	

	function import_csb_ticketlines($filePath, $csb_version="2.03")
	{
		echo "<pre>";
		$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			
		while ($line=fgets($myfile)) 
		{
			
			// Ticket Lines raussuchen
			if (substr( $line, 0, 25 ) === "INSERT INTO `ticketlines`") 
			{
				//echo $line . "\n";
				$line=substr($line, strpos($line, "VALUES (")+8); // alles hinter VALUES ( - das hat 8 Buchstaben
				//echo $line;
			
				$arr=explode("),(", $line);
				$last_id=0;
				foreach ($arr as $line2)
				{
					$csv_arr=str_getcsv($line2, ",", "'");
					// Da gibt es auch ticket_id = NULL was soll das?
					$ticket_id=$csv_arr[1];
					$product_id=$csv_arr[3];
					$attributeinstance_id=$csv_arr[4];
					$stueck=$csv_arr[5];
					$preis_brutto=$csv_arr[6];
					$tax_id=$csv_arr[7];
					$order_storno=$csv_arr[12];
					if ($csb_version=="2.04") $steuer=$csv_arr[19];
					else $steuer=$csv_arr[17];
					
					$printname=$csv_arr[21];
					
					if ($attributeinstance_id !== 'NULL')
					{
						$sql="SELECT description from attributesetinstance WHERE id='".$attributeinstance_id."'";
						$ret=mysql_query($sql);
						if (! $ret) echo "Fehler: " . $sql ."\n";
						else 
						{	
							$ret_e=mysql_fetch_assoc($ret);	
							$attribute=" ".$ret_e['description'];
							echo $attribute;
						}
					}
					else $attribute="";
					
					$preis_netto=$preis_brutto-$steuer;
					// Falls order_storno 1 ist, dann dürfte es gleich gelöscht worden sein
					if ($order_storno != 1)
					{
						if ($steuer!=0) $tax_rate=round($steuer/$preis_netto,2);
						else $tax_rate=0;
						// Wenn die ticket ID nicht größer ist, dann ist das ein Storno
						// CSB hat Stornos am Anfang mit einem anderen Nummernkreis gemacht
						if ($ticket_id*2 < $last_id)
						{
							echo "Ticket ID $ticket_id ist ein Storno Produkt \n";
						}
						else 
						{
							echo $ticket_id;
							$sitpos_bon_id=get_sitpos_bon_id($ticket_id);
							//echo "Bon ID von CSB ist: " . $sql_ret['bon_id'];
							//RFR: Das ist nicht getestet, weil ich nicht weiß wo diese Funktion aufgerufen wird!!!
							list($einzel_brutto, $gesamt_brutto, $steuer_einzel, $steuer_gesamt)=berechne_bruttopreis($preis_netto, $tax_rate, $stueck);
							$sql="INSERT into abgeschlossener_bon_produkte SET bon_id='".$sitpos_bon_id."', produkt_id='".$product_id."', stueck='".$stueck."',pricesell='".$preis_netto."',
									PRICESELL_brutto='".$einzel_brutto."',
									PRICESELL_brutto_gesamt='".$gesamt_brutto."',
									tax='".$steuer_einzel."',
									tax_gesamt='".$steuer_gesamt."',
									tax_rate='".$tax_rate."',printname='".$printname.$attribute."'";
							echo $sql."\n";
							$ret=mysql_query($sql);
							if (! $ret) echo "Fehler: " . $sql ."\n";
							$last_id=$ticket_id;
						}
					}
				}
			}
		}
		
                                                           
		fclose($myfile);
		echo "</pre>";
	}
	
	function berechne_steuern_fuer_bon($bon_id)
	{
		echo "Berechne Steuern für Bon ID: ". $bon_id . "\n";
		$sql="SELECT tax_rate, SUM(pricesell*stueck) as gesamt_betrag from abgeschlossener_bon_produkte WHERE bon_id='".$bon_id."' GROUP by tax_rate";
		//echo $sql;
		$sql_q=mysql_query($sql);
		while ($sql_ret=mysql_fetch_assoc($sql_q))
		{
			$sql1="INSERT INTO abgeschlossener_bon_steuern SET bon_id='".$bon_id."', tax_rate='".$sql_ret['tax_rate']."', gesamt_betrag='".$sql_ret['gesamt_betrag']."'";
			//echo $sql;
			mysql_query($sql1);
		}
	}
	
	function berechne_steuern_fuer_alle_abgeschlossene_bons()
	{
		$sql="SELECT bon_id from abgeschlossener_bon where bon_id<=11418";
		$sql_q=mysql_query($sql);
		while ($sql_ret=mysql_fetch_assoc($sql_q))
		{
			$bon_id=$sql_ret['bon_id'];
			berechne_steuern_fuer_bon($bon_id);
		}
		
	}

	function import_csb_setze_kategorie()
	{
		$sql="SELECT abgeschlossener_bon_produkte.id as id, products.category as category from abgeschlossener_bon_produkte LEFT JOIN products ON products.id=produkt_id";
		$sql_q=mysql_query($sql);
		while ($sql_ret=mysql_fetch_assoc($sql_q))
		{
			$sql="UPDATE abgeschlossener_bon_produkte SET category='".$sql_ret['category']."' WHERE id='".$sql_ret['id']."'";
			echo $sql."\n";
			mysql_query($sql);
		}
		
	}
	
	// Importiert die CSB Daten inklusive aller Bons und DEP 
	function import_csb_komplett($filePath)
	{
		echo "<pre>";
		$version=get_csb_version($filePath);
		if ($version !="2.03" && $version !="2.04")
		{
			echo "CSB Version ist auf Version $version muss für den Import 2.03 oder 2.04 sein.\n";
			echo "Bitte vorher CSB upgraden";
			exit;
		}
		mysql_query("START TRANSACTION");
		mysql_query("delete from abgeschlossener_bon_produkte where bon_id<=11418");
		mysql_query("delete from abgeschlossener_bon_steuern where bon_id<=11418");
		import_csb_ticketlines($filePath, $version);
		berechne_steuern_fuer_alle_abgeschlossene_bons();
		mysql_query("COMMIT");
		exit;
		mysql_query("START TRANSACTION");

		import_csb_global_parameter($filePath);
		
		import_csb_tax($filePath);
		import_csb_warengruppen($filePath);
		import_csb_produkte($filePath);
		import_csb_tickets($filePath);
		import_csb_attributesets($filePath);
		import_csb_ticketlines($filePath, $version);			
		
		
		import_csb_setze_kategorie();
		import_csb_raum($filePath);
		import_csb_tisch($filePath);
		import_csb_kassenabschluss($filePath);	

		berechne_steuern_fuer_alle_abgeschlossene_bons();
		import_csb_zahlungen($filePath);
		import_csb_dep($filePath);
		import_csb_kunden($filePath);
		import_csb_benutzer($filePath);

		mysql_query("COMMIT");
		
		echo "</pre>";
	}
	
	function exportCsbToFile($filePath){
			$respMsg="";
			
			$pPath = pathinfo($filePath);
			$xDir=$pPath['dirname'];
	
		#	echo "<pre>";
			$steuer_array=array();
			$kategorie_array=array();
			$myfile = fopen($filePath, "r") or die("Unable to open file!");		# die hochgeladene sql datei lesen
			

			while ($line=fgets($myfile)) {
				if (substr( $line, 0, 24 ) === "INSERT INTO `categories`") {
					$line=substr($line, 33);
					
					$cat_arr=explode("),(", $line);
					foreach ($cat_arr as $category)
					{
						$csv_arr=str_getcsv($category, ",", "'");
						$kategorie_array[$csv_arr[0]]=$csv_arr;
					}
				}
				
				// Taxes

				if (substr( $line, 0, 19 ) === "INSERT INTO `taxes`") {
					$line=substr($line, 28);
					$cat_arr=explode("),(", $line);
					foreach ($cat_arr as $category)
					{
						$csv_arr=str_getcsv($category, ",", "'");
						$steuer_array[$csv_arr[0]]=$csv_arr;
					}
				}
			}
			fclose($myfile);
			
			$myfile = fopen($filePath, "r") or die("Unable to open file!");
			$outfile = fopen($xDir."/csb_artikelliste.csv", "w") or die("Unable to open file for writing!");
			while ($line=fgets($myfile)) {

				if (substr( $line, 0, 22 ) === "INSERT INTO `products`") {
					$line=substr($line, 31);
					$cat_arr=explode("),(", $line);
					fwrite ($outfile, "REFERENCE; CODE; NAME; PRICEBUY; PRICESELL; CATEGORY; TAXCAT; DISPLAY; VARPRICE; PRINTNAME; NEGATIVEPRICE; PRODUKTORDER; SICHTBAR\n");
					foreach ($cat_arr as $product)
					{
						$csv_arr=str_getcsv($product, ",", "'");
						$pricesell=$csv_arr[6];
						fwrite ($outfile,"".$csv_arr[1].";".$csv_arr[2].";".$csv_arr[4].";".$csv_arr[5].";".$pricesell.";"/*.$csv_arr[7]*/.$kategorie_array[$csv_arr[7]][1].";".$steuer_array[$csv_arr[8]][5].";".$csv_arr[20].";".ist_0_oder_1($csv_arr[21]).";".$csv_arr[22].";".ist_0_oder_1($csv_arr[23]).";99;1\n"); 
					}
					//print_r($cat_arr);
				}

			}
			fclose($myfile);
			fclose ($outfile);
			
			$countCsvLines=count(file($xDir."/csb_artikelliste.csv"));
			
			if($countCsvLines > 1){
				if(count($kategorie_array) > 0) $catTxt= ", aus ".count($kategorie_array)." Warengruppen, ";
				else $catTxt=" ";
				$writeCsvResp = $countCsvLines. " Datensätze".$catTxt."in ".$xDir."/csb_artikelliste.csv Datei geschrieben.<br />";
				$succesMsg=" success";
			}
			else{
				$writeCsvResp = "Keine Datensätze in csv Datei geschrieben.<br />";
				$succesMsg="";
			}
			
	
			$respMsg.=$writeCsvResp;
			return array($xDir."/csb_artikelliste.csv", $succesMsg.$respMsg);
			
	}
?> 