<?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 convertierung2.
	// 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
	try {

		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";
					try {
						insert_into_konfiguration_csb("KASSA_ID", $kassen_id,"",true);
						insert_into_konfiguration_csb("AES_KEY", AES_KEY,"",true);
						echo ("<br>KASSA_ID: " . $kassen_id . "<br>");
						
						echo ("<br>AES_KEY: " . AES_KEY . "<br>");
					} catch (Exception $e) {
						//echo 'Exception abgefangen: ',  $e->getMessage(), "\n";
					}
				}
				try {
					insert_into_konfiguration_csb("ZDA_ID", "AT1","",true);
					$aes_checksum = calculate_aes_checksum($aes_key);
					insert_into_konfiguration_csb("AES_CECKSUM", $aes_checksum,"",true);
				} catch (Exception $e) {
					//echo 'Exception abgefangen: ',  $e->getMessage(), "\n";
				}
			}
		}
		fclose($myfile);
		echo ("<br>global KASSA_ID: " . KASSA_ID . "<br><br>");
		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']);
			//header("refresh:2");
			
		}
	} catch (Exception $e) {
		//echo 'Exception abgefangen: ',  $e->getMessage(), "\n";
	}
}

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];
				//echo $preis_brutto;
				// Falls hier Rabatte gegeben wurden, dann ist das priceorigin
				// $preis_origin=$csv_arr[9];
				$tax_id = $csv_arr[7];
				$tax_rate = get_taxrate_from_taxcat($tax_id);

				$order_storno = $csv_arr[12];
				if ($csb_version == "2.11") $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;

				//$preis_netto=$preis_brutto-$steuer;
				$preis_netto = $preis_brutto / (1 + $tax_rate);
				$steuer = $preis_brutto - $preis_netto;
				//$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'];
						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";
	$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.02" && $version != "2.03" && $version != "2.04" && $version != "2.11") {
		//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");

	$aes_checksum = calculate_aes_checksum("i8sy5LUT7Xv87bJBit/lYk/CTbhCHq8cUaiFlP9aOEk=");
	insert_into_konfiguration("AES_CECKSUM", $aes_checksum);
	import_csb_global_parameter($filePath);

	echo "<br>--> ". KASSA_ID."<--<br>";
	
	echo "import_csb_tax<br>";
	import_csb_tax($filePath);
	echo "import_csb_warengruppen<br>";
	import_csb_warengruppen($filePath);

	echo "import_csb_produkte<br>";
	import_csb_produkte($filePath);
	echo "import_csb_tickets<br>";
	import_csb_tickets($filePath);
	echo "import_csb_attributesets<br>";
	import_csb_attributesets($filePath);
	echo "import_csb_ticketlines<br>";
	import_csb_ticketlines($filePath, $version);

	echo "import_csb_setze_kategorie<br>";
	import_csb_setze_kategorie();
	echo "import_csb_raum<br>";
	import_csb_raum($filePath);
	echo "import_csb_tisch<br>";
	import_csb_tisch($filePath);
	echo "import_csb_kassenabschluss<br>";
	import_csb_kassenabschluss($filePath);

	echo "berechne_steuern_fuer_alle_abgeschlossene_bons<br>";
	berechne_steuern_fuer_alle_abgeschlossene_bons();
	echo "import_csb_zahlungen<br>";
	import_csb_zahlungen($filePath);
	echo "import_csb_dep<br>";
	import_csb_dep($filePath);
	echo "import_csb_kunden<br>";
	import_csb_kunden($filePath);
	echo "import_csb_benutzer<br>";
	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);
}
