
<?php

// V4.10	RFR	2023-07-12	upsync - das downsync von Produkten herausgenommen

//Alex 16.06.2023 In zahlung_abgeschlossen, printGutscheinBon verschoben in eigene Abfrage
//V4.09 RFR		Lieferschein Druck bei Stückzahl keine Kommastelle, wenn eine Float Zahl dann 2 Kommastellen
require_once("config/connect.php");
require_once("global_functions.php");
require_once("global_functions_2.php");
require_once("synchronize/weclapp.php");
require_once("synchronize/shopify.php");
require_once("synchronize/sITpos_filialsystem.php");
function debug_to_console($data, $context = 'Debug in Console')
{

	// Buffering to solve problems frameworks, like header() in this and not a solid return.
	ob_start();

	$output  = 'console.info(\'' . $context . ':\');';
	$output .= 'console.log(' . json_encode($data) . ');';
	$output  = sprintf('<script>%s</script>', $output);

	echo $output;
}

function ausloggen()
{
	session_start();
	session_destroy();
	# Nur in harten Fällen benutzen, wenn der Server session_destroy() nicht korrekt unterstützt:
	# unlink ( SESSION_FILE_DIR . '/sess_' . session_id());
	header('Location: http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/') . '/index.php');
}

// *******************************************************************************************
// Funktion ist_das_die_lezte_EC_zahlung
// Checkt ob es noch eine EC Kartenzahlung gibt,
// die eine höhere ID als $bon_id haben
// Weil dann ist das nicht die letzte EC Kartenzahlung und kann nicht durchgeführt werden
// Hier noch auf die Terminal ID checken in V2.03 !!!
function ist_das_die_lezte_EC_zahlung($bon_id)
{
	$qL = mysql_query("SELECT bon_id FROM abgeschlossener_bon 
								WHERE bon_id > $bon_id AND ce_zahlung_data <>'' ");
	if (mysql_num_rows($qL) > 0) {
		// Es gibt noch eine Bankomatzahlung nach diesem Storno
		return (false);
	}
	return (true);
}
// *******************************************************************************************

// Druckt den letzten Reprint von einem EC Beleg auf den Rechnungsdrucker aus
function drucke_letzten_ec_kundenbeleg_reprint()
{
	$sqlI = mysql_query("SELECT verkaueferbeleg, kundenbeleg FROM ec_karte_reprint_bon ORDER BY id DESC LIMIT 0, 1");
	while ($row = mysql_fetch_assoc($sqlI)) {

		print_r($row);
		$ecKdBon = $row['kundenbeleg'];
		$ceVendorBon = $row['verkaueferbeleg'];
		require_once('include/extended_fpdf.php');

		# Drucker auswahl nach Kriterien !!
		$userIp = getUserIp();
		$selectPrinterByIp = false;
		$pridByIp = false;
		$checkPrByIp = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite, drucker_id  
								FROM drucker WHERE ip_adressen LIKE '%" . $userIp . "%' LIMIT 1"));
		if ($checkPrByIp !== false) {
			$selectPrinterByIp = true;
			$pridByIp = $checkPrByIp['drucker_id'];
		}

		if (isset($_SESSION['selectedMobilPrinterId']) && $_SESSION['selectedMobilPrinterId'] > 0) {
			$prid = $_SESSION['selectedMobilPrinterId'];
			$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  
							FROM drucker WHERE drucker_id = " . $prid . " "));
		} else if ($selectPrinterByIp == true && $pridByIp > 0) {
			# übernehme die oben schon ausgelesenen Werte.
			$printer = $checkPrByIp;
		} else {
			$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  
					FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));
		}


		if ($printer['druckbreite'] == true && $printer['druckbreite'] > 35) $bonWidth = $printer['druckbreite'];
		else $bonWidth = preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);

		$drucker = $printer[0];
		$margin = $printer[1];
		$margins = explode(",", $margin);




		if ($printer[2] >= .5) $zoomF = $printer[2];
		else $zoomF = 1;
		$bonWidth *= $zoomF;

		$fontConfig = SCHRIFT_AUSDRUCK_BESTELLUNG_PDF;


		if (
			strpos(strtolower($fontConfig), 'arial') !== false  || strpos(strtolower($fontConfig), 'helvetica') !== false ||
			strpos(strtolower($fontConfig), 'sans serif') !== false
		) {
			$pdfFont = "Arial";
		} else if (
			strpos(strtolower($fontConfig), 'times') !== false  || strpos(strtolower($fontConfig), 'roman') !== false ||
			(strpos(strtolower($fontConfig), 'serif') !== false &&  strpos(strtolower($fontConfig), 'sans') == false)
		) {
			$pdfFont = "Times";
		} else if (strpos(strtolower($fontConfig), 'courier') !== false) {
			$pdfFont = "Courier";
		} else {
			$pdfFont = "Arial";
		}

		preg_match('/\d+px | \d+pt/', $fontConfig, $m);
		preg_match('/\d+/', $m[0], $match);
		$pdfFontSize = $match[0];				#  stimmt nicht wirklich, fpdf verwendet hier pt und nciht px, pt ist auf inch bezogen, px auf sreen dott size.

		$bonHeight = 250;
		$lineHeight = $pdfFontSize / 2.5;


		if (isset($margins[2])) $marginLR = preg_replace('/\D/', '', $margins[2]);
		else $marginLR = 0;
		if (isset($margins[1])) $marginBottom = preg_replace('/\D/', '', $margins[1]);
		else $marginBottom = 0;
		if (isset($margins[0])) $marginTop = preg_replace('/\D/', '', $margins[0]);
		else $marginTop = 0;

		$pdf = new PDF_MemImage('P', 'mm', array($bonWidth, $bonHeight));
		$pdf->SetMargins($marginLR, $marginTop, 0);			// margin right (optional) set to 0, rest of pager width	
		$pdf->AddPage();


		// ****************************************
		// EC Kundenbeleg drucken (Unterschrift)

		$ceFontSize = preg_replace('/[^0-9\.]+/i', '', EC_AUSDRUCK_FONTSIZE);
		$ec_lineHeight = $ceFontSize / 2.5;

		if ($ecKdBon != "") {


			$pdf->SetFont('Courier', 'B', $ceFontSize);


			$ecArray = explode("\n", $ecKdBon);
			$pdf->Cell($bonWidth, $lineHeight, '', 0, 1, 'C');

			for ($i = 0; $i < count($ecArray); $i++) {
				$pdf->Cell($bonWidth, $ec_lineHeight, iconv('UTF-8', 'windows-1252', $ecArray[$i]), 0, 1, 'L');
			}
		}


		// ****************************************
		// EC Händlerbeleg drucken (Unterschrift)
		if (!empty($ceVendorBon)) {
			//$pdf->AddPage();
			$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
			$ceFontSize = preg_replace('/[^0-9\.]+/i', '', EC_AUSDRUCK_FONTSIZE);
			$pdf->SetFont('Courier', 'B', $ceFontSize);
			$ceVendorBon = iconv('UTF-8', 'windows-1252//IGNORE', $ceVendorBon);
			$pdf->MultiCell(0, $ec_lineHeight, $ceVendorBon);

			# margin bottom Cell
			if ($marginBottom > 0) {
				$pdf->SetDrawColor(150);
				$pdf->Cell((($bonWidth - $marginLR) / 2) - 2, $marginBottom, "", 0, 0, 'R');
				$pdf->Cell(4, $marginBottom, "", "B", 1, 'C');
				$pdf->SetDrawColor(0);
			}
		}

		// ********** End EC Händlerbeleg

		$outputTarget = __DIR__ . "\docs\sIT_reprint_ec_" . date('d_m_H_i_s') . ".pdf";
		$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";

		$pdf->Output($outputTarget, "F");
		$error_code = seiteDrucken($drucker, $outputTarget, "ceVendorBon");
		#exec($command, $output, $error_code);
	}
}

// *******************************************************************************************
// Funktion EC_bon_reprint
// Liest den letzten Kundenbeleg aus dem EC Terminal aus
// Funktoniert derzeit nur mit ZVT und zvt_zahlen Version 1.01
function EC_bon_reprint()
{

	$ce_balance_text = "";
	$sqlP = mysql_query("SELECT terminal_id, ip_adresse, terminal_type FROM zahlungsterminal");
	sitpos_welt_anzeigen("EC Terminal Bon Nachdruck ...");
	while ($rowP = mysql_fetch_array($sqlP)) {
		$zahlTerminalId = preg_replace('/\s/', '', $rowP['terminal_id']);
		$zahlTerminalType = $rowP['terminal_type'];

		$exe_command = get_command_line_for_ce_terminal($zahlTerminalType, $zahlTerminalId);

		$command = ' C:\\sitpos\\bankomat\\' . $zahlTerminalType . '\\' . $exe_command . ' reprintreceipt ' . $zahlTerminalId . ' ';
		echo $command;
		$resp = shell_exec($command);
		if (mb_detect_encoding($resp, 'UTF-8') != 'UTF-8')
			$resp = utf8_encode($resp);
		$resp = str_replace("'", "", $resp);		// ansonsten wir der String abgeschnitten - deswegen alle ' rauslöschen
		$resp = str_replace("&", "&amp;", $resp);
		//print_r($resp);

		$pos = strpos($resp, '<SITPOSBANKOMAT>');
		if ($pos !== false) {
			$resp = substr($resp, $pos);
		}


		$resp = utf8_encode($resp);

		$encoding   = mb_detect_encoding($resp);

		$resp = iconv($encoding, 'utf-8//IGNORE', $resp);
		//print_r($resp);
		//$resp=iconv('cp1252', 'utf-8//IGNORE',$resp);
		// XML Fehler nicht anzeigen, wird nachher abgefragt
		libxml_use_internal_errors(true);
		//print_r($resp);
		$xml = simplexml_load_string($resp);
		$errors = libxml_get_errors();
		// do something with them
		print_r($errors);
		print_r($xml);
		libxml_use_internal_errors(false);
		$ce_balance_text = $ce_balance_text . "=== Terminal Name: $zahlTerminalId ===\n";
		if ($xml === false) {
			$ce_balance_text = $ce_balance_text . "Fehler beim Abfragen des Terminals\n";
			echo $ce_balance_text;
		} else {
			$verkaueferbeleg = $xml->VERKAEUFERBELEG;
			$kundenbeleg = $xml->KUNDENBELEG;
			echo $verkaueferbeleg;
			echo $kundenbeleg;
		}
	}
	$currentUserId = $_SESSION['userId'];
	$sqlI = mysql_query("INSERT INTO ec_karte_reprint_bon SET verkaueferbeleg='" . $verkaueferbeleg . "', kundenbeleg='" . $kundenbeleg . "', user='" . $currentUserId . "'");
	drucke_letzten_ec_kundenbeleg_reprint();
}

//Erhöht die verkaufte Anzahl um 1 Stück (vekaufen.php)
function anzahl_erhoehen()
{
	$id = rtrim($_REQUEST['id']);
	$functTxt = "";

	$sql = "select id, name, pricesell, tax_rate, printname, stueck, has_childs, kunden_id, bon_id, produkt_id FROM offener_bon WHERE id='" . $id . "'";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {

		$stueck = $row_produkt['stueck'];
		$stueck++;
		if ($row_produkt['has_childs'] == 1) $updQl = mysql_query("UPDATE offener_bon SET stueck = stueck +1 WHERE has_parent = '" . $id . "' ");
		$updSql = mysql_query("UPDATE offener_bon SET stueck='" . $stueck . "' WHERE id='" . $id . "'");
		#run_mysql_query($sql_query);

		$_SESSION["last_updated_product"] = $id;
		$_SESSION["last_insert_product"] = 0;

		$currentQtyLimit = false;

		if (defined('SONDERPREIS_ENABLED') && SONDERPREIS_ENABLED == 'ja') {
			$kundenId = false;
			$produkt_id = $row_produkt['produkt_id'];
			$prodQty = $row_produkt['stueck'];
			$currentBon = $row_produkt['bon_id'];

			if ($row_produkt['kunden_id'] > 0) {
				$kundenId = $row_produkt['kunden_id'];
			} else if (isset($_SESSION["customerToEmptyBon"]) && $_SESSION["customerToEmptyBon"] > 0) {
				$kundenId = $_SESSION["customerToEmptyBon"];
			}

			if ($kundenId > 0) {
				$checkQtyLimit = checkQtyLimit($kundenId, $produkt_id, $prodQty, $currentBon);
				$currentQtyLimit = $checkQtyLimit[3];
			}

			#writeLog(basename( __FILE__)." ". __LINE__ , "cust Id: ".$kundenId." currentLimit: ".$currentQtyLimit);
		}
	}

	echo json_encode(array('Funktion Stückzahl Plus', $currentQtyLimit));
}

//Verringert die verkaufte Anzahl um 1 Stück (vekaufen.php)
function anzahl_verringern()
{
	$id = rtrim($_REQUEST['id']);

	$sql = "SELECT id, name, pricesell, tax_rate, supplyprint, printname, stueck, has_childs FROM offener_bon WHERE id='" . $id . "'";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		$stueck = $row_produkt['stueck'];

		$stueck--;

		if (strtolower(DISABLE_BON_MINUS_ANZAHL) == 'ja' && $stueck < 0) {
			echo "unerlaubte Anzahl";
		} else {
			if(defined('GASTRO_VERSION') && strtolower(GASTRO_VERSION) == 'ja'){
				$checkSupllyPrint = mysql_fetch_assoc(mysql_query("SELECT offener_bon.ID, produkt_id, offener_bon.name as name, offener_bon.printname as printname, articlePrinted, offener_bon.supplyprint as supplyprint, beilagen_aenderung_minus, beilagen_aenderung_plus, article_art_id, funktion, artikel_art.bezeichnung AS artikelArtBezeichnung, reihung, offener_bon.PRICESELL as PRICESELL, offener_bon.tax_rate as tax_rate, offener_bon.category as category, has_parent, products.fremd_id as fremd_id 
															FROM offener_bon 			
															LEFT JOIN drucker ON supplyprint = drucker_id
															LEFT JOIN artikel_art ON article_art_id = artikel_art.id
															LEFT JOIN products ON products.id = offener_bon.produkt_id
															WHERE offener_bon.ID=" . $id . " "));
				if ($checkSupllyPrint['articlePrinted'] > 0) {
					if (strtolower(BONZEILE_LOESCHEN_ON_PRINTED) == 'ja' && $_SESSION['userLevel'] <= ENABLERKEY_BONZEILE_LOESCHEN) {
						echo "Fehlende Berechtigung, Bonzeile Löschen für gedruckte Artikel";
						return false;
					}else{
						// Ist es erlaubt die Anzahl weniger als den Küchendruck zu verringern
						define("KLEINERE_STUECK_ANZAHL_ALS_KUECHENDRUCK_ERLAUBEN", "nein");
						if (strtolower(KLEINERE_STUECK_ANZAHL_ALS_KUECHENDRUCK_ERLAUBEN) !== 'ja' && $stueck < $row_produkt['supplyprint']) {
							echo "Produkte wurden schon ausgedruckt";
						} else {
							if ($row_produkt['has_childs'] == 1) $updQl = mysql_query("UPDATE offener_bon SET stueck = stueck -1 WHERE has_parent = '" . $id . "' ");
						$sql_query = "UPDATE offener_bon SET stueck='" . $stueck . "' WHERE id='" . $id . "'";
							run_mysql_query($sql_query);
						}
					}
				}else{
					// Ist es erlaubt die Anzahl weniger als den Küchendruck zu verringern
					define("KLEINERE_STUECK_ANZAHL_ALS_KUECHENDRUCK_ERLAUBEN", "nein");
					if (strtolower(KLEINERE_STUECK_ANZAHL_ALS_KUECHENDRUCK_ERLAUBEN) !== 'ja' && $stueck < $row_produkt['supplyprint']) {
						echo "Produkte wurden schon ausgedruckt";
					} else {
						if ($row_produkt['has_childs'] == 1) $updQl = mysql_query("UPDATE offener_bon SET stueck = stueck -1 WHERE has_parent = '" . $id . "' ");
					$sql_query = "UPDATE offener_bon SET stueck='" . $stueck . "' WHERE id='" . $id . "'";
						run_mysql_query($sql_query);
					}
				}
			}else{
				// Ist es erlaubt die Anzahl weniger als den Küchendruck zu verringern
				define("KLEINERE_STUECK_ANZAHL_ALS_KUECHENDRUCK_ERLAUBEN", "nein");
				if (strtolower(KLEINERE_STUECK_ANZAHL_ALS_KUECHENDRUCK_ERLAUBEN) !== 'ja' && $stueck < $row_produkt['supplyprint']) {
					echo "Produkte wurden schon ausgedruckt";
				} else {
					if ($row_produkt['has_childs'] == 1) $updQl = mysql_query("UPDATE offener_bon SET stueck = stueck -1 WHERE has_parent = '" . $id . "' ");
				$sql_query = "UPDATE offener_bon SET stueck='" . $stueck . "' WHERE id='" . $id . "'";
					run_mysql_query($sql_query);
				}
			}
		}
	}

	$_SESSION["last_updated_product"] = $id;
	$_SESSION["last_insert_product"] = 0;
}

function zeile_loeschen()
{
	$id = rtrim($_REQUEST['id']);
	$aktueller_bon = $_SESSION['aktuellerWarenkorb'];

	if (defined('GASTRO_VERSION') && strtolower(GASTRO_VERSION) == 'ja') {

		$checkSupllyPrint = mysql_fetch_assoc(mysql_query("SELECT offener_bon.ID, produkt_id, offener_bon.name as name, offener_bon.printname as printname, articlePrinted, offener_bon.supplyprint as supplyprint, beilagen_aenderung_minus, beilagen_aenderung_plus, article_art_id, funktion, artikel_art.bezeichnung AS artikelArtBezeichnung, reihung, offener_bon.PRICESELL as PRICESELL, offener_bon.tax_rate as tax_rate, offener_bon.category as category, has_parent, products.fremd_id as fremd_id 
															FROM offener_bon 			
															LEFT JOIN drucker ON supplyprint = drucker_id
															LEFT JOIN artikel_art ON article_art_id = artikel_art.id
															LEFT JOIN products ON products.id = offener_bon.produkt_id
															WHERE offener_bon.ID=" . $id . " "));
															
		# ist der bonzeile löschen userlevel nicht ausreichend wird das schon in js abgefangen, das programm
		# kommt nciht bis daher

		if ($checkSupllyPrint['articlePrinted'] > 0) {
			if (strtolower(BONZEILE_LOESCHEN_ON_PRINTED) == 'ja' && $_SESSION['userLevel'] <= ENABLERKEY_BONZEILE_LOESCHEN) {
				echo "Fehlende Berechtigung, Bonzeile Löschen für gedruckte Artikel";
				return false;
			}
			$tId = $_SESSION['gastroTisch'];
			$tischN = mysql_fetch_assoc(mysql_query("SELECT tischName FROM tische WHERE id = " . $tId . " "));
		
			$currentTable = $_SESSION['gastroTisch'];
			$printerId = $checkSupllyPrint['supplyprint'];
			$qtyToPrint = 0 - $checkSupllyPrint['articlePrinted'];
			$userName = $_SESSION['userName'];
			$price = false;
			$price = ($checkSupllyPrint['PRICESELL'] * (1 + $checkSupllyPrint['tax_rate'])) * $qtyToPrint;
					
			$supllyPrinter = array(array(
				$checkSupllyPrint['produkt_id'], $checkSupllyPrint['name'], $checkSupllyPrint['printname'],
				$qtyToPrint, $checkSupllyPrint['ID'], $checkSupllyPrint['beilagen_aenderung_minus'], $checkSupllyPrint['beilagen_aenderung_plus'],
				"", $checkSupllyPrint['artikelArtBezeichnung'], $price, $checkSupllyPrint['category']
			));
		
			if(WEBSHOP_TYPE == "WooCommerce")
			{
				$supllyPrinter_woocommerce = array();
				array_push($supllyPrinter_woocommerce, array(
						$checkSupllyPrint['produkt_id'], $checkSupllyPrint['name'], $checkSupllyPrint['printname'], $qtyToPrint, $checkSupllyPrint['ID'],
						$checkSupllyPrint['beilagen_aenderung_minus'], $checkSupllyPrint['beilagen_aenderung_plus'], $checkSupllyPrint['article_art_id'],
						$checkSupllyPrint['artikelArtBezeichnung'], $price, $checkSupllyPrint['ID'],  $checkSupllyPrint['has_parent'], 
						$checkSupllyPrint['category'], $checkSupllyPrint['fremd_id']
					));
				//var_dump($supllyPrinter_woocommerce);
				$array_test = json_encode($supllyPrinter_woocommerce);
				
				echo '<script>
				
				var suppllyPrinter = [];
				suppllyPrinter = '.$array_test.';
							
				var currentTable = "'.$currentTable.'";
				var id = "'.$id .'";
				
				$.ajax({
						type: "POST",
						url: "api/woocommerce/woocommerce.php",
						dataType : "html",
						data: {funktion: "woocommerce_sync_db_offenen_bon_delete_product_ajax", suppllyPrinter: suppllyPrinter, currentTable:currentTable,id:id},
						async: false,
						success:function(html){	
							//console.log("sync successful");
							//console.log(html);
						}
					});
				</script>';
			}
	
	
			require_once("include/ajax_functions_gastro.php");

			$pdfPrint = createPdf($printerId, $supllyPrinter, $tischN['tischName'], $userName, $checkSupllyPrint['funktion']);

			#  wird in include/ajax_functions_gastro.php  aufgerufen !!!!

		}
	}

	$checkLastRow = mysql_fetch_array(mysql_query("SELECT COUNT(ID) as NoRows, bon_id, kunden_id FROM offener_bon WHERE bon_id = $aktueller_bon "));

	if ($checkLastRow['NoRows'] == 1 && $checkLastRow['kunden_id'] > 0) {
		$_SESSION["customerToEmptyBon"] = $checkLastRow['kunden_id'];
	}

	// RFR: 25.04.2019 weggenommen - soll erst gelöscht werden wenn vom Tisch weggegangen wird
	if ($checkLastRow['NoRows'] == 1 && strtolower(BON_ZUSATZ_TEXT_BUTTON) == 'ja') {
		# wenn die letzte Zeile im offenen Bon gelöscht wird wird auch der Text dazu gelöscht, bon existiert nicht mehr
		//$delAddTxt=mysql_query("DELETE FROM bon_add_text WHERE offenerbon_id = ".$checkLastRow['bon_id']." ");
		if (defined('EDI_INTO_OFFENERBON_BUTTON') && EDI_INTO_OFFENERBON_BUTTON == 'ja') {
			# KPE für den EDI import doch hier löschen
			$delAddTxt = mysql_query("DELETE FROM bon_add_text WHERE offenerbon_id = " . $checkLastRow['bon_id'] . " ");
		}
	}

	$openBonLine = mysql_fetch_assoc(mysql_query("SELECT has_childs, stueck, NAME, printname, discountChild FROM offener_bon WHERE id = '" . $id . "'"));

	$testMsg = "";
	if ($openBonLine['has_childs'] == 1) $delQl = mysql_query("DELETE FROM offener_bon WHERE has_parent = '" . $id . "' ");

	#für löschen vom discountChild, zuerst check ob es eines gibt ->  Preisgruppen, Sondermarkt .. relevant
	$checkDiscountShild = mysql_fetch_array(mysql_query("SELECT ID FROM offener_bon WHERE discountChild = '" . $id . "' "));
	if ($checkDiscountShild['ID'] > 0) {
		$delDiscountChild = mysql_query("DELETE FROM offener_bon WHERE ID = " . $checkDiscountShild['ID'] . "");
		if (!$delDiscountChild) writeLog(basename(__FILE__) . " " . __LINE__, "Error beim löschen vom Discount Child: " . mysql_error());
	}

	#writeLog(basename( __FILE__)." ". __LINE__ , "id -> ".$id." Test discountChild löschen !!  id der child Line -> ".$checkDiscountShild[0]);

	# so wie des ausschaut ist das hier nachfolgend der GANZ normale löschER !!
	$sql_query = "DELETE FROM offener_bon WHERE id='" . $id . "'";
	//echo $sql_query;							 
	run_mysql_query($sql_query, "Produkt gelöscht");


	if (defined('PRODUCT_DELETE_WRITE_AUDIT') && strtolower(PRODUCT_DELETE_WRITE_AUDIT) == 'ja') {
		if (preg_match("/WHERE\sid=\'(.*)\'/", $sql_query, $idCont)) {
			$user = $_SESSION["userName"];
			if (isset($openBonLine['printname']) && strlen($openBonLine['printname']) > 1) $prName = $openBonLine['printname'];
			else $prName = $openBonLine['NAME'];
			$delMsg = number_format($openBonLine['stueck'], 1, ".", "") . " " . $prName . " aus offenen Bon gelöscht";
			$insQl = mysql_query("INSERT INTO auditing SET benutzer = '" . $user . "', konfigtitel = 'Produkt im offen Bon gelöscht',
									funktion = '" . $delMsg . "', datumzeit = NOW()     ");
		}
	}
	
	
}

function zeile_loeschen_kombi()
{
	$id = rtrim($_REQUEST['id']);
	$parent_id = $_REQUEST['parent_id'];

	$Q1 = mysql_query("SELECT * FROM offener_bon WHERE ID='" . $parent_id . "'");
	$row1 = mysql_fetch_assoc($Q1);
	//var_dump($row1);
	if ($row1['stueck'] > 1) {
		//echo "Stück ist größer als 1";
		ein_kombiprodukt_wegsplitten($parent_id);
	} else {
		// update offener bon
		$sql = "UPDATE offener_bon SET PRINTNAME='" . mysql_real_escape_string($row1['NAME'] . " **") . "' WHERE ID = " . $parent_produkt_id . "";
		//echo $sql;
		mysql_query($sql);
	}

	$sql_query = "DELETE FROM offener_bon WHERE id='" . $id . "'";
	//echo $sql_query;							 
	run_mysql_query($sql_query, "Produkt gelöscht");
	berechne_bruttopreis_von_kombiartikel($parent_id);
}

// Bon anzeigen wir von kassieren.php als ajax aufgerufen und Zeigt den Bon am Bildchirm an (div bon)
function bon_anzeigen()
{
	$aktueller_bon = rtrim($_REQUEST['id']);
	$_SESSION['aktuellerWarenkorb'] = $aktueller_bon;
	$_SESSION['ablageWarenkorb'] = $aktueller_bon;

	if (isset($_POST['callFrom']) && !empty($_POST['callFrom'])) $callFrom = $_POST['callFrom'];
	else $callFrom = "";
	$toMoveTableId = false;
	if ($callFrom == 'moveTotable') {
		$aktueller_bon = $_SESSION['gastroTisch'];
		if (isset($_POST['toMoveTableId']) && $_POST['toMoveTableId'] > 0) $toMoveTableId = $_POST['toMoveTableId'];
		else return false;
	}

	offenen_bon_anzeigen($aktueller_bon, $callFrom);
}

function zeile_einzelrabatt()
{
	$id = false;
	$prozent = false;

	if (isset($_POST['id']) && $_POST['id'] > 0) $id = rtrim($_POST['id']);
	if (isset($_POST['prozent']) && $_POST['id'] > 0) $prozent = rtrim($_POST['prozent']);

	if ($id != false && $prozent != false) {

		$getProdData = mysql_fetch_array(mysql_query("SELECT offener_bon.bon_id AS bonId, offener_bon.printname AS printN, offener_bon.NAME AS prodN, 
									offener_bon.PRICESELL AS verkPrice, tax_rate, stueck, rabattierbar, has_childs 
									FROM offener_bon 
									LEFT JOIN products ON products.id = offener_bon.produkt_id
									WHERE offener_bon.id = '" . $id . "' LIMIT 1 "));
		if (!$getProdData) {
			echo "Datenbank Fehler. " . mysql_error();
			exit(1);
		}

		if ($getProdData['rabattierbar'] == 0 && $getProdData['has_childs'] == 0) {
			// Den Rabatt vom bruttopreis berechnen, ansonsten können weniger als cent heruaskommen
			$tax_rate = $getProdData['tax_rate'];
			$brutto = $getProdData['verkPrice'] + $getProdData['verkPrice'] * $tax_rate;
			$brutto = $brutto - round($brutto * ($prozent / 100), 2);
			$brutto = round($brutto, 2);
			$netto = $brutto / (1 + $tax_rate);
			$calcVk = $netto;
			//$calcVk=$getProdData['verkPrice'] - ($getProdData['verkPrice']*($prozent/100));
			// RFR: Die Kalk soll vom Bruttopreis berechnet werden, nicht vom Netto - und Runden, weil es kann keine komma Cent geben 

			if (isset($getProdData['printN']) && strlen($getProdData['printN']) > 0) $productName = $getProdData['printN'];
			else $productName = $getProdData['prodN'];
			# wenn es ein komma zahl (0.5 od .5) ist
			if (is_float($prozent * 1)) {
				$prozTxt = number_format($prozent, 1, ",", "");
			} else $prozTxt = $prozent;
			$addOrigPr = '';
			if (defined('EINZELRABATT_ORIG_PREIS_PRINT') && strtolower(EINZELRABATT_ORIG_PREIS_PRINT) == 'ja') {
				$addOrigPr = ' von € ' . number_format(($getProdData['verkPrice'] * $getProdData['stueck']) * (1 + $getProdData['tax_rate']), 2, ",", ".");
			}
			# $addTxt=$productName." ".$prozTxt."% Rabatt".$addOrigPr;
			$updBon = mysql_query("UPDATE offener_bon SET PRICESELL = '" . $calcVk . "',  printname = CONCAT(printname, ' " . $prozTxt . "% Rabatt" . $addOrigPr . "')
										WHERE ID = '" . $id . "'  ");
			if (!$updBon) {
				echo "Datenbank Fehler. " . mysql_error();
			} else {
				echo json_encode(array('success', $getProdData['printN'] . " rabattiert"));
			}
		} else if ($getProdData['rabattierbar'] == 0 && $getProdData['has_childs'] != 0) {
			$bonId = $getProdData['bonId'];
			$getChildes = mysql_query("SELECT offener_bon.ID AS xID, offener_bon.PRICESELL AS verkPrice,  rabattierbar
									FROM offener_bon
									LEFT JOIN products ON products.id = offener_bon.produkt_id
									WHERE offener_bon.bon_id = '" . $bonId . "' AND has_parent = '" . $id . "' ");
			if (!$getChildes) {
				echo json_encode(array('error', 'Datenbank Fehler, ' . mysql_error()));
			} else {
				$addTxt = false;
				$displayPrice = 0;
				$origVkChild = 0;
				while ($getChildData = mysql_fetch_array($getChildes)) {
					$calcVkChild = false;
					$childId = $getChildData['xID'];
					$getProdDataChild = mysql_fetch_array(mysql_query("SELECT offener_bon.bon_id AS bonId, offener_bon.printname AS printN, offener_bon.NAME AS prodN, 
									offener_bon.PRICESELL AS verkPrice, tax_rate, stueck, rabattierbar, has_childs 
									FROM offener_bon 
									LEFT JOIN products ON products.id = offener_bon.produkt_id
									WHERE offener_bon.id = '" . $childId . "' LIMIT 1 "));
					if ($getChildData['rabattierbar'] == 0) {
						$calcVkChild = $getProdDataChild['verkPrice'] - ($getProdDataChild['verkPrice'] * ($prozent / 100));
						if (EINZELPREIS_IM_BON_BRUTTO == strtolower('ja')) {
							$displayPrice += round($calcVkChild, 4) * (1 + $getProdDataChild['tax_rate']);
						} else $displayPrice += $calcVkChild;
					} else {
						$calcVkChild = $getProdDataChild['verkPrice'];
						if (EINZELPREIS_IM_BON_BRUTTO == strtolower('ja')) {
							//$displayPrice+=round($getProdDataChild['verkPrice'], 4)*(1 + $getProdDataChild['tax_rate']);
							$displayPrice += $getProdDataChild['verkPrice'] * (1 + $getProdDataChild['tax_rate']);
						} else $displayPrice += round($getProdDataChild['verkPrice'], 4);
					}

					$updChild = mysql_query("UPDATE offener_bon SET PRICESELL = '" . $calcVkChild . "' WHERE ID = '" . $childId . "'  ");

					# original Preis errechnen für anzeige wenn so gesetzt
					if (EINZELPREIS_IM_BON_BRUTTO == strtolower('ja')) {
						$origVkChild += $getProdDataChild['verkPrice'] * (1 + $getProdDataChild['tax_rate']);
					} else $origVkChild += $getProdDataChild['verkPrice'];
				}
				# nach dem abarbeiten der Childs Preis und Text in die Parent Zeile schreiben
				if (is_float($prozent * 1)) $prozTxt = number_format($prozent, 1, ",", "");
				else $prozTxt = $prozent;

				$addOrigPr = '';
				if (defined('EINZELRABATT_ORIG_PREIS_PRINT') && strtolower(EINZELRABATT_ORIG_PREIS_PRINT) == 'ja') {
					$addOrigPr = ' von € ' . number_format($origVkChild, 2, ",", ".");
				}


				$updParent = mysql_query("UPDATE offener_bon SET PRICESELL = '" . $displayPrice . "', printname = CONCAT(printname, ' " . $prozTxt . "% Rabatt" . $addOrigPr . "')
								WHERE offener_bon.bon_id = '" . $bonId . "' AND parent_id = '" . $id . "' ");
				echo json_encode(array('success', $addTxt . " eingefügt"));
			}
		} else if ($getProdData['rabattierbar'] != 0) {
			echo json_encode(array('success', $getProdData['printN'] . " nicht rabattierbar"));
		}
	} else print_fehler("Keinen Prozentsatz eingegeben");
}

#writeLog(basename( __FILE__)." ". __LINE__ , "bon Id: ".$bonId." Prod Id: ".$id);

function zeile_einzelrabatt_ursprünglich()
{
	# diese funktion fügt eine zusätzliche Zeile Rabatte ein
	$id = rtrim($_REQUEST['id']);
	$prozent = rtrim($_REQUEST['prozent']);
	if (is_numeric($prozent)) {
		$sql = "SELECT offener_bon.id AS id, offener_bon.name AS name, offener_bon.pricesell AS pricesell, offener_bon.tax_rate AS tax_rate, 
							offener_bon.printname AS printname, offener_bon.pricebuy AS pricebuy, offener_bon.category AS category, 
							offener_bon.taxcat AS taxcat, offener_bon.varprice AS varprice, offener_bon.bon_id AS bon_id, offener_bon.stueck AS stueck, 
							offener_bon.parent_id AS parent_id, offener_bon.has_childs AS has_childs, offener_bon.has_parent AS has_parent, rabattierbar
						FROM offener_bon 
						LEFT JOIN products ON offener_bon.produkt_id = products.ID
						WHERE offener_bon.id='" . $id . "'";
		$sql_produkte = mysql_query($sql);
		if (!$sql_produkte) {
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
			$stueck = $row_produkt['stueck'];
			$name = $row_produkt['name'];
			$name = "Rabatt " . $prozent . "% - " . $name;
			$printname = $row_produkt['printname'];
			$printname = "Rabatt " . $prozent . "% - " . $printname;
			$preis = $row_produkt['pricesell'];
			$preis = $preis * ($prozent / 100);
			$preis = $preis * -1;

			if ($row_produkt['parent_id'] > 0 && $row_produkt['has_childs'] == 1) {
				$combiQl = mysql_query("SELECT SUM(offener_bon.pricesell*stueck) AS gesamtpreis, offener_bon.taxcat AS taxcat, 
										offener_bon.tax_rate AS tax_rate, offener_bon.NAME AS NAME, offener_bon.printname AS printname, products.rabattierbar 
									FROM offener_bon 
									LEFT JOIN products ON offener_bon.produkt_id = products.ID
									WHERE has_parent = '" . $id . "' AND products.rabattierbar = 0
									GROUP BY tax_rate");

				while ($combiArtEinzelRab = mysql_fetch_array($combiQl)) {
					if (strlen($row_produkt['printname']) > 2) $name = $row_produkt['printname'];
					else $name = $row_produkt['name'];
					$gesamtpreis = $combiArtEinzelRab['gesamtpreis'];
					$tax_rate = $combiArtEinzelRab['tax_rate'];
					$name = "Rabatt " . $prozent . "% - Steuersatz " . $tax_rate * 100 . "%, " . $name . " ";
					$preis = $gesamtpreis * ($prozent / 100);
					$preis = $preis * -1;

					$sql_query = "INSERT INTO offener_bon SET name='" . $name . "', pricesell=" . $preis . ", tax_rate='" . $tax_rate . "', printname='" . $name . "', 
								reference=' ', code='', pricebuy='0', category='0', taxcat='" . $combiArtEinzelRab['taxcat'] . "', 
								varprice=false, bon_id='" . $row_produkt['bon_id'] . "', stueck='1'";

					run_mysql_query($sql_query, $prozent . '% Einzelrabatt zu Kombiartikel eingefügt.');
				}
			} else {
				if ($row_produkt['rabattierbar'] != 0) {
					print_fehler("Produkt ist nicht rabattierbar");
					exit(1);
				} else {
					$sql_query = "INSERT INTO offener_bon SET name='" . $name . "', pricesell=$preis, tax_rate='" . $row_produkt['tax_rate'] . "',printname='" . $printname . "', 
										reference=' ', code='', pricebuy='" . $row_produkt['pricebuy'] . "',category='0', taxcat='" . $row_produkt['taxcat'] . "', 
										varprice='" . $row_produkt['varprice'] . "',bon_id='" . $row_produkt['bon_id'] . "', stueck='" . $stueck . "'";

					run_mysql_query($sql_query, $prozent . '% Einzelrabatt eingefügt.');
				}
			}
		}
	} else print_fehler("Keinen Prozentsatz eingegeben");
}

function gesamtrabatt()
{
	$bon_id = rtrim($_REQUEST['bon_id']);
	$prozent = rtrim($_REQUEST['prozent']);
	if (is_numeric($prozent)) {
		$sql = "select SUM(offener_bon.pricesell*offener_bon.stueck) as gesamtpreis, offener_bon.taxcat AS taxcat, 
							offener_bon.tax_rate AS tax_rate, offener_bon.has_childs AS has_childs, rabattierbar, kunden_id
				FROM offener_bon 
				LEFT JOIN products ON offener_bon.produkt_id = products.ID
				WHERE bon_id='" . $bon_id . "' AND has_childs <> 1 AND rabattierbar = 0
				GROUP BY offener_bon.tax_rate";
		$sql_produkte = mysql_query($sql);
		if (!$sql_produkte) {
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
			$gesamtpreis = $row_produkt['gesamtpreis'];
			$tax_rate = $row_produkt['tax_rate'];
			$name = "Gesamtrabatt " . $prozent . "% - Steuersatz " . $tax_rate * 100 . "%";
			# August 2020 hinzugefügt
			$kdId = $row_produkt['kunden_id'];
			# aus der Session, könnte ja jemand andere buchen als die Zeilen davor !
			$userId = $_SESSION["userId"];

			// Zuerst brutto Preis berechnen, dann rabatt, dann runden, dann netto wieder ausrechnen
			$preis_brutto = $gesamtpreis * (1 + $tax_rate);
			$preis_brutto_rabatt = $preis_brutto * ($prozent / 100);
			$preis_brutto_rabatt = round($preis_brutto_rabatt, 2);
			$preis = $preis_brutto_rabatt / (1 + $tax_rate);

			//$preis=$gesamtpreis*($prozent/100);
			$preis = $preis * -1;
			$sql_query = "INSERT INTO offener_bon SET name='" . $name . "', pricesell=$preis, tax_rate='" . $row_produkt['tax_rate'] . "',printname='" . $name . "', reference=' ', code='', 
							pricebuy='0', category='0', taxcat='" . $row_produkt['taxcat'] . "', varprice=false, bon_id='" . $bon_id . "', stueck='1', kunden_id='" . $kdId . "', benutzer_id = '" . $userId . "'";
			//print_fehler( $sql_query );	
			run_mysql_query($sql_query);
		}
	} else print_fehler("Keinen Prozentsatz eingegeben");
}

function steuer_berechnen($bon_id, $bonieren = false, $abgeschlossene_bon_id = "")
{
	//$bon_id 					........ die bon_id aus der offenen_bons Tabelle
	//$bonieren 				...... sollen die Steuern in abgeschlossener_bon_steuern eingtragen werden?
	//$abgeschlossene_bon_id 	...... Die ID des abgeschlossenen, bons fuer den die Steuern eingetragen werden
	$sql = "select SUM(pricesell*stueck) as gesamtpreis, taxcat, tax_rate FROM offener_bon WHERE bon_id='" . $bon_id . "' AND has_childs <> 1 GROUP BY tax_rate";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		$gesamtpreis = $row_produkt['gesamtpreis'];
		$tax_rate = $row_produkt['tax_rate'];
		if ($bonieren) {
			$sql = "INSERT INTO abgeschlossener_bon_steuern SET bon_id=$abgeschlossene_bon_id, tax_rate=$tax_rate, gesamt_betrag=$gesamtpreis";
			run_mysql_query($sql, "Bon Abschluss Steuern eingefuegt", "SQL Fehler beim erzeugen des Bons Tabelle: abgeschlossener_bon_steuern");
		} else {
			echo "Satz " . $tax_rate * 100 . "% Netto " . number_format($gesamtpreis, 2, ",", ".") . " Brutto " . number_format($gesamtpreis * (1 + $tax_rate), 2, ",", ".") . "<br>";
		}
	}
}



// Modal Produkt editieren - schreiben in die DB

function editieren_abgeschlossen()
{
	global $pattern, $replace;   //   stored in connect.php

	$name = $_REQUEST['name'];
	$stueck = $_REQUEST['stueck'];
	$stueck = str_replace(",", ".", $stueck);
	$aktueller_bon = $_REQUEST['aktueller_bon'];
	#	$produkt_id=$_REQUEST['offener_bon_id'];
	$netto = $_REQUEST['netto'];
	$netto = str_replace(",", ".", $netto);
	$neuer_preis = $netto;	// Falls der Preis geändert wurde aber nicht die Beilagen

	echo $neuer_preis;

	$dbId = $_POST['offener_bon_id'];



	$beilagenOption = false;
	$beilagenProdInitialPreis = false;
	$beilagenBasispreisKey = false;
	if (isset($_POST['beilagenBasispreisGeaendertKey'])) {
		$beilagenBasispreisKey = $_POST['beilagenBasispreisGeaendertKey'];
	}

	$basisPrGeaendertAmount = false;
	if (isset($_REQUEST['basisPrGeaendertAmount'])) {
		$basisPrGeaendertAmount = $_REQUEST['basisPrGeaendertAmount'];
	}

	if (isset($_POST['artikelArtId']) && is_numeric($_POST['artikelArtId'])) $artikelArtId = intval($_POST['artikelArtId']);
	else  $artikelArtId = 0;

	$beilagenCalc = false;
	if (isset($_POST['beilagenCalc']) && $_POST['beilagenCalc'] > 0) $beilagenCalc = $_POST['beilagenCalc'];


	//file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ." neuer Preis, netto -> ".$neuer_preis."  beilagen Calc sollte der netto pr aus den gesamt änderungen sein ".$beilagenCalc."\n ", FILE_APPEND);

	if (defined('BEILAGEN_PREIS_BERECHNEN') && strtolower(BEILAGEN_PREIS_BERECHNEN) == 'ja') {
		$getData = mysql_fetch_array(mysql_query("SELECT tax_rate FROM offener_bon WHERE ID = " . $dbId . " LIMIT 1 "));
		$taxRate = $getData['tax_rate'];
	}

	$checkQty = mysql_fetch_assoc(mysql_query("SELECT offener_bon.ID AS ID, offener_bon.NAME AS NAME, offener_bon.PRICESELL AS PRICESELL, 
									offener_bon.tax_rate AS tax_rate, offener_bon.printname AS printname, offener_bon.bon_id AS bon_id, 
									beilagen_aenderung_minus, beilagen_aenderung_plus, articlePrinted, products.NAME AS prodName, 
									products.PRINTNAME AS prodPrintName, beilagen_prod_orig_preis, beilagen_basispreis_key
								FROM offener_bon 
								LEFT JOIN products ON products.ID = offener_bon.produkt_id
								WHERE offener_bon.ID = " . $dbId . " "));
	if (strlen($checkQty['beilagen_aenderung_minus']) > 0 || strlen($checkQty['beilagen_aenderung_plus']) > 0) $alreadyBeilage = true;
	else $alreadyBeilage = false;

	$articlePrinted = $checkQty['articlePrinted'];
	###    hilfszeilen start	

	if ($checkQty['beilagen_basispreis_key'] == 0 && $beilagenBasispreisKey == 1) {
		$neuer_preis = $neuer_preis + $basisPrGeaendertAmount;     // wird mit "-" übergeben wenn es minus ist, daher brauchen wir hier keine trennung -/+


		//if(isset($_POST['beilagenProdInitialPr'])){ $beilagenProdInitialPreis=$_POST['beilagenProdInitialPr'];	}

		//file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ."BeilagenKey aus Maske -> 1 und BeilagenKey aus DB = 0 Amount -> ".$basisPrGeaendertAmount."\n ", FILE_APPEND);

	} else if ($beilagenBasispreisKey == 0) {
		//file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ."BeilagenKey aus Maske -> 0 Keine Basisprice Änderung\n ", FILE_APPEND);

	} else if ($checkQty['beilagen_basispreis_key'] == 1) {
		//file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ."BeilagenKey aus DB -> 1 Keine weitere Basisprice Änderung\n ", FILE_APPEND);

	}


	###    hilfszeilen end	


	// $original_produktpreis ist immer der Ausgangspreis, ob Beilagen geändert wurden oder nicht!
	// wenn es Null ist, dann wurde noch nie Preisänderung aufgerufen, d.h. PRICESELL verwenden!
	$original_produktpreis = $checkQty['beilagen_prod_orig_preis'];  // hier ist immer der original Preis des Produkts gespeichert
	if ($original_produktpreis == 0) $original_produktpreis = $checkQty['PRICESELL'];
	echo $original_produktpreis;

	$auditChange = "";
	if (strlen(trim($checkQty['printname'])) > 0) $refName = trim($checkQty['printname']);
	else $refName = trim($checkQty['NAME']);

	if (defined('PRODUCT_EDIT_ADD_ONLY') && strtolower(PRODUCT_EDIT_ADD_ONLY) == 'ja') {
		if (strlen(trim($checkQty['prodPrintName'])) > 0) $prodRefName = trim($checkQty['prodPrintName']);
		else $prodRefName = trim($checkQty['prodName']);
		# vergleich ob der Artikelname (products) am Anfang vom editieren Txt steht, wenn nicht wird dieser vorangestellt
		if (0 !== strpos(trim($name), $prodRefName)) $name = $prodRefName . " " . $name;
	}

	if ($refName != trim($name)) {
		$auditChange .= "Artikel Name von " . $refName . " auf " . $name . " geändert.";
	}
	if (round($_REQUEST['netto'], 2) != round($checkQty['PRICESELL'], 2)) {
		$origPr = number_format($checkQty['PRICESELL'] * (1 + $checkQty['tax_rate']), 2, ",", ".");
		$newPr = number_format($_REQUEST['netto'] * (1 + $checkQty['tax_rate']), 2, ",", ".");
		if ($auditChange != "") {
			$auditChange = preg_replace('/\sgeändert./', '', $auditChange);
			$auditChange .= ", u. Preis von " . $origPr . " auf " . $newPr . " geändert.";
		} else {
			$auditChange .= "Artikel (" . $refName . ") Preis von " . $origPr . " auf " . $newPr . " geändert.";
		}
	}

	if ($auditChange != "") {
		$user = $_SESSION["userName"];
		$insQl = mysql_query("INSERT INTO auditing SET benutzer = '" . $user . "', konfigtitel = 'Produkt geändert', funktion = 'Artikel Editieren',
								ausgangswert= '" . $auditChange . "', datumzeit = NOW()");
	}

	$articleArtChange = false;
	$checkArticleArt = mysql_fetch_array(mysql_query("SELECT article_art_id FROM offener_bon WHERE ID = " . $dbId . " "));
	if ($checkArticleArt[0] != $artikelArtId) $articleArtChange = true;

	$beilagenNetPr = false;
	$beilagenBrutPr = false;
	$beilagenProdInitialPr = false;

	# für beilagenändern müssen wir wissen ob auch der preis verändert wurde sonst stimmt die referenz zum prod preis nicht

	if (isset($_REQUEST['beilagenMinus']) && isset($_REQUEST['beilagenPlus']) && ($_REQUEST['beilagenPlus'] != "" || $_REQUEST['beilagenMinus'] != "" || $alreadyBeilage == true)) {
		$beilMinus = $_REQUEST['beilagenMinus'];
		$beilPlus = $_REQUEST['beilagenPlus'];
		$updateBeilagen = ", beilagen_aenderung_minus = '" . $beilMinus . "', beilagen_aenderung_plus = '" . $beilPlus . "'";
		$beilagenOption = true;
		array_push($pattern, "/\*\*\s/");
		array_push($replace, "");
		$name = preg_replace($pattern, $replace, $_REQUEST['name']);
		if ($_REQUEST['beilagenPlus'] != "" || $_REQUEST['beilagenMinus'] != "") {
			$name = $name . " **";
		}
		# Beilagen Preis Änderungs Felder auslesen
		$beilagenNetPr = $_POST['beilagenSumNetto'];
		$beilagenBrutPr = $_POST['beilagenSumBrutto'];
		$beilagenProdInitialPr = $_POST['beilagenProdInitialPr'];
	} else $updateBeilagen = "";

	//file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ."neuer Preis -> ".$neuer_preis." beilagen net -> ".$beilagenNetPr." init Pr -> ".$beilagenProdInitialPr."\n##################\n ", FILE_APPEND);



	if (isset($_POST['beilagenProdInitialPr']) && $beilagenNetPr === false) {
		# wenn editieren aufgemacht wird und keine beilagen geändert werden wird das nicht gesetzt, somit geht der initialpreis verloren
		#deswegen setzen wir es hier, aber nur wenn es keine beilagenänderung gibt, sonst wird es oben gesetzt 
		$beilagenProdInitialPr = $_POST['beilagenProdInitialPr'];
	}

	if (isset($dbId)) {

		if (
			defined('BEILAGEN_PREIS_BERECHNEN') && strtolower(BEILAGEN_PREIS_BERECHNEN) == 'ja'
			&& ($_REQUEST['beilagenPlus'] != ""  || $_REQUEST['beilagenMinus'] != "")
		) {

			if ($beilagenNetPr != 0) {
				$neuer_preis = $beilagenProdInitialPr + $beilagenNetPr;

				if ((strtolower(BEILAGEN_PREIS_MINUS_ZULASSEN) != 'ja' || !defined("BEILAGEN_PREIS_MINUS_ZULASSEN")) && $neuer_preis < $beilagenProdInitialPr) {
					$neuer_preis = $beilagenProdInitialPr;
				}
			}

			/*		if ($beilagenNetPr>0 && (strtolower(BEILAGEN_PREIS_MINUS_ZULASSEN) != 'ja' || !defined("BEILAGEN_PREIS_MINUS_ZULASSEN"))){ 
							//$neuer_preis=$original_produktpreis+$beilagenNetPr;
							//$neuer_preis += $beilagenNetPr;	
							$neuer_preis = $beilagenProdInitialPr+$beilagenNetPr;	
					}
					else if(defined("BEILAGEN_PREIS_MINUS_ZULASSEN") && strtolower(BEILAGEN_PREIS_MINUS_ZULASSEN) == 'ja'){
							//$neuer_preis=$original_produktpreis+$beilagenNetPr;	
							//$neuer_preis += $beilagenNetPr;
							$neuer_preis = $beilagenProdInitialPr+$beilagenNetPr;
					}
			
					else{ 
							//$neuer_preis=$original_produktpreis;
							$neuer_preis=$neuer_preis;
					}
			*/
		}

		//file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ."neuer Preis -> ".$neuer_preis." minus zulassen -> ".BEILAGEN_PREIS_MINUS_ZULASSEN." jetrzt noch der beilagenProdInitialPr -> ".$beilagenProdInitialPr."\n ", FILE_APPEND);

		if (!isset($_SESSION)) session_start();
		$UserId = $_SESSION['userId'];
		$UserName = $_SESSION['userName'];

		# wenn Qty > 1 wird eine neue Zeile im offenen Bon eingefügt anstelle von update des aktuellen datensatzes
		if ((($stueck > 1 || ($stueck == 1 && $articlePrinted == 1)) && $beilagenOption == true) ||
			(($stueck > 1 || ($stueck == 1 && $articlePrinted == 1)) && $articleArtChange == true) ||
			(($stueck > 1 || ($stueck == 1 && $articlePrinted == 1)) && $beilagenBasispreisKey == true)
		) {

			$origData = mysql_fetch_array(mysql_query("SELECT * FROM offener_bon WHERE ID = " . $dbId . ""));
			$insQl = mysql_query("INSERT INTO offener_bon SET bon_id = '" . $origData['bon_id'] . "', produkt_id = '" . $origData['produkt_id'] . "', 
									REFERENCE = '" . $origData['REFERENCE'] . "', CODE = '" . $origData['CODE'] . "', NAME = '" . $origData['NAME'] . "', 
									PRICEBUY = '" . $origData['PRICEBUY'] . "', PRICESELL = " . $neuer_preis . ", CATEGORY = '" . $origData['CATEGORY'] . "', 
									TAXCAT = '" . $origData['TAXCAT'] . "', IMAGE = '" . $origData['IMAGE'] . "', DISPLAY = '" . $origData['DISPLAY'] . "', 
									VARPRICE = '" . $origData['VARPRICE'] . "', printname = '" . mysql_real_escape_string($name) . "', 
									NEGATIVEPRICE = '" . $origData['NEGATIVEPRICE'] . "', PRODUKTORDER = '" . $origData['PRODUKTORDER'] . "', 
									SICHTBAR = '" . $origData['SICHTBAR'] . "', supplyprint = '" . $origData['supplyprint'] . "', articlePrinted = 0, 
									stueck = 1, tax_rate = '" . $origData['tax_rate'] . "', beilagen_aenderung_minus = '" . $beilMinus . "', 
									beilagen_aenderung_plus = '" . $beilPlus . "', article_art_id = '" . $artikelArtId . "', 
									kunden_id = '" . $origData['kunden_id'] . "', beilagen_sum_netto = '" . $beilagenNetPr . "', beilagen_sum_brutto = '" . $beilagenBrutPr . "',
									beilagen_prod_orig_preis = '" . $beilagenProdInitialPr . "', beilagen_basispreis_key='" . $beilagenBasispreisKey . "',
									benutzer_id = '" . $UserId . "', has_childs = '" . $origData['has_childs'] . "'");

			if (!$insQl) writeSitposLog(basename(__FILE__) . "*+* " . __LINE__, "Datenbank Error: " . mysql_error());
			else {
				$insertedId = mysql_insert_id();
				// Childs auch noch migrieren
				// hier gehört eigentlich der jetzige benutzer eingefügt, nicht der der damals boniert hat!
				if ($origData['has_childs']) {
					// Das Feld parent_id auf die eigene ID setzen!
					$updQl = mysql_query("UPDATE offener_bon SET parent_id = " . $insertedId . " WHERE ID = " . $insertedId . " ");
				}
				$Q3 = mysql_query("SELECT * FROM offener_bon WHERE has_parent = " . $dbId . "");
				while ($origData = mysql_fetch_array($Q3)) {
					$insQl = mysql_query("INSERT INTO offener_bon SET bon_id = '" . $origData['bon_id'] . "', produkt_id = '" . $origData['produkt_id'] . "', 
									REFERENCE = '" . $origData['REFERENCE'] . "', CODE = '" . $origData['CODE'] . "', NAME = '" . $origData['NAME'] . "', 
									PRICEBUY = '" . $origData['PRICEBUY'] . "', PRICESELL = " . $neuer_preis . ", CATEGORY = '" . $origData['CATEGORY'] . "', 
									TAXCAT = '" . $origData['TAXCAT'] . "', IMAGE = '" . $origData['IMAGE'] . "', DISPLAY = '" . $origData['DISPLAY'] . "', 
									VARPRICE = '" . $origData['VARPRICE'] . "', printname = '" . mysql_real_escape_string($name) . "', 
									NEGATIVEPRICE = '" . $origData['NEGATIVEPRICE'] . "', PRODUKTORDER = '" . $origData['PRODUKTORDER'] . "', 
									SICHTBAR = '" . $origData['SICHTBAR'] . "', supplyprint = '" . $origData['supplyprint'] . "', articlePrinted = 0, 
									stueck = 1, tax_rate = '" . $origData['tax_rate'] . "', beilagen_aenderung_minus = '', 
									beilagen_aenderung_plus = '', article_art_id = '" . $artikelArtId . "', benutzer_id = '" . $UserId . "',
									kunden_id = '" . $origData['kunden_id'] . "', beilagen_sum_netto = '" . $origData['beilagen_sum_netto'] . "', beilagen_sum_brutto = '" . $origData['beilagen_sum_brutto'] . "',
									beilagen_prod_orig_preis = '" . $origData['beilagen_prod_orig_preis'] . "', beilagen_basispreis_key='" . $origData['beilagen_basispreis_key'] . "',
									has_parent=$insertedId");
				}

				$updatetdQty = $stueck - 1;
				$updQl = mysql_query("UPDATE offener_bon SET stueck = " . $updatetdQty . " WHERE ID = " . $dbId . " ");
				if (!$updQl) file_put_contents('kpcheckit.txt', "\n " . basename(__FILE__) . " " . __LINE__ . "Datenbank Error: " . mysql_error() . "  \n ", FILE_APPEND);
				$updQl = mysql_query("UPDATE offener_bon SET stueck = " . $updatetdQty . " WHERE has_parent = " . $dbId . " ");
				if (!$updQl) file_put_contents('kpcheckit.txt', "\n " . basename(__FILE__) . " " . __LINE__ . "Datenbank Error: " . mysql_error() . "  \n ", FILE_APPEND);
				echo "update Produkt ID" . $dbId . ", new Product Line" . $insertedId;
			}
		} else {
			echo "update Produkt ID" . $dbId;

			$sql = "UPDATE offener_bon SET PRINTNAME='" . mysql_real_escape_string($name) . "', stueck='" . $stueck . "', 
							article_art_id = '" . $artikelArtId . "', PRICESELL=" . $neuer_preis . " " . $updateBeilagen . ", beilagen_sum_netto = '" . $beilagenNetPr . "', 
							beilagen_sum_brutto='" . $beilagenBrutPr . "', beilagen_prod_orig_preis='" . $beilagenProdInitialPr . "', beilagen_basispreis_key='" . $beilagenBasispreisKey . "'
							WHERE id=" . $dbId . " ";
			echo "SQL: " . $sql;
			run_mysql_query($sql, "Produkt abgedatet", "SQL Fehler beim update des Produkt Tabelle: offener_bon");
		}
	}
}


function zahlung_abgeschlossen_zahlungfrei()
{

	$kassa_abschluss_id = ist_kassa_offen();
	if ($kassa_abschluss_id == false) {
		print_fehler("FEHLER: Kassa ist nicht geoeffnet");
		exit;
	}
	$zahlungsart_value = $_REQUEST['zahlungsart_value'];
	$zahlungsart_name = $_REQUEST['zahlungsart_name'];
	$bon_id = $_REQUEST['aktueller_bon'];
	$user = $_SESSION['userId'];

	# auftragsschein Daten
	$auftragsDatePrint = false;
	$auftragsPrintDisabled = false;
	if (isset($_POST['auftrDateToPrint'])) $auftragsDatePrint = $_POST['auftrDateToPrint'];
	if (isset($_POST['disableAuftrPrint']) && $_POST['disableAuftrPrint'] === true) $auftragsPrintDisabled = true;

	$errorMsg = "";
	$splitMode = true;
	if (isset($_POST['splitMode']) && $_POST['splitMode'] == 'active') {
		$splitMode = true;

		$qtyToSplit = sizeof($_SESSION['splitBon' . $bon_id]);
		$zOp = "";
		$whereClaus = "";
		$gesamt_summe = 0;
		$taxArray = array();
		for ($i = 0; $i < $qtyToSplit; $i++) {
			$zOp .= $_SESSION['splitBon' . $bon_id][$i][0] . " / Anz -> ";
			$Anzahl = $_SESSION['splitBon' . $bon_id][$i][1] . " / ";

			$addTxtId = false;
			$addTxt = "";
			$openBonId = preg_replace('/\D/', '', $_SESSION['splitBon' . $bon_id][$i][0]);
			$row_produkt = mysql_fetch_assoc(mysql_query("SELECT offener_bon.ID, name, pricesell, tax_rate, printname, '$Anzahl' AS stueck, tax_rate, 
															kunden_id, bon_add_text.id AS bonTxtId, bon_text
															FROM offener_bon 
															LEFT JOIN bon_add_text ON bon_add_text.offenerbon_id = offener_bon.bon_id
															WHERE offener_bon.ID = " . $openBonId . " "));
			if (!$row_produkt) {
				$errorMsg .= "Datenbank Error, Select from offener_bon .. : " . mysql_error();
			}
			$summe = $row_produkt['pricesell'] * (1 + $row_produkt['tax_rate']);
			$summe = $summe * $row_produkt['stueck'];
			$gesamt_summe = $gesamt_summe + $summe;
			$nummer = $row_produkt['id'];
			$printCustomerId = $row_produkt['kunden_id'];
			$addTxt = $row_produkt['bon_text'];
			$addTxtId = $row_produkt['bonTxtId'];
			# build tax array
			$gesamtpreis = $row_produkt['pricesell'] * $row_produkt['stueck'];		## calulate sum price of product line
			if (array_key_exists($row_produkt['tax_rate'], $taxArray)) {
				$existValue = $taxArray[$row_produkt['tax_rate']];
				$gesamtpreis += $existValue;
				$taxArray[$row_produkt['tax_rate']] = $gesamtpreis;
			} else {
				$taxArray[$row_produkt['tax_rate']] = $gesamtpreis;
			}
			$errorMsg .= "Array Length: " . count($taxArray) . " Gesamtpreis per line: " . $gesamtpreis . "\n";
		}


		$gesamt_summe = number_format($gesamt_summe, 8, ".", "");


		$insQl = mysql_query("INSERT INTO abgeschlossener_bon_frei SET gesamt_summe=$gesamt_summe, verkaufer_id=$user, kassa_abschluss_id=$kassa_abschluss_id, 
						kunden_id=$printCustomerId, bon_erstellt_datum = NOW(), gastro_tisch_id=$bon_id, zusatztext = '" . $addTxt . "' ");
		if (!$insQl) $errorMsg .= "Datenbank Insert Error line " . __LINE__ . " " . mysql_error();

		$mysql_bon_id = mysql_insert_id();


		for ($j = 0; $j < $qtyToSplit; $j++) {
			$openBonId = preg_replace('/\D/', '', $_SESSION['splitBon' . $bon_id][$j][0]);
			$prodQty = $_SESSION['splitBon' . $bon_id][$j][1];
			$row_produkt = mysql_fetch_assoc(mysql_query("SELECT id, produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, DISPLAY, VARPRICE, 
						PRINTNAME, NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, stueck FROM offener_bon 
						WHERE ID='" . $openBonId . "'"));
			if (!$row_produkt) $errorMsg .= "Datenbank Select Error: " . mysql_error();

			$pattern = array("/'/", "/´/", '/"/');
			$replace = array("\'", "\`", '\"');

			$insQl = mysql_query("INSERT INTO abgeschlossener_bon_produkte_frei SET bon_id='" . $mysql_bon_id . "', 
									produkt_id='" . $row_produkt["produkt_id"] . "',
									REFERENCE='" . preg_replace($pattern, $replace, $row_produkt["REFERENCE"]) . "',
									CODE='" . $row_produkt["CODE"] . "',
									NAME='" . preg_replace($pattern, $replace, $row_produkt["NAME"]) . "',
									PRICEBUY='" . $row_produkt["PRICEBUY"] . "',
									PRICESELL='" . $row_produkt["PRICESELL"] . "',
									CATEGORY='" . $row_produkt["CATEGORY"] . "',
									TAXCAT='" . $row_produkt["TAXCAT"] . "',
									DISPLAY='" . $row_produkt["DISPLAY"] . "',
									VARPRICE='" . $row_produkt["VARPRICE"] . "',
									PRINTNAME='" . preg_replace($pattern, $replace, $row_produkt["PRINTNAME"]) . "',
									NEGATIVEPRICE='" . $row_produkt["NEGATIVEPRICE"] . "',
									PRODUKTORDER='" . $row_produkt["PRODUKTORDER"] . "',
									SICHTBAR='" . $row_produkt["SICHTBAR"] . "',
									stueck='" . $prodQty . "',
									tax_rate='" . $row_produkt["tax_rate"] . "'
				");
		}

		// Den offenen Bon updaten um die split werte reduzieren
		for ($z = 0; $z < $qtyToSplit; $z++) {
			$openBonId = preg_replace('/\D/', '', $_SESSION['splitBon' . $bon_id][$z][0]);
			$prodQty = $_SESSION['splitBon' . $bon_id][$z][1];
			$checkQty = mysql_fetch_array(mysql_query("SELECT stueck FROM offener_bon WHERE ID = $openBonId"));
			if (($checkQty[0] - $prodQty) <= 0) $delQl = mysql_query("DELETE FROM offener_bon WHERE ID = $openBonId ");
			else $udQl = mysql_query("UPDATE offener_bon SET stueck = (stueck - $prodQty), articlePrinted = (articlePrinted - $prodQty)  WHERE ID = $openBonId ");
		}

		if ($addTxtId !== false) {
			$delAddTxt = mysql_query("DELETE FROM bon_add_text WHERE id = " . $addTxtId . "");
		}

		if (strtolower(AUSDRUCK_BEREITSTELLUNGSBON_BEZAHLEN_PDF) == 'ja' && strtolower(AUSDRUCK_BEREITSTELLUNGSBON_PDF) == 'ja'  && strtolower(GASTRO_VERSION) == 'ja') {
			require_once("include/ajax_functions_gastro.php");
			$printSupplay = printGastroSupply("paymentFinish");
		}


		if (defined('AUSDRUCK_ABHOLSCHEIN_GASTRO') && strtolower(AUSDRUCK_ABHOLSCHEIN_GASTRO) == 'ja' && strtolower(GASTRO_VERSION) == 'ja') {
			require_once("global_functions_gastro.php");


			$printGastroAbholschein = printGastroAbholschein($mysql_bon_id, "paymentFinishZahlungsfrei");
		}

		#### SESSION LÖSCHEN    !!!!!!!!!!

		unset($_SESSION['splitBon' . $bon_id]);
	}		# Ende split Bon Mode


	else {		# für nicht gesplittete Zahlungsart Frei 
		$sql_produkte = mysql_query("SELECT offener_bon.id, bon_id, name, pricesell, tax_rate, printname, stueck, kunden_id, bon_add_text.id AS bonTxtId, bon_text
										FROM offener_bon 
										LEFT JOIN bon_add_text ON bon_add_text.offenerbon_id = offener_bon.bon_id
										WHERE bon_id='" . $bon_id . "'");

		if (!$sql_produkte) {
			echo "Datenbank Fehler: " . mysql_error();
			exit(1);
		}

		$gesamt_summe = 0;
		$addTxt = "";
		$addTxtId = false;

		while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
			$summe = $row_produkt['pricesell'] * (1 + $row_produkt['tax_rate']);
			$summe = $summe * $row_produkt['stueck'];
			$gesamt_summe = $gesamt_summe + $summe;
			$nummer = $row_produkt['id'];
			$printCustomerId = $row_produkt['kunden_id'];
			$printTableId = $row_produkt['bon_id'];
			$addTxt = $row_produkt['bon_text'];
			$addTxtId = $row_produkt['bonTxtId'];
		}

		$gesamt_summe = number_format($gesamt_summe, 8, ".", "");
		// Jetzt den Bon für freie Zahlung erzeugen
		$insQl = mysql_query("INSERT INTO abgeschlossener_bon_frei SET gesamt_summe=$gesamt_summe, verkaufer_id=$user, kassa_abschluss_id=$kassa_abschluss_id, 
					kunden_id=$printCustomerId, bon_erstellt_datum = NOW(), gastro_tisch_id=$printTableId, zusatztext = '" . $addTxt . "' ");
		if (!$insQl) {
			echo "Datenbank Fehler. " . mysql_error();
			file_put_contents('kpcheckit.txt', "\n " . basename(__FILE__) . " " . __LINE__ . "db error : " . mysql_error() . " \n ", FILE_APPEND);
		}
		$mysql_bon_id = mysql_insert_id();

		// Produkte in abgeschlossener_bon__produkte_frei eintragen
		$sql_produkte = mysql_query("SELECT id, produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, DISPLAY, VARPRICE, 
							PRINTNAME, NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, stueck, has_childs, has_parent, parent_id, childPrint 
							FROM offener_bon WHERE bon_id='" . $bon_id . "'");

		if (!$sql_produkte) {
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}

		$pattern = array("/'/", "/´/", '/"/');
		$replace = array("\'", "\`", '\"');

		while ($row_produkt = mysql_fetch_array($sql_produkte)) {

			$hasP = $row_produkt['has_parent'];
			if ($hasP > 0) $parentId = $row_produkt['has_parent'];
			else $parentId = 0;

			if ($row_produkt['parent_id'] > 0 && $row_produkt['has_childs'] == 1) {
				$isParentId = $row_produkt['parent_id'];
				$row_produkt["PRICESELL"] = 0;
			} else $isParentId = 0;

			$sql = 'INSERT INTO abgeschlossener_bon_produkte_frei SET bon_id="' . $mysql_bon_id . '", 
								produkt_id="' . $row_produkt["produkt_id"] . '",
								REFERENCE="' . preg_replace($pattern, $replace, $row_produkt["REFERENCE"]) . '",
								CODE="' . $row_produkt["CODE"] . '",
								NAME="' . preg_replace($pattern, $replace, $row_produkt["NAME"]) . '",
								PRICEBUY="' . $row_produkt["PRICEBUY"] . '",
								PRICESELL="' . $row_produkt["PRICESELL"] . '",
								CATEGORY="' . $row_produkt["CATEGORY"] . '",
								TAXCAT="' . $row_produkt["TAXCAT"] . '",
								DISPLAY="' . $row_produkt["DISPLAY"] . '",
								VARPRICE="' . $row_produkt["VARPRICE"] . '",
								PRINTNAME="' . preg_replace($pattern, $replace, $row_produkt["PRINTNAME"]) . '",
								NEGATIVEPRICE="' . $row_produkt["NEGATIVEPRICE"] . '",
								PRODUKTORDER="' . $row_produkt["PRODUKTORDER"] . '",
								SICHTBAR="' . $row_produkt["SICHTBAR"] . '",
								stueck="' . $row_produkt["stueck"] . '",
								tax_rate="' . $row_produkt["tax_rate"] . '",
								has_childs="' . $row_produkt["has_childs"] . '",
								parent_id= "' . $parentId . '",
								isparent_id="' . $isParentId . '",
								childPrint="' . $row_produkt["childPrint"] . '"';

			run_mysql_query($sql, "Bon Abschluss Produkte eingefuegt", "Fehler beim erzeugen des Bons Tabelle: abgeschlossener_bon_produkte_frei");
		}



		# COMBI ARTIKEL !!!!!
		# Parents suchen und duchlaufen, updaten schaffen die Verbindung der childs zu den Parents nach DB id 				
		$searchParents = mysql_query("SELECT ID, bon_id, parent_id, isparent_id FROM abgeschlossener_bon_produkte_frei WHERE has_childs = 1 AND bon_id = " . $mysql_bon_id . "");
		while ($searchParentRow = mysql_fetch_array($searchParents)) {
			$updateChilds = mysql_query("UPDATE abgeschlossener_bon_produkte_frei SET parent_id = " . $searchParentRow['ID'] . " 
								WHERE parent_id = " . $searchParentRow['isparent_id'] . " AND bon_id = " . $mysql_bon_id . "  ");
			$updateParent = mysql_query("UPDATE abgeschlossener_bon_produkte_frei SET isparent_id = " . $searchParentRow['ID'] . "
								WHERE ID = " . $searchParentRow['ID'] . " AND bon_id = " . $mysql_bon_id . "  ");
		}



		if (strtolower(AUSDRUCK_BEREITSTELLUNGSBON_BEZAHLEN_PDF) == 'ja' && strtolower(AUSDRUCK_BEREITSTELLUNGSBON_PDF) == 'ja'  && strtolower(GASTRO_VERSION) == 'ja') {
			require_once("include/ajax_functions_gastro.php");
			$printSupplay = printGastroSupply("paymentFinish");
		}

		if (defined('LIEFERSCHEINDRUCK_BEI_RECHNUNG') && strtolower(LIEFERSCHEINDRUCK_BEI_RECHNUNG) == 'ja') {
			if (isset($_SESSION['lieferschein_print_disable']) && $_SESSION['lieferschein_print_disable'] == $bon_id) {
				/* lieferschein wurde aufgerufen, wird jetzt nicht mehr gedruckt, wurde beim erstellen gedruckt. */
				unset($_SESSION['lieferschein_print_disable']);
			} else {
				$lieferscheinBeiRechnung = lieferscheinErstellen(false, false, 'rechnung_erstellen', $auftragsDatePrint, $auftragsPrintDisabled);
			}
		}

		if (defined('AUSDRUCK_ABHOLSCHEIN_GASTRO') && strtolower(AUSDRUCK_ABHOLSCHEIN_GASTRO) == 'ja' && strtolower(GASTRO_VERSION) == 'ja') {
			require_once("global_functions_gastro.php");

			$printGastroAbholschein = printGastroAbholschein($mysql_bon_id, "paymentFinishZahlungsfrei");
		}

		// Den offenen Bon löschen
		$sql = "DELETE FROM offener_bon WHERE bon_id=$bon_id";
		run_mysql_query($sql, "Bon Abschluss Zahlung eingefuegt", "Fehler beim erzeugen des Bons - Tabelle: abgeschlossener_bon_zahlung");

		if ($addTxtId !== false) {
			$delAddTxt = mysql_query("DELETE FROM bon_add_text WHERE id = " . $addTxtId . "");
		}
	}


	// Drucke jetzt den BEZAHLEN FREI Bon aus	
	if (defined('AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN') && strtolower(AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN) == 'ja') {
		$disablePrint = true;
	} else $disablePrint = false;


	if (strtolower(ZAHLUNGSART_FREI_BON_AUSDRUCKEN) == 'ja') {

		if (strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja'  && $disablePrint == false) {
			frei_bon_ausdrucken_pdf($mysql_bon_id, 200);
		} else {
			frei_bon_ausdrucken(false, $mysql_bon_id, 'freibon');
		}
	}

	/*if (defined("FILIALSYSTEM_SYNCHRONISATION_BON") && FILIALSYSTEM_SYNCHRONISATION_BON == "ja") {
			$origin = "abg_bon";
			include 'synchronize/sync_data.php';
		}*/
}

// Funktion schreibt die Steuer einträge
// in die Tabelle abgeschlossener_bon_steuern
// Steuern werden aus der Tabelle abgeschlossener_bon_produkte genommen
function steuern_aus_abgeschlossenen_bon_berechnen($insertedBonId)
{
	$sqlS = "SELECT SUM(stueck*PRICESELL) as steuer_summe, tax_rate FROM abgeschlossener_bon_produkte
		WHERE bon_id=$insertedBonId AND has_childs=0 GROUP by tax_rate";
	//echo $sqlS;
	$QS = mysql_query($sqlS);
	if (!$QS) echo "Fehler :" . mysql_error($QS) . " " . $sqlS . "<br>";
	while ($rowS = mysql_fetch_assoc($QS)) {
		$tax_rate = $rowS['tax_rate'];
		$steuer_summe = $rowS['steuer_summe'];
		echo "Rate :" . $tax_rate . "<br>";
		$QIsql = "INSERT INTO abgeschlossener_bon_steuern SET bon_id=$insertedBonId, tax_rate=$tax_rate, gesamt_betrag=$steuer_summe";
		echo $QIsql . "<br>";
		$QI = mysql_query($QIsql);
		if (!$QI) echo "Fehler :" . mysql_error($QI) . " " . $QIsql . "<br>";
	}
}

function zahlung_abgeschlossen_splitbon()
{

	$errorMsg = "";
	$zahlungsart_value = $_REQUEST['zahlungsart_value'];
	$zahlungsart_name = $_REQUEST['zahlungsart_name'];
	$bon_id = $_REQUEST['aktueller_bon'];
	$user = $_SESSION['userId'];

	#kommt aus dem Zahlungs Modal !!
	$summeZahlungsart = false;
	$offenerBetrag = false;
	$retourGeld = false;
	$gutscheinKarte = false;
	$gutscheinKartenNr = false;
	$gutscheinBetragAbbuchen = false;
	$gsArray = false;
	$gutscheinKarteKundenId = false;
	if (isset($_POST['summeZahlungsart'])) $summeZahlungsarten = $_POST['summeZahlungsart'];
	if (isset($_POST['offenerBetrag'])) $offenerBetrag = $_POST['offenerBetrag'];
	if (isset($_POST['retourGeld'])) $retourGeld = $_POST['retourGeld'];
	if (isset($_POST['gutscheinKarte']) && $_POST['gutscheinKarte'] == '1' && strlen($_POST['gutscheinKartenNr']) > 0) $gutscheinKartenNr = $_POST['gutscheinKartenNr'];
	if (isset($_POST['gutscheinBetragAbbuchen']) && is_numeric($_POST['gutscheinBetragAbbuchen'])) $gutscheinBetragAbbuchen = $_POST['gutscheinBetragAbbuchen'];
	if (isset($_POST['gsArray']) && is_array($_POST['gsArray'])) $gsArray = $_POST['gsArray'];
	if (isset($_POST['gutscheinKarteKundenId']) && is_numeric($_POST['gutscheinKarteKundenId'])) $gutscheinKarteKundenId = $_POST['gutscheinKarteKundenId'];

	# Wenn EC-Terminal verwendet wird	
	$ecTerminalData = false;
	$ecTerminalDataRaw = false;
	//if(isset($_POST['zahlTerminalData']) && strlen($_POST['zahlTerminalData']) > 2){
	echo $_POST['zahlTerminalData'] . "\n";
	if (isset($_POST['zahlTerminalData']) && ($_POST['zahlTerminalData']) !== "false") {
		$ecTerminalDataRaw = $_POST['zahlTerminalData'];

		#writeLog(basename( __FILE__)." ". __LINE__ , " split bon xxxxxx term zahlungs raw data ".$ecTerminalDataRaw. " ");

		preg_match('#<SITPOSBANKOMAT>(.*?)</SITPOSBANKOMAT>#', $ecTerminalDataRaw, $mMatch);

		#writeLog(basename( __FILE__)." ". __LINE__ , " split bon xxxxxx term zahlungs xml data ".$mMatch[1]. " ");

		/*
			if(preg_match('/Zahlung\sZVT\sZahlungsterminal/', $ecTerminalDataRaw)){
					$ecTermType='zvt';
					$addTermType="<TERMINAL_TYPE>ZVT</TERMINAL_TYPE>";
			}
			else{
					$ecTermType='six';
					$addTermType="<TERMINAL_TYPE>SIX</TERMINAL_TYPE>";
			}
			*/

		$ecTerminalData = "<?xml version='1.0' standalone='yes'?><SITPOSBANKOMAT>" . $mMatch[1] . "</SITPOSBANKOMAT>";
	}


	$kassa_abschluss_id = ist_kassa_offen();
	if ($kassa_abschluss_id == false) {
		print_fehler("FEHLER: Kassa ist nicht geoeffnet");
		exit;
	}

	# auftragsschein Daten
	$auftragsDatePrint = false;
	$auftragsPrintDisabled = false;
	if (isset($_POST['auftrDateToPrint'])) $auftragsDatePrint = $_POST['auftrDateToPrint'];
	if (isset($_POST['disableAuftrPrint']) && $_POST['disableAuftrPrint'] === true) $auftragsPrintDisabled = true;

	if (isset($_POST['printTarget']) && $_POST['printTarget'] == 'a4_ausdruck') $printTargetA4 = true;
	else $printTargetA4 = false;

	$qtyToSplit = sizeof($_SESSION['splitBon' . $bon_id]);
	$zOp = "";
	$whereClaus = "";
	$gesamt_summe = 0;
	$taxArray = array();

	starte_transaktion();
	$zahlSqlError = false;
	$zahlSqlErrorMsg = "";
	for ($i = 0; $i < $qtyToSplit; $i++) {
		$zOp .= $_SESSION['splitBon' . $bon_id][$i][0] . " / Anz -> ";
		$Anzahl = $_SESSION['splitBon' . $bon_id][$i][1] . " / ";
		# wird hier zurückgesetzt, wird dann nur beim ersten durchlauf erkannt und der table nur 1x update
		$addTxtId = false;
		$addTxt = "";

		$openBonId = preg_replace('/\D/', '', $_SESSION['splitBon' . $bon_id][$i][0]);

		$row_produkt = mysql_fetch_assoc(mysql_query("SELECT offener_bon.id, name, pricesell, tax_rate, printname, '$Anzahl' AS stueck, 
								kunden_id, bon_add_text.id AS bonTxtId, bon_text
								FROM offener_bon 
								LEFT JOIN bon_add_text ON bon_add_text.offenerbon_id = offener_bon.bon_id
								WHERE offener_bon.ID = " . $openBonId . " "));
		if (!$row_produkt) {
			("Datenbank Error, Select from offener_bon, " . mysql_error());
			$zahlSqlError = true;
			$zahlSqlErrorMsg .= "Datenbank Error, Select from offener_bon, " . mysql_error();
		}
		$summe = $row_produkt['pricesell'] * (1 + $row_produkt['tax_rate']);
		$summe = $summe * $row_produkt['stueck'];
		// RFR: 06.12.2019 beim Rabatt gibt es ein Problem, wenn nicht gerundet wird
		//$gesamt_summe=$gesamt_summe+$summe;
		$gesamt_summe = $gesamt_summe + round($summe, 2);

		$nummer = $row_produkt['id'];
		$printCustomerId = $row_produkt['kunden_id'];
		$addTxt = $row_produkt['bon_text'];
		$addTxtId = $row_produkt['bonTxtId'];

		# build tax array
		$gesamtpreis = $row_produkt['pricesell'] * $row_produkt['stueck'];		## calulate sum price of product line
		if (array_key_exists($row_produkt['tax_rate'], $taxArray)) {
			$existValue = $taxArray[$row_produkt['tax_rate']];
			$gesamtpreis += $existValue;
			$taxArray[$row_produkt['tax_rate']] = $gesamtpreis;
		} else {
			$taxArray[$row_produkt['tax_rate']] = $gesamtpreis;
		}
	}

	$gesamt_summe = number_format($gesamt_summe, 8, ".", "");

	$qtyUser = checkCurrentActiveUser();
	# kommt eine Zahl retour, Errors werden keine abgefangen

	$ecData = '';
	$dataStrg = "";
	$ecKundenBeleg = "";
	$vkBelegPrint = "";
	$ecVerkauferBeleg = "";

	/*
		if($ecTerminalData !== false){
			
			if (strpos($ecTerminalData, '<DRUCKE_VERKAEUFERBELEG />') !== false) {
				$vkBelegPrint="<PRINT_BELEG></PRINT_BELEG>";
			}
				# wurde in function_karte.php von \n auf <br/> replaced, anonsten gibts einen error bei übergabe zu javascript
				# hier verschwindet <br/> im xml auslesen, daher wieder retour replaced
			$ecTerminalData=str_replace("<br/>", "\n", $ecTerminalData);
			
			$xmlData = simplexml_load_string($ecTerminalData);
			$ecData=$xmlData->ERGEBNIS;
			$ecKundenBeleg=$xmlData->KUNDENBELEG;
			$ecVerkauferBeleg=$xmlData->VERKAEUFERBELEG;
			
			$dataStrg=$ecData;
		}
		*/
	if ($ecTerminalData !== false) {
		$vkBelegPrint = "";
		if (strpos($ecTerminalData, '<DRUCKE_VERKAEUFERBELEG />') !== false) {
			$vkBelegPrint = "<PRINT_BELEG></PRINT_BELEG>";
		}
		# wurde in function_karte.php von \n auf <br/> replaced, anonsten gibts einen error bei übergabe zu javascript
		# hier verschwindet <br/> im xml auslesen, daher wieder retour replaced
		$ecTerminalData = str_replace("<br/>", "\n", $ecTerminalData);

		$xmlData = simplexml_load_string($ecTerminalData);
		$ecData = $xmlData->ERGEBNIS;
		$ecKundenBeleg = $xmlData->KUNDENBELEG;
		$ecVerkauferBeleg = $xmlData->VERKAEUFERBELEG;

		/*
			$dataStrg="";
			if($ecTermType == 'six'){
				foreach($ecData as $ecDat) {
					$dataStrg.="{$ecDat->CardNumber} \n {$ecDat->CardNumberPrintable} \n {$ecDat->CardExpiryDate} \n {$ecDat->BrandName} \n 
								{$ecDat->TenderName} \n {$ecDat->Amount}  \n {$ecDat->TransRef}\n";
				}
			}
			else if($ecTermType == 'zvt'){
				$dataStrg=$ecData;
			}
			*/
		$dataStrg = $ecData->asXML();
	}

	if (($printCustomerId == false || $printCustomerId <= 0) && (isset($gutscheinKarteKundenId) && (int)$gutscheinKarteKundenId > 0)) {
		$printCustomerId = (int)$gutscheinKarteKundenId;
	}

	$insQl = false;
	$insQl = mysql_query("INSERT INTO abgeschlossener_bon SET gesamt_summe=$gesamt_summe, verkaufer_id=$user, kassa_abschluss_id=$kassa_abschluss_id, 
					kunden_id=$printCustomerId, bon_erstellt_datum = NOW(), gastro_tisch_id=$bon_id, zusatztext = '" . $addTxt . "', aktiv_user = " . $qtyUser . ", 
					ce_zahlung_data = '" . $dataStrg . "', ce_kunden_beleg = '" . $ecKundenBeleg . "', ce_zahlung_beleg = '" . $vkBelegPrint . $ecVerkauferBeleg . "'  ");
	if (!$insQl) {
		log_to_file("Datenbank Error, Insert abgeschlossener_bon, " . mysql_error());
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= "Datenbank Error, Insert abgeschlossener_bon, " . mysql_error();
	}
	$insertedBonId = mysql_insert_id();


	writeSitposLog(basename(__FILE__) . " " . __LINE__, "abgeschlosssener Splitbon erstellt, Bon Id: " . $insertedBonId . ". " . mysql_error());

	# write tax value by tax rate in table "abgeschlossener_bon_steuern"
	# $tax_rate = array key, $taxSum the value
	/*
		foreach($taxArray as $tax_rate=>$productSum){ 
			$sql=mysql_query("INSERT INTO abgeschlossener_bon_steuern SET bon_id=$insertedBonId, tax_rate=$tax_rate, gesamt_betrag=$productSum");		
		}*/

	for ($j = 0; $j < $qtyToSplit; $j++) {
		$openBonId = preg_replace('/\D/', '', $_SESSION['splitBon' . $bon_id][$j][0]);
		$prodQty = $_SESSION['splitBon' . $bon_id][$j][1];
		$row_produkt = mysql_fetch_assoc(mysql_query("select id, produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, DISPLAY, VARPRICE, 
						PRINTNAME, NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, stueck,
						has_childs, parent_id, childPrint
						from offener_bon 
						WHERE ID='" . $openBonId . "'"));
		if (!$row_produkt) $errorMsg .= "Datenbank Select Error: " . mysql_error();

		$pattern = array("/'/", "/´/", '/"/');
		$replace = array("\'", "\`", '\"');

		list($einzel_brutto, $gesamt_brutto, $steuer_einzel, $steuer_gesamt) = berechne_bruttopreis($row_produkt["PRICESELL"], $row_produkt["tax_rate"], $prodQty);

		$insQl = false;
		$insQl = mysql_query("INSERT INTO abgeschlossener_bon_produkte SET bon_id='" . $insertedBonId . "', 
								produkt_id='" . $row_produkt["produkt_id"] . "',
								REFERENCE='" . preg_replace($pattern, $replace, $row_produkt["REFERENCE"]) . "',
								CODE='" . $row_produkt["CODE"] . "',
								NAME='" . preg_replace($pattern, $replace, $row_produkt["NAME"]) . "',
								PRICEBUY='" . $row_produkt["PRICEBUY"] . "',
								PRICESELL='" . $row_produkt["PRICESELL"] . "',
								PRICESELL_brutto='" . $einzel_brutto . "',
								PRICESELL_brutto_gesamt='" . $gesamt_brutto . "',
								tax='" . $steuer_einzel . "',
								tax_gesamt='" . $steuer_gesamt . "',
								CATEGORY='" . $row_produkt["CATEGORY"] . "',
								TAXCAT='" . $row_produkt["TAXCAT"] . "',
								DISPLAY='" . $row_produkt["DISPLAY"] . "',
								VARPRICE='" . $row_produkt["VARPRICE"] . "',
								PRINTNAME='" . preg_replace($pattern, $replace, $row_produkt["PRINTNAME"]) . "',
								NEGATIVEPRICE='" . $row_produkt["NEGATIVEPRICE"] . "',
								PRODUKTORDER='" . $row_produkt["PRODUKTORDER"] . "',
								SICHTBAR='" . $row_produkt["SICHTBAR"] . "',
								stueck='" . $prodQty . "',
								tax_rate='" . $row_produkt["tax_rate"] . "',
								
								has_childs='" . $row_produkt["has_childs"] . "',
								parent_id='" . $row_produkt["parent_id"] . "',
								childPrint='" . $row_produkt["childPrint"] . "'
								");
		if (!$insQl) {
			log_to_file("Datenbank Error, Insert abgeschlossener_bon_produkte, " . mysql_error());
			$zahlSqlError = true;
			$zahlSqlErrorMsg .= "Datenbank Error, Insert abgeschlossener_bon_produkte, " . mysql_error();
		} else {
			$new_id = mysql_insert_id();
			mysql_query("UPDATE abgeschlossener_bon_produkte SET isparent_id=ID, parent_id=0 WHERE ID=$new_id");

			// Childs abschliessen
			$Q1 = mysql_query("select id, produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, DISPLAY, VARPRICE, 
						PRINTNAME, NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, stueck,
						has_childs, parent_id, childPrint
						from offener_bon 
						WHERE has_parent='" . $openBonId . "'");
			if (!$Q1) $errorMsg .= "Datenbank Select Error: " . mysql_error();

			while ($row_produkt = mysql_fetch_assoc($Q1)) {
				$pattern = array("/'/", "/´/", '/"/');
				$replace = array("\'", "\`", '\"');

				list($einzel_brutto, $gesamt_brutto, $steuer_einzel, $steuer_gesamt) = berechne_bruttopreis($row_produkt["PRICESELL"], $row_produkt["tax_rate"], $prodQty);

				$insQl = false;
				$insQl = mysql_query("INSERT INTO abgeschlossener_bon_produkte SET bon_id='" . $insertedBonId . "', 
										produkt_id='" . $row_produkt["produkt_id"] . "',
										REFERENCE='" . preg_replace($pattern, $replace, $row_produkt["REFERENCE"]) . "',
										CODE='" . $row_produkt["CODE"] . "',
										NAME='" . preg_replace($pattern, $replace, $row_produkt["NAME"]) . "',
										PRICEBUY='" . $row_produkt["PRICEBUY"] . "',
										PRICESELL='" . $row_produkt["PRICESELL"] . "',
										PRICESELL_brutto='" . $einzel_brutto . "',
										PRICESELL_brutto_gesamt='" . $gesamt_brutto . "',
										tax='" . $steuer_einzel . "',
										tax_gesamt='" . $steuer_gesamt . "',
										CATEGORY='" . $row_produkt["CATEGORY"] . "',
										TAXCAT='" . $row_produkt["TAXCAT"] . "',
										DISPLAY='" . $row_produkt["DISPLAY"] . "',
										VARPRICE='" . $row_produkt["VARPRICE"] . "',
										PRINTNAME='" . preg_replace($pattern, $replace, $row_produkt["PRINTNAME"]) . "',
										NEGATIVEPRICE='" . $row_produkt["NEGATIVEPRICE"] . "',
										PRODUKTORDER='" . $row_produkt["PRODUKTORDER"] . "',
										SICHTBAR='" . $row_produkt["SICHTBAR"] . "',
										stueck='" . $prodQty . "',
										tax_rate='" . $row_produkt["tax_rate"] . "',
										
										has_childs='" . $row_produkt["has_childs"] . "',
										parent_id='" . $new_id . "',
										childPrint='" . $row_produkt["childPrint"] . "'
										");
			}
		}
	}

	steuern_aus_abgeschlossenen_bon_berechnen($insertedBonId);

	// Zahlung abgeschlossener_bon_zahlung eintragen
	$zaQl = mysql_query("select name from zahlungsart WHERE standard=true");  // Suche die Standard Zahlungsart heraus
	if (!$zaQl) {
		log_to_file("Datenbank Error, Select zahlungsarten, " . mysql_error());
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= "Datenbank Error, Select zahlungsarten, " . mysql_error();
	}
	while ($row_zahlungsart = mysql_fetch_assoc($zaQl)) {
		$default_zahlungsart = $row_zahlungsart['name'];
	}
	// Alle Zahlungsarten durchsehen (falls das wechselgeld nicht oder nicht komplett einegegeben wurde
	$i = 0;
	$gesamt_bezahlt = 0;
	$default_zahlungsart_value = 0;
	$zahlungsart_value_tatsaechlich = $zahlungsart_value;
	$newRetourGeldContent = "";

	// gesamte bezahlarten durchgehen und summe bilden
	foreach ($zahlungsart_name as $za_name) {
		$za_name = substr($za_name, 11);
		$za_value = $zahlungsart_value[$i];
		// Schau nach, ob das die default zahlungsart ist und speichere den Betrag in variable
		if ($za_name == $default_zahlungsart) {
			$default_zahlungsart_value = $za_value;
			$default_zahlungsart_index = $i;
		}
		$i++;
		$gesamt_bezahlt += $za_value;
	}

	// Berechne hier wie viel das Restgeld ist (wenn z.b. zu viel bezahlt wurde) - Retourgeld wird abgezogen)
	// bzw. wenn gar kein Bargeld oder zu wenig eingegeben wurde, dann wird hier der Rest berechnet
	$gesamt_bezahlt_ohne_standard = $gesamt_bezahlt - $default_zahlungsart_value;
	$standard_zahlart = $gesamt_summe - $gesamt_bezahlt_ohne_standard;
	$zahlungsart_value[$default_zahlungsart_index] = $standard_zahlart;

	# Korrektur von Restwert Fragment !!!
	# gibt es ein Restwert fragment wird es hier korrigiert 
	if (abs($standard_zahlart) < 0.00999999 && abs($standard_zahlart) > 0.00000001) {
		# erkennen vom Restwert Fragment, wird dem höchsten Zahlungs Wert dazugerechnet
		$zahlungsIx = array_search(max($zahlungsart_value), $zahlungsart_value);
		$zahlungsart_value[$zahlungsIx] += abs($standard_zahlart);
		$zahlungsart_value_tatsaechlich[$zahlungsIx] += abs($standard_zahlart);
		#$gesamt_bezahlt+=abs($standard_zahlart);
		$zahlungsart_value[$default_zahlungsart_index] = 0;
	}

	$retourgeld = 0;
	$retourgeldIndicator = false;
	if ($gesamt_summe < $gesamt_bezahlt) {
		$retourgeld = $gesamt_bezahlt - $gesamt_summe;
	} else if ($gesamt_summe > $gesamt_bezahlt && $gesamt_bezahlt > 0 && $offenerBetrag > 0) {  # erklärung siehe in zahlung_abgeschlossen ()
		$zahlungsart_value_tatsaechlich[$default_zahlungsart_index] = $standard_zahlart;
		$retourgeldIndicator = true;
	} else {
		// Es wurde gleich viel Geld eingegeben wie der Betrag ausmacht oder gar nichts eingegeben		
		$zahlungsart_value_tatsaechlich[$default_zahlungsart_index] = $standard_zahlart;
	}


	$udQl = mysql_query("UPDATE abgeschlossener_bon SET retourgeld=$retourgeld WHERE bon_id=$insertedBonId");
	if (!$udQl) {
		log_to_file("Datenbank Error, Update abgeschl.. Retourgeld, " . mysql_error());
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= "Datenbank Error, Update abgeschl.. Retourgeld, " . mysql_error();
	}



	$i = 0;
	$bar_erhalten = 0;
	$gutschein_erhalten = 0;
	$bankomat_zahlung = 0;
	$bank_zahlung = 0;
	$checkZaBank = false;
	foreach ($zahlungsart_name as $za_name) {
		$za_name = substr($za_name, 11);
		$za_value = $zahlungsart_value[$i];
		$za_tatsaechlich = $zahlungsart_value_tatsaechlich[$i];
		$i++;
		if ($za_value != 0) {
			$insQl = false;
			$insQl = mysql_query("INSERT INTO abgeschlossener_bon_zahlung SET bon_id=$insertedBonId, Name='$za_name', zahlbetrag='$za_value', 
							zahlbetrag_tatsaechlich='" . $za_tatsaechlich . "'");
			if (!$insQl) {
				log_to_file("Datenbank Error, Insert abgeschlossener_bon_zahlung, " . mysql_error());
				$zahlSqlError = true;
				$zahlSqlErrorMsg .= "Datenbank Error, Insert abgeschlossener_bon_zahlung, " . mysql_error();
			}

			$newRetourGeldContent .= "<div class='retourgeldDialogTxt' >" . $za_name . ": </div><div class='retourgeldDialogBetr'>" . number_format($za_tatsaechlich, 2, ",", ".") . "</div><div class='cclear'></div>";
		}
	}
	if (defined('LAENDERKENNUNG_DE') && LAENDERKENNUNG_DE != 'A') {
	} else {

		$dep_table_write_result = dep_table_schreiben($insertedBonId);

		if ($dep_table_write_result[0] == false) {
			if ($dep_table_write_result[2] == 'sig') {
				$eC = "Signatur Error";
				$dialogHeader = "Bon signieren Fehler";
				if (defined('SIGNATUR_ERROR_BON_ROLLBACK') && strtolower(SIGNATUR_ERROR_BON_ROLLBACK) == 'ja') {
					$zahlSqlError = true;

					$dialogContent = "Beim signieren ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $insertedBonId . "<br /><p class=\'redbold\'>Zahlung abgebrochen !</p>";
					$zahlSqlErrorMsg .= $dialogContent . " rollback on sig Error gesetzt\n";
				} else {
					$dialogContent = "Beim signieren ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $insertedBonId . "<br />" . $dep_table_write_result[1] . "";
				}
			} else if ($dep_table_write_result[2] == 'dep') {
				$eC = "DEP Error";
				$dialogHeader = "Daten Erfassungsprotokoll Fehler";
				$dialogContent = "Beim Schreiben in die Datenbank der Daten Erfassungs Protokoll Daten ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $insertedBonId . "<br />" . $dep_table_write_result[1] . "";
			} else if ($dep_table_write_result[2] == 'dep_sig') {
				$eC = "DEP und Signatur Error";
				$dialogHeader = "Daten Erfassungsprotokoll und Signatur Fehler";
				$dialogContent = "Beim schreiben vom Daten Erfassungs Protokoll und signieren des Bons ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $insertedBonId . "<br />" . $dep_table_write_result[1] . "";
			} else {
				log_to_file("Signatur ERROR");
				$zahlSqlError = true;
				$dialogHeader = "Signatur ERROR";
				$dialogContent = "<p>" . $dep_table_write_result[0] . " / " . $dep_table_write_result[1] . " / " . $dep_table_write_result[2];
			}

			if (defined('DISPLAY_DEP_SIGN_ERROR') && strtolower(DISPLAY_DEP_SIGN_ERROR) == 'ja') {
				echo "<script>
								openGeneralDialog('dep_or_signature_Error', '" . $dialogHeader . "', '" . $dialogContent . "', 'wrapper');			
						</script>";
			}
		} else if ($dep_table_write_result[0] == true && $dep_table_write_result[3] == 'unsig') {
			$zahlSqlError = true;
			log_to_file("Sammelbeleg erstellen");
			$dialogHeader = 'Sammelbeleg erstellen';
			$dialogContent = '<p>Der letzte Bon wurde mit Signatur Einheit ausgefallen erstellt.</p><p>Zahlung wird abgebrochen, erstellen Sie einen Sammelbeleg und führen Sie danach den Zahlungsabschluss erneut aus.</p>';

			echo "<script>
								openGeneralDialog('dep_or_signature_Error', '" . $dialogHeader . "', '" . $dialogContent . "', 'wrapper');			
						</script>";
		}
	}

	#if($zahlSqlError==true || (defined('SIGNATUR_ERROR_BON_ROLLBACK') && strtolower(SIGNATUR_ERROR_BON_ROLLBACK) == 'ja' && $dep_table_write_result[0] == false)){
	if ($zahlSqlError == true) {
		# bei dep fehler oder sig fehler und SIGNATUR_ERROR_BON_ROLLBACK ist auf ja gesetzt wird zahlSqlError Variable gesetzt
		mysql_query("ROLLBACK");
		mysql_query("ALTER TABLE abgeschlossener_bon AUTO_INCREMENT = 1");
		mysql_query("ALTER TABLE dep AUTO_INCREMENT = 1");
		writeSitposLog(basename(__FILE__) . " " . __LINE__, "abgeschlosssener Bon erstellt Rollback, Bon Id: " . $insertedBonId . "\n" . $zahlSqlErrorMsg);
		exit(1);
	} else {
		mysql_query("COMMIT");
		writeSitposLog(basename(__FILE__) . " " . __LINE__, "abgeschlosssener Bon erstellt Commit, Bon Id: " . $insertedBonId . ". " . mysql_error());
		echo "<script> $('#error_message').html('Bon: " . $insertedBonId . ", Zahlung abgeschlossen.');	</script>";
	}
	log_to_file("aaaaaaa");
	mysql_query("set autocommit=1");
	log_to_file("bbbbbb");
	if ($gutscheinBetragAbbuchen != false && $gutscheinKartenNr != false) {
		log_to_file("gutscheinBetragAbbuchen");
		if (is_array($gsArray) && count($gsArray) > 0) {
			$updGutschError = false;
			$errorContent = "";
			for ($i = 0; $i < sizeof($gsArray); $i++) {
				$updGutschMulti = mysql_query("UPDATE gutscheine SET betrag = betrag - " . $gsArray[$i][1] . " WHERE gutschein_nr = '" . $gsArray[$i][0] . "' ");
				if (!$updGutschMulti) {
					$updGutschError = true;
					$errorContent .= " " . $gsArray[$i][0] . ",";
				}
			}
			if ($updGutschError != false) {
				$dialogContent = "<p>Beim Abuchen vom Gutschein mit der/den Nr: " . $errorContent . " ist ein Fehler aufgetreten !</p>";
				echo "<script>
								openGeneralDialog('gutscheinkarte_abbuchen_fehler', 'Fehler beim Abbuchen von der Gutscheinkarte', '" . $dialogContent . "', 'wrapper');			
						</script>";
			}
		} else {
			$updGutsch = mysql_query("UPDATE gutscheine SET betrag = betrag - " . $gutscheinBetragAbbuchen . " WHERE gutschein_nr = '" . $gutscheinKartenNr . "' ");

			if (!$updGutsch) {
				$updGutschError = true;
				$dialogContent = "<p>Beim Abuchen vom Gutschein mit der Nr: " . $gutscheinKartenNr . " ist ein Fehler aufgetreten !</p>";
				echo "<script>
								openGeneralDialog('gutscheinkarte_abbuchen_fehler', 'Fehler beim Abbuchen von der Gutscheinkarte', '" . $dialogContent . "', 'wrapper');			
						</script>";
			} else $updGutschError = false;
		}
	}

	if (strtolower(AUSDRUCK_BEREITSTELLUNGSBON_BEZAHLEN_PDF) == 'ja' && strtolower(AUSDRUCK_BEREITSTELLUNGSBON_PDF) == 'ja'  && strtolower(GASTRO_VERSION) == 'ja') {
		log_to_file("AUSDRUCK_BEREITSTELLUNGSBON_BEZAHLEN_PDF");
		require_once("include/ajax_functions_gastro.php");
		$printSupplay = printGastroSupply("paymentFinish");
	}

	if (defined('LIEFERSCHEINDRUCK_BEI_RECHNUNG') && strtolower(LIEFERSCHEINDRUCK_BEI_RECHNUNG) == 'ja') {
		log_to_file("LIEFERSCHEINDRUCK_BEI_RECHNUNG");
		if (isset($_SESSION['lieferschein_print_disable']) && $_SESSION['lieferschein_print_disable'] == $bon_id) {
			/* lieferschein wurde aufgerufen, wird jetzt nicht mehr gedruckt, wurde beim erstellen gedruckt. */
			unset($_SESSION['lieferschein_print_disable']);
		} else {
			$lieferscheinBeiRechnung = lieferscheinErstellen(false, false, 'rechnung_erstellen', $auftragsDatePrint, $auftragsPrintDisabled);
		}
	}

	if (defined('AUSDRUCK_ABHOLSCHEIN_GASTRO') && strtolower(AUSDRUCK_ABHOLSCHEIN_GASTRO) == 'ja' && strtolower(GASTRO_VERSION) == 'ja') {
		log_to_file("AUSDRUCK_ABHOLSCHEIN_GASTRO");
		require_once("global_functions_gastro.php");
		$printGastroAbholschein = printGastroAbholschein($insertedBonId, "paymentFinish");
	}



	// Den offenen Bon updaten um die split werte reduzieren
	log_to_file("Den offenen Bon updaten um die split werte reduzieren");
	for ($z = 0; $z < $qtyToSplit; $z++) {
		$openBonId = preg_replace('/\D/', '', $_SESSION['splitBon' . $bon_id][$z][0]);
		$prodQty = $_SESSION['splitBon' . $bon_id][$z][1];
		$checkQty = mysql_fetch_array(mysql_query("SELECT stueck FROM offener_bon WHERE ID = $openBonId"));
		if (($checkQty[0] - $prodQty) <= 0) {
			$delQl = mysql_query("DELETE FROM offener_bon WHERE ID = $openBonId ");
			$delQl = mysql_query("DELETE FROM offener_bon WHERE has_parent = $openBonId ");
		} else {
			$sql = "UPDATE offener_bon SET stueck = (stueck - $prodQty), articlePrinted = (articlePrinted - $prodQty) WHERE ID = $openBonId ";
			//echo $sql;
			$udQl = mysql_query($sql);

			// Childs updaten
			$sql = "UPDATE offener_bon SET stueck = (stueck - $prodQty), articlePrinted = (articlePrinted - $prodQty) WHERE has_parent = $openBonId ";
			//echo $sql;
			$udQl = mysql_query($sql);
		}
	}

	if ($addTxtId !== false) {
		log_to_file("addTxtId");
		$delAddTxt = mysql_query("DELETE FROM bon_add_text WHERE id = " . $addTxtId . "");
	}


	#### SESSION LÖSCHEN    !!!!!!!!!!

	unset($_SESSION['splitBon' . $bon_id]);

	$sourceParam = false;
	if ($checkZaBank == true) $sourceParam = "PrintBankdata";

	# checken der Lizenzierung 
	# return value = array (opendialog true/false, dialog Text)

	# wird derzeit nicht verwendet !!!!!! ->>>>>>>>>>>>>>>   siehe weiter unter 
	#	$checkLic=checkLicenseViolations();

	# wird in global_funktionen.php 1756 ausgeführt

	# ergebnis in nach Retourgeld somit über dem Retourgeld Dialog angezeigt

	// Drucke jetzt den Bon aus											//	alert("moneyGet-> "+moneyGet+" moneyReturn -> "+moneyReturn );

	if (defined('AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN') && strtolower(AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN) == 'ja') {
		log_to_file("AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN");
		$disablePrint = true;
	} else $disablePrint = false;

	if (defined('AUSDRUCK_RECHNUNGSBON_PDF') && strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja' && $printTargetA4 == false && $disablePrint == false) {
		log_to_file("AUSDRUCK_RECHNUNGSBON_PDF");
		bon_ausdrucken_pdf($insertedBonId, $sourceParam, false, false, false);
	} else if ($printTargetA4 == true  && $disablePrint == false) {
		$a4PrintResult = bon_ausdrucken_a4_pdf($insertedBonId, false, 'nonAjax');

		if ($a4PrintResult[1] == 'browserPrint') {
			log_to_file("browserPrint");
			echo "<printToBrowser>" . $a4PrintResult[2] . "</printToBrowser>";
		}
	} else {
		log_to_file("bon_ausdrucken");
		bon_ausdrucken(false, $insertedBonId, $sourceParam);
	}


	if ($bar_erhalten == 0 && $gutschein_erhalten == 0 && $bankomat_zahlung == 0 && $bank_zahlung == 0) $bar_erhalten = $gesamt_summe;

	if (strtolower(RETOURGELD_POPUP_ANZEIGEN) == 'ja' && $zahlungExpress == false) {
		log_to_file("RETOURGELD_POPUP_ANZEIGEN");
		if ($retourgeldIndicator == true) {
			$displayRetourGeld = "<span style='color:red; font-weight:bold; '>-Betrag</span>";
		} else $displayRetourGeld = number_format($retourgeld, 2, ",", ".");

		$newRetourGeldContent .= "<div class='retourgeldDialogTxt' style='margin-top:8px;' >Retourgeld:</div><div class='retourgeldDialogBetr' style='margin-top:8px;' >" . $displayRetourGeld . "</div><div class='cclear'></div>";


		echo '<script>
						// Sleep funktion ist notwendig, da sonst der Druck erst nach dem Popup Fenster beginnt!! 
					setTimeout(function(){ 					
							openGeneralDialog("retourgeldDialog", "Retourgeld", "' . $newRetourGeldContent . '", "wrapper")
					
						}, 500); 						
						</script>';
	}

	/*if (defined("FILIALSYSTEM_SYNCHRONISATION_BON") && FILIALSYSTEM_SYNCHRONISATION_BON == "ja") {
			$origin = "abg_bon";
			include 'synchronize/sync_data.php';
		}*/
}


function zahlung_abgeschlossen()
{
	//log_to_file("--------> zahlung_abgeschlossen");
	// schauen ob er Abholschein Nummer zurückgesetzt werden muss
	log_to_file("Abholscheinnummer zurücksetzen & Beträge werden gesetzt");
	abholschein_nummer_zuruecksetzen();
	echo "___________________________________";
	var_dump($_REQUEST);
	echo "___________________________________";
	$zahlungsart_value = $_REQUEST['zahlungsart_value'];
	$zahlungsart_name = $_REQUEST['zahlungsart_name'];
	$zahlungsart_id = $_POST['zahlungsart_id'];
	$bon_id = $_REQUEST['aktueller_bon'];
	$user = $_SESSION['userId'];

	log_to_file("Request");
	/*
	log_to_file("zahlungsart_value: " . var_dump($zahlungsart_value));
	log_to_file("zahlungsart_name: " . var_dump($zahlungsart_name));
	log_to_file("zahlungsart_id: " . var_dump($zahlungsart_id));
	*/
	log_to_file("bon_id: " . $bon_id);
	log_to_file("user: " . $user);
	log_to_file("Ende Request");

	#kommt aus dem Zahlungs Modal !!
	$summeZahlungsart = false;
	$offenerBetrag = false;
	$retourGeld = false;
	$gutscheinKarte = false;
	$gutscheinKartenNr = false;
	$gutscheinBetragAbbuchen = false;
	$gsArray = false;
	$gutscheinKarteKundenId = false;

	if (isset($_POST['summeZahlungsart'])) $summeZahlungsarten = $_POST['summeZahlungsart'];
	if (isset($_POST['offenerBetrag'])) $offenerBetrag = $_POST['offenerBetrag'];
	if (isset($_POST['retourGeld'])) $retourGeld = $_POST['retourGeld'];
	if (isset($_POST['gutscheinKarte']) && $_POST['gutscheinKarte'] == '1' && strlen($_POST['gutscheinKartenNr']) > 0) $gutscheinKartenNr = $_POST['gutscheinKartenNr'];
	if (isset($_POST['gutscheinBetragAbbuchen']) && is_numeric($_POST['gutscheinBetragAbbuchen'])) $gutscheinBetragAbbuchen = $_POST['gutscheinBetragAbbuchen'];
	if (isset($_POST['gsArray']) && is_array($_POST['gsArray'])) $gsArray = $_POST['gsArray'];
	if (isset($_POST['gutscheinKarteKundenId']) && is_numeric($_POST['gutscheinKarteKundenId'])) $gutscheinKarteKundenId = $_POST['gutscheinKarteKundenId'];
	#	if(isset($_POST['expressmode']) && $_POST['expressmode'] == 'express')$zahlungExpress = true;
	#	else $zahlungExpress = false;

	log_to_file("summeZahlungsart: " . $summeZahlungsarten);
	log_to_file("offenerBetrag: " . $offenerBetrag);
	log_to_file("retourGeld: " . $retourGeld);
	log_to_file("gutscheinKarte: " . $gutscheinKartenNr);
	log_to_file("gutscheinBetragAbbuchen: " . $gutscheinBetragAbbuchen);
	//log_to_file("gsArray: " . var_dump($gsArray));
	log_to_file("gutscheinKarteKundenId: " . $gutscheinKarteKundenId);


	# Wenn EC-Terminal verwendet wird	
	$ecTerminalData = false;
	$ecTerminalDataRaw = false;
	//echo "Zahlterminaldata : " . $_POST['zahlTerminalData'] . "\n";

	if (isset($_POST['zahlTerminalData']) && strlen($_POST['zahlTerminalData']) > 2 && $_POST['zahlTerminalData'] !== 'false') {
		$ecTerminalDataRaw = $_POST['zahlTerminalData'];
		echo $ecTerminalDataRaw;
		log_to_file("Terminal Data: " . $ecTerminalDataRaw);
		#writeLog(basename( __FILE__)." ". __LINE__ , " split bon xxxxxx term zahlungs raw data ".$ecTerminalDataRaw. " ");

		preg_match('#<SITPOSBANKOMAT>(.*?)</SITPOSBANKOMAT>#', $ecTerminalDataRaw, $mMatch);

		#writeLog(basename( __FILE__)." ". __LINE__ , " split bon xxxxxx term zahlungs xml data ".$mMatch[1]. " ");

		/*
			if(preg_match('/Zahlung\sZVT\sZahlungsterminal/', $ecTerminalDataRaw)){
					$ecTermType='zvt';
					$addTermType="<TERMINAL_TYPE>ZVT</TERMINAL_TYPE>";
			}
			else{
					$ecTermType='six';
					$addTermType="<TERMINAL_TYPE>SIX</TERMINAL_TYPE>";
			}
			*/

		$ecTerminalData = "<?xml version='1.0' standalone='yes'?><SITPOSBANKOMAT>" . $mMatch[1] . "</SITPOSBANKOMAT>";
	}
	log_to_file("Zahl Terminal Data: " . $ecTerminalData);
	log_to_file("Zahl Terminal Data Raw: " . $ecTerminalDataRaw);
	log_to_file("Kassa offen wird überprüft.");
	$kassa_abschluss_id = ist_kassa_offen();
	if ($kassa_abschluss_id == false) {
		log_to_file("FEHLER: Kassa ist nicht geoeffnet");
		print_fehler("FEHLER: Kassa ist nicht geoeffnet");
		exit;
	}
	# auftragsschein Daten	
	$auftragsDatePrint = false;
	$auftragsPrintDisabled = false;
	if (isset($_POST['auftrDateToPrint'])) $auftragsDatePrint = $_POST['auftrDateToPrint'];
	else $auftragsDatePrint = '';
	if (isset($_POST['disableAuftrPrint']) && $_POST['disableAuftrPrint'] == 'true') $auftragsPrintDisabled = true;
	else $auftragsPrintDisabled = false;

	if (isset($_POST['printTarget']) && $_POST['printTarget'] == 'a4_ausdruck') $printTargetA4 = true;
	else $printTargetA4 = false;

	if (isset($_POST['printTarget']) && $_POST['printTarget'] == 'express') $zahlungExpress = true;
	else $zahlungExpress = false;

	if (isset($_POST['printTarget']) && $_POST['printTarget'] == 'expressZahlart') $zahlungExpressZahlart = true;
	else $zahlungExpressZahlart = false;

	log_to_file("printTarget: " . $_POST['printTarget']);
	log_to_file("Ausdruck A4: " . $printTargetA4);
	log_to_file("Zahlung Express: " . $zahlungExpress);
	log_to_file("Zahlart ExpressZahlart: " . $zahlungExpressZahlart);

	// Sollte vorher etwas ausgefallen sein durch fehler und ein Rollback gemacht worden sein
	// Alex: 22.08.2022 Druck
	//mysql_query("ALTER TABLE abgeschlossener_bon AUTO_INCREMENT = 1");
	//mysql_query("ALTER TABLE dep AUTO_INCREMENT = 1");
	log_to_file("SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
	log_to_file("START TRANSACTION");
	mysql_query("SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
	mysql_query("START TRANSACTION");
	$zahlSqlError = false;
	$zahlSqlErrorMsg = "";
	$sql = "SELECT offener_bon.id, bon_id, name, pricesell, tax_rate, printname, stueck, kunden_id, has_childs, aus_ls_nr, 
							bon_add_text.id AS bonTxtId, bon_text, abholschein_nr, beilagen_aenderung_minus, beilagen_aenderung_plus
						FROM offener_bon
						LEFT JOIN bon_add_text ON offenerbon_id = bon_id 
						WHERE bon_id='" . $bon_id . "'";
	$sql_produkte = mysql_query($sql);
	if (mysql_num_rows($sql_produkte) == 0) {
		exit(1);
	}
	log_to_file("Offener BonID: " . $bon_id);
	if (!$sql_produkte) {
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= mysql_error() . "\n";
		log_to_file($zahlSqlErrorMsg);
		echo "SQL Fehler: " . mysql_error();
	}
	$gesamt_summe = 0;
	$lieferscheinLink = false;
	$addTxtId = false;
	$addTxt = "";
	log_to_file("Berechnung Produkte");
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		//$summe=round($row_produkt['pricesell'], 4)*(1+$row_produkt['tax_rate']);
		//$summe=round($summe, 4);

		$summe = $row_produkt['pricesell'] * (1 + $row_produkt['tax_rate']);
		$summe = $summe * $row_produkt['stueck'];

		if ($row_produkt['has_childs'] != 1) {
			// RFR: 06.12.2019 beim Rabatt gibt es ein Problem, wenn nicht gerundet wird
			//$gesamt_summe=$gesamt_summe+$summe;
			$gesamt_summe = $gesamt_summe + round($summe, 2);
		}
		log_to_file("--> Produktid: " . $row_produkt['id']);
		$nummer = $row_produkt['id'];
		$printCustomerId = $row_produkt['kunden_id'];
		$printTableId = $row_produkt['bon_id'];
		if ($row_produkt['aus_ls_nr'] > 0) $lieferscheinLink = $row_produkt['aus_ls_nr'];
		$addTxt = $row_produkt['bon_text'];
		$addTxtId = $row_produkt['bonTxtId'];
		$abholschein_nr = $row_produkt['abholschein_nr'];
	}

	if (($printCustomerId == false || $printCustomerId <= 0) && (isset($gutscheinKarteKundenId) && (int)$gutscheinKarteKundenId > 0)) {
		$printCustomerId = (int)$gutscheinKarteKundenId;
	}

	log_to_file("Gesamtsumme: " . $gesamt_summe);
	$qtyUser = checkCurrentActiveUser();
	log_to_file("Aktueller User wird abgefragt. User: " . $qtyUser);
	# kommt eine Zahl retour, Errors werden keine abgefangen

	$ecData = '';
	$dataStrg = '';
	$ecKundenBeleg = '';
	$vkBelegPrint = '';
	$ecVerkauferBeleg = '';

	log_to_file("function_karte.php ecTerminalData: " . $ecTerminalData);
	if ($ecTerminalData !== false) {
		$vkBelegPrint = "";
		if (strpos($ecTerminalData, '<DRUCKE_VERKAEUFERBELEG />') !== false) {
			$vkBelegPrint = "<PRINT_BELEG></PRINT_BELEG>";
		}
		# wurde in function_karte.php von \n auf <br/> replaced, anonsten gibts einen error bei übergabe zu javascript
		# hier verschwindet <br/> im xml auslesen, daher wieder retour replaced
		$ecTerminalData = str_replace("<br/>", "\n", $ecTerminalData);

		$xmlData = simplexml_load_string($ecTerminalData);
		$ecData = $xmlData->ERGEBNIS;
		$ecKundenBeleg = $xmlData->KUNDENBELEG;
		$ecVerkauferBeleg = $xmlData->VERKAEUFERBELEG;

		/*
			
			if($ecTermType == 'six'){
				foreach($ecData as $ecDat) {
					$dataStrg.="{$ecDat->CardNumber} \n {$ecDat->CardNumberPrintable} \n {$ecDat->CardExpiryDate} \n {$ecDat->BrandName} \n 
								{$ecDat->TenderName} \n {$ecDat->Amount}  \n {$ecDat->TransRef}\n";
				}
			}
			else if($ecTermType == 'zvt'){
				$dataStrg=$ecData;
			}
			*/

		$dataStrg = $ecData->asXML();
	}

	log_to_file("INSERT INTO abgeschlossener_bon");
	$gesamt_summe = number_format($gesamt_summe, 8, ".", "");
	// Jetzt den Bon erzeugen
	$insQl = false;
	$sql = "INSERT INTO abgeschlossener_bon SET gesamt_summe=$gesamt_summe, verkaufer_id=$user, 
							kassa_abschluss_id=$kassa_abschluss_id, kunden_id=$printCustomerId, bon_erstellt_datum = NOW(), 
							gastro_tisch_id=$printTableId, zusatztext = '" . $addTxt . "', aktiv_user = " . $qtyUser . ", 
							ce_zahlung_data = '" . $dataStrg . "', ce_kunden_beleg = '" . $ecKundenBeleg . "', 
							ce_zahlung_beleg = '" . $vkBelegPrint . $ecVerkauferBeleg . "', abholschein_nr='" . $abholschein_nr . "' ";
							log_to_file("INSERT abgeschlossener_bon");
							log_to_file($sql);
	$insQl = mysql_query($sql);
	if (!$insQl) {
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= mysql_error() . "\n";
		log_to_file($zahlSqlErrorMsg);
	}
	$mysql_bon_id = mysql_insert_id();
	log_to_file("abgeschlosssener Bon erstellt, Bon Id: " . $mysql_bon_id);
	writeSitposLog(basename(__FILE__) . " " . __LINE__, "abgeschlosssener Bon erstellt, Bon Id: " . $mysql_bon_id . ". " . mysql_error());

	// Steuer berechnen und in abgeschlossener_bon eintragen
	log_to_file("Steuer berechnen und in abgeschlossener_bon eintragen");
	$writeTax = steuer_berechnen($bon_id, true, $mysql_bon_id);

	// Produkte in abgeschlossener_bon_produkte eintragen
	log_to_file("Produkte in abgeschlossener_bon_produkte eintragen");
	$sql = "select id, produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, DISPLAY, VARPRICE, 
					PRINTNAME, NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, stueck, has_childs, has_parent, parent_id, childPrint, aus_ls_nr, 
					beilagen_aenderung_plus, beilagen_aenderung_minus, benutzer_id 
				FROM offener_bon WHERE bon_id='" . $bon_id . "'";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= mysql_error() . "\n";
		log_to_file($zahlSqlErrorMsg);
		echo "SQL Fehler: " . mysql_error();
		# wenn hier ein exit kommt passiert kein rollback
		#exit(1);
	}

	$pattern = array("/'/", "/´/", '/"/');
	$replace = array("\'", "\`", '\"');

	$lieferscheinSource = false;
	log_to_file("INSERT INTO abgeschlossener_bon_produkte");
	while ($row_produkt = mysql_fetch_array($sql_produkte)) {
		$hasP = $row_produkt['has_parent'];
		if ($hasP > 0) $parentId = $row_produkt['has_parent'];
		else $parentId = 0;

		if ($row_produkt['parent_id'] > 0 && $row_produkt['has_childs'] == 1) {
			$isParentId = $row_produkt['parent_id'];
			$row_produkt["PRICESELL"] = 0;
		} else $isParentId = 0;

		if (isset($row_produkt['aus_ls_nr']) && $row_produkt['aus_ls_nr'] > 0) {
			$lieferscheinSource = $row_produkt['aus_ls_nr'];
		}

		list($einzel_brutto, $gesamt_brutto, $steuer_einzel, $steuer_gesamt) = berechne_bruttopreis($row_produkt["PRICESELL"], $row_produkt["tax_rate"], $row_produkt["stueck"]);

		$insQl = false;
		$insQl = mysql_query('INSERT INTO abgeschlossener_bon_produkte SET bon_id="' . $mysql_bon_id . '", 
													produkt_id="' . $row_produkt["produkt_id"] . '",
													REFERENCE="' . preg_replace($pattern, $replace, $row_produkt["REFERENCE"]) . '",
													CODE="' . $row_produkt["CODE"] . '",
													NAME="' . mysql_real_escape_string(preg_replace($pattern, $replace, $row_produkt["NAME"])) . '",
													PRICEBUY="' . $row_produkt["PRICEBUY"] . '",
													PRICESELL="' . $row_produkt["PRICESELL"] . '",
													PRICESELL_brutto="' . $einzel_brutto . '",
													PRICESELL_brutto_gesamt="' . $gesamt_brutto . '",
													tax="' . $steuer_einzel . '",
													tax_gesamt="' . $steuer_gesamt . '",
													CATEGORY="' . mysql_real_escape_string($row_produkt["CATEGORY"]) . '",
													TAXCAT="' . $row_produkt["TAXCAT"] . '",
													DISPLAY="' . mysql_real_escape_string($row_produkt["DISPLAY"]) . '",
													VARPRICE="' . $row_produkt["VARPRICE"] . '",
													PRINTNAME="' . mysql_real_escape_string(preg_replace($pattern, $replace, $row_produkt["PRINTNAME"])) . '",
													NEGATIVEPRICE="' . $row_produkt["NEGATIVEPRICE"] . '",
													PRODUKTORDER="' . $row_produkt["PRODUKTORDER"] . '",
													SICHTBAR="' . $row_produkt["SICHTBAR"] . '",
													stueck="' . $row_produkt["stueck"] . '",
													tax_rate="' . $row_produkt["tax_rate"] . '",
													has_childs="' . $row_produkt["has_childs"] . '",
													parent_id= "' . $parentId . '",
													childPrint="' . $row_produkt["childPrint"] . '",
													isparent_id="' . $isParentId . '",
													verkaeufer_id="' . $row_produkt["benutzer_id"] . '",
													beilagen_minus="' . mysql_real_escape_string($row_produkt["beilagen_aenderung_minus"]) . '",
													beilagen_plus="' . mysql_real_escape_string($row_produkt["beilagen_aenderung_plus"]) . '"  ');
		if (!$insQl) {
			$zahlSqlError = true;
			$zahlSqlErrorMsg .= mysql_error() . "\n";
			log_to_file($zahlSqlErrorMsg);
		}
	}


	# COMBI ARTIKEL !!!!!
	# Parents suchen und duchlaufen, updaten schaffen die Verbindung der childs zu den Parents nach DB id 				
	log_to_file("Combi Artikel. Parents suchen und duchlaufen, updaten schaffen die Verbindung der childs zu den Parents nach DB id");
	$searchParents = mysql_query("SELECT ID, bon_id, parent_id, isparent_id FROM abgeschlossener_bon_produkte WHERE has_childs = 1 AND bon_id = " . $mysql_bon_id . "");
	while ($searchParentRow = mysql_fetch_array($searchParents)) {
		$updateChilds = mysql_query("UPDATE abgeschlossener_bon_produkte SET parent_id = " . $searchParentRow['ID'] . " 
								WHERE parent_id = " . $searchParentRow['isparent_id'] . " AND bon_id = " . $mysql_bon_id . "  ");
		$updateParent = mysql_query("UPDATE abgeschlossener_bon_produkte SET isparent_id = " . $searchParentRow['ID'] . "
								WHERE ID = " . $searchParentRow['ID'] . " AND bon_id = " . $mysql_bon_id . "  ");

		if (!$updateChilds || !$updateParent) {
			$zahlSqlError = true;
			$zahlSqlErrorMsg .= mysql_error() . "\n";
			log_to_file($zahlSqlErrorMsg);
		}
	}

	// Zahlung abgeschlossener_bon_zahlung eintragen
	log_to_file("Zahlung abgeschlossener_bon_zahlung eintragen");
	$sql = "SELECT name from zahlungsart WHERE standard=true";  // Suche die Standard Zahlungsart heraus
	$sql_zahlungsart = mysql_query($sql);
	if (!$sql_zahlungsart) {
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= mysql_error() . "\n";
		log_to_file($zahlSqlErrorMsg);
		echo "SQL Fehler: " . mysql_error();
	}
	$default_zahlungsart = false;
	while ($row_zahlungsart = mysql_fetch_assoc($sql_zahlungsart)) {

		$default_zahlungsart = $row_zahlungsart['name'];
		log_to_file("Zahlungsart: " . $default_zahlungsart);
	}

	// Alle Zahlungsarten durchsehen (falls das wechselgeld nicht oder nicht komplett einegegeben wurde
	log_to_file("Alle Zahlungsarten durchsehen (falls das wechselgeld nicht oder nicht komplett einegegeben wurde");
	$i = 0;
	$gesamt_bezahlt = 0;
	$default_zahlungsart_value = 0;
	$zahlungsart_value_tatsaechlich = $zahlungsart_value;
	// gesamte bezahlarten durchgehen und summe bilden

	log_to_file("Zahlungsarten Anzahl: " . count($zahlungsart_name));
	foreach ($zahlungsart_name as $za_name) {

		$za_name = substr($za_name, 11);
		$za_value = $zahlungsart_value[$i];

		log_to_file("Default Zahlungsart: " . $default_zahlungsart);
		log_to_file("Zahlungsart Name: " . $za_name);
		log_to_file("Zahlungsart Value: " . $za_value);

		// Schau nach, ob das die default zahlungsart ist und speichere den Betrag in variable
		if ($za_name == $default_zahlungsart) {
			$default_zahlungsart_value = $za_value;
			$default_zahlungsart_index = $i;
		}
		$i++;
		$gesamt_bezahlt += $za_value;
	}

	# wenn express nach definierter Zahlart verwendet wurde, überschreiben wir hier die zahlart nach gesetzt

	// Berechne hier wie viel das Restgeld ist (wenn z.b. zu viel bezahlt wurde) - Retourgeld wird abgezogen)
	// bzw. wenn gar kein Bargeld oder zu wenig eingegeben wurde, dann wird hier der Rest berechnet
	$gesamt_bezahlt_ohne_standard = $gesamt_bezahlt - $default_zahlungsart_value;
	$standard_zahlart = $gesamt_summe - $gesamt_bezahlt_ohne_standard;
	$zahlungsart_value[$default_zahlungsart_index] = $standard_zahlart;

	log_to_file("default_zahlungsart_index: " . $default_zahlungsart_index);
	log_to_file("gesamt_bezahlt_ohne_standard: " . $gesamt_bezahlt_ohne_standard);
	log_to_file("standard_zahlart: " . $standard_zahlart);
	//log_to_file("zahlungsart_value: " . var_dump($zahlungsart_value));

	# Korrektur von Restwert Fragment !!!
	# gibt es ein Restwert fragment wird es hier korrigiert 
	if (abs($standard_zahlart) < 0.00999999 && abs($standard_zahlart) > 0.00000001) {
		# erkennen vom Restwert Fragment, wird dem höchsten Zahlungs Wert dazugerechnet
		$zahlungsIx = array_search(max($zahlungsart_value), $zahlungsart_value);
		$zahlungsart_value[$zahlungsIx] += abs($standard_zahlart);
		$zahlungsart_value_tatsaechlich[$zahlungsIx] += abs($standard_zahlart);
		#$gesamt_bezahlt+=abs($standard_zahlart);
		$zahlungsart_value[$default_zahlungsart_index] = 0;
	}


	$retourgeld = 0;
	$retourgeldIndicator = false;
	if ($gesamt_summe < $gesamt_bezahlt) {
		$retourgeld = $gesamt_bezahlt - $gesamt_summe;
	} else if ($gesamt_summe > $gesamt_bezahlt && $gesamt_bezahlt > 0 && $offenerBetrag > 0) {			#wenn ein offener betrag stehen bleibt aber zahlungen eingegeben wurden
		$zahlungsart_value_tatsaechlich[$default_zahlungsart_index] = $standard_zahlart;				# kommt im retourgeld dialog der warnhinweis
		$retourgeldIndicator = true;
	} else {
		// Es wurde gleich viel Geld eingegeben wie der Betrag ausmacht oder gar nichts eingegeben		
		$zahlungsart_value_tatsaechlich[$default_zahlungsart_index] = $standard_zahlart;
	}


	log_to_file("UPDATE abgeschlosserner_bon set retourgeld.");
	$updQl = mysql_query("UPDATE abgeschlossener_bon SET retourgeld=$retourgeld, auftragsschein_nr = '" . $lieferscheinSource . "' WHERE bon_id=$mysql_bon_id");
	if (!$updQl) {
		$zahlSqlError = true;
		$zahlSqlErrorMsg .= mysql_error() . "\n";
		log_to_file($zahlSqlErrorMsg);
	}

	$i = 0;
	$bar_erhalten = 0;
	$gutschein_erhalten = 0;
	$bankomat_zahlung = 0;
	$bank_zahlung = 0;
	$checkZaBank = false;

	$newRetourGeldContent = "";
	$zahlungsart_ladeoffen_returgeld = null;
	log_to_file("zahlungExpressZahlart: -->" . $zahlungExpressZahlart."<--");
	if ($zahlungExpressZahlart == true) {
		log_to_file("ExpressZahlart Bankomat");
		$getExpressZahlungsart = mysql_fetch_array(mysql_query("SELECT id, name  FROM zahlungsart WHERE express_zahlart = true LIMIT 1"));
		if ($getExpressZahlungsart['name'] != false) {
			log_to_file("INSERT INTO abgeschlossener_bon_zahlung: Bankomat");
			$zahlungsart_ladeoffen_returgeld = 'Name=Bankomat';
			$za_name = $getExpressZahlungsart['name'];
			$za_value = $gesamt_summe;
			$za_tatsaechlich = $gesamt_summe;
			$za_id = $getExpressZahlungsart['id'];

			$insQl = mysql_query("INSERT INTO abgeschlossener_bon_zahlung SET bon_id=$mysql_bon_id, Name='$za_name', zahlbetrag='$za_value', 
								zahlbetrag_tatsaechlich='$za_tatsaechlich'");
			if (!$insQl) {
				$zahlSqlError = true;
				$zahlSqlErrorMsg .= mysql_error() . "\n";
				log_to_file($zahlSqlErrorMsg);
			}

			$newRetourGeldContent .= "<div class='retourgeldDialogTxt' >" . $za_name . ": </div><div class='retourgeldDialogBetr'>" . number_format($za_tatsaechlich, 2, ",", ".") . "</div><div class='cclear'></div>";
		}
	} else {
		foreach ($zahlungsart_name as $za_name) {
			$za_name = substr($za_name, 11);
			log_to_file("za_value:" . $za_value);
			log_to_file("za_name:" . $za_name);
			if (is_numeric($zahlungsart_value[$i])) $za_value = number_format($zahlungsart_value[$i], 4, ".", "");
			else $za_value = $zahlungsart_value[$i];
			$za_tatsaechlich = $zahlungsart_value_tatsaechlich[$i];
			#$zaId=$zahlungsart_id[$i];
			$i++;
			log_to_file("za_value:" . $za_value);
			log_to_file("za_name:" . $za_name);
			//	if ($za_value!='') 			
			if ($za_value != 0) {
				$insQl = false;
				# setze es in jeder loop auf false, wenn insert erfolgt wird es wieder auf true gesetzt
				log_to_file("INSERT INTO abgeschlossener_bon_zahlung: " . $za_name);

				if ($zahlungsart_ladeoffen_returgeld != null)
					$zahlungsart_ladeoffen_returgeld .= ' OR ';

				$zahlungsart_ladeoffen_returgeld .= "Name='" . $za_name . "'";

				$insQl = mysql_query("INSERT INTO abgeschlossener_bon_zahlung SET bon_id=$mysql_bon_id, Name='$za_name', zahlbetrag='$za_value', 
							zahlbetrag_tatsaechlich='$za_tatsaechlich'");
				if (!$insQl) {
					$zahlSqlError = true;
					$zahlSqlErrorMsg .= mysql_error() . "\n";
					log_to_file($zahlSqlErrorMsg);
				}

				$newRetourGeldContent .= "<div class='retourgeldDialogTxt' >" . $za_name . ": </div><div class='retourgeldDialogBetr'>" . number_format($za_tatsaechlich, 2, ",", ".") . "</div><div class='cclear'></div>";
			} else {
				if ($zahlungsart_ladeoffen_returgeld != null)
					$zahlungsart_ladeoffen_returgeld .= ' OR ';

				$zahlungsart_ladeoffen_returgeld .= "Name='" . $za_name . "'";
			}
		}
	}
	/*
	if(defined('KASSENLADE_VORHER_OEFFNEN') && strtolower(KASSENLADE_VORHER_OEFFNEN) == 'ja' && get_ladeoeffnen_returgeldanzeige('lade_oeffnen',$zahlungsart_ladeoffen_returgeld) == true) 
	{
		//log_to_file("KASSENLADE_VORHER_OEFFNEN: ".strtolower(KASSENLADE_VORHER_OEFFNEN));
		echo '<script>
		$.ajax({
				type: "POST",
				url: "display/open_drawer.php",
				dataType : "html",
				async: false,
				success:function(html){	
					alert ("open");
				}
		});

		</script>';
		
	}
	*/
	$printrestguthaben = false;
	if ($gutscheinBetragAbbuchen != false && $gutscheinKartenNr != false) {
		log_to_file("Gutscheinabbuchung");
		if (is_array($gsArray) && count($gsArray) > 0) {
			log_to_file("Gutscheinabbuchung: ", count($gsArray));
			$updGutschError = false;
			$errorContent = "";
			for ($i = 0; $i < sizeof($gsArray); $i++) {

				$getGsId = mysql_fetch_array(mysql_query("SELECT gs_id, gutschein_nr FROM gutscheine WHERE gutschein_nr = '" . $gsArray[$i][0] . "'"));
				$gsId = $getGsId['gs_id'];
				$db_id = $getGsId['gutschein_nr'] . date('mdYhis', time());
				$updGutschMulti = mysql_query("UPDATE gutscheine SET betrag = betrag - " . $gsArray[$i][1] . " WHERE gs_id = '" . $gsId . "' ");
				$insGutschMulti = mysql_query("INSERT INTO gutschein_buchungen SET id = '" . $db_id . "', gs_id = " . $gsId . ", bon_id = " . $mysql_bon_id . ", 
												kassa_abschluss_id = " . $kassa_abschluss_id . ", verkaufer_id = " . $user . ", 
												rechnung_betrag = '" . $gsArray[$i][1] . "', betrag_geladen = 0, datum_buchung = NOW() ");


				if (!$updGutschMulti || !$insGutschMulti) {
					$zahlSqlError = true;
					$updGutschError = true;
					$errorContent .= " " . $gsArray[$i][0] . ",";
					log_to_file($zahlSqlErrorMsg);
				} else {
					require_once("ajax_funktionen_kp.php");
					printGutscheinBon($getGsId['gutschein_nr'], "restguthaben");
				}
			}
			if ($updGutschError != false) {

				$dialogContent = "<p>Beim Abbuchen vom Gutschein mit der/den Nr: " . $errorContent . " ist ein Fehler aufgetreten !</p>";
				log_to_file($dialogContent);
				$zahlSqlError = true;
				$zahlSqlErrorMsg .= mysql_error() . "\n";
				echo "<script>
								openGeneralDialog('gutscheinkarte_abbuchen_fehler', 'Fehler beim Abbuchen von der Gutscheinkarte', '" . $dialogContent . "', 'wrapper');			
						</script>";
			}
		} else {
			log_to_file("UPDATE UND INSERT Gutscheine");
			$getGsId = mysql_fetch_array(mysql_query("SELECT gs_id, gutschein_nr FROM gutscheine WHERE gutschein_nr = '" . $gutscheinKartenNr . "' "));
			$gsId = $getGsId['gs_id'];
			$db_id = $getGsId['gutschein_nr'] . date('mdYhis', time());
			$updGutsch = mysql_query("UPDATE gutscheine SET betrag = betrag - " . $gutscheinBetragAbbuchen . " WHERE gs_id = '" . $gsId . "' ");

			$insGutsch = mysql_query("INSERT INTO gutschein_buchungen SET id = '" . $db_id . "',  gs_id = " . $gsId . ", bon_id = " . $mysql_bon_id . ", 
												kassa_abschluss_id = " . $kassa_abschluss_id . ", verkaufer_id = " . $user . ", 
												rechnung_betrag = '" . $gutscheinBetragAbbuchen . "', betrag_geladen = 0, datum_buchung = NOW() ");



			if (!$updGutsch || !$insGutsch) {
				log_to_file("updgutschein oder insertgutschein Fehler aufgetreten.");
				$zahlSqlError = true;
				$zahlSqlErrorMsg .= mysql_error() . "\n";
				$updGutschError = true;
				$dialogContent = "<p>Beim Abuchen vom Gutschein mit der Nr: " . $gutscheinKartenNr . " ist ein Fehler aufgetreten !</p>";
				log_to_file($dialogContent);
				echo "<script>
								openGeneralDialog('gutscheinkarte_abbuchen_fehler', 'Fehler beim Abbuchen von der Gutscheinkarte', '" . $dialogContent . "', 'wrapper');			
						</script>";
			} else {
				$printrestguthaben = true;
				$updGutschError = false;
				//require_once("ajax_funktionen_kp.php");
				//log_to_file("printGutscheinBon");
				//printGutscheinBon($getGsId['gutschein_nr'], "restguthaben");
			}
		}
	}

	$lieferscheinNr = false;
	if (defined('LIEFERSCHEINDRUCK_BEI_RECHNUNG') && strtolower(LIEFERSCHEINDRUCK_BEI_RECHNUNG) == 'ja') {
		log_to_file("LIEFERSCHEINDRUCK_BEI_RECHNUNG");
		# lieferschein wird erstellt solange der offene bon existiert
		# in der lieferschein erstellen funktion NICHT gedruckt, das erfolgt hier weiter unten !!!!
		#if(isset($_SESSION['lieferschein_print_disable']) && $_SESSION['lieferschein_print_disable'] == $bon_id) { 
		if ($lieferscheinLink != false) {
			/* lieferschein wurde aufgerufen, wird jetzt nicht mehr gedruckt, wurde beim erstellen gedruckt. */
			if (isset($_SESSION['lieferschein_print_disable'])) unset($_SESSION['lieferschein_print_disable']);
		} else {
			#return wert (array) 0 -> print result, zb disabled, od Error msg,   1 -> lieferschein Nr  
			#   liefersch/auftrag nr ->  $lieferscheinBeiRechnung[1]
			$lieferscheinBeiRechnung = lieferscheinErstellen(false, false, 'rechnung_erstellen', $auftragsDatePrint, $auftragsPrintDisabled);
			$lieferscheinNr = $lieferscheinBeiRechnung[1];
			$updAbgeschlBon = mysql_query("UPDATE abgeschlossener_bon SET auftragsschein_nr = " . $lieferscheinNr . " WHERE bon_id = " . $mysql_bon_id . " ");
			if (!$updAbgeschlBon) {
				$zahlSqlError = true;
				$zahlSqlErrorMsg .= mysql_error() . "\n";
				log_to_file($zahlSqlErrorMsg);
			}

			#run_mysql_query($updAbgeschlBon, "", "Fehler beim schreiben Auftragsschein Nr - Tabelle: abgeschlossener_bon");

		}
	}

	if (defined('LAENDERKENNUNG_DE') && LAENDERKENNUNG_DE != 'A') {
		log_to_file("LAENDERKENNUNG_DE ist ungleich A");
	} else {
		log_to_file("LAENDERKENNUNG_DE");
		log_to_file("dep wird in die Tabelle geschrieben.");
		$dep_table_write_result = dep_table_schreiben($mysql_bon_id, false);			# zweites parm = callFrom

		if ($dep_table_write_result[0] == false) {
			log_to_file("*2");
			if ($dep_table_write_result[2] == 'sig') {
				$eC = "Signatur Error";
				$dialogHeader = "Bon signieren Fehler";

				if (defined('SIGNATUR_ERROR_BON_ROLLBACK') && strtolower(SIGNATUR_ERROR_BON_ROLLBACK) == 'ja') {
					$zahlSqlError = true;

					$dialogContent = "Beim signieren ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $mysql_bon_id . "<br /><p class=\'redbold\'>Zahlung abgebrochen !</p>";
					$zahlSqlErrorMsg .= $dialogContent . " rollback on sig Error gesetzt\n";
					log_to_file($dialogContent);
				} else {
					$dialogContent = "Beim signieren ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $mysql_bon_id . "<br />" . $dep_table_write_result[1] . "";
					log_to_file($dialogContent);
				}
			} else if ($dep_table_write_result[2] == 'dep') {

				$eC = "DEP Error";
				$dialogHeader = "Daten Erfassungsprotokoll Fehler";
				#$zahlSqlError = true;
				$dialogContent = "Beim Schreiben in die Datenbank der Daten Erfassungs Protokoll Daten ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $mysql_bon_id . "<br />" . $dep_table_write_result[1] . "";
				log_to_file($dialogContent);
			} else if ($dep_table_write_result[2] == 'dep_sig') {

				#$zahlSqlError = true;
				$eC = "DEP und Signatur Error";
				$dialogHeader = "Daten Erfassungsprotokoll und Signatur Fehler";
				$dialogContent = "Beim schreiben vom Daten Erfassungs Protokoll und signieren des Bons ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $mysql_bon_id . "<br />" . $dep_table_write_result[1] . "";
				log_to_file($dialogContent);
			} else {

				$zahlSqlError = true;
				$dialogHeader = "Signatur ERROR";
				$dialogContent = "<p>" . $dep_table_write_result[0] . " / " . $dep_table_write_result[1] . " / " . $dep_table_write_result[2];
				log_to_file($dialogContent);
			}

			if (defined('DISPLAY_DEP_SIGN_ERROR') && strtolower(DISPLAY_DEP_SIGN_ERROR) == 'ja') {
				echo "<script>
								openGeneralDialog('dep_or_signature_Error', '" . $dialogHeader . "', '" . $dialogContent . "', 'wrapper');			
						</script>";
			}
		} else if ($dep_table_write_result[0] == true && $dep_table_write_result[3] == 'unsig') {

			$zahlSqlError = true;
			$dialogHeader = 'Sammelbeleg erstellen';
			$dialogContent = '<p>Der letzte Bon wurde mit Signatur Einheit ausgefallen erstellt.</p><p>Zahlung wird abgebrochen, erstellen Sie einen Sammelbeleg und führen Sie danach den Zahlungsabschluss erneut aus.</p>';
			log_to_file($dialogContent);
			echo "<script>
								openGeneralDialog('dep_or_signature_Error', '" . $dialogHeader . "', '" . $dialogContent . "', 'wrapper');			
						</script>";
		}
	}

	$delOffenerBon = false;
	#if($zahlSqlError==true || (defined('SIGNATUR_ERROR_BON_ROLLBACK') && strtolower(SIGNATUR_ERROR_BON_ROLLBACK) == 'ja' && $dep_table_write_result[0] == false)){
	if ($zahlSqlError == true) {
		# bei dep fehler oder sig fehler und SIGNATUR_ERROR_BON_ROLLBACK ist auf ja gesetzt wird zahlSqlError Variable gesetzt
		#echo "Fehler aufgetretten, Zahlung abgebrochen";
		echo "<script> $('#error_message').html('Zahlung abgebrochen !!!');	</script>";
		mysql_query("ROLLBACK");
		mysql_query("ALTER TABLE abgeschlossener_bon AUTO_INCREMENT = 1");
		mysql_query("ALTER TABLE dep AUTO_INCREMENT = 1");
		log_to_file("abgeschlosssener Bon erstellt Rollback, Bon Id: " . $mysql_bon_id);
		writeSitposLog(basename(__FILE__) . " " . __LINE__, "abgeschlosssener Bon erstellt Rollback, Bon Id: " . $mysql_bon_id . "\n" . $zahlSqlErrorMsg);
	} else {
		mysql_query("COMMIT");
		$delOffenerBon = true;
		echo "<script> $('#error_message').html('Bon: " . $mysql_bon_id . ", Zahlung abgeschlossen.');	</script>";
		log_to_file("abgeschlosssener Bon erstellt Commit, Bon Id: " . $mysql_bon_id);
		writeSitposLog(basename(__FILE__) . " " . __LINE__, "abgeschlosssener Bon erstellt Commit, Bon Id: " . $mysql_bon_id . ". " . mysql_error());
	}
	log_to_file("set autocommit=1");
	mysql_query("set autocommit=1");
	log_to_file("ende set autocommit=1");
	# checken der Lizenzierung 
	# return value = array (opendialog true/false, dialog Text)

	# wird derzeit nicht verwendet !!!!!! ->>>>>>>>>>>>>>>   siehe weiter unter 
	#	$checkLic=checkLicenseViolations();

	# wird in global_funktionen.php 1756 ausgeführt

	# ergebnis in nach Retourgeld somit über dem Retourgeld Dialog angezeigt
	#	writeLog(basename( __FILE__)." ". __LINE__ , "Lieferschein print disabled");

	if ($lieferscheinNr > 0 && $auftragsPrintDisabled == false) {
		log_to_file("lieferschein_ausdrucken_pdf");
		$lsPrintResult = lieferschein_ausdrucken_pdf($lieferscheinBeiRechnung[2], false, false, 'printenabled', 'rechnung_erstellen');
	}

	if (strtolower(AUSDRUCK_BEREITSTELLUNGSBON_BEZAHLEN_PDF) == 'ja' && strtolower(AUSDRUCK_BEREITSTELLUNGSBON_PDF) == 'ja'  && strtolower(GASTRO_VERSION) == 'ja') {
		require_once("include/ajax_functions_gastro.php");
		log_to_file("printGastroSupply");
		$printSupplay = printGastroSupply("paymentFinish", $async=true);
	}
	/*
	else
	{
		require_once("include/ajax_functions_gastro.php");
		log_to_file("printGastroSupply");
		$printSupplay = printGastroSupply("paymentFinish", $async=true);
	}
*/
	if (defined('AUSDRUCK_ABHOLSCHEIN_GASTRO') && strtolower(AUSDRUCK_ABHOLSCHEIN_GASTRO) == 'ja' && strtolower(GASTRO_VERSION) == 'ja') {
		require_once("global_functions_gastro.php");
		log_to_file("printGastroAbholschein");
		$printGastroAbholschein = printGastroAbholschein($mysql_bon_id, "paymentFinish");
	}

	$sourceParam = false;
	if ($checkZaBank == true) $sourceParam = "PrintBankdata";

	// Drucke jetzt den Bon aus		
	log_to_file("AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN:" . AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN);
	if (defined('AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN') && strtolower(AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN) == 'ja') {
		log_to_file("disablePrint");
		$disablePrint = true;
	} else $disablePrint = false;

	if ($printrestguthaben)
	{
		echo("restguthaben<br>");
		echo $getGsId['gutschein_nr']."<br>";
		require_once("ajax_funktionen_kp.php");
		log_to_file("printGutscheinBon");
		printGutscheinBon($getGsId['gutschein_nr'], "restguthaben");
		echo "ende printGutscheinBon<br>";
	}

	log_to_file("RETOURGELD_POPUP_ANZEIGEN:" . RETOURGELD_POPUP_ANZEIGEN);
	log_to_file("zahlungsart_ladeoffen_returgeld: " . $zahlungsart_ladeoffen_returgeld);
	if (strtolower(RETOURGELD_POPUP_ANZEIGEN) == 'ja' && get_ladeoeffnen_returgeldanzeige('returgeld_anzeige', $zahlungsart_ladeoffen_returgeld) == true) {
		log_to_file("retourgeldIndicator: " . $retourgeldIndicator);

		if ($retourgeldIndicator == true) {
			$displayRetourGeld = "<span style='color:red; font-weight:bold; '>-Betrag</span>";
		} else $displayRetourGeld = number_format($retourgeld, 2, ",", ".");

		$newRetourGeldContent .= "<div class='retourgeldDialogTxt' style='margin-top:8px;' >Retourgeld:</div><div class='retourgeldDialogBetr' style='margin-top:8px;' >" . $displayRetourGeld . "</div><div class='cclear'></div>";


		echo '<script>
						// Sleep funktion ist notwendig, da sonst der Druck erst nach dem Popup Fenster beginnt!! 
							setTimeout(function(){ 					
							openGeneralDialog("retourgeldDialog", "Retourgeld", "' . $newRetourGeldContent . '", "wrapper")
					
						}, 500); 						
						</script>';
	}
	log_to_file("AUSDRUCK_RECHNUNGSBON_PDF: " . AUSDRUCK_RECHNUNGSBON_PDF);
	if (defined('AUSDRUCK_RECHNUNGSBON_PDF') && strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja' && $printTargetA4 == false && $disablePrint == false) {
		log_to_file("bon_ausdrucken_pdf");
		bon_ausdrucken_pdf($mysql_bon_id, $sourceParam, false, false, false, false);
	} else if ($printTargetA4 == true && $disablePrint == false) {
		log_to_file("bon_ausdrucken_a4_pdf");
		$a4PrintResult = bon_ausdrucken_a4_pdf($mysql_bon_id, false, 'nonAjax', $lieferscheinNr);
		if ($a4PrintResult[1] == 'browserPrint') {
			echo "<printToBrowser>" . $a4PrintResult[2] . "</printToBrowser>";
		}
	} else if ($disablePrint != true) {
		log_to_file("bon_ausdrucken");
		bon_ausdrucken(false, $mysql_bon_id, $sourceParam, $lieferscheinNr);
		# disable bon print wird für html druck in kassieren.php ca zeile 1050 gesteuert

	}
	//log_to_file("delOffenerBon:" . delOffenerBon);
	if ($delOffenerBon == true) {
		#del offener bon nach hinten gestellt, Bereistellungsdruck, auftragsscheindruck, .. lesen aus offener_bon
		log_to_file("del offener bon nach hinten gestellt, Bereistellungsdruck, auftragsscheindruck, .. lesen aus offener_bon");
		if ($addTxtId != false) {
			$delAddTxt = mysql_query("DELETE FROM bon_add_text WHERE id = " . $addTxtId . "");
		} else $delAddTxt = true;
		if ($lieferscheinLink == true && $lieferscheinLink > 0) {
			$delLiefersch = mysql_query("UPDATE lieferschein_referenz SET geloescht = 1 WHERE lieferschein_id = " . $lieferscheinLink . " ");
		} else $delLiefersch = true;
		# falls es keinen Ls gibt, gibt es keinen link, würde false ergeben und einen Error erzeugen.

		$delOffenBon = mysql_query("DELETE FROM offener_bon WHERE bon_id=$bon_id");

		if (!$delOffenBon || !$delLiefersch || !$delAddTxt) {
			$xMsg = " offener Bon";
			if (!$delLiefersch && $delOffenBon) $xMsg = " Lieferschein : " . $lieferscheinLink;
			else if ($delLiefersch && !$delOffenBon) $xMsg = " offener Bon: " . $bon_id;
			else if (!$delLiefersch && !$delOffenBon) $xMsg = " offener Bon: " . $bon_id . " und Ls: " . $lieferscheinLink;
			echo "<script> $('#error_message').html('Löschen" . $xMsg . " Fehler.');	</script>";
		}
	}



	log_to_file("<-------- ENDE zahlung_abgeschlossen");
	/*if (defined("FILIALSYSTEM_SYNCHRONISATION_BON") && FILIALSYSTEM_SYNCHRONISATION_BON == "ja") {
			$origin = "abg_bon";
			include 'synchronize/sync_data.php';
		}*/
}

function get_ladeoeffnen_bonid($field, $bonid)
{
	$retval = false;
	$sql = "
		select 
			Name 
		from 
			abgeschlossener_bon_zahlung 
		WHERE 
			abgeschlossener_bon_zahlung.bon_id ='" . $bonid . "'";

	log_to_file("Abfrage zahlungsart über bonid: ".$sql);
	$sql_retval = mysql_query($sql);
	if (!$sql_retval) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	$str_db_fields = null;
	while ($row_zahlungsart = mysql_fetch_assoc($sql_retval)) {
		if ($str_db_fields != null)
			$str_db_fields .= ' OR ';
		$str_db_fields .= "Name='" . $row_zahlungsart['Name'] . "'";
	}

	log_to_file("db_fields: ".$str_db_fields);

	return get_ladeoeffnen_returgeldanzeige($field, $str_db_fields);
}

function get_ladeoeffnen_returgeldanzeige($field, $zahlungsart_ladeoffen_returgeld)
{
	$retval = false;
	$sql = "select $field from zahlungsart WHERE " . $zahlungsart_ladeoffen_returgeld;
	log_to_file("Abfrage zahlungsart: " . $sql);
	$sql_retval = mysql_query($sql);
	if (!$sql_retval) {
		log_to_file("SQL Fehler: " . mysql_error());
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	while ($row_zahlungsart = mysql_fetch_assoc($sql_retval)) {

		$default_zahlungsart = $row_zahlungsart[$field];
		log_to_file("Zahlungsart ".$field.": ".$default_zahlungsart);
		if ($default_zahlungsart == true)
			$retval = true;
	}
	return $retval;
}
function ein_auszahlung_anzeigen($bildschirm = true, $bon_id = false)
{
	//Wenn bon_id nicht übergeben wurde, dann ist es ein Ajax Call uns steht in $_REQUEST
	if ($bon_id == false) {
		$bon_id = ($_REQUEST['id']);
	}

	kopfzeile_ausdrucken();

	$sql = "SELECT id, kassa_abschluss_id, kassa_id, verkaufer_id, gesamt_betrag, enthalt_steuer_betrag, zahlung_erfolgt_datum, typ, bemerkung 
				FROM ein_aus_zahlungen WHERE id='" . $bon_id . "'";

	$sql_ea = mysql_query($sql);
	if (!$sql_ea) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	$ustZeile = "";
	while ($row_ea = mysql_fetch_assoc($sql_ea)) {
		$datetime = $row_ea["zahlung_erfolgt_datum"];
		$typ = $row_ea["typ"];
		$bemerkung = $row_ea["bemerkung"];

		$gesamt_betrag = $row_ea["gesamt_betrag"];
		if ($typ == 'ein') $text = "Einzahlung";
		else {
			$text = "Auszahlung";
		}
		$gesamt_betrag = number_format($gesamt_betrag, 2, ",", ".");

		$dDate = strtotime($datetime);
		$datetime = date('j.n.Y H:i:s', $dDate);
		$displayTax = false;
		if ($row_ea["enthalt_steuer_betrag"] != 0) {
			$displayTax = "<div style='position:relative; width:60%;' class='floatL'>Steuer Betrag enthalten</div>
							<div style='position:relative; width:40%; text-align:right;' class='floatL'>
							" . number_format($row_ea["enthalt_steuer_betrag"], 2, ",", ".") . "</div><div class='cclear'></div>";
			#$displayTax="Enthaltene Steuer ".number_format($row_ea["enthalt_steuer_betrag"], 2, ",", ".")."<br />";
		}

		echo "EIN- AUSZAHLUNG Nr: " . $bon_id . "<br />";
		echo "<br />";
		#echo "Datum: $datetime <br />";
		echo "<div style='position:relative; width:75%;' class='floatL'>Datum: " . $datetime . "</div>
					<div style='position:relative; width:25%; text-align:right;' class='floatL'>EUR</div><div class='cclear'></div>";
		//echo "----------------------------------------\n";
		echo "<hr />";
		echo "<div style='position:relative; width:60%;' class='floatL'>" . $text . "</div>
				<div style='position:relative; width:40%; text-align:right;' class='floatL'>" . $gesamt_betrag . "</div><div class='cclear'></div>";
		echo $displayTax;
		echo "$bemerkung <br />";
		echo "<hr />";
		//echo "----------------------------------------\n";
	}
	if ($bildschirm == false) echo "<script> document.getElementById('bonFusszeile').display='block'; </script>";
	fusszeile_ausdrucken();

	//if ($bildschirm) echo "</pre>";
}

function ein_auszahlung_drucken_pdf($bon_id = false, $bonHeight = false, $ist_rechnungsdrucker = true)
{

	if (isset($_POST['requestId']) && $_POST['requestId'] != "") $requestId = $_POST['requestId'];
	else $requestId = "";
	if (isset($_POST['requestFunktion']) && $_POST['requestFunktion'] != "") $requestFunktion = $_POST['requestFunktion'];
	else $requestFunktion = "";

	if ($bonHeight == false) $bonHeight = AUSDRUCK_PDF_GESAMTE_HOEHE;

	require_once('include/fpdf.php');

	if ($bon_id == false) {
		$bon_id = $requestId;
	}
	if (isset($_POST['ist_rechnungsdrucker']) && $_POST['ist_rechnungsdrucker'] != "") $ist_rechnungsdrucker = $_POST['ist_rechnungsdrucker'];
	if ($ist_rechnungsdrucker){
		$where = "LOWER(ist_rechnungsdrucker) = 'ja'";
	}else{
		$where = "LOWER(ist_a4) = 'ja'";
	}
	$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, druckbreite  FROM drucker WHERE $where "));
	if ($printer['druckbreite'] == true && $printer['druckbreite'] > 35) $bonWidth = $printer['druckbreite'];
	else $bonWidth = preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);

	#$bonWidth=115;

	$drucker = $printer[0];

	$margin = $printer[1];
	$margins = explode(",", $margin);

	if (isset($margins[2])) $marginLR = preg_replace('/\D/', '', $margins[2]);
	else $marginLR = 0;
	if (isset($margins[1])) $marginBottom = preg_replace('/\D/', '', $margins[1]);
	else $marginBottom = 0;
	if (isset($margins[0])) $marginTop = preg_replace('/\D/', '', $margins[0]);
	else $marginTop = 0;

	$pdf = new FPDF('P', 'mm', array($bonWidth, $bonHeight));
	$pdf->SetMargins($marginLR, $marginTop, 0);
	$pdf->AddPage();

	$fontConfig = SCHRIFT_AUSDRUCK_PDF;


	if (
		strpos(strtolower($fontConfig), 'arial') !== false  || strpos(strtolower($fontConfig), 'helvetica') !== false ||
		strpos(strtolower($fontConfig), 'sans serif') !== false
	) {
		$pdfFont = "Arial";
		$z = "Arial";
	} else if (
		strpos(strtolower($fontConfig), 'times') !== false  || strpos(strtolower($fontConfig), 'roman') !== false ||
		(strpos(strtolower($fontConfig), 'serif') !== false &&  strpos(strtolower($fontConfig), 'sans') == false)
	) {
		$pdfFont = "Times";
		$z = "Times";
	} else if (strpos(strtolower($fontConfig), 'courier') !== false) {
		$pdfFont = "Courier";
		$z = "Courir";
	} else {
		$pdfFont = "Arial";
		$z = "Default";
	}

	preg_match('/\d+px | \d+pt/', $fontConfig, $m);
	preg_match('/\d+/', $m[0], $match);
	$pdfFontSize = $match[0];				#  stimmt nicht wirklich, fpdf verwendet hier pt und nciht px, pt ist auf inch bezogen, px auf sreen dott size.

	$lineHeight = $pdfFontSize / 2.5;



	$pdf->SetFont($pdfFont, '', $pdfFontSize);
	#	$pdf->Cell(0, 6, $z." / ".$fontConfig." -- ".$pdfFontSize, 'B', 1, 'C');


	$headArray = kopfzeile_ausdrucken('', 'printPdf');
	for ($i = 0; $i < sizeof($headArray); $i++) {
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($headArray[$i])), 0, 1, 'C');
	}
	$pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Fa kopf

	/*	$sql_ea = mysql_query("select ein_aus_zahlungen.id, kassa_abschluss_id, kassa_id, verkaufer_id, gesamt_betrag, zahlung_erfolgt_datum, 
								taxrate, taxes.NAME AS uSt, typ, bemerkung 
							FROM ein_aus_zahlungen 
							LEFT JOIN taxes ON ein_aus_zahlungen.taxrate = taxes.RATE
							WHERE ein_aus_zahlungen.id='".$bon_id."'");
			*/
	$sql_ea = mysql_query("SELECT id, kassa_abschluss_id, kassa_id, verkaufer_id, gesamt_betrag, zahlung_erfolgt_datum,
								enthalt_steuer_betrag, typ, bemerkung
								FROM ein_aus_zahlungen WHERE id='" . $bon_id . "'");


	if (!$sql_ea) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Ausdruck Ein Auszahlung: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	while ($row_ea = mysql_fetch_assoc($sql_ea)) {
		$datetime = $row_ea["zahlung_erfolgt_datum"];
		$typ = $row_ea["typ"];
		$bemerkung = $row_ea["bemerkung"];

		$gesamt_betrag = $row_ea["gesamt_betrag"];
		if ($typ == 'ein') $text = "Einzahlung";
		else {
			$text = "Auszahlung";
		}
		$gesamt_betrag = number_format($gesamt_betrag, 2, ",", ".");

		$pdf->Cell(0, 1, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "EIN- AUSZAHLUNG Nr: " . $bon_id, 0, 1, 'L');
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$dDate = strtotime($datetime);
		$datetime = date('j.n.Y H:i:s', $dDate);

		// Änderung vom 30.09.2018 margin wird nicht berücksichtigt
		#$pdf->Cell(0, $lineHeight,  "Datum: ".$datetime , 0, 1, 'L');
		$pdf->Cell(($bonWidth - $marginLR) * .75, $lineHeight, "Datum: " . $datetime, 0, 0, 'L');
		$pdf->Cell(($bonWidth - $marginLR) * .22, $lineHeight, "EUR", 0, 1, 'R');
		$pdf->Cell(0, .5, "", "B", 1, 'C');

		$pdf->Cell(0, 1, "", 0, 1, 'C');
		#$pdf->Cell(0, $lineHeight, $text." EUR ". $gesamt_betrag, 0, 1, 'L');
		$pdf->Cell(($bonWidth - $marginLR) * .6, $lineHeight, $text, 0, 0, 'L');
		$pdf->Cell(($bonWidth - $marginLR) * .2, $lineHeight, $gesamt_betrag, 0, 1, 'R');
		if ($row_ea["enthalt_steuer_betrag"] != 0) {
			$pdf->Cell(($bonWidth - $marginLR) * .6, $lineHeight, "Steuer Betrag enthalten", 0, 0, 'L');
			#$bonWidth
			$pdf->Cell(($bonWidth - $marginLR) * .2, $lineHeight, number_format($row_ea["enthalt_steuer_betrag"], 2, ",", "."), 0, 1, 'R');
		}

		#if($row_ea['taxrate'] != 0.0) $pdf->Cell(0, $lineHeight, $row_ea['uSt'], 0, 1, 'L');
		$pdf->MultiCell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', $bemerkung), 0, 'L', 0);
		$pdf->Cell(0, 1, "", "B", 1, 'C');
		// Ende Änderung

		/*
					#$pdf->Cell(0, $lineHeight,  "Datum: ".$datetime , 0, 1, 'L');
			$pdf->Cell($bonWidth*.75, $lineHeight, "Datum: ".$datetime , 0, 0, 'L');
			$pdf->Cell($bonWidth*.25, $lineHeight, "EUR" , 0, 1, 'R');
			$pdf->Cell(0, .5, "", "B", 1, 'C');
			
			$pdf->Cell(0, 1, "", 0, 1, 'C');
							#$pdf->Cell(0, $lineHeight, $text." EUR ". $gesamt_betrag, 0, 1, 'L');
			$pdf->Cell($bonWidth*.6, $lineHeight, $text, 0, 0, 'L');
			$pdf->Cell($bonWidth*.4, $lineHeight, $gesamt_betrag, 0, 1, 'R');
			if($row_ea["enthalt_steuer_betrag"] != 0){
				$pdf->Cell($bonWidth*.6, $lineHeight, "Steuer Betrag enthalten", 0, 0, 'L');
				#$bonWidth
				$pdf->Cell($bonWidth*.4, $lineHeight, number_format($row_ea["enthalt_steuer_betrag"], 2, ",", "."), 0, 1, 'R');
			}
				# gibts nicht mehr
				#if($row_ea['taxrate'] != 0.0) $pdf->Cell(0, $lineHeight, $row_ea['uSt'], 0, 1, 'L');
			$pdf->MultiCell( 0, $lineHeight, iconv('UTF-8', 'windows-1252', $bemerkung), 0, 'L', 0);
			$pdf->Cell(0, 1, "", "B", 1, 'C');
			*/
	}

	$pdf->Cell(0, $lineHeight * 3, "", 0, 1, 'C');

	$fotterSumArray = fusszeile_ausdrucken('', 'printPdf');

	$fotterArray = $fotterSumArray[0];

	for ($i = 0; $i < sizeof($fotterArray); $i++) {
		if ($fotterArray[$i] != "") $pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($fotterArray[$i])), 0, 1, 'C');
	}

	# margin bottom Cell
	if ($marginBottom > 0) {
		$pdf->SetDrawColor(150);
		$pdf->Cell(($bonWidth + $marginLR) / 2, $marginBottom, "", 0, 0, 'R');
		$pdf->Cell(5, $marginBottom, "", "B", 1, 'C');
	}
	if ($pdf->PageNo() > 1) {
		ein_auszahlung_drucken_pdf($bon_id, $bonHeight * $pdf->PageNo());
		return false;
	}

	$outputTarget = __DIR__ . "\docs\sIT_einausZahlung_" . $bon_id . "_" . date('d_m_H_i') . ".pdf";
	$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";


	$writeFile = $pdf->Output($outputTarget, "F");

	$error_code = seiteDrucken($drucker, $outputTarget, "einAusZahlung");
	#exec($command, $output, $error_code);



}


function bon_nachdrucken()
{
	# wird das noch verendet ?
	if (isset($_POST['source']) && $_POST['source'] == 'bonReprint') {
		$lastClosedBon = mysql_fetch_array(mysql_query("SELECT MAX(bon_id) FROM abgeschlossener_bon"));
		if (strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja') {
			bon_ausdrucken_pdf($lastClosedBon[0], 200, 'bonReprint', false, false);
			$pdfPrint = true;
			$bonIdHtmlPrint = false;
		} else {
			#	$bonContent=bon_ausdrucken(false, $lastClosedBon[0], false);
			$pdfPrint = false;
			$bonIdHtmlPrint = $lastClosedBon[0];
		}
	}

	$reponseArray = array("pdfPrint" => $pdfPrint, "reprintBonId" => $lastClosedBon[0], "printHtmlContent" => '<p></p>');
	echo json_encode($reponseArray);
}

function frei_bon_ausdrucken($bildschirm = true, $bon_id = false, $source = false)
{
	kopfzeile_ausdrucken('');



	$sql_produkte = mysql_query("SELECT kunden_id, verkaufer_id, gesamt_summe, retourgeld, bon_erstellt_datum, storno_datum, 
									kunden_id, gastro_tisch_id, bon_add_text.bon_text AS zusatzTxt
								FROM abgeschlossener_bon_frei 
								LEFT JOIN bon_add_text ON abgeschlbonfrei_id = abgeschlossener_bon_frei.bon_id
								WHERE abgeschlossener_bon_frei.bon_id = '" . $bon_id . "'");
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	$bonZusatzTxt = "";
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		$invoiceSumRaw = $row_produkt["gesamt_summe"];
		$gesamtsumme_brutto = number_format(0, 2, ",", ".");
		$datetime = $row_produkt["bon_erstellt_datum"];
		$stornoDatetime = $row_produkt["storno_datum"];
		$retourgeld = $row_produkt["retourgeld"];
		$kundenId = $row_produkt["kunden_id"];
		$verkauferId = $row_produkt["verkaufer_id"];
		$gastroTischId = $row_produkt["gastro_tisch_id"];
		$bonZusatzTxt = $row_produkt["zusatzTxt"];
		//echo "Summe: $gesamtsumme_brutto Zeit: $datetime";
	}

	if ($kundenId > 0) {

		echo "<div class='bonAusdruckCustomer'>";
		$kundenDetails = mysql_fetch_assoc(mysql_query("SELECT * FROM kunden WHERE id=$kundenId "));
		if ($kundenDetails['Firma'] != '') echo "<p>" . $kundenDetails['Firma'] . "</p>";

		if (strlen($kundenDetails['anrede']) > 0) $cAnr = $kundenDetails['anrede'] . " ";
		else $cAnr = "";
		if (strlen($kundenDetails['titel']) > 0) $cTitel = $kundenDetails['titel'] . " ";
		else $cTitel = "";

		if (strlen($kundenDetails['vorname']) > 0 || strlen($kundenDetails['nachname']) > 0) {
			if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) > 0) $printN = $kundenDetails['vorname'] . " " . $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) == 0 && strlen($kundenDetails['nachname']) > 0) $printN =  $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) == 0) $printN =  $kundenDetails['vornname'];

			echo "<p>" . $cAnr . $cTitel . $printN . "</p>";
		}

		if ($kundenDetails['strasse1'] != '') echo "<p>" . $kundenDetails['strasse1'] . "</p>";
		if ($kundenDetails['strasse2'] != '') echo "<p>" . $kundenDetails['strasse2'] . "</p>";
		if ($kundenDetails['plz'] != '') echo "<p>" . $kundenDetails['plz'] . " ";
		if ($kundenDetails['Ort'] != '') echo $kundenDetails['Ort'] . "</p>";
		echo "<hr  class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' />";
		echo "</div>";
	}
	if (strlen(trim($bonZusatzTxt)) > 0) {
		$bonZusatzTxt = preg_replace('/\\n/', '<br />', $bonZusatzTxt);
		echo "<div class='bonAusdruckCustomer'>" . $bonZusatzTxt . "	</div>
					<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'><hr /></div>";
	}

	echo "Beleg freie Konsumation: " . $bon_id . "<br />";
	echo "<br />";
	if (defined("GASTRO_TISCHNAME_AUF_BON_DRUCKEN") && strtolower(GASTRO_VERSION) == 'ja' &&  strtolower(GASTRO_TISCHNAME_AUF_BON_DRUCKEN) == 'ja') {
		$tabQl = mysql_fetch_array(mysql_query("SELECT tischName FROM tische WHERE id = $gastroTischId "));
		if ($tabQl == true) $tableName = $tabQl[0];
		if (preg_match('/tisch/i', $tabQl[0])) echo $tabQl[0] . "<br />";
		else  echo "<p class='bonPrintExtra'>Tisch: " . $tabQl[0] . "</p>";
	}
	if (defined("VERKAEUFER_AUF_BON_DRUCKEN") && strtolower(VERKAEUFER_AUF_BON_DRUCKEN) == 'ja') {
		$userQl = mysql_fetch_array(mysql_query("SELECT name FROM benutzer WHERE id = $verkauferId "));
		if ($userQl == true) echo "<p class='bonPrintExtra'>" . AUSDRUCK_VERKAUFER_AUF_BON_TEXT . " " . $userQl[0] . "</p>";
	}
	echo "<div class='bonPrintDate' >Datum: $datetime</div><div class='bonPrintWaehrung'>EUR</div><div class='cclear'></div>";
	echo '<div class="ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite">';
	echo "<hr />";
	echo '</div>';

	// Produkte Ausdrucken
	$sql_produkte = mysql_query("select produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, tax_rate, DISPLAY, VARPRICE, PRINTNAME, NEGATIVEPRICE, 
										PRODUKTORDER, SICHTBAR, stueck 
										FROM abgeschlossener_bon_produkte_frei WHERE bon_id='" . $bon_id . "'");
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}

	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		$einzel_preis = $row_produkt["PRICESELL"];
		$einzel_preis = $einzel_preis * (1 + $row_produkt["tax_rate"]);
		$summe = $einzel_preis * $row_produkt["stueck"];
		$einzel_preis = number_format($einzel_preis, 2, ",", ".");
		$stueck = $row_produkt["stueck"];
		// Checke ob Stueck nachkomma hat oder nicht wenn ja, dann 2 Nachkommastellen ansonsten keine
		if ((int) $stueck == $stueck) {
			$stueck_anzeige = number_format($stueck, 0, "", ".");
		} else $stueck_anzeige = number_format($stueck, 2, ",", ".");

		$summe = number_format($summe, 2, ",", ".");
		$printname = $row_produkt["PRINTNAME"];
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
		echo "<div class='ausdruck_bon_stk'> " . $stueck_anzeige . "</div>";
		if ((AUSDRUCK_BON_ZWEIZEILIG > 0) && (strlen($printname) > AUSDRUCK_BON_ZWEIZEILIG)) {
			echo "<div class='ausdruck_bon_name_zweizeilig'> " . $printname . "</div> ";
			echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'></div>";
		} else {
			echo "<div class='ausdruck_bon_name'> " . $printname . "</div> ";
		}


		echo "<div class='ausdruck_bon_summe'>" . $summe . "</div><div class='ausdruck_bon_einzelpreis'>" . $einzel_preis . "</div>  <br />";
		echo "</div>";
	}

	// echo "Rechnung Summe $gesamtsumme_brutto";
	// =============================================================
	// Steuer ausdrucken
	echo '<div class="ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite">';
	echo "<hr />";
	echo '</div>';
	/*	echo "<div class='ausdruck_bon_stk'></div><div class='ausdruck_bon_name'>Rechnungssumme: </div> 
							<div class='ausdruck_bon_summe'>".$gesamtsumme_brutto ."</div> <div class='ausdruck_bon_einzelpreis'></div> ";
			*/

	$bonTxt = preg_replace(array('/:\s?$/', '/\.\s?$/', '/_\s?$/', '/-\s?$/', '/\s?$/'), '', BELEG_BENENNUNG);
	$rechnungssummeTxt = $bonTxt . " Summe: ";

	if (strtolower(RECHNUNGSSUMME_AUF_BON_FETT) == 'ja') $boldClass = ' bbold';
	else $boldClass = '';

	echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>
					<div class='ausdruck_bon_summe_txt  ausdruck_bon_summe_fontsize" . $boldClass . "'>" . $rechnungssummeTxt . " </div> 
					<div class='ausdruck_bon_gesammtsumme ausdruck_bon_summe_fontsize" . $boldClass . "'>" . $gesamtsumme_brutto . "</div>
				</div>";

	echo "<br />";
	echo "<br />";

	fusszeile_ausdrucken($invoiceSumRaw);	#  wird für eventuelle footer % Kalkulationen "AUSRUCK_EXTRA_FUSSZEILEN" übergeben;
	echo "<br>";
}

function frei_bon_ausdrucken_pdf($bon_id, $bonHeight = false)
{

	if ($bon_id == false) return false;

	if ($bonHeight == false) $bonHeight = AUSDRUCK_PDF_GESAMTE_HOEHE;

	require_once('include/fpdf.php');

	if (isset($_SESSION['selectedMobilPrinterId']) && $_SESSION['selectedMobilPrinterId'] > 0) {
		$prid = $_SESSION['selectedMobilPrinterId'];
		$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  FROM drucker WHERE drucker_id = " . $prid . " "));
	} else {
		$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  
					FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));
	}

	if ($printer['druckbreite'] == true && $printer['druckbreite'] > 35) $bonWidth = $printer['druckbreite'];
	else $bonWidth = preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);

	$drucker = $printer[0];

	$margin = $printer[1];
	$margins = explode(",", $margin);

	if (isset($margins[2])) $marginLR = preg_replace('/\D/', '', $margins[2]);
	else $marginLR = 0;
	if (isset($margins[1])) $marginBottom = preg_replace('/\D/', '', $margins[1]);
	else $marginBottom = 0;
	if (isset($margins[0])) $marginTop = preg_replace('/\D/', '', $margins[0]);
	else $marginTop = 0;


	$pdf = new FPDF('P', 'mm', array($bonWidth, $bonHeight));
	$pdf->SetMargins($marginLR, $marginTop, 0);
	$pdf->AddPage();

	$fontConfig = SCHRIFT_AUSDRUCK_PDF;


	if (
		strpos(strtolower($fontConfig), 'arial') !== false  || strpos(strtolower($fontConfig), 'helvetica') !== false ||
		strpos(strtolower($fontConfig), 'sans serif') !== false
	) {
		$pdfFont = "Arial";
		$z = "Arial";
	} else if (
		strpos(strtolower($fontConfig), 'times') !== false  || strpos(strtolower($fontConfig), 'roman') !== false ||
		(strpos(strtolower($fontConfig), 'serif') !== false &&  strpos(strtolower($fontConfig), 'sans') == false)
	) {
		$pdfFont = "Times";
		$z = "Times";
	} else if (strpos(strtolower($fontConfig), 'courier') !== false) {
		$pdfFont = "Courier";
		$z = "Courir";
	} else {
		$pdfFont = "Arial";
		$z = "Default";
	}

	preg_match('/\d+px | \d+pt/', $fontConfig, $m);
	preg_match('/\d+/', $m[0], $match);
	$pdfFontSize = $match[0];				#  stimmt nicht wirklich, fpdf verwendet hier pt und nciht px, pt ist auf inch bezogen, px auf sreen dott size.

	$lineHeight = $pdfFontSize / 2.5;

	$pdf->SetFont($pdfFont, '', $pdfFontSize);
	#	$pdf->Cell(0, 6, $z." / ".$fontConfig." -- ".$pdfFontSize, 'B', 1, 'C');

$kopfzeilenParm = '';
	$headArray = kopfzeile_ausdrucken($kopfzeilenParm, 'printPdf');
	for ($i = 0; $i < sizeof($headArray); $i++) {
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($headArray[$i])), 0, 1, 'C');
	}
	$pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Fa kopf

	$sql_produkte = mysql_query("select kunden_id, verkaufer_id, gesamt_summe, retourgeld, bon_erstellt_datum, storno_datum, kunden_id, 
								gastro_tisch_id, zusatztext AS zusatzTxt
								FROM abgeschlossener_bon_frei 
								WHERE abgeschlossener_bon_frei.bon_id='" . $bon_id . "'");
	if (!$sql_produkte) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	$bonZusatzTxt = "";
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		$invoiceSumRaw = $row_produkt["gesamt_summe"];
		$gesamtsumme_brutto = number_format(0, 2, ",", ".");
		$datetime = $row_produkt["bon_erstellt_datum"];
		$stornoDatetime = $row_produkt["storno_datum"];
		$retourgeld = $row_produkt["retourgeld"];
		$kundenId = $row_produkt["kunden_id"];
		$verkauferId = $row_produkt["verkaufer_id"];
		$gastroTischId = $row_produkt["gastro_tisch_id"];
		$bonZusatzTxt = $row_produkt["zusatzTxt"];
	}

	if ($kundenId > 0) {
		$custData = "";
		$pdf->Cell(0, 1, "", 0, 1, 'C');
		$kundenDetails = mysql_fetch_assoc(mysql_query("SELECT * FROM kunden WHERE id=$kundenId "));

		if ($kundenDetails['Firma'] != '') $pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['Firma'])), 0, 1, 'L');

		if (strlen($kundenDetails['anrede']) > 0) $cAnr = $kundenDetails['anrede'] . " ";
		else $cAnr = "";
		if (strlen($kundenDetails['titel']) > 0) $cTitel = $kundenDetails['titel'] . " ";
		else $cTitel = "";

		if (strlen($kundenDetails['vorname']) > 0 || strlen($kundenDetails['nachname']) > 0) {
			if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) > 0) $printN = $kundenDetails['vorname'] . " " . $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) == 0 && strlen($kundenDetails['nachame']) > 0) $printN =  $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) == 0) $printN =  $kundenDetails['vornname'];

			$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($cAnr . $cTitel . $printN)), 0, 1, 'L');
		}


		if (strlen($kundenDetails['strasse1']) > 0) $pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['strasse1'])), 0, 1, 'L');
		if (strlen($kundenDetails['strasse2']) > 0) $pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['strasse2'])), 0, 1, 'L');
		if ($kundenDetails['plz'] != '' || $kundenDetails['Ort'] != '')
			$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['plz'])) . " " . iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['Ort'])), 0, 1, 'L');

		$pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Kunden Druck, falls Kunde ausgegeben wird

	}

	if (strlen(trim($bonZusatzTxt)) > 0) {
		$pdf->Cell(0, $lineHeight / 3, "", 0, 1, 'C');
		$pdf->MultiCell($bonWidth - ($marginLR / 2), $lineHeight, iconv('UTF-8', 'windows-1252', $bonZusatzTxt), 0, 'L', 0);
		$pdf->Cell(0, $lineHeight / 3, "", "B", 1, 'C');
	}

	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	$pdf->Cell(0, $lineHeight * 1.2, "Beleg freie Konsumation : " . $bon_id, 0, 1, 'L');

	if (defined("GASTRO_TISCHNAME_AUF_BON_DRUCKEN") && strtolower(GASTRO_VERSION) == 'ja' &&  strtolower(GASTRO_TISCHNAME_AUF_BON_DRUCKEN) == 'ja' && $gastroTischId > 0) {
		$tabQl = mysql_fetch_array(mysql_query("SELECT tischName FROM tische WHERE id = $gastroTischId "));
		if ($tabQl == true) $tableName = $tabQl[0];
		if (preg_match('/tisch/i', $tabQl[0])) $pdf->Cell(0, $lineHeight, iconv('UTF-8', 'windows-1252', $tabQl[0]), 0, 1, 'L');
		else  $pdf->Cell(0, $lineHeight, "Tisch: " . iconv('UTF-8', 'windows-1252', $tabQl[0]), 0, 1, 'L');
	}

	if (defined("VERKAEUFER_AUF_BON_DRUCKEN") && strtolower(VERKAEUFER_AUF_BON_DRUCKEN) == 'ja') {
		$userQl = mysql_fetch_array(mysql_query("SELECT name FROM benutzer WHERE id = $verkauferId "));
		if ($userQl == true) $pdf->Cell(0, $lineHeight, AUSDRUCK_VERKAUFER_AUF_BON_TEXT . " " . iconv('UTF-8', 'windows-1252', $userQl[0]), 0, 1, 'L');
	}

	$dDate = strtotime($datetime);
	$datetime = date('j.n.Y H:i:s', $dDate);

	$txLineW = preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM);
	$pdf->Cell($txLineW, $lineHeight, "Datum: " . $datetime, '', 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM), $lineHeight, "EUR", '', 1, 'R');

	$pdf->Cell(0, $lineHeight / 2, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$sql_produkte = mysql_query("SELECT ID, produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, tax_rate, DISPLAY, 
										VARPRICE, PRINTNAME, NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, stueck, stueck, has_childs, parent_id, isparent_id, childPrint  
										FROM abgeschlossener_bon_produkte_frei WHERE bon_id='" . $bon_id . "'");

	if (!$sql_produkte) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}

	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		$einzel_preis = $row_produkt["PRICESELL"];
		$einzel_preis = $einzel_preis * (1 + $row_produkt["tax_rate"]);
		$summe = $einzel_preis * $row_produkt["stueck"];
		$einzel_preis = number_format($einzel_preis, 2, ",", ".");
		$stueck = $row_produkt["stueck"];

		# COMBI ARTIKEL !!!
		if ($row_produkt['has_childs'] == 1 && $row_produkt['isparent_id'] > 0) {
			$findChilds = mysql_fetch_array(mysql_query("SELECT SUM(PRICESELL* (1 + tax_rate)) AS combiEinzelPr FROM abgeschlossener_bon_produkte_frei 
														WHERE parent_id = " . $row_produkt['ID'] . " "));

			$einzel_preis = number_format($findChilds['combiEinzelPr'], 2, ",", ".");
			$summe = $findChilds['combiEinzelPr'] * $row_produkt["stueck"];
		} else if ($row_produkt['parent_id'] > 0 && $row_produkt['childPrint'] == 0) continue;


		// Checke ob Stueck nachkomma hat oder nicht wenn ja, dann 2 Nachkommastellen ansonsten keine
		if ((int) $stueck == $stueck) {
			$stueck_anzeige = number_format($stueck, 0, "", ".");
		} else $stueck_anzeige = number_format($stueck, 2, ",", ".");

		$summe = number_format($summe, 2, ",", ".");
		$printname = $row_produkt["PRINTNAME"];

		if ($row_produkt['parent_id'] > 0 && $row_produkt['childPrint'] == 1) {
			$einzel_preis = '';
			$stueck_anzeige = '';
			$summe = '';
		}

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM), $lineHeight, $stueck_anzeige, 0, 0, 'R');


		if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $printname)) > preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)) {
			$posY = $pdf->GetY();
			$posX = preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM) + $marginLR;
			$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM), $lineHeight, iconv('UTF-8', 'windows-1252', $printname), 0, 'L', 0);  # border-0; align L, fill-0,
			$posY_2 = $pdf->GetY();
			$pdf->SetXY($posX, $posY);
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM), $lineHeight, $einzel_preis, 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM), $lineHeight, $summe, 0, 1, 'R');
			$pdf->SetY($posY_2);
		} else {
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM), $lineHeight, iconv('UTF-8', 'windows-1252', $printname), 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM), $lineHeight, $einzel_preis, 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM), $lineHeight, $summe, 0, 1, 'R');
		}
	}

	$pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$zW = preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM);

	$pdf->Cell($zW, $lineHeight, "Belegsumme: ", 0, 0, 'L', 0);
	if (strtolower(RECHNUNGSSUMME_AUF_BON_FETT) == 'ja') $pdf->SetFont($pdfFont, 'B', $pdfFontSize);
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM), $lineHeight, $gesamtsumme_brutto, 0, 1, 'R', 0);
	$pdf->Cell(0, 1, "", 0, 1, 'C'); 	#  seperator ohne Trennlinie
	$pdf->SetFont($pdfFont, '', $pdfFontSize);

	$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C'); 	#  seperator ohne Trennlinie / vor vielen Dank für ....
	$fotterSumArray = fusszeile_ausdrucken($invoiceSumRaw, 'printPdf');	#  wird für eventuelle footer % Kalkulationen "AUSRUCK_EXTRA_FUSSZEILEN" übergeben;

	$fotterArray = $fotterSumArray[0];

	for ($i = 0; $i < sizeof($fotterArray); $i++) {
		if ($fotterArray[$i] != "") $pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($fotterArray[$i])), 0, 1, 'C');
	}


	# margin bottom Cell
	if ($marginBottom > 0) {
		$pdf->SetDrawColor(150);
		$pdf->Cell(($bonWidth + $marginLR) / 2, $marginBottom, "", 0, 0, 'R');
		$pdf->Cell(5, $marginBottom, "", "B", 1, 'C');
		$pdf->SetDrawColor(0);
	}
	if ($pdf->PageNo() > 1) {
		frei_bon_ausdrucken_pdf($bon_id, $bonHeight * $pdf->PageNo());
		return false;
	}


	$outputTarget = __DIR__ . "\docs\sIT_bon_" . $bon_id . "_" . date('d_m_H_i') . ".pdf";
	$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";


	$writeFile = $pdf->Output($outputTarget, "F");
	$error_code = seiteDrucken($drucker, $outputTarget, "freiBonPrint");
	#exec($command, $output, $error_code);


}

function bon_ausdrucken_a4_pdf($bon_id = false, $sourceParam = false, $callFrom = false, $lieferscheinNr = false)
{

	if (isset($_REQUEST['requestId']) && $_REQUEST['requestId'] != "") $requestId = $_REQUEST['requestId'];
	else $requestId = "";
	if (isset($_REQUEST['requestFunktion']) && $_REQUEST['requestFunktion'] != "") $requestFunktion = $_REQUEST['requestFunktion'];
	else $requestFunktion = "";
	if (isset($_REQUEST['a4downloadIndicator']) && $_REQUEST['a4downloadIndicator'] == true) $a4downloadIndicator = true;
	else $a4downloadIndicator = false;
	$printRequest = false;
	if (isset($_REQUEST['printRequest']) && $_REQUEST['printRequest'] != "") $printRequest = $_REQUEST['printRequest'];

	if ($bon_id == false) {
		$bon_id = $requestId;
	}

	if ($requestFunktion == 'bonReprint') {
		$currentUserId = $_SESSION['userId'];
		$lastClosedBon = mysql_fetch_array(mysql_query("SELECT MAX(bon_id) FROM abgeschlossener_bon WHERE verkaufer_id = " . $currentUserId . ""));

		$bon_id = $lastClosedBon[0];
	}

	$getPDF_A4_rechung = mysql_fetch_array(mysql_query("SELECT * FROM pdf_a4_rechnung WHERE name = 'rechnungs_template_a4'"));

	eval($getPDF_A4_rechung['a4_template']);

	$printResult = a4pdf_DB($bon_id, false, $lieferscheinNr, $requestFunktion);

	if ($callFrom == false && $printResult[1] != 'browserPrint') {
		echo json_encode($printResult);
	} else if ($callFrom == false && $printResult[1] == 'browserPrint') {
		echo json_encode($printResult);
	} else return $printResult;
}


// Druckt den Bon entweder am bilschirm oder am drucker aus
// wenn keine bon_id angegeben ist, dann wurde die funtkion mit ajax aufgerufen (kassieren.php) und die id steht im $_REQUEST
function bon_ausdrucken($bildschirm = true, $bon_id = false, $source = false, $auftrScheinNr = false)
{

	if (isset($_POST['bon_id']) && $_POST['bon_id'] != "") $ajaxBonId = $_POST['bon_id'];
	else $ajaxBonId = "";
	if (isset($_POST['requestFunktion']) && $_POST['requestFunktion'] != "") $requestFunktion = $_POST['requestFunktion'];
	else $requestFunktion = "";

	$startPrinter = false;
	// Wenn keine bon_id übergeben wurde, dann wurde Ajax aufgerufen
	if ($bon_id == false) {
		$bon_id = $ajaxBonId;
	}

	if ($requestFunktion == 'bonReprint') {
		$currentUserId = $_SESSION['userId'];
		$lastClosedBon = mysql_fetch_array(mysql_query("SELECT MAX(bon_id) FROM abgeschlossener_bon WHERE verkaufer_id = " . $currentUserId . ""));

		$bon_id = $lastClosedBon[0];
	}

	# wenn Bank Zahlung enthalten wird AUSDRUCK_KOPFZEILE_IBAN  auf dem Bon ausgedruckt
	$kopfzeilenParm = "";
	$checkBankZahlung = mysql_fetch_array(mysql_query("SELECT id FROM abgeschlossener_bon_zahlung WHERE bon_id = $bon_id AND NAME = 'Bank' "));
	if ($checkBankZahlung[0] > 0) $kopfzeilenParm = "PrintBankdata";
	

	// Kopf ausdrucken
	kopfzeile_ausdrucken($kopfzeilenParm, "htmlPrint");

	$sql = "SELECT kunden_id, verkaufer_id, gesamt_summe, retourgeld, bon_erstellt_datum, storno_datum, kunden_id, 
					gastro_tisch_id, qr_string, auftragsschein_nr, beleg_kennung, zusatztext AS zusatzTxt
					FROM abgeschlossener_bon 
					LEFT JOIN dep ON abgeschlossener_bon.bon_id = dep.beleg_nr
					LEFT JOIN abschluss_belege ON abgeschlossener_bon.bon_id = abschluss_belege.bon_id
					WHERE abgeschlossener_bon.bon_id='" . $bon_id . "'";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	$belegKennung = false;
	$bonZusatzTxt = "";
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		$invoiceSumRaw = $row_produkt["gesamt_summe"];
		$gesamtsumme_brutto = number_format($row_produkt["gesamt_summe"], 2, ",", ".");
		$datetime = $row_produkt["bon_erstellt_datum"];
		$stornoDatetime = $row_produkt["storno_datum"];
		$retourgeld = $row_produkt["retourgeld"];
		$kundenId = $row_produkt["kunden_id"];
		$verkauferId = $row_produkt["verkaufer_id"];
		$gastroTischId = $row_produkt["gastro_tisch_id"];
		$qr_string = $row_produkt["qr_string"];
		$auftragsscheinNr = $row_produkt["auftragsschein_nr"];
		$belegKennung = $row_produkt["beleg_kennung"];
		$bonZusatzTxt = $row_produkt["zusatzTxt"];
	}
	// wrapper um die Rechnung um höhe auf screen zu limitieren !!!!

	$dDate = strtotime($datetime);
	$datetime = date('j.n.Y H:i:s', $dDate);

	if ($kundenId > 0) {

		echo "<div class='bonAusdruckCustomer'>";
		$kundenDetails = mysql_fetch_assoc(mysql_query("SELECT * FROM kunden WHERE id=$kundenId "));

		if ($kundenDetails['Firma'] != '') echo "<p>" . $kundenDetails['Firma'] . "</p>";

		if (strlen($kundenDetails['anrede']) > 0) $cAnr = $kundenDetails['anrede'] . " ";
		else $cAnr = "";
		if (strlen($kundenDetails['titel']) > 0) $cTitel = $kundenDetails['titel'] . " ";
		else $cTitel = "";

		if (strlen($kundenDetails['vorname']) > 0 || strlen($kundenDetails['nachname']) > 0) {
			if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) > 0) $printN = $kundenDetails['vorname'] . " " . $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) == 0 && strlen($kundenDetails['nachname']) > 0) $printN =  $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) == 0) $printN =  $kundenDetails['vorname'];

			echo "<p>" . $cAnr . $cTitel . $printN . "</p>";
		}

		if ($kundenDetails['strasse1'] != '') echo "<p>" . $kundenDetails['strasse1'] . "</p>";
		if ($kundenDetails['strasse2'] != '') echo "<p>" . $kundenDetails['strasse2'] . "</p>";
		if ($kundenDetails['plz'] != '') echo "<p>" . $kundenDetails['plz'] . " ";
		if ($kundenDetails['Ort'] != '') echo $kundenDetails['Ort'] . "</p>";

		echo "</div>";
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
		echo "<hr />";
		echo "</div>";
	}

	if (strlen(trim($bonZusatzTxt)) > 0) {
		$bonZusatzTxt = preg_replace('/\\n/', '<br />', $bonZusatzTxt);
		echo "<div class='bonAusdruckCustomer ausdruck_bon_gesamt_breite'>" . $bonZusatzTxt . "	</div>
					<div class='ausdruck_ganze_zeile '><hr /></div>";
	}

	if ($belegKennung !== false && preg_match("/Sammelbeleg /i", $belegKennung)) {
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
		echo $belegKennung;
		echo "</div>";
	}


	if (defined('KASSENID_AUF_BON') && strtolower(KASSENID_AUF_BON) == 'ja') {
		echo "<div class='floatL bonPrintExtra' style='width:47%;'>" . BELEG_BENENNUNG . " " . $bon_id . "</div>
					<div class='floatR bonPrintExtra' style='width:49%; text-align:right;'>Kassenid: " . KASSA_ID . "</div>
					<div class='cclear'></div>";
	} else {
		echo BELEG_BENENNUNG . " " . $bon_id . "<br /><input type='hidden' id='abgeschlBonIdToPrint' value='" . $bon_id . "' /> ";
	}

	if ($auftragsscheinNr > 0 && (defined('AUFTRAGSSCHEIN_NR_AUF_RECHNUNG') && strtolower(AUFTRAGSSCHEIN_NR_AUF_RECHNUNG) == 'ja')) {
		if (defined('AUFTRAGSSCHEIN_NR_AUF_RECH_FETT') && strtolower(AUFTRAGSSCHEIN_NR_AUF_RECH_FETT) == 'ja') {
			$fontWeight = 'font-weight:bold; ';
		} else $fontWeight = '';
		if (defined('AUFTRAGSSCHEIN_NR_AUF_RECH_FONTSIZE') && AUFTRAGSSCHEIN_NR_AUF_RECH_FONTSIZE > 5) {
			$fontSize = "font-size:" . AUFTRAGSSCHEIN_NR_AUF_RECH_FONTSIZE . "pt;";
			$lineHeight = 'height:1em';
		} else {
			$fontSize = '';
			$lineHeight = '';
		}

		echo "<p style='" . $fontWeight . $fontSize . "' class='bonPrintExtra'>" . AUFTRAGSSCHEIN_BENENNUNG . $auftragsscheinNr . "</p>";
	}

	if (defined("GASTRO_TISCHNAME_AUF_BON_DRUCKEN") && strtolower(GASTRO_VERSION) == 'ja' &&  strtolower(GASTRO_TISCHNAME_AUF_BON_DRUCKEN) == 'ja' && $gastroTischId > 0) {
		$tabQl = mysql_fetch_array(mysql_query("SELECT tischName FROM tische WHERE id = $gastroTischId "));
		if ($tabQl == true) $tableName = $tabQl[0];
		if (preg_match('/tisch/i', $tabQl[0])) echo $tabQl[0] . "<br />";
		else  echo "<p class='bonPrintExtra'>Tisch: " . $tabQl[0] . "</p>";
	}
	if (defined("VERKAEUFER_AUF_BON_DRUCKEN") && strtolower(VERKAEUFER_AUF_BON_DRUCKEN) == 'ja') {
		$userQl = mysql_fetch_array(mysql_query("SELECT name FROM benutzer WHERE id = $verkauferId "));
		if ($userQl == true) echo "<p class='bonPrintExtra'>" . AUSDRUCK_VERKAUFER_AUF_BON_TEXT . " " . $userQl[0] . "</p>";
	}

	if($source=='storno')
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
	else
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";

	echo "<div class='bonPrintDate' >Datum: $datetime</div><div class='bonPrintWaehrung'>EUR</div><div class='cclear'></div>";
	echo "</div>";
	if($source=='storno')
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
	else
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
	echo "<hr />";
	echo '</div>';



	/// ========================================================================
	// Produkte Ausdrucken
	$sql = "select abgeschlossener_bon_produkte.ID as ID, produkt_id, tax_rate, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, tax_rate, 
						DISPLAY, VARPRICE, PRINTNAME, NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, stueck, has_childs, parent_id, isparent_id, 
						childPrint, lsSource, lieferschein_id, lieferschein_erstellt_datum 
						FROM abgeschlossener_bon_produkte
						LEFT JOIN lieferschein_referenz ON lsSource = lieferschein_referenz.id
						WHERE bon_id='" . $bon_id . "'  ORDER BY lieferschein_referenz.id ASC, abgeschlossener_bon_produkte.ID ASC ";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	$countProd = mysql_num_rows($sql_produkte);

	if (defined('BELEG_EINZELPREIS_KOMMASTELLEN') && is_numeric(BELEG_EINZELPREIS_KOMMASTELLEN)) {
		$ezKom = BELEG_EINZELPREIS_KOMMASTELLEN;
	} else $ezKom = 2;

	$lsGroup = false;		# für den gruppenwechsel, sammelrechnung aus lieferscheine	
	for ($i = 0; $row_produkt = mysql_fetch_assoc($sql_produkte); $i++){
		$einzel_preis = $row_produkt["PRICESELL"];
		//$einzel_preis=round($einzel_preis, 4)*(1+$row_produkt["tax_rate"]);
		//$summe=round($einzel_preis, 4)*$row_produkt["stueck"];
		$einzel_preis = $einzel_preis * (1 + $row_produkt["tax_rate"]);
		$summe = $einzel_preis * $row_produkt["stueck"];
		$einzel_preis = number_format($einzel_preis, $ezKom, ",", ".");

		# COMBI ARTIKEL !!!
		if ($row_produkt['has_childs'] == 1 && $row_produkt['isparent_id'] > 0) {
			$findChilds = mysql_fetch_array(mysql_query("SELECT SUM(PRICESELL* (1 + tax_rate)) AS combiEinzelPr FROM abgeschlossener_bon_produkte 
														WHERE parent_id = " . $row_produkt['ID'] . " "));

			$einzel_preis = number_format($findChilds['combiEinzelPr'], $ezKom, ",", ".");
			$summe = $findChilds['combiEinzelPr'] * $row_produkt["stueck"];
		} else if ($row_produkt['parent_id'] > 0 && $row_produkt['childPrint'] == 0) continue;


		$stueck = $row_produkt["stueck"];
		// Checke ob Stueck nachkomma hat oder nicht wenn ja, dann 2 Nachkommastellen ansonsten keine
		if ((int) $stueck == $stueck) {
			$stueck_anzeige = number_format($stueck, 0, "", ".");
		} else $stueck_anzeige = number_format($stueck, 3, ".", ",");

		$summe = number_format($summe, 2, ",", ".");
		$printname = $row_produkt["PRINTNAME"];

		if ($row_produkt['parent_id'] > 0 && $row_produkt['childPrint'] == 1) {
			$ortstaxe = number_format($stueck * $row_produkt["PRICESELL"], 2, ",", ".");
			$einzel_preis = '&nbsp;';
			$stueck_anzeige = '&nbsp;';
			$summe = '&nbsp;';
			$printname = preg_replace('/€\s*0[,\.]00/', '€ ' . $ortstaxe, $printname);
		}

		if (isset($row_produkt['lsSource']) && $row_produkt['lsSource'] > 0 && ($lsGroup != $row_produkt['lieferschein_id'])) {
			$headerTxt = "Liefersch: ";
			if (defined('LIEFERSCH_SAMMELRECHNUNG_GRUPPENHEADER')) $headerTxt = LIEFERSCH_SAMMELRECHNUNG_GRUPPENHEADER;

			$dDate = strtotime($row_produkt['lieferschein_erstellt_datum']);
			$dateTime = date('j.n.Y H:i', $dDate);
			
			if($source=='storno')
				echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
			else
				echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>

							<p class='lsGroupHeadHtmlPrint'>" . $headerTxt . $row_produkt['lieferschein_id'] . ", " . $dateTime . "</p>
					</div>";
		}
		# prüfen ob es Einzelrabatt gibt und Zeile bilden
		$rabattLine = false;
		$origPr = false;
		# ist relevant wenn original Preis auf den Bon bzw Bon Vordruck gedruckt wird
		if (preg_match('/von\s€\s([0-9]+(,[0-9]+))/', $printname, $matchOrigPr)) {
			$origPr = $matchOrigPr[0];
			$printname = preg_replace('/' . $origPr . '/', '', $printname);
		}

		if (preg_match('/\d{1,},\d{1,}\%\sRabatt/', $printname, $matchRes)) {
			#	Einzelrabatt Kommazahl, ist mit germ komma "," im Prod Table
			$rabattLine = true;
			$tmpPrintN = preg_split("/\d{1,},\d{1,}\%\sRabatt/", $printname);
			if (isset($tmpPrintN[1]) && strlen($tmpPrintN[1]) > 0) $tmpPrintNameEnd = "<br />" . $tmpPrintN[1];
			else $tmpPrintNameEnd = "";
			$printname = $tmpPrintN[0] . "<br />" . $matchRes[0] . " " . $origPr . " inkludiert" . $tmpPrintNameEnd;
		} else if (preg_match('/\d{1,}%\sRabatt/', $printname, $matchRes)) {
			#	Einzelrabatt gerade Zahl
			$rabattLine = true;
			$tmpPrintN = preg_split("/\d{1,}%\sRabatt/", $printname);
			if (isset($tmpPrintN[1]) && strlen($tmpPrintN[1]) > 0) $tmpPrintNameEnd = "<br />" . $tmpPrintN[1];
			else $tmpPrintNameEnd = "";
			$printname = $tmpPrintN[0] . "<br />" . $matchRes[0] . " " . $origPr . " inkludiert" . $tmpPrintNameEnd;
		}

		$printname = preg_replace('/\\n/', '<br />', $printname);
		
		//echo "<input type='number' id='amount" . $i . "' style='width:50px;' min='0' max='" . $stueck_anzeige . "' value='" . $stueck_anzeige . "' class='ausdruck_bon_stk'>";
		if($source=='storno'){
			echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
			echo"
			<script>
			
		
			      
			     
			</script>
			<div class='number-input'>
				<button onclick='this.parentNode.querySelector(`input[type=number]`).stepDown()' >&nbsp; - &nbsp;</button>
				<input type='number' pattern='[0-9]+([\.][0-9]+)?'   name='quantity' id='amount" . $i . "' style='width:50px;' min='0' max='" . $stueck_anzeige . "' value='" . $stueck_anzeige . "' class='ausdruck_bon_stk quantity'>
				<input type='hidden' value='".$stueck_anzeige."' id='amount_product_" . $i . "'/>
				<button onclick='this.parentNode.querySelector(`input[type=number]`).stepUp()' class='plus'>&nbsp; + &nbsp;</button>
			</div>";
			
		}
		else
		{
			
			echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
			echo "<div class='ausdruck_bon_stk'> " . $stueck_anzeige . "</div>";
		}
			
		// Strono Alex
		echo "<input type='hidden' value='" . $row_produkt["ID"] . "' id='prod" . $i . "'></input>";
		if ((AUSDRUCK_BON_ZWEIZEILIG > 0) && (strlen($printname) > AUSDRUCK_BON_ZWEIZEILIG)) {
			echo "<div class='ausdruck_bon_name_zweizeilig'> " . $printname . "</div> ";
			echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'></div>";
		} else {
			echo "<div class='ausdruck_bon_name'> " . $printname . "</div> ";
		}


		if($source=='storno'){
			echo "<div class='ausdruck_bon_summe' style='width: 13mm'>" . $einzel_preis . "</div>  <br />";
		} else {
			echo "<div class='ausdruck_bon_summe'>" . $summe . "</div><div class='ausdruck_bon_einzelpreis'>" . $einzel_preis . "</div>  <br />";
		}

		echo "</div>";
		//echo $row_produkt["NEGATIVEPRICE"];
		$lsGroup = $row_produkt['lieferschein_id'];
	}

	# Product while end
	$checkPrintName = preg_replace('/\s+/', '', $printname);
	if ($countProd == 1 && $gesamtsumme_brutto == 0 && (strpos($checkPrintName, 'natsAbschlussBeleg') != false || strpos($printname, 'tartbeleg') != false)) {
		$monatsAbschlBeleg = true;
		$rechnungssummeTxt = "Beleg Summe: ";
	} else {
		$monatsAbschlBeleg = false;

		$bonTxt = preg_replace(array('/:\s?$/', '/\.\s?$/', '/_\s?$/', '/-\s?$/', '/\s?$/'), '', BELEG_BENENNUNG);
		$rechnungssummeTxt = $bonTxt . " Summe: ";
	}


	// echo "Rechnung Summe $gesamtsumme_brutto";
	// =============================================================
	// Steuer ausdrucken
	
	if($source=='storno')
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
	else
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";

	echo "<hr />";
	echo '</div>';
	if (strtolower(RECHNUNGSSUMME_AUF_BON_FETT) == 'ja') $boldClass = ' bbold';
	else $boldClass = '';

	if($source=='storno')
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
	else
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";

	echo "
					<div class='ausdruck_bon_summe_txt ausdruck_bon_summe_fontsize" . $boldClass . "' >" . $rechnungssummeTxt . "</div> 
					<div class='ausdruck_bon_gesammtsumme ausdruck_bon_summe_fontsize" . $boldClass . "'>" . $gesamtsumme_brutto . "</div>
				</div>";

	echo "<br />";
	echo "<br />";

	if ($monatsAbschlBeleg == false) {

		if($source=='storno')
		$ausdruckganzezeile =  "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
	else
	$ausdruckganzezeile = "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
		// Steuern ausgeben
		$taxOutput = $ausdruckganzezeile . "<div class='ausdruck_bon_steuer_satz'>Steuersatz</div><div class='ausdruck_bon_steuer_netto'>Netto</div>
					<div class='ausdruck_bon_steuer_steuer'> Steuer</div> <div class='ausdruck_bon_steuer_brutto'>Brutto</div><div class='cclear'></div>
					</div>";
		$sql = "select tax_rate, gesamt_betrag from abgeschlossener_bon_steuern WHERE bon_id='" . $bon_id . "'";
		$sql_produkte = mysql_query($sql);
		if (!$sql_produkte) {
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}

		$taxRateNull = 0;
		while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
			$steuersatz = $row_produkt["tax_rate"] * 100;
			$taxRateNull += $steuersatz;
			$netto = $row_produkt["gesamt_betrag"];

			$steuer = $netto * $row_produkt["tax_rate"];
			
			
			$brutto = $netto + $steuer;
			$prtSteuer = round($brutto, 2) - round($netto, 2);
			$brutto = number_format($brutto, 2, ",", ".");
			$netto = number_format($netto, 2, ",", ".");
			#$steuer=number_format($steuer,2,",",".");
			$steuer = number_format($prtSteuer, 2, ",", ".");

			if($source=='storno')
			$ausdruckganzezeile = "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
	else
	$ausdruckganzezeile = "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
			$taxOutput .= $ausdruckganzezeile ."<div class='ausdruck_bon_steuer_satz'>$steuersatz </div>
			<div class='ausdruck_bon_steuer_netto'>$netto </div>
						<div class='ausdruck_bon_steuer_steuer'> $steuer </div><div class='ausdruck_bon_steuer_brutto'> $brutto </div>
					</div>";
		}

		$taxOutput .= "<br><br>";

		if (defined('KLEINUNTERNEHMER_UST') && strtolower(KLEINUNTERNEHMER_UST) == 'ja' && $taxRateNull == 0) {
			//echo "<p>Kleinunternehmer USt !!!!!!!!!!</p>";				
		} else echo $taxOutput;

		if($source=='storno')
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite' style='width:85mm;'>";
	else
		echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'>";
		echo "<hr />";
		echo '</div>';
		// ********************************************************************
		// Zahlungen ausdrucken
		// Zahlungen werden gleich mit der Formatierung der Steuer ausgedruckt
		$sql = "select Name, zahlbetrag,zahlbetrag_tatsaechlich from abgeschlossener_bon_zahlung WHERE bon_id='" . $bon_id . "'";
		
		$sql_produkte = mysql_query($sql);
		if (!$sql_produkte) {
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		$summe_zahlbetrag = 0;
		while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
			$zahlbetrag = $row_produkt["zahlbetrag"];
			$summe_zahlbetrag += $zahlbetrag;
			$name = $row_produkt["Name"];
			$zahlbetrag = number_format($zahlbetrag, 2, ",", ".");
			echo '<div class="ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite">';
			echo "<div class='ausdruck_bon_steuer_satz'>$name</div> <div class='ausdruck_bon_steuer_netto'>$zahlbetrag </div><br />";
			echo '</div>';
		}

		if ($retourgeld > 0) {
			//Gesamtsumme anzeigen
			$retourgeld = number_format($retourgeld, 2, ",", ".");
			echo '<div class="ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite">';
			echo "<div class='ausdruck_bon_steuer_satz'>Retourgeld</div> <div class='ausdruck_bon_steuer_netto'>$retourgeld </div><br />";
			echo '</div>';
		}

		// Fusszeilen ausdrucken
	}
	$qr_data = array($bon_id, $qr_string, $monatsAbschlBeleg);

	fusszeile_ausdrucken($invoiceSumRaw, false, $qr_data, $requestFunktion);	#  wird für eventuelle footer % Kalkulationen "AUSRUCK_EXTRA_FUSSZEILEN" übergeben;
	echo "<br>";

	//if ($bildschirm) echo "</pre>";

}

function kassenabschluss_ausdrucken_a4($bon_id = false, $bonHeight = false, $requestId = false, $printRequest = false, $requestFunktion = false, $backupFileSenden = false, $userId = false, $userName = false)
{

	if (isset($_POST['requestId']) && $_POST['requestId'] != "") $requestId = $_POST['requestId'];
	if (isset($_POST['printRequest']) && $_POST['printRequest'] != "") $printRequest = $_POST['printRequest'];
	else $printRequest = false;
	if (isset($_POST['requestFunktion']) && $_POST['requestFunktion'] != "") $requestFunktion = $_POST['requestFunktion'];
	else $requestFunktion = "";
	if (isset($_POST['backupFileSenden']) && $_POST['backupFileSenden'] == "autobackupMailSenden") $backupFileSenden = $_POST['backupFileSenden'];
	else $backupFileSenden = false;

	if ($bon_id == false) $id = $requestId;
	else $id = $bon_id;

	$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name FROM drucker WHERE LOWER(ist_a4) = 'ja' LIMIT 1"));

	if (isset($_POST['abschlOnUser']) && $_POST['abschlOnUser'] != '') {
		$userId = preg_replace('/[^\d]/', '', $_POST['abschlOnUser']);
		if ($userId > 0) {
			$userN = mysql_fetch_array(mysql_query("SELECT name FROM benutzer WHERE id = " . $userId . ""));
		} else $userId = false;
	} else $userId = false;

	require_once('include/fpdf.php');

	class PDF extends FPDF
	{
		// Page header
		function Header()
		{

			#$this->Image('logo.png',10,6,30);
			$this->SetFont('helvetica', 'B', 11);

			$headL = mysql_query("SELECT wert FROM konfiguration WHERE name LIKE 'AUSRUCK_KOPFZEILE_%' AND name <> 'AUSRUCK_KOPFZEILE_IBAN'  AND wert <> '' ");

			while ($headLines = mysql_fetch_array($headL)) {
				$xx = $headLines['wert'];
				$this->Cell(125, 5, '', 0, 0, 'C');
				$this->Cell(50, 5, iconv("UTF-8", "windows-1252", $headLines['wert']), 0, 1, 'C');
			}


			// Move to the right
			#$this->Cell(80);
			// Title
			$this->SetY(20);
			$this->SetFont('helvetica', 'B', 22);
			$this->Cell(100, 12, 'Kassenabschluss', 0, 0, 'L');
			// Line break



			# ist die Höhe vom Header, beginnt  nach der Top Margin
			$this->Ln(17);
			$this->Cell(0, 1, '', 'B', 1, 'C');
			$this->Cell(0, 3, '', 0, 1, 'C');
		}

		function Footer()
		{
			global $bon_id, $kassen_id, $abschlussId;
			#Position at 1.5 cm from bottom
			$this->SetY(-15);
			# keine Ahnung wer Arial auf Helvetica dreht, im Ordner gibts kein Arial
			$this->SetFont('helvetica', '', 9);
			#Page number   variablen wie zB kassa Id od abschl Id bekomme ich hier nicht rein. 
			$this->Cell(90, 10, ' Kassenabschluss ' . date('d.m.Y H:i'), 0, 0, 'L');
			$this->Cell(90, 10, $this->PageNo() . '/{nb}', 0, 1, 'R');
		}
	}


	#Instanciation of inherited class
	$pdf = new PDF('P', 'mm', 'A4');
	$pdf->SetMargins(15, 10, 10);



	$pdf->AliasNbPages();
	$pdf->AddPage();

	$fFont = explode(' ', SCHRIFT_AUSDRUCK_KASSENABSCHL_PDF);
	$pdfFont = strtolower(trim($fFont[0]));
	$fontSize = preg_replace('/[^0-9]/', '', $fFont[1]);


	if ($fontSize < 3) $fontSize = 10;
	if (strtolower($pdfFont) == 'arial') $pdfFont = 'helvetica';
	if (strtolower($pdfFont) == 'helvetica' || strtolower($pdfFont) == 'times' || strtolower($pdfFont) == 'courier')  $pdfFont = $pdfFont;
	else $pdfFont = 'helvetica';

	$pdf->SetFont($pdfFont, '', $fontSize);
	$lineHeight = $fontSize / 2;


	$result = mysql_query("SELECT kassa_abschluesse.id as bon_id, kassen_id, datum_start, datum_ende, benutzer_eroeffnung.name as benutzer_eroeffnung, 
						benutzer_abschluss.name as benutzer_abschluss, kassa_offen, wechselgeld
						FROM kassa_abschluesse 
						LEFT JOIN benutzer AS benutzer_eroeffnung on kassa_abschluesse.verkaufer_id=benutzer_eroeffnung.id
						LEFT JOIN benutzer AS benutzer_abschluss on kassa_abschluesse.verkaufer_id_abschluss=benutzer_abschluss.id 
						WHERE kassa_abschluesse.id='" . $id . "'");

	if ($result) {
		$value = mysql_fetch_object($result);

		$abschlussId = $id;
		$kassen_id = $value->kassen_id;
		$datumStart = $value->datum_start;
		$datumEnde = $value->datum_ende;
		$userOpen = $value->benutzer_eroeffnung;
		$userClose = $value->benutzer_abschluss;
		$kassaOpen = $value->kassa_offen;
		$changeMony = $value->wechselgeld;
	} else {
		print_fehler("Fehler beim Suchen des Kassenbschlusses $id");
		exit;
	}

	$istVordruck = false;

	$offen = $value->kassa_offen ? 'Ja' : 'Nein';
	if ($value->kassa_offen && $userId == false) {
		$pdf->Cell(0, 5, "", 0, 1, 'C');
		$pdf->SetFont($pdfFont, 'B', 14);
		$pdf->Cell(0, $lineHeight, "KASSAABSCHLUSS VORDRUCK", 0, 1, 'C');
		#$pdf->Cell(0, $lineHeight, "", 0, 1, 'C');

		$istVordruck = true;
	}

	if ($userId != false) {
		$repDatum = date('j.n.Y H:i:s');
		$pdf->SetFont($pdfFont * 1.5, 'B', $fontSize);
		$pdf->Cell(0, $lineHeight, "Abrechnungs Ausdruck", 0, 1, 'C');
		$pdf->SetFont($pdfFont, '', $pdfFontSize);
		$pdf->Cell(0, $lineHeight, iconv("UTF-8", "windows-1252", "Mitarbeiter: " . $userN[0]), 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "Datum: " . $repDatum, 0, 1, 'C');
		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight, "", 0, 1, 'C');



	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, 2, "", 0, 1, 'C');
	} else $pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Fa kopf
	$pdf->Cell(0, $lineHeight, "", 0, 1, 'C'); 	#  abstand unterhalb trennlinie

	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, "Kassenabschluss ID:", 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell(55, $lineHeight, $value->bon_id, 0, 0, 'L');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, "Kassen ID: ", 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell(55, $lineHeight, $kassen_id, 0, 1, 'L');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, "Datum/Uhrzeit von:", 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$zDate = date("d m Y  h:i", strtotime($value->datum_start));
	$pdf->Cell(55, $lineHeight, $zDate, 0, 0, 'L');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, "Datum/Uhrzeit bis:", 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	if (preg_match("#^0000(.*)$#i", $value->datum_ende)) $yDate = "Kassa offen !";
	else $yDate = date("d m Y  h:i", strtotime($value->datum_ende));
	$pdf->Cell(55, $lineHeight, $yDate, 0, 1, 'L');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, iconv("UTF-8", "windows-1252", "Eröffnet von:"), 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell(55, $lineHeight, iconv("UTF-8", "windows-1252", $value->benutzer_eroeffnung), 0, 0, 'L');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, iconv("UTF-8", "windows-1252", "Abgeschlossen von:"), 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell(55, $lineHeight, iconv("UTF-8", "windows-1252", $value->benutzer_abschluss), 0, 1, 'L');


	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, "Kassa offen:", 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell(55, $lineHeight, $offen, 0, 0, 'L');
	#$pdf->Cell(0, $lineHeight, "", 0, 1, 'L');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell(38, $lineHeight, "Wechselgeld:", 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	setlocale(LC_MONETARY, 'de_DE');
	define('EUR', chr(128));
	if ($value->wechselgeld != 0) $wg = EUR . ' ';
	else $wg = '';
	$pdf->Cell(55, $lineHeight, $wg . number_format($value->wechselgeld, 2, ",", "."), 0, 1, 'L');

	if ($istVordruck == true) {
		if (!isset($_SESSION)) session_start();
		$pdf->SetFont($pdfFont, '', 10);
		$pdf->Cell(38, $lineHeight, iconv("UTF-8", "windows-1252", "Vordruck erstellt von:"), 0, 0, 'L');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell(55, $lineHeight, iconv("UTF-8", "windows-1252", $_SESSION["userName"]), 0, 1, 'L');
	}

	$xWidth = 38 + 55;
	# Zwischen den Sectoren Ein-Auszahlung, Gutschein, ...   ist dann $lineHeight*$sectorSeperatFactor
	$sectorSeperatFactor = 2.3;

	$colLeftL = 15;
	$colLeft2 = 65;
	$colRight2 = 40;

	# Trennlinie
	$pdf->Cell(0, $lineHeight, "", 'B', 1, 'L');
	$pdf->Cell(0, $lineHeight * $sectorSeperatFactor, "", 0, 1, 'C');

	$pdf->Cell($colLeftL / 2, $lineHeight * 1.5, "", 0, 0, 'C');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell($xWidth, $lineHeight, "Einnahmen Bericht", 0, 1, 'L');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C'); 	#  trennlinie unterhalb
		$pdf->Cell($colLeft2 + $colRight2, 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');


	#Gutschein Funktion lizenziert und freigegeben  
	$gsEnabled = false;
	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {
		$gsEnabled = true;
	}


	# Zahlungen ausgeben 
	$kassastand = $value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;

	if ($userId > 0) $whereOnUser = "AND verkaufer_id = " . $userId . " ";
	else $whereOnUser = "";

	$sql = "select abgeschlossener_bon_zahlung.name as name, SUM(zahlbetrag) as betrag, kassastand_wirksam, einnahmen_wirksam 
						FROM abgeschlossener_bon_zahlung
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_zahlung.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN zahlungsart ON abgeschlossener_bon_zahlung.name=zahlungsart.name
						WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUser . " GROUP BY name";
	$sql_zahlungen = mysql_query($sql);
	if (!$sql_zahlungen) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		if ($row_zahlungen['kassastand_wirksam']) $bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		if ($row_zahlungen['einnahmen_wirksam']) $einnahmen = $einnahmen + $row_zahlungen['betrag'];
		$betrag = number_format($row_zahlungen['betrag'], 2, ",", ".");

		$pdf->Cell(15, $lineHeight, iconv('UTF-8', 'windows-1252', ""), 0, 0, 'C');
		$pdf->SetFont($pdfFont, '', 10);
		$pdf->Cell(65, $lineHeight, iconv('UTF-8', 'windows-1252', $row_zahlungen['name']), 0, 0, 'L');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell(40, $lineHeight, $betrag, 0, 1, 'R');
	}

	// Ein- Auszahlungen
	if ($userId > 0) $whereOnUserEA = "AND ein_aus_zahlungen.verkaufer_id = " . $userId . " ";
	else $whereOnUserEA = "";
	$sql_zahlungen = mysql_query("select typ, SUM(gesamt_betrag) as betrag
						FROM ein_aus_zahlungen
						LEFT JOIN kassa_abschluesse ON ein_aus_zahlungen.kassa_abschluss_id=kassa_abschluesse.id
						WHERE kassa_abschluesse.id='" . $id . "' " . $whereOnUserEA . " GROUP BY typ");

	if (!$sql_zahlungen) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		$betrag = $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind immer Kassawirksam
		$bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind nicht Einnahmenwirksam
		$typ = $row_zahlungen['typ'];
		if ($typ == 'ein') $text = "Bar Einzahlung";
		else {
			$text = "Bar Auszahlung";
		}

		$betrag = number_format($row_zahlungen['betrag'], 2, ",", ".");
		$pdf->Cell($colLeftL, $lineHeight, iconv('UTF-8', 'windows-1252', ""), 0, 0, 'C');
		$pdf->SetFont($pdfFont, '', 10);
		$pdf->Cell($colLeft2, $lineHeight, $text, 0, 0, 'L');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($colRight2, $lineHeight, $betrag, 0, 1, 'R');
	}
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C'); 	#  trennlinie unterhalb
		$pdf->Cell($colLeft2 + $colRight2, 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	if ($bar_einnahmen < 0) $einnamenTxt = "Bar Ausgaben";
	else $einnamenTxt = "Bar Einnahmen";
	if ($einnahmen < 0) $tagesEinnamenTxt = "Tageausgaben (ohne GS)";
	else $tagesEinnamenTxt = "Tageseinnahmen (ohne GS)";

	$pdf->Cell($colLeftL, $lineHeight, iconv('UTF-8', 'windows-1252', ""), 0, 0, 'C');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell($colLeft2, $lineHeight, $tagesEinnamenTxt, 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell($colRight2, $lineHeight, number_format($einnahmen, 2, ",", "."), 0, 1, 'R');
	$pdf->Cell($colLeftL, $lineHeight, iconv('UTF-8', 'windows-1252', ""), 0, 0, 'C');
	$pdf->SetFont($pdfFont, '', 10);
	$pdf->Cell($colLeft2, $lineHeight, $einnamenTxt, 0, 0, 'L');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell($colRight2, $lineHeight, number_format($bar_einnahmen, 2, ",", "."), 0, 1, 'R');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, 2, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
		$pdf->Cell($colLeft2 + $colRight2, 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, $lineHeight / 2, "", 0, 1, 'C');



	if ($userId > 0) $whereOnUserGs = "AND gutschein_buchungen.verkaufer_id = " . $userId . " ";
	else $whereOnUserGs = "";

	$gsVk = mysql_query("SELECT betrag_geladen AS gutscheinVerk
							FROM gutschein_buchungen
							LEFT JOIN zahlungsart ON zahlungsart.Name = gutschein_buchungen.zahlungsart_name
							WHERE kassa_abschluss_id= " . $id . " " . $whereOnUserGs . " AND LOWER(verkaufsart) = 'gsverkauf' AND zahlungsart.kassastand_wirksam = 1");
	$sumGsVk = 0;
	while ($gsVerk = mysql_fetch_array($gsVk)) {
		$sumGsVk += $gsVerk['gutscheinVerk'];
	}
	if ($sumGsVk > 0) {
		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, "Einnhamen aus GS Ausstellen:", 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .35, $lineHeight, number_format($sumGsVk, 2, ",", "."), 0, 1, 'R');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, 2, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL, 2, "", 0, 0, 'C'); 	#  trennlinie unterhalb
			$pdf->Cell($colLeft2 + $colRight2, 2, "", 'B', 1, 'C');
		}
	}

	$kassastand = $kassastand + $bar_einnahmen + $sumGsVk;

	if ($userId == false) {
		$pdf->SetFont($pdfFont, 'B', $fontSize);
		$pdf->Cell($colLeftL, $lineHeight * 1.5, "", 0, 0, 'C');
		$pdf->SetFont($pdfFont, '', 10);
		$pdf->Cell($colLeft2, $lineHeight * 1.5, "Neuer Kassastand", 0, 0, 'L');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($colRight2, $lineHeight * 1.5, number_format($kassastand, 2, ",", "."), 0, 1, 'R');
	}

	# Ende Zahlungen */
	$pdf->Cell(0, $lineHeight * $sectorSeperatFactor, "", 0, 1, 'C');

	if ($pdf->GetY() > 220) {
		$pdf->AddPage();
	}

	$a4ColFactor = 1.8;
	$a4TotalWidth = (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor) + (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor)
		+ (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor) + (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor);

	$pdf->Cell($colLeftL / 2, $lineHeight * 1.5, "", 0, 0, 'C');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell($a4TotalWidth, $lineHeight, "Steuern Bericht", 0, 1, 'L');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
		$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, 1, "", 0, 1, 'C');

	$kassastand = $value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;
	$sql_steuern = mysql_query("SELECT tax_rate, SUM(gesamt_betrag) AS betrag 
						FROM abgeschlossener_bon_steuern
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_steuern.bon_id=abgeschlossener_bon.bon_id
						WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUser . " GROUP BY tax_rate");

	if (!$sql_steuern) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	$steuer_betrag_summe = 0;
	$steuer_summe = 0;
	$steuer_summe_brutto = 0;

	$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Steuersatz", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, "Ums. Netto", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Ums. Brutto", 0, 1, 'R');

	$pdf->SetFont($pdfFont, '', 11);

	while ($row_steuern = mysql_fetch_assoc($sql_steuern)) {
		$steuersatz = $row_steuern['tax_rate'] * 100;
		$steuer_betrag = $row_steuern['betrag'];
		$steuer_betrag_summe += $steuer_betrag;

		$steuer = $steuer_betrag * $row_steuern['tax_rate'];
		$steuer_summe += $steuer;

		$steuer_brutto = $steuer_betrag + $steuer;
		$steuer_summe_brutto += $steuer_brutto;

		$prtSteuer = round($steuer_brutto, 2) - round($steuer_betrag, 2);

		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, $steuersatz . "%", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($steuer_betrag, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($steuer_brutto, 2, ",", "."), 0, 1, 'R');
	}
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C'); 	#  trennlinie unterhalb
		$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$prtSteuer_summe = round($steuer_summe_brutto, 2) - round($steuer_betrag_summe, 2);

	$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Summe", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($steuer_betrag_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($steuer_summe_brutto, 2, ",", "."), 0, 1, 'R');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
		$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
	}
	#$pdf->Cell(0, $lineHeight*$sectorSeperatFactor, "", 0, 1, 'C');

	# Ausgabe nach Gutscheine aus Gutschein Funktion

	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {

		if ($pdf->GetY() > 220) {
			$pdf->AddPage();
		}

		$pdf->Cell(0, $lineHeight * $sectorSeperatFactor, "", 0, 1, 'C');
		$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($a4TotalWidth, $lineHeight, "Gutschein Bericht", 0, 1, 'L');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, 1, "", 0, 1, 'C');


		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, " ", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO * $a4ColFactor) * $a4ColFactor, $lineHeight, "Anzahl", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG * $a4ColFactor) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO * $a4ColFactor) * $a4ColFactor, $lineHeight, "Betr. Brutto", 0, 1, 'R');

		$gsQlLoad = mysql_fetch_array(mysql_query("SELECT SUM(betrag_geladen) AS gsSumme, COUNT(betrag_geladen) AS gsAnzahl, 
										SUM(betrag_geladen-(betrag_geladen/(1+tax))) AS gsTaxSum 
									FROM gutscheine 
									LEFT JOIN gutschein_buchungen ON gutscheine.gs_id = gutschein_buchungen.gs_id
									WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUserGs . " AND bon_id = 0 AND LOWER(verkaufsart) <> 'gskostenlos'  "));

		$gsQlEinl = mysql_fetch_array(mysql_query("SELECT COUNT(abgeschlossener_bon.bon_id) AS gsAnzahl, gesamt_summe, abgeschlossener_bon_zahlung.Name AS zaName,
															SUM(zahlbetrag) AS gsSumme, 
															SUM((abgeschlossener_bon_steuern.gesamt_betrag*(1+abgeschlossener_bon_steuern.tax_rate)) - abgeschlossener_bon_steuern.gesamt_betrag) AS gsTaxSum
													FROM abgeschlossener_bon
													LEFT JOIN abgeschlossener_bon_steuern ON abgeschlossener_bon.bon_id = abgeschlossener_bon_steuern.bon_id							
													LEFT JOIN abgeschlossener_bon_zahlung ON abgeschlossener_bon.bon_id = abgeschlossener_bon_zahlung.bon_id
													LEFT JOIN zahlungsart ON zahlungsart.Name = abgeschlossener_bon_zahlung.Name
													WHERE kassa_abschluss_id = '" . $id . "' " . $whereOnUser . " AND zahlungsart.gs_zahlung = 1"));

		$pdf->SetFont($pdfFont, '', 11);

		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Aufladung", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, $gsQlLoad['gsAnzahl'], 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($gsQlLoad['gsTaxSum'], 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($gsQlLoad['gsSumme'], 2, ",", "."), 0, 1, 'R');

		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', "Einlösung"), 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, $gsQlEinl['gsAnzahl'], 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($gsQlEinl['gsTaxSum'], 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($gsQlEinl['gsSumme'], 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		#$pdf->Cell(0, $lineHeight*2, "", 0, 1, 'C');

	}

	# Ausgabe Product's Category's

	if ($pdf->GetY() > 220) {
		$pdf->AddPage();
	}

	if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {


		$pdf->Cell(0, $lineHeight * $sectorSeperatFactor, "", 0, 1, 'C');
		$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($a4TotalWidth, $lineHeight, "Produkte Bericht", 0, 1, 'L');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$prodColumnWidth = (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor) + (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor);

		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell($prodColumnWidth, $lineHeight, "Artikel Bez.", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Anzahl", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Ums. Brut.", 0, 1, 'R');

		$prodQl = mysql_query("SELECT abgeschlossener_bon.bon_id, kassa_abschluss_id, abgeschlossener_bon_produkte.PRINTNAME AS artPrintname, 
								abgeschlossener_bon_produkte.CATEGORY AS catID, SUM(pricesell*stueck) AS prodSumme, SUM(pricesell*stueck*tax_rate) AS prodSteuer, abgeschlossener_bon_produkte.produkt_id, SUM(abgeschlossener_bon_produkte.stueck) AS prodStueck	
						FROM abgeschlossener_bon
						LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon_produkte.bon_id = abgeschlossener_bon.bon_id
						LEFT JOIN categories ON abgeschlossener_bon_produkte.CATEGORY = categories.id
						WHERE kassa_abschluss_id ='" . $id . "'  AND has_childs=0 " . $whereOnUser . "
						GROUP BY abgeschlossener_bon_produkte.PRINTNAME ORDER BY abgeschlossener_bon_produkte.REFERENCE ASC, artPrintname ASC");

		$prodSteuerSumme = 0;
		$prodNettoSumme = 0;
		$prodQtySumme = 0;

		$pdf->SetFont($pdfFont, '', 11);

		while ($prodR = mysql_fetch_array($prodQl)) {

			$prodSteuerSumme += $prodR['prodSteuer'];
			$prodNettoSumme += $prodR['prodSumme'];
			$prodQtySumme += $prodR['prodStueck'];

			$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
			$pdf->Cell($prodColumnWidth, $lineHeight, iconv('UTF-8', 'windows-1252', $prodR['artPrintname']), 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prodR['prodStueck'], 1, ",", ""), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($prodR['prodSumme'] + $prodR['prodSteuer'], 2, ",", "."), 0, 1, 'R');
			# brutto summe auf produkt

		}
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell($prodColumnWidth, $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prodQtySumme, 1, ",", ""), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($prodNettoSumme + $prodSteuerSumme, 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		#$pdf->Cell(0, $lineHeight*2, "", 0, 1, 'C');

	}

	if ($pdf->GetY() > 220) {
		$pdf->AddPage();
	}


	if (defined('FUNKTION_KASSENABSCHL_CATEGORYLISTE') && strtolower(FUNKTION_KASSENABSCHL_CATEGORYLISTE) == 'ja') {
		$pdf->Cell(0, $lineHeight * $sectorSeperatFactor, "", 0, 1, 'C');

		$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($a4TotalWidth, $lineHeight, "Warengruppen Bericht", 0, 1, 'L');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Warengr.", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, "Ums. Netto", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Ums. Brutto", 0, 1, 'R');

		$sql_kategorien = mysql_query("SELECT categories.name AS kategorie, SUM(pricesell*stueck) AS summe, SUM(pricesell*stueck*tax_rate) AS steuer , abgeschlossener_bon_produkte.CATEGORY AS catID 
								FROM abgeschlossener_bon_produkte
								LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
								LEFT JOIN categories ON abgeschlossener_bon_produkte.category=categories.id
								WHERE kassa_abschluss_id='" . $id . "' AND has_childs=0 " . $whereOnUser . " GROUP BY kategorie ORDER BY categories.anzeige_reihenfolge ASC, categories.NAME ASC");

		if (!$sql_kategorien) {
			$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;

		$pdf->SetFont($pdfFont, '', 11);

		while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
			$summe = $row_kategorien['summe'];
			$steuer = $row_kategorien['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			if ($row_kategorien['catID'] == 0) $categoryName = "Rabatte";
			else $categoryName = $row_kategorien['kategorie'];

			$prtSteuer = round($brutto, 2) - round($summe, 2);

			$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', $categoryName), 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
		}

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe_gesamt, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');
		$pdf->SetFont($pdfFont, '', 11);

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');

		# warengruppen Bericht ende
	}

	if ($pdf->GetY() > 220) {
		$pdf->AddPage();
	}


	# Sondertische suchen und diese ausweisen
	if (strtolower(GASTRO_VERSION) == 'ja') {
		$sonderTischerRes = "";

		$getSonderT = mysql_query("SELECT * FROM ((SELECT '' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon.bon_id = abgeschlossener_bon_produkte.bon_id
							WHERE kassa_abschluss_id=" . $id . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)							
							UNION ALL
							(SELECT 'zahlungFrei' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte_frei.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte_frei.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon_frei ON abgeschlossener_bon_frei.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte_frei ON abgeschlossener_bon_frei.bon_id = abgeschlossener_bon_produkte_frei.bon_id
							WHERE kassa_abschluss_id=" . $id . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)) AS zahlungFrei
							ORDER BY tischId ASC");

		$zahlungFreiArray = array();
		$zahlungArray = array();

		if (mysql_num_rows($getSonderT) > 0) {

			while ($getSonderR = mysql_fetch_array($getSonderT)) {
				$taxVal = $getSonderR['summeSummeBrutto'] - $getSonderR['summeSummeNetto'];
				$zalungFreiHeader = "";
				if ($getSonderR['zahlungC'] == "zahlungFrei") {
					$zalungFreiHeader = "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite bbold'>Zahlung Frei</div>";
					array_push($zahlungFreiArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
				} else {
					array_push($zahlungArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
				}
			}

			if ($pdf->GetY() > 220) {
				$pdf->AddPage();
			}

			#	$pdf->Cell(0, $lineHeight*$sectorSeperatFactor, "", 0, 1, 'C');
			$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
			$pdf->SetFont($pdfFont, 'B', 11);
			$pdf->Cell(0, $lineHeight, "Tische gesondert Ausweisen", 0, 1, 'L');

			$outputSonderTable = "";
			if (count($zahlungFreiArray) > 0) {
				$sumNetF = 0;
				$sumTaxF = 0;
				$sumBrutF = 0;
				$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
				$pdf->Cell(0, $lineHeight, "Sonder Tische Zahlung Frei", 0, 1, 'L');
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, .5, "", 0, 1, 'C');
				} else {
					$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
					$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
				}

				$pdf->Cell(0, 1, "", 0, 1, 'C');
				$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Tisch", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, "Netto", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Brutto", 0, 1, 'R');

				$pdf->SetFont($pdfFont, '', 11);

				for ($i = 0; $i < count($zahlungFreiArray); $i++) {
					$taxVal = round($zahlungFreiArray[$i][3], 2) - round($zahlungFreiArray[$i][1], 2);
					if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
						$posY = $pdf->GetY();
						$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
						$pdf->MultiCell(
							preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ),
							$lineHeight,
							iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0]),
							0,
							'L',
							0
						);
						$posY_2 = $pdf->GetY();
						$pdf->SetXY($posX, $posY);
						$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($zahlungFreiArray[$i][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($zahlungFreiArray[$i][3], 2, ",", "."), 0, 1, 'R');

						$pdf->SetY($posY_2);
					} else {
						$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0]), 0, 0, 'L');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($zahlungFreiArray[$i][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($zahlungFreiArray[$i][3], 2, ",", "."), 0, 1, 'R');
					}

					$sumNetF += $zahlungFreiArray[$i][1];
					$sumTaxF += $zahlungFreiArray[$i][2];
					$sumBrutF += $zahlungFreiArray[$i][3];
				}

				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else {
					$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
					$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
				}
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

				$prtSteuer_summeF = round($sumBrutF, 2) - round($sumNetF, 2);
				$pdf->SetFont($pdfFont, 'B', 11);
				$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Summe", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($sumNetF, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer_summeF, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($sumBrutF, 2, ",", "."), 0, 1, 'R');
				$pdf->SetFont($pdfFont, '', 11);
				if (count($zahlungArray) > 0) $pdf->Cell(0, $lineHeight, "", 0, 1, 'C');
			}
			if (count($zahlungArray) > 0) {
				$sumNet = 0;
				$sumTax = 0;
				$sumBrut = 0;

				if ($pdf->GetY() > 220) {
					$pdf->AddPage();
				}

				$pdf->SetFont($pdfFont, 'B', 11);
				$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
				$pdf->Cell($a4TotalWidth + ($colLeftL / 2), $lineHeight, "Sonder Tische Zahlung", 0, 1, 'L');



				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, .5, "", 0, 1, 'C');
				} else {
					$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
					$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
				}

				$pdf->Cell(0, 1, "", 0, 1, 'C');
				$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Tisch", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, "Netto", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Brutto", 0, 1, 'R');

				$pdf->SetFont($pdfFont, '', 11);

				for ($j = 0; $j < count($zahlungArray); $j++) {
					$taxVal = round($zahlungArray[$j][3], 2) - round($zahlungArray[$j][1], 2);
					if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
						$posY = $pdf->GetY();
						$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
						$pdf->MultiCell(
							preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ),
							$lineHeight,
							iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0]),
							0,
							'L',
							0
						);
						$posY_2 = $pdf->GetY();
						$pdf->SetXY($posX, $posY);
						$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($zahlungArray[$j][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($zahlungArray[$j][3], 2, ",", "."), 0, 1, 'R');

						$pdf->SetY($posY_2);
					} else {
						$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0]), 0, 0, 'L');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($zahlungArray[$j][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($zahlungArray[$j][3], 2, ",", "."), 0, 1, 'R');
					}

					$sumNet += $zahlungArray[$j][1];
					$sumTax += $zahlungArray[$j][2];
					$sumBrut += $zahlungArray[$j][3];
				}
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else {
					$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
					$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
				}
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

				$prtSteuer_summe = round($sumBrut, 2) - round($sumNet, 2);
				$pdf->SetFont($pdfFont, 'B', 11);
				$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Summe", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($sumNet, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($sumBrut, 2, ",", "."), 0, 1, 'R');
				$pdf->SetFont($pdfFont, '', 11);
			}
		}

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');
	}


	if ($pdf->GetY() > 220) {
		$pdf->AddPage();
	}


	# Storno Bericht
	if (defined('KASSENABSCHLUSS_STORNOS_AUSWEISEN') && strtolower(KASSENABSCHLUSS_STORNOS_AUSWEISEN) == 'ja') {



		$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($a4TotalWidth, $lineHeight, "Storno Bericht Benutzer", 0, 1, 'L');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, 1, "", 0, 1, 'C');



		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Benutzer", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, "Stor. Netto", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Stor. Brutto", 0, 1, 'R');

		$sql_storno = mysql_query("select benutzer.name as stornoBenutzer, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, storno
							FROM abgeschlossener_bon_produkte
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
							LEFT JOIN benutzer ON abgeschlossener_bon.storno_person_id=benutzer.id
							WHERE abgeschlossener_bon_produkte.stueck < 0  AND has_childs=0 AND kassa_abschluss_id='" . $id . "' " . $whereOnUser . "
							GROUP BY stornoBenutzer ORDER BY stornoBenutzer");

		if (!$sql_storno) {
			$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;
		$pdf->SetFont($pdfFont, '', 11);


		while ($row_storno = mysql_fetch_assoc($sql_storno)) {
			$summe = $row_storno['summe'];
			$steuer = $row_storno['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			$prtSteuer = round($brutto, 2) - round($summe, 2);


			if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $row_storno['stornoBenutzer'])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor) {
				$posY = $pdf->GetY();
				$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
				$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor;

				$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['stornoBenutzer']), 0, 'L', 0);
				$posY_2 = $pdf->GetY();
				$pdf->SetXY($posX + $colLeftL, $posY);
				$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
				$pdf->SetY($posY_2);
			} else {
				$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['stornoBenutzer']), 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
			}
		}

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe_gesamt, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');
		$pdf->SetFont($pdfFont, '', 11);

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');


		if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {

			$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
			$pdf->SetFont($pdfFont, 'B', 11);
			$pdf->Cell($a4TotalWidth, $lineHeight, "Storno Bericht Produkte", 0, 1, 'L');

			if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
				$pdf->Cell(0, .5, "", 0, 1, 'C');
			} else {
				$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
				$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
			}
			$pdf->Cell(0, 1, "", 0, 1, 'C');

			$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Produkte", 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, "Stor. Netto", 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Stor. Brutto", 0, 1, 'R');

			$sql_storno = mysql_query("select abgeschlossener_bon_produkte.NAME AS prodName, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, storno
										FROM abgeschlossener_bon_produkte
										LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
										WHERE abgeschlossener_bon_produkte.stueck < 0  AND has_childs=0 AND kassa_abschluss_id='" . $id . "' " . $whereOnUser . "
										GROUP BY prodName ORDER BY prodName");

			if (!$sql_storno) {
				$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
				exit(1);
			}
			$summe_gesamt = 0;
			$steuer_gesamt = 0;
			$brutto_gesamt = 0;
			$pdf->SetFont($pdfFont, '', 11);


			while ($row_storno = mysql_fetch_assoc($sql_storno)) {

				$summe = $row_storno['summe'];
				$steuer = $row_storno['steuer'];
				$brutto = $summe + $steuer;
				$summe_gesamt += $summe;
				$steuer_gesamt += $steuer;
				$brutto_gesamt += $brutto;

				$prtSteuer = round($brutto, 2) - round($summe, 2);

				if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $row_storno['prodName'])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor) {

					$posY = $pdf->GetY();
					$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
					$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor;

					$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['prodName']), 0, 'L', 0);
					$posY_2 = $pdf->GetY();
					$pdf->SetXY($posX + $colLeftL, $posY);
					$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
					$pdf->SetY($posY_2);
				} else {
					$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['prodName']), 0, 0, 'L');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
				}
			}

			if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
			} else {
				$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
				$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
			}
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

			$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

			$pdf->SetFont($pdfFont, 'B', 11);
			$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Summe", 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, number_format($summe_gesamt, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');
			$pdf->SetFont($pdfFont, '', 11);
		}

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');
	}

	#    benutzer berichte beginnt

	if ($pdf->GetY() > 220) {
		$pdf->AddPage();
	}

	$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell($a4TotalWidth, $lineHeight, "Benutzer Bericht", 0, 1, 'L');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
		$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, 1, "", 0, 1, 'C');

	$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Benutzer", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, "Anz. Bon", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, "Steuer", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, "Ums. Brutto", 0, 1, 'R');

	/* Benutzer ausgeben - Variablen hab ich gleich gelassen von Kategorien, - nicht verwirren lassen - */
	$sql_kategorien = mysql_query("SELECT benutzer.name AS benutzer, SUM(pricesell*stueck) AS summe, SUM(pricesell*stueck*tax_rate) AS steuer,
							COUNT(DISTINCT abgeschlossener_bon.bon_id) AS anzBons
						FROM abgeschlossener_bon_produkte
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN benutzer ON abgeschlossener_bon.verkaufer_id=benutzer.id
						WHERE kassa_abschluss_id='" . $id . "'  AND has_childs=0 " . $whereOnUser . " GROUP BY benutzer");

	if (!$sql_kategorien) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	$summe_gesamt = 0;
	$steuer_gesamt = 0;
	$brutto_gesamt = 0;
	$gesAnzBons = 0;
	$pdf->SetFont($pdfFont, '', 11);

	while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
		$summe = $row_kategorien['summe'];
		$steuer = $row_kategorien['steuer'];
		$brutto = $summe + $steuer;
		$summe_gesamt += $summe;
		$steuer_gesamt += $steuer;
		$brutto_gesamt += $brutto;
		$gesAnzBons += $row_kategorien['anzBons'];

		$prtSteuer = round($brutto, 2) - round($summe, 2);
		$bonRevUser = false;
		$bonRevUser = " (" . number_format(round($brutto, 2) / $row_kategorien['anzBons'], 2, ",", ".") . ")";

		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, $row_kategorien['benutzer'], 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, $row_kategorien['anzBons'] . $bonRevUser, 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
	}

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
		$pdf->Cell($a4TotalWidth, 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);
	$bonRevSum = false;
	if ($gesAnzBons > 0) $bonRevSum = " (" . number_format(round($brutto_gesamt, 2) / $gesAnzBons, 2, ",", ".") . ")";

	$pdf->SetFont($pdfFont, 'B', 11);
	$pdf->Cell($colLeftL, 2, "", 0, 0, 'C');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor, $lineHeight, "Summe", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor, $lineHeight, $gesAnzBons . $bonRevSum, 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor, $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor, $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');
	$pdf->SetFont($pdfFont, '', 11);

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else {
		$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
		$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
	}
	$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');



	# Abfrage, gibt es EC Terminals
	// ****************************************
	// EC Terminals abfragen

	if ($pdf->GetY() > 220) {
		$pdf->AddPage();
	}

	$sql = "SELECT ce_balance from kassa_abschluesse WHERE id='" . $id . "' AND ce_balance != ''";
	$sqlQ = mysql_query($sql);

	#$ceFontSize=preg_replace('/[^0-9\.]+/i', '', EC_AUSDRUCK_FONTSIZE);
	#$ec_lineHeight=$ceFontSize/2.5;

	if (mysql_num_rows($sqlQ) > 0) {
		$pdf->Cell($colLeftL / 2, $lineHeight, "", 0, 0, 'C');
		$pdf->SetFont($pdfFont, 'B', 11);
		$pdf->Cell($a4TotalWidth, $lineHeight, "EC-Terminal Abrechnung", 0, 1, 'L');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else {
			$pdf->Cell($colLeftL / 2, 2, "", 0, 0, 'C');
			$pdf->Cell($a4TotalWidth + ($colLeftL / 2), 2, "", 'B', 1, 'C');
		}
		$pdf->SetFont($pdfFont, '', 11);
		$pdf->Cell(0, 1, "", 0, 1, 'C');
		$ceCellWidthL = (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) * $a4ColFactor) + (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO) * $a4ColFactor)
			+ (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG) * $a4ColFactor);
		$ceCellWidthR = (preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO) * $a4ColFactor);


		while ($sqlP = mysql_fetch_array($sqlQ)) {
			$output = $sqlP['ce_balance'];
		}


		$pdf->Cell($colLeftL, $lineHeight, "", 0, 0, 'C');
		$pdf->Cell($ceCellWidthL, $lineHeight, "EC-Balance", 0, 0, 'L');
		$pdf->Cell($ceCellWidthR, $lineHeight, number_format($output, 2, ",", "."), 0, 1, 'R');




		#	$pdf->Cell(0, $lineHeight*1.5, "", 0, 1, 'C');			
		#	$pdf->Cell(0, $lineHeight, "EC-Terminal Abrechnung ", 0, 1, 'L');
		#	$ceFontSize=preg_replace('/[^0-9\.]+/i', '', EC_AUSDRUCK_FONTSIZE);
		#	$pdf->SetFont('Courier', 'B', $ceFontSize);
	}

	# ********** End EC Terminals

	$checkLic = checkLicenseViolations('kassenabschluss', 'pdfPrint', $id);

	if ($checkLic[0] == true) {
		$sizeFactor = 1.8;

		$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');
		$pdf->SetFont($pdfFont, 'B', $fontSize * $sizeFactor);

		$pdf->Cell(10, $lineHeight * 2, "", 0, 0, 'C');
		$pdf->MultiCell(165, $lineHeight * $sizeFactor, iconv('UTF-8', 'windows-1252', $checkLic[1]), 'B', 'C');
		$pdf->SetFont($pdfFont, 'B', 11);
		#$pdf->SetFont($pdfFont, '', $pdfFontSize);
	}

	$outputTarget = '';
	$drucker = $printer['win_drucker_name'];

	$outputTarget = __DIR__ . "\docs\\" . $kassen_id . "_A4_kassenabschl_" . $bon_id . "_" . date('d_m_H_i') . ".pdf";
	$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";

	$writeFile = $pdf->Output($outputTarget, "F");

	if ($requestFunktion == 'kassenabschl_mail_senden' && $backupFileSenden == "autobackupMailSenden") {
		sitpos_welt_anzeigen("Backup wird durchgefuehrt ...");
		$autoBackupLink = run_auto_backup_command('kassenabschluss');
		$returnArray = array($writeFile, $outputTarget, $autoBackupLink[3]);
		echo json_encode($returnArray);
	} else if ($requestFunktion == 'kassenabschl_mail_senden' && $backupFileSenden != "autobackupMailSenden") {
		// dieser Code kann glaube ich nie erreicht werden --- RFR!
		$returnArray = array($writeFile, $outputTarget, "");
		echo json_encode($returnArray);
	} else {
		#exec($command, $output, $error_code);
		$error_code = seiteDrucken($drucker, $outputTarget, "ecKassenabschl");
	}
}



function kassenabschluss_ausdrucken_pdf($bon_id = false, $bonHeight = false)
{

	if (isset($_POST['requestId']) && $_POST['requestId'] != "") $requestId = $_POST['requestId'];
	if (isset($_POST['printRequest']) && $_POST['printRequest'] != "") $printRequest = $_POST['printRequest'];
	else $printRequest = false;
	if (isset($_POST['requestFunktion']) && $_POST['requestFunktion'] != "") $requestFunktion = $_POST['requestFunktion'];
	else $requestFunktion = "";
	if (isset($_POST['backupFileSenden']) && $_POST['backupFileSenden'] == "autobackupMailSenden") $backupFileSenden = $_POST['backupFileSenden'];
	else $backupFileSenden = false;

	if ($bon_id == false) $id = $requestId;
	else $id = $bon_id;


	$userN = false;

	if (isset($_POST['abschlOnUser']) && $_POST['abschlOnUser'] != '') {
		$userId = preg_replace('/[^\d]/', '', $_POST['abschlOnUser']);
		if ($userId > 0) {
			$userN = mysql_fetch_array(mysql_query("SELECT name FROM benutzer WHERE id = " . $userId . ""));
		} else $userId = false;
	} else $userId = false;


	#########################################################################################################################
	#	
	#   Abfangen wenn A4 Ausdruck .....
	#
	#			#$bon_id=false, $bonHeight=false, $requestId=false, $printRequest=false, $requestFunktion=false, $backupFileSenden=false
	#			#file_put_contents('kpcheckit.txt', "\n".basename( __FILE__)." / ". __LINE__ ." / ".date("Ymd H:i"). #"\n".$abschl_id."-false-".$id."-".$printRequest."-".$requestFunktion."-".$backupFileSenden."-".$userId."-".$userN ."\n", FILE_APPEND);
	#
	#

	if (defined('AUSDRUCK_KASSENABSCHLUSS_A4') && strtolower(AUSDRUCK_KASSENABSCHLUSS_A4) == 'ja') {
		$abschl_id = $id;				# je nachdem woher es kommt, als Post request od als übergebenes Param

		kassenabschluss_ausdrucken_a4($abschl_id, false, $id, $printRequest, $requestFunktion, $backupFileSenden, $userId, $userN);
		exit(0);
	}

	$result = mysql_query("SELECT kassa_abschluesse.id as bon_id, kassen_id, datum_start, datum_ende, benutzer_eroeffnung.name as benutzer_eroeffnung, 
						benutzer_abschluss.name as benutzer_abschluss, kassa_offen, wechselgeld
						FROM kassa_abschluesse 
						LEFT JOIN benutzer AS benutzer_eroeffnung on kassa_abschluesse.verkaufer_id=benutzer_eroeffnung.id
						LEFT JOIN benutzer AS benutzer_abschluss on kassa_abschluesse.verkaufer_id_abschluss=benutzer_abschluss.id 
						WHERE kassa_abschluesse.id='$id'");

	if ($result) {
		$value = mysql_fetch_object($result);
		$kassen_id = $value->kassen_id;
	} else {
		print_fehler("Fehler beim Suchen des Kassenbschlusses $id");
		exit;
	}

	$headArray = kopfzeile_ausdrucken('', 'printPdf');



	if ($bonHeight == false) $bonHeight = AUSDRUCK_PDF_GESAMTE_HOEHE;

	require_once('include/fpdf.php');

	$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, druckbreite  FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));

	if ($printer['druckbreite'] == true && $printer['druckbreite'] > 35) $bonWidth = $printer['druckbreite'];
	else $bonWidth = preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);

	$drucker = $printer[0];

	$margin = $printer[1];
	$margins = explode(",", $margin);

	if (isset($margins[2])) $marginLR = preg_replace('/\D/', '', $margins[2]);
	else $marginLR = 0;
	if (isset($margins[1])) $marginBottom = preg_replace('/\D/', '', $margins[1]);
	else $marginBottom = 0;
	if (isset($margins[0])) $marginTop = preg_replace('/\D/', '', $margins[0]);
	else $marginTop = 0;

	$pdf = new FPDF('P', 'mm', array($bonWidth, $bonHeight));
	$pdf->SetMargins($marginLR, $marginTop, 0);
	$pdf->AddPage();

	$fontConfig = SCHRIFT_AUSDRUCK_KASSENABSCHL_PDF;

	if (
		strpos(strtolower($fontConfig), 'arial') !== false  || strpos(strtolower($fontConfig), 'helvetica') !== false ||
		strpos(strtolower($fontConfig), 'sans serif') !== false
	) {
		$pdfFont = "Arial";
	} else if (
		strpos(strtolower($fontConfig), 'times') !== false  || strpos(strtolower($fontConfig), 'roman') !== false ||
		(strpos(strtolower($fontConfig), 'serif') !== false &&  strpos(strtolower($fontConfig), 'sans') == false)
	) {
		$pdfFont = "Times";
	} else if (strpos(strtolower($fontConfig), 'courier') !== false) {
		$pdfFont = "Courier";
	} else {
		$pdfFont = "Arial";
	}

	preg_match('/\d+px | \d+pt/', $fontConfig, $m);
	preg_match('/\d+/', $m[0], $match);
	$pdfFontSize = $match[0];				#  stimmt nicht wirklich, fpdf verwendet hier pt und nciht px, pt ist auf inch bezogen, px auf sreen dott size.

	$lineHeight = $pdfFontSize / 2.5;

	$pdf->SetFont($pdfFont, '', $pdfFontSize);


	$istVordruck = false;

	$offen = $value->kassa_offen ? 'Ja' : 'Nein';
	if ($value->kassa_offen && $userId == false) {
		$pdf->Cell(0, $lineHeight, "!! KASSAABSCHLUSS VORDRUCK !!", 0, 1, 'C');						#echo "<br /><br />"."!! KASSAABSCHLUSS VORDRUCK !!"."<br /><br /><br />";
		$pdf->Cell(0, $lineHeight, "", 0, 1, 'C');

		$istVordruck = true;
	}

	if ($userId != false) {
		$repDatum = date('j.n.Y H:i:s');
		$pdf->SetFont($pdfFont * 1.5, 'B', $pdfFontSize);
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, "Abrechnungs Ausdruck", 0, 1, 'C');
		$pdf->SetFont($pdfFont, '', $pdfFontSize);
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv("UTF-8", "windows-1252", "Mitarbeiter: " . $userN[0]), 0, 1, 'C');
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, "Datum: " . $repDatum, 0, 1, 'C');
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight * 1.5, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');

	for ($i = 0; $i < sizeof($headArray); $i++) {
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($headArray[$i])), 0, 1, 'C');
	}
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, 2, "", 0, 1, 'C');
	} else $pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Fa kopf
	$pdf->Cell(0, $lineHeight, "", 0, 1, 'C'); 	#  abstand unterhalb trennlinie

	$pdf->Cell(0, $lineHeight, "Kassenabschluss ID : " . $value->bon_id, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Kassen ID : " . $kassen_id, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Datum von : " . $value->datum_start, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Datum bis : " . $value->datum_ende, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, iconv("UTF-8", "windows-1252", "Eröffnet von : " . $value->benutzer_eroeffnung), 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, iconv("UTF-8", "windows-1252", "Abgeschlossen von : " . $value->benutzer_abschluss), 0, 1, 'L');
	if ($istVordruck == true) {
		if (!isset($_SESSION)) session_start();
		$pdf->Cell(0, $lineHeight, iconv("UTF-8", "windows-1252", "Vordruck erstellt von : " . $_SESSION["userName"]), 0, 1, 'L');
	}
	$pdf->Cell(0, $lineHeight, "Kassa offen : " . $offen, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "", 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Wechselgeld : " . number_format($value->wechselgeld, 2, ",", "."), 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "", 0, 1, 'L');


	$pdf->Cell(0, $lineHeight, "Einnahmen Bericht", 0, 1, 'L');
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
	$pdf->Cell(0, 1, "", 0, 1, 'C');


	/* Gutschein Funktion lizenziert und freigegeben  */
	$gsEnabled = false;
	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {
		$gsEnabled = true;
	}

	/* Zahlungen ausgeben */
	$kassastand = $value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;

	if ($userId > 0) $whereOnUser = "AND verkaufer_id = " . $userId . " ";
	else $whereOnUser = "";

	$sql = "select abgeschlossener_bon_zahlung.name as name, SUM(zahlbetrag) as betrag, kassastand_wirksam, einnahmen_wirksam 
						FROM abgeschlossener_bon_zahlung
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_zahlung.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN zahlungsart ON abgeschlossener_bon_zahlung.name=zahlungsart.name
						WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUser . " GROUP BY name";
						
	$sql_zahlungen = mysql_query($sql);
	if (!$sql_zahlungen) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		if ($row_zahlungen['kassastand_wirksam']) $bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		if ($row_zahlungen['einnahmen_wirksam']) $einnahmen = $einnahmen + $row_zahlungen['betrag'];
		$betrag = number_format($row_zahlungen['betrag'], 2, ",", ".");


		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, iconv('UTF-8', 'windows-1252', $row_zahlungen['name']), 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .32, $lineHeight, $betrag, 0, 1, 'R');
	}


	// Ein- Auszahlungen
	if ($userId > 0) $whereOnUserEA = "AND ein_aus_zahlungen.verkaufer_id = " . $userId . " ";
	else $whereOnUserEA = "";
	$sql_zahlungen = mysql_query("select typ, SUM(gesamt_betrag) as betrag
						FROM ein_aus_zahlungen
						LEFT JOIN kassa_abschluesse ON ein_aus_zahlungen.kassa_abschluss_id=kassa_abschluesse.id
						WHERE kassa_abschluesse.id='" . $id . "' " . $whereOnUserEA . " GROUP BY typ");

	if (!$sql_zahlungen) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		$betrag = $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind immer Kassawirksam
		$bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind nicht Einnahmenwirksam
		$typ = $row_zahlungen['typ'];
		if ($typ == 'ein') $text = "Bar Einzahlung";
		else {
			$text = "Bar Auszahlung";
		}

		$betrag = number_format($row_zahlungen['betrag'], 2, ",", ".");
		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, $text, 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .32, $lineHeight, $betrag, 0, 1, 'R');
	}
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	if ($bar_einnahmen < 0) $einnamenTxt = "Bar Ausgaben";
	else $einnamenTxt = "Bar Einnahmen";
	if ($einnahmen < 0) $tagesEinnamenTxt = "Tageausgaben (ohne GS)";
	else $tagesEinnamenTxt = "Tageseinnahmen (ohne GS)";

	$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, $tagesEinnamenTxt, 0, 0, 'R');
	$pdf->Cell(($bonWidth - ($marginLR)) * .32, $lineHeight, number_format($einnahmen, 2, ",", "."), 0, 1, 'R');
	$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, $einnamenTxt, 0, 0, 'R');
	$pdf->Cell(($bonWidth - ($marginLR)) * .32, $lineHeight, number_format($bar_einnahmen, 2, ",", "."), 0, 1, 'R');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, 2, "", 0, 1, 'C');
	} else $pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb
	$pdf->Cell(0, $lineHeight / 2, "", 0, 1, 'C'); 	#  abstand unterhalb trennlinie


	if ($userId > 0) $whereOnUserGs = "AND gutschein_buchungen.verkaufer_id = " . $userId . " ";
	else $whereOnUserGs = "";

	$gsVk = mysql_query("SELECT betrag_geladen AS gutscheinVerk
							FROM gutschein_buchungen
							LEFT JOIN zahlungsart ON zahlungsart.Name = gutschein_buchungen.zahlungsart_name
							WHERE kassa_abschluss_id= " . $id . " " . $whereOnUserGs . " AND LOWER(verkaufsart) = 'gsverkauf' AND zahlungsart.kassastand_wirksam = 1");
	$sumGsVk = 0;
	while ($gsVerk = mysql_fetch_array($gsVk)) {
		$sumGsVk += $gsVerk['gutscheinVerk'];
	}
	if ($sumGsVk > 0) {
		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, "Einnahmen aus GS Ausstellen:", 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .32, $lineHeight, number_format($sumGsVk, 2, ",", "."), 0, 1, 'R');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, 2, "", 0, 1, 'C');
		} else $pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb		
	}

	$kassastand = $kassastand + $bar_einnahmen + $sumGsVk;

	if ($userId == false) {
		$pdf->SetFont($pdfFont, 'B', $pdfFontSize);
		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight * 1.5, "Neuer Kassastand", 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .32, $lineHeight * 1.5, number_format($kassastand, 2, ",", "."), 0, 1, 'R');
		$pdf->SetFont($pdfFont, '', $pdfFontSize);
	}

	/* Ende Zahlungen */
	$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
	$pdf->Cell(0, $lineHeight, "Steuern Bericht", 0, 1, 'L');
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
	$pdf->Cell(0, 1, "", 0, 1, 'C');

	$kassastand = $value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;
	$sql_steuern = mysql_query("SELECT tax_rate, SUM(gesamt_betrag) AS betrag 
						FROM abgeschlossener_bon_steuern
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_steuern.bon_id=abgeschlossener_bon.bon_id
						WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUser . " GROUP BY tax_rate");

	if (!$sql_steuern) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	$steuer_betrag_summe = 0;
	$steuer_summe = 0;
	$steuer_summe_brutto = 0;


	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Steuer", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Ums. Netto", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brutto", 0, 1, 'R');

	while ($row_steuern = mysql_fetch_assoc($sql_steuern)) {
		$steuersatz = $row_steuern['tax_rate'] * 100;
		$steuer_betrag = $row_steuern['betrag'];
		$steuer_betrag_summe += $steuer_betrag;

		$steuer = $steuer_betrag * $row_steuern['tax_rate'];
		$steuer_summe += $steuer;

		$steuer_brutto = $steuer_betrag + $steuer;
		$steuer_summe_brutto += $steuer_brutto;

		$prtSteuer = round($steuer_brutto, 2) - round($steuer_betrag, 2);

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Steuer " . $steuersatz . "%", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($steuer_betrag, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($steuer_brutto, 2, ",", "."), 0, 1, 'R');
	}
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$prtSteuer_summe = round($steuer_summe_brutto, 2) - round($steuer_betrag_summe, 2);

	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($steuer_betrag_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($steuer_summe_brutto, 2, ",", "."), 0, 1, 'R');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", 'B', 1, 'C'); 	#  trennlinie unterhalb


	# Ausgabe nach Gutscheine aus Gutschein Funktion

	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {
		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "Gutscheine Bericht", 0, 1, 'L');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
		$pdf->Cell(0, 1, "", 0, 1, 'C');


		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, " ", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Anzahl", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Betr. Brutto", 0, 1, 'R');

		$gsQlLoad = mysql_fetch_array(mysql_query("SELECT SUM(betrag_geladen) AS gsSumme, COUNT(betrag_geladen) AS gsAnzahl, 
									SUM(betrag_geladen-(betrag_geladen/(1+tax))) AS gsTaxSum 
								FROM gutscheine 
								LEFT JOIN gutschein_buchungen ON gutscheine.gs_id = gutschein_buchungen.gs_id
								WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUserGs . " AND bon_id = 0 AND LOWER(verkaufsart) <> 'gskostenlos'  "));

		$gsQlEinl = mysql_fetch_array(mysql_query("SELECT COUNT(abgeschlossener_bon.bon_id) AS gsAnzahl, gesamt_summe, abgeschlossener_bon_zahlung.Name AS zaName,
														SUM(zahlbetrag) AS gsSumme, 
														SUM((abgeschlossener_bon_steuern.gesamt_betrag*(1+abgeschlossener_bon_steuern.tax_rate)) - abgeschlossener_bon_steuern.gesamt_betrag) AS gsTaxSum
												FROM abgeschlossener_bon
												LEFT JOIN abgeschlossener_bon_steuern ON abgeschlossener_bon.bon_id = abgeschlossener_bon_steuern.bon_id							
												LEFT JOIN abgeschlossener_bon_zahlung ON abgeschlossener_bon.bon_id = abgeschlossener_bon_zahlung.bon_id
												LEFT JOIN zahlungsart ON zahlungsart.Name = abgeschlossener_bon_zahlung.Name
												WHERE kassa_abschluss_id = '" . $id . "' " . $whereOnUser . " AND zahlungsart.gs_zahlung = 1"));

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Aufladung", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $gsQlLoad['gsAnzahl'], 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($gsQlLoad['gsTaxSum'], 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($gsQlLoad['gsSumme'], 2, ",", "."), 0, 1, 'R');

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', "Einlösung"), 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $gsQlEinl['gsAnzahl'], 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($gsQlEinl['gsTaxSum'], 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($gsQlEinl['gsSumme'], 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	}


	# ausgabe nach Produkte

	if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {
		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "Produkte Bericht", 0, 1, 'L');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$prodColumnWidth = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO);

		$pdf->Cell($prodColumnWidth, $lineHeight, "Artikel Bez.", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Anzahl", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brut.", 0, 1, 'R');

		$prodQl = mysql_query("SELECT abgeschlossener_bon.bon_id, kassa_abschluss_id, abgeschlossener_bon_produkte.PRINTNAME AS artPrintname, 
						abgeschlossener_bon_produkte.CATEGORY AS catID, SUM(abgeschlossener_bon_produkte.pricesell*stueck) AS prodSumme, 
						SUM(abgeschlossener_bon_produkte.pricesell*stueck*tax_rate) AS prodSteuer, 
						abgeschlossener_bon_produkte.produkt_id, SUM(abgeschlossener_bon_produkte.stueck) AS prodStueck	
				FROM abgeschlossener_bon
				LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon_produkte.bon_id = abgeschlossener_bon.bon_id
				LEFT JOIN products ON abgeschlossener_bon_produkte.produkt_id = products.id
				LEFT JOIN categories ON abgeschlossener_bon_produkte.CATEGORY = categories.id
				WHERE kassa_abschluss_id ='" . $id . "'  AND products.kassenabschluss_anzeigen = 1 AND has_childs=0 " . $whereOnUser . "
				GROUP BY abgeschlossener_bon_produkte.PRINTNAME ORDER BY abgeschlossener_bon_produkte.REFERENCE ASC, artPrintname ASC");

		$prodSteuerSumme = 0;
		$prodNettoSumme = 0;
		$prodQtySumme = 0;

		while ($prodR = mysql_fetch_array($prodQl)) {

			$prodSteuerSumme += $prodR['prodSteuer'];
			$prodNettoSumme += $prodR['prodSumme'];
			$prodQtySumme += $prodR['prodStueck'];

			if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $prodR['artPrintname'])) > ($bonWidth - ($marginLR)) * .55) {
				$posY = $pdf->GetY();
				$posX = $prodColumnWidth + $marginLR;
				$pdf->MultiCell($prodColumnWidth, $lineHeight, iconv('UTF-8', 'windows-1252', $prodR['artPrintname']), 0, 'L', 0);
				$posY_2 = $pdf->GetY();
				$pdf->SetXY($posX, $posY);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prodR['prodStueck'], 1, ",", ""), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($prodR['prodSumme'] + $prodR['prodSteuer'], 2, ",", "."), 0, 1, 'R'); # brutto summe auf produkt
				$pdf->SetY($posY_2);
			} else {
				$pdf->Cell($prodColumnWidth, $lineHeight, iconv('UTF-8', 'windows-1252', $prodR['artPrintname']), 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prodR['prodStueck'], 1, ",", ""), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($prodR['prodSumme'] + $prodR['prodSteuer'], 2, ",", "."), 0, 1, 'R');
				# brutto summe auf produkt

			}
		}
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		$pdf->Cell($prodColumnWidth, $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prodQtySumme, 1, ",", ""), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($prodNettoSumme + $prodSteuerSumme, 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	}
	if (defined('FUNKTION_KASSENABSCHL_CATEGORYLISTE') && strtolower(FUNKTION_KASSENABSCHL_CATEGORYLISTE) == 'ja') {
		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "Warengruppen Bericht", 0, 1, 'L');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Warengr.", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Ums. Netto", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brutto", 0, 1, 'R');

		$sql_kategorien = mysql_query("SELECT categories.name AS kategorie, SUM(pricesell*stueck) AS summe, SUM(pricesell*stueck*tax_rate) AS steuer , abgeschlossener_bon_produkte.CATEGORY AS catID 
						FROM abgeschlossener_bon_produkte
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN categories ON abgeschlossener_bon_produkte.category=categories.id
						WHERE kassa_abschluss_id='" . $id . "' AND has_childs=0 " . $whereOnUser . " GROUP BY kategorie ORDER BY categories.anzeige_reihenfolge ASC, categories.NAME ASC");

		if (!$sql_kategorien) {
			$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;

		while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
			$summe = $row_kategorien['summe'];
			$steuer = $row_kategorien['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			if ($row_kategorien['catID'] == 0) $categoryName = "Rabatte";
			else $categoryName = $row_kategorien['kategorie'];

			$prtSteuer = round($brutto, 2) - round($summe, 2);

			if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $row_kategorien['kategorie'])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
				$posY = $pdf->GetY();
				$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
				$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $categoryName), 0, 'L', 0);
				$posY_2 = $pdf->GetY();
				$pdf->SetXY($posX, $posY);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
				$pdf->SetY($posY_2);
			} else {
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $categoryName), 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
			}
		}
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe_gesamt, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		# warengruppen Bericht ende
	}


	# Sondertische suchen und diese ausweisen
	if (strtolower(GASTRO_VERSION) == 'ja') {
		$sonderTischerRes = "";

		$getSonderT = mysql_query("SELECT * FROM ((SELECT '' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon.bon_id = abgeschlossener_bon_produkte.bon_id
							WHERE kassa_abschluss_id=" . $id . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)							
							UNION ALL
							(SELECT 'zahlungFrei' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte_frei.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte_frei.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon_frei ON abgeschlossener_bon_frei.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte_frei ON abgeschlossener_bon_frei.bon_id = abgeschlossener_bon_produkte_frei.bon_id
							WHERE kassa_abschluss_id=" . $id . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)) AS zahlungFrei
				ORDER BY tischId ASC");

		$zahlungFreiArray = array();
		$zahlungArray = array();

		if (mysql_num_rows($getSonderT) > 0) {

			while ($getSonderR = mysql_fetch_array($getSonderT)) {
				$taxVal = $getSonderR['summeSummeBrutto'] - $getSonderR['summeSummeNetto'];
				$zalungFreiHeader = "";
				if ($getSonderR['zahlungC'] == "zahlungFrei") {
					$zalungFreiHeader = "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite bbold'>Zahlung Frei</div>";
					array_push($zahlungFreiArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
				} else {
					array_push($zahlungArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
				}
			}

			if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
			} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
			$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');

			$pdf->Cell(0, $lineHeight, "Tische gesondert Ausweisen", 0, 1, 'L');

			$outputSonderTable = "";
			if (count($zahlungFreiArray) > 0) {
				$sumNetF = 0;
				$sumTaxF = 0;
				$sumBrutF = 0;
				$pdf->Cell(0, $lineHeight, "Sonder Tische Zahlung Frei", 0, 1, 'L');
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, .5, "", 0, 1, 'C');
				} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
				$pdf->Cell(0, 1, "", 0, 1, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Tisch", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Netto", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Brutto", 0, 1, 'R');
				for ($i = 0; $i < count($zahlungFreiArray); $i++) {
					$taxVal = round($zahlungFreiArray[$i][3], 2) - round($zahlungFreiArray[$i][1], 2);
					if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
						$posY = $pdf->GetY();
						$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
						$pdf->MultiCell(
							preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ),
							$lineHeight,
							iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0]),
							0,
							'L',
							0
						);
						$posY_2 = $pdf->GetY();
						$pdf->SetXY($posX, $posY);
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungFreiArray[$i][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungFreiArray[$i][3], 2, ",", "."), 0, 1, 'R');

						$pdf->SetY($posY_2);
					} else {
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0]), 0, 0, 'L');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungFreiArray[$i][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungFreiArray[$i][3], 2, ",", "."), 0, 1, 'R');
					}

					$sumNetF += $zahlungFreiArray[$i][1];
					$sumTaxF += $zahlungFreiArray[$i][2];
					$sumBrutF += $zahlungFreiArray[$i][3];
				}

				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

				$prtSteuer_summeF = round($sumBrutF, 2) - round($sumNetF, 2);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($sumNetF, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summeF, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($sumBrutF, 2, ",", "."), 0, 1, 'R');

				if (count($zahlungArray) > 0) $pdf->Cell(0, $lineHeight, "", 0, 1, 'C');
			}
			if (count($zahlungArray) > 0) {
				$sumNet = 0;
				$sumTax = 0;
				$sumBrut = 0;
				$pdf->Cell(0, $lineHeight, "Sonder Tische Zahlung", 0, 1, 'L');
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, .5, "", 0, 1, 'C');
				} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
				$pdf->Cell(0, 1, "", 0, 1, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Tisch", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Netto", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Brutto", 0, 1, 'R');
				for ($j = 0; $j < count($zahlungArray); $j++) {
					$taxVal = round($zahlungArray[$j][3], 2) - round($zahlungArray[$j][1], 2);
					if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
						$posY = $pdf->GetY();
						$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
						$pdf->MultiCell(
							preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ),
							$lineHeight,
							iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0]),
							0,
							'L',
							0
						);
						$posY_2 = $pdf->GetY();
						$pdf->SetXY($posX, $posY);
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungArray[$j][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungArray[$j][3], 2, ",", "."), 0, 1, 'R');

						$pdf->SetY($posY_2);
					} else {
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0]), 0, 0, 'L');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungArray[$j][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungArray[$j][3], 2, ",", "."), 0, 1, 'R');
					}

					$sumNet += $zahlungArray[$j][1];
					$sumTax += $zahlungArray[$j][2];
					$sumBrut += $zahlungArray[$j][3];
				}
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

				$prtSteuer_summe = round($sumBrut, 2) - round($sumNet, 2);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($sumNet, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($sumBrut, 2, ",", "."), 0, 1, 'R');

				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
			}
		}
	}

	# Storno Bericht
	if (defined('KASSENABSCHLUSS_STORNOS_AUSWEISEN') && strtolower(KASSENABSCHLUSS_STORNOS_AUSWEISEN) == 'ja') {

		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "Storno Bericht Benutzer", 0, 1, 'L');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Benutzer", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Stor. Netto", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Stor. Brutto", 0, 1, 'R');

		/*$sql_storno = mysql_query("select benutzer.name as stornoBenutzer, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, storno
					FROM abgeschlossener_bon_produkte
					LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
					LEFT JOIN benutzer ON abgeschlossener_bon.storno_person_id=benutzer.id
					WHERE abgeschlossener_bon_produkte.stueck < 0  AND has_childs=0 AND kassa_abschluss_id='" . $id . "' " . $whereOnUser . "
					GROUP BY stornoBenutzer ORDER BY stornoBenutzer");
		*/

		$sql_storno = mysql_query("select 
											if(abgeschlossener_bon.storno_person_id, bstorno.name, bverkaeufer.name) as stornoBenutzer, 
											SUM(pricesell*stueck) as summe, 
											SUM(pricesell*stueck*tax_rate) as steuer, 
											storno
											FROM 
											abgeschlossener_bon_produkte
									LEFT JOIN 
											abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
									LEFT JOIN 
											benutzer bstorno ON abgeschlossener_bon.storno_person_id=bstorno.id
									LEFT JOIN 
											benutzer bverkaeufer ON abgeschlossener_bon.verkaufer_id=bverkaeufer.id
									WHERE 
											abgeschlossener_bon_produkte.stueck < 0  
											AND has_childs=0 AND kassa_abschluss_id='" . $id . "' " . $whereOnUser . "
	GROUP BY stornoBenutzer ORDER BY stornoBenutzer");

		if (!$sql_storno) {
			$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;


		while ($row_storno = mysql_fetch_assoc($sql_storno)) {
			$summe = $row_storno['summe'];
			$steuer = $row_storno['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			$prtSteuer = round($brutto, 2) - round($summe, 2);

			if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $row_storno['stornoBenutzer'])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
				$posY = $pdf->GetY();
				$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
				$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['stornoBenutzer']), 0, 'L', 0);
				$posY_2 = $pdf->GetY();
				$pdf->SetXY($posX, $posY);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
				$pdf->SetY($posY_2);
			} else {
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['stornoBenutzer']), 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
			}
		}

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe_gesamt, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {

			$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
			$pdf->Cell(0, $lineHeight, "Storno Bericht Produkte", 0, 1, 'L');
			if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
				$pdf->Cell(0, .5, "", 0, 1, 'C');
			} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
			$pdf->Cell(0, 1, "", 0, 1, 'C');

			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Produkte", 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Stor. Netto", 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Stor. Brutto", 0, 1, 'R');

			$sql_storno = mysql_query("select abgeschlossener_bon_produkte.NAME AS prodName, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, storno
								FROM abgeschlossener_bon_produkte
								LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
								WHERE abgeschlossener_bon_produkte.stueck < 0  AND has_childs=0 AND kassa_abschluss_id='" . $id . "' " . $whereOnUser . "
								GROUP BY prodName ORDER BY prodName");

			if (!$sql_storno) {
				$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
				exit(1);
			}
			$summe_gesamt = 0;
			$steuer_gesamt = 0;
			$brutto_gesamt = 0;


			while ($row_storno = mysql_fetch_assoc($sql_storno)) {

				$summe = $row_storno['summe'];
				$steuer = $row_storno['steuer'];
				$brutto = $summe + $steuer;
				$summe_gesamt += $summe;
				$steuer_gesamt += $steuer;
				$brutto_gesamt += $brutto;

				$prtSteuer = round($brutto, 2) - round($summe, 2);

				if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $row_storno['prodName'])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
					$posY = $pdf->GetY();
					$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
					$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['prodName']), 0, 'L', 0);
					$posY_2 = $pdf->GetY();
					$pdf->SetXY($posX, $posY);
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
					$pdf->SetY($posY_2);
				} else {
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $row_storno['prodName']), 0, 0, 'L');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
				}
			}

			if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
			} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

			$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe_gesamt, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');

			if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
			} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		}
	}

	$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
	$pdf->Cell(0, $lineHeight, "Benutzer Bericht ", 0, 1, 'L');
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
	$pdf->Cell(0, 1, "", 0, 1, 'C');


	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Benutzer", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Anz. Bon", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brutto", 0, 1, 'R');

	/* Benutzer ausgeben - Variablen hab ich gleich gelassen von Kategorien, - nicht verwirren lassen - */
	$sql_kategorien = mysql_query("SELECT benutzer.name AS benutzer, SUM(pricesell*stueck) AS summe, SUM(pricesell*stueck*tax_rate) AS steuer,
					COUNT(DISTINCT abgeschlossener_bon.bon_id) AS anzBons
				FROM abgeschlossener_bon_produkte
				LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
				LEFT JOIN benutzer ON abgeschlossener_bon.verkaufer_id=benutzer.id
				WHERE kassa_abschluss_id='" . $id . "'  AND has_childs=0 " . $whereOnUser . " GROUP BY benutzer");

	if (!$sql_kategorien) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler beim Kassen Abschluss: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	$summe_gesamt = 0;
	$steuer_gesamt = 0;
	$brutto_gesamt = 0;
	$gesAnzBons = 0;

	while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
		$summe = $row_kategorien['summe'];
		$steuer = $row_kategorien['steuer'];
		$brutto = $summe + $steuer;
		$summe_gesamt += $summe;
		$steuer_gesamt += $steuer;
		$brutto_gesamt += $brutto;
		$gesAnzBons += $row_kategorien['anzBons'];

		$prtSteuer = round($brutto, 2) - round($summe, 2);
		$bonRevUser = false;
		$bonRevUser = " (" . number_format(round($brutto, 2) / $row_kategorien['anzBons'], 2, ",", ".") . ")";

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, $row_kategorien['benutzer'], 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $row_kategorien['anzBons'] . $bonRevUser, 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
	}

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);
	$bonRevSum = false;
	if ($gesAnzBons > 0) $bonRevSum = " (" . number_format(round($brutto_gesamt, 2) / $gesAnzBons, 2, ",", ".") . ")";

	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $gesAnzBons . $bonRevSum, 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	# Abfrage, gibt es EC Terminals
	// ****************************************
	// EC Terminals abfragen


	$sql = "SELECT ce_balance from kassa_abschluesse WHERE id='" . $id . "' AND ce_balance != ''";
	$sqlQ = mysql_query($sql);

	$ceFontSize = preg_replace('/[^0-9\.]+/i', '', EC_AUSDRUCK_FONTSIZE);
	$ec_lineHeight = $ceFontSize / 2.5;

	if (mysql_num_rows($sqlQ) > 0) {
		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "EC-Terminal Abrechnung ", 0, 1, 'L');
		$ceFontSize = preg_replace('/[^0-9\.]+/i', '', EC_AUSDRUCK_FONTSIZE);
		$pdf->SetFont('Courier', 'B', $ceFontSize);
	}
	while ($sqlP = mysql_fetch_array($sqlQ)) {
		$output = $sqlP['ce_balance'];

		//echo nl2br($output);
		$pdf->MultiCell(0, $ec_lineHeight, $output);
	}

	// ********** End EC Terminals

	$checkLic = checkLicenseViolations('kassenabschluss', 'pdfPrint', $id);

	if ($checkLic[0] == true) {
		$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'C');
		$pdf->SetFont($pdfFont * 1.1, 'B', $pdfFontSize);

		$pdf->MultiCell($bonWidth + $marginLR, $lineHeight, iconv('UTF-8', 'windows-1252', $checkLic[1]), 0, 'C');
		$pdf->SetFont($pdfFont, '', $pdfFontSize);
	}

	# margin bottom Cell
	if ($marginBottom > 0) {
		$pdf->SetDrawColor(100);
		$pdf->Cell(($bonWidth + $marginLR) / 2, $marginBottom, "", 0, 0, 'R');
		$pdf->Cell(5, $marginBottom, "", "B", 1, 'C');
		$pdf->SetDrawColor(0);
	}




	if ($pdf->PageNo() > 1) {
		kassenabschluss_ausdrucken_pdf($bon_id, $bonHeight * $pdf->PageNo());
		return false;
	}




	$outputTarget = __DIR__ . "\docs\\" . KASSA_ID . "_Kassenabschl_" . $bon_id . "_" . date('d_m_H_i') . ".pdf";
	$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";


	$writeFile = $pdf->Output($outputTarget, "F");

	if ($requestFunktion == 'kassenabschl_mail_senden' && $backupFileSenden == "autobackupMailSenden") {
		sitpos_welt_anzeigen("Backup wird durchgefuehrt ...");
		$autoBackupLink = run_auto_backup_command('kassenabschluss');
		$returnArray = array($writeFile, $outputTarget, $autoBackupLink[3]);
		echo json_encode($returnArray);
	} else if ($requestFunktion == 'kassenabschl_mail_senden' && $backupFileSenden != "autobackupMailSenden") {
		// dieser Code kann glaube ich nie erreicht werden --- RFR!
		$returnArray = array($writeFile, $outputTarget, "");
		echo json_encode($returnArray);
	} else {
		#exec($command, $output, $error_code);
		$error_code = seiteDrucken($drucker, $outputTarget, "kassenabschlPrint");
	}
}

function ec_bons_ausdrucken($bildschirm = true)
{
	$id = $_REQUEST['id'];
	$sql = "SELECT ce_kunden_beleg, ce_zahlung_beleg from abgeschlossener_bon WHERE bon_id='" . $id . "'";
	//echo $sql;
	$sqlQ = mysql_query($sql);
	while ($sqlP = mysql_fetch_array($sqlQ)) {
		$output = $sqlP['ce_kunden_beleg'];
		$output = $output . "=================================\n";
		$output = $output . $sqlP['ce_zahlung_beleg'];
		echo nl2br($output);
	}
}

function ec_kassenabschluss_ausdrucken($bildschirm = true)
{
	$id = $_REQUEST['id'];
	$sql = "SELECT ce_balance from kassa_abschluesse WHERE id='" . $id . "'";
	$sqlQ = mysql_query($sql);
	while ($sqlP = mysql_fetch_array($sqlQ)) {
		$output = $sqlP['ce_balance'];

		echo nl2br($output);
	}
}

function kassenabschluss_ausdrucken($bildschirm = true)
{
	//if ($bildschirm) echo "<pre>";
	$kommastellen = KASSENABSCHLUSS_NACHKOMMASTELLEN_ANZEIGEN;
	$onUserPrint = "";
	if (isset($_POST['abschlOnUser']) && $_POST['abschlOnUser'] != '') {
		$userId = preg_replace('/[^\d]/', '', $_POST['abschlOnUser']);
		if ($userId > 0) {
			$userN = mysql_fetch_array(mysql_query("SELECT name FROM benutzer WHERE id = " . $userId . ""));
			$onUserPrint = "<p class='abrechnungsAusdrHeader' >Abrechnungs Ausdruck</strong></p><p>Mitarbeiter: " . $userN[0] . "</p><hr />";
		} else $userId = false;
	} else $userId = false;

	$id = $_POST['id'];

	$sql = "SELECT kassa_abschluesse.id as bon_id, kassen_id, datum_start, datum_ende, benutzer_eroeffnung.name as benutzer_eroeffnung, 
						benutzer_abschluss.name as benutzer_abschluss, kassa_offen, wechselgeld
						FROM kassa_abschluesse 
						LEFT JOIN benutzer AS benutzer_eroeffnung on kassa_abschluesse.verkaufer_id=benutzer_eroeffnung.id
						LEFT JOIN benutzer AS benutzer_abschluss on kassa_abschluesse.verkaufer_id_abschluss=benutzer_abschluss.id 
						WHERE kassa_abschluesse.id='" . $id . "'";
						//echo $sql;
	$result = mysql_query($sql);
	if ($result) {
		$value = mysql_fetch_object($result);
		$kassen_id = $value->kassen_id;
	} else {
		print_fehler("Fehler beim Suchen des Kassenbschlusses $id");
		exit;
	}
	if ($bildschirm == false) echo "<script> document.getElementById('bonKopfzeile').display='block'; </script>";
	kopfzeile_ausdrucken();
	$offen = $value->kassa_offen ? 'Ja' : 'Nein';
	if ($value->kassa_offen && $userId == false) {
		echo "<br /><p class='abrechnungsAusdrHeader' >" . "!! KASSAABSCHLUSS VORDRUCK !!" . "</p><br />";
		$istVordruck = true;
	} else $istVordruck = false;
	echo $onUserPrint;
	echo "Kassenabschluss ID : " . $value->bon_id . "<br />";
	echo "Kassen ID          : " . $kassen_id . "<br />";
	echo "Datum von          : " . $value->datum_start . "<br />";
	echo "Datum bis          : " . $value->datum_ende . "<br />";
	echo "Eröffnet von       : " . $value->benutzer_eroeffnung . "<br />";
	echo "Abgeschlossen von  : " . $value->benutzer_abschluss . "<br />";
	if ($istVordruck == true) {
		if (!isset($_SESSION)) session_start();
		echo "Vordruck erstellt von : " . $_SESSION["userName"] . "<br />";
	}
	echo "Kassa offen        : " . $offen . "<br />";
	echo "<br />";
	echo "Wechselgeld        : " . number_format($value->wechselgeld, 2, ",", ".") . "<br />";
	echo "<br />";

	/* Gutschein Funktion lizenziert und freigegeben  */
	$gsEnabled = false;
	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {
		$gsEnabled = true;
	}

	#writeLog(basename( __FILE__)." ". __LINE__ , "Gutschein abfrage: ".$gsRevenue);
	echo "Einnahmen Bericht <br />";
	echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
	echo "<hr />";
	echo '</div>';
	/* Zahlungen ausgeben */
	$kassastand = $value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;
	if ($userId > 0) $whereOnUser = "AND verkaufer_id = " . $userId;
	else $whereOnUser = "";

	$sql = "select abgeschlossener_bon_zahlung.name as name, SUM(zahlbetrag) as betrag, kassastand_wirksam, einnahmen_wirksam 
						FROM abgeschlossener_bon_zahlung
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_zahlung.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN zahlungsart ON abgeschlossener_bon_zahlung.name=zahlungsart.name
						WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUser . " GROUP BY name";
	$sql_zahlungen = mysql_query($sql);

	if (!$sql_zahlungen) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		if ($row_zahlungen['kassastand_wirksam']) $bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		if ($row_zahlungen['einnahmen_wirksam']) $einnahmen = $einnahmen + $row_zahlungen['betrag'];
		$betrag = number_format($row_zahlungen['betrag'], $kommastellen, ",", ".");
		echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<div class='ausdruck_abschluss_einnahme_name'>" . $row_zahlungen['name'] . "</div><div class='ausdruck_abschluss_einnahme_betrag'> " . $betrag . "</div>";
		echo '</div>';
	}


	// Ein- Auszahlungen
	if ($userId > 0) $whereOnUserEA = "AND ein_aus_zahlungen.verkaufer_id = " . $userId . " ";
	else $whereOnUserEA = "";
	$sql = "select typ, SUM(gesamt_betrag) as betrag
						FROM ein_aus_zahlungen
						LEFT JOIN kassa_abschluesse ON ein_aus_zahlungen.kassa_abschluss_id=kassa_abschluesse.id
						WHERE kassa_abschluesse.id='" . $id . "' " . $whereOnUserEA . " GROUP BY typ";
	$sql_zahlungen = mysql_query($sql);
	if (!$sql_zahlungen) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		$betrag = $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind immer Kassawirksam
		$bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind nicht Einnahmenwirksam
		//if($row_zahlungen['einnahmen_wirksam']) $einnahmen=$einnahmen+$row_zahlungen['betrag'];
		$typ = $row_zahlungen['typ'];
		if ($typ == 'ein') $text = "Bar Einzahlung";
		else {
			$text = "Bar Auszahlung";
		}

		$betrag = number_format($row_zahlungen['betrag'], $kommastellen, ",", ".");
		echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<div class='ausdruck_abschluss_einnahme_name'>" . $text . "</div><div class='ausdruck_abschluss_einnahme_betrag'> " . $betrag . "</div>";
		echo '</div>';
	}

	if ($bar_einnahmen < 0) $einnamenTxt = "Bar Ausgaben";
	else $einnamenTxt = "Bar Einnahmen";
	if ($einnahmen < 0) $tagesEinnamenTxt = "Tagesausgaben (ohne GS)";
	else $tagesEinnamenTxt = "Tageseinnahmen (ohne GS)";



	echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
	echo "<hr />";
	echo '</div>';
	echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
	echo "<div class='ausdruck_abschluss_einnahme_name'>" . $tagesEinnamenTxt . "</div><div class='ausdruck_abschluss_einnahme_betrag'>" . number_format($einnahmen, $kommastellen, ",", ".") . "</div>";
	echo '</div>';
	echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
	echo "<div class='ausdruck_abschluss_einnahme_name'>" . $einnamenTxt . "</div><div class='ausdruck_abschluss_einnahme_betrag'>" . number_format($bar_einnahmen, $kommastellen, ",", ".") . "</div>";
	echo '</div>';
	echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
	echo "<hr />";
	echo '</div>';

	# Einnamen aus Gutschein Ausstellen, Ausgabe
	if ($userId > 0) $whereOnUserGs = "AND gutschein_buchungen.verkaufer_id = " . $userId . " ";
	else $whereOnUserGs = "";
	$gsVk = mysql_query("SELECT betrag_geladen AS gutscheinVerk
							FROM gutschein_buchungen
							LEFT JOIN zahlungsart ON zahlungsart.Name = gutschein_buchungen.zahlungsart_name
							WHERE kassa_abschluss_id= " . $id . " " . $whereOnUserGs . " AND LOWER(verkaufsart) = 'gsverkauf' AND zahlungsart.kassastand_wirksam = 1");
	$sumGsVk = 0;
	while ($gsVerk = mysql_fetch_array($gsVk)) {
		$sumGsVk += $gsVerk['gutscheinVerk'];
	}
	if ($sumGsVk > 0) {
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
		echo "<div class='ausdruck_abschluss_einnahme_name'>Einnahmen aus GS Ausstellen</div>
					<div class='ausdruck_abschluss_einnahme_betrag'>" . number_format($sumGsVk, $kommastellen, ",", ".") . "</div>";
		echo '</div>
					<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<hr />";
		echo '</div>';
	}

	$kassastand = $kassastand + $bar_einnahmen + $sumGsVk;
	if ($userId == false) {
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
					<div class='ausdruck_abschluss_einnahme_name'><b>Neuer Kassastand</div>
					<div class='ausdruck_abschluss_einnahme_betrag'>" . number_format($kassastand, $kommastellen, ",", ".") . "</b></div>
					<input type='hidden' id='kassastandKassaabschl' value='" . $kassastand . "' />
				</div>";
	} else echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'></div>";

	/* Ende Zahlungen */
	echo "<br />";
	echo "<br />";
	echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>Steuern Bericht</div>";
	echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";

	/* Steuern ausgeben */
	$kassastand = $value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;
	$sql = "select tax_rate, SUM(gesamt_betrag) as betrag 
						FROM abgeschlossener_bon_steuern
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_steuern.bon_id=abgeschlossener_bon.bon_id
						WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUser . " GROUP BY tax_rate";
	$sql_steuern = mysql_query($sql);
	if (!$sql_steuern) {
		echo "SQL Fehler beim Kassen Abschluss Steuer: " . mysql_error();
		exit(1);
	}
	$steuer_betrag_summe = 0;
	$steuer_summe = 0;
	$steuer_summe_brutto = 0;
	echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
	echo "<div class='ausdruck_abschluss_steuer_satz'>Steuer</div><div class='ausdruck_abschluss_steuer_netto'>Ums. Net.</div>
				<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div><div class='ausdruck_abschluss_steuer_brutto'>Ums. Brut.</div>";
	echo '</div>';
	while ($row_steuern = mysql_fetch_assoc($sql_steuern)) {
		$steuersatz = $row_steuern['tax_rate'] * 100;
		$steuer_betrag = $row_steuern['betrag'];
		$steuer_betrag_summe += $steuer_betrag;

		$steuer = $steuer_betrag * $row_steuern['tax_rate'];


		$steuer_summe += $steuer;

		$steuer_brutto = $steuer_betrag + $steuer;
		$steuer_summe_brutto += $steuer_brutto;
		$prtSteuer = round($steuer_brutto, 2) - round($steuer_betrag, 2);

		echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<div class='ausdruck_abschluss_steuer_satz'>Steuer $steuersatz% </div><div class='ausdruck_abschluss_steuer_netto'>" . number_format($steuer_betrag, $kommastellen, ",", ".") . " </div>
					<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($prtSteuer, $kommastellen, ",", ".") . "</div><div class='ausdruck_abschluss_steuer_brutto'>" . number_format($steuer_brutto, $kommastellen, ",", ".") . "</div>";
		echo '</div>';
	}

	$prtSteuer_summe = round($steuer_summe_brutto, 2) - round($steuer_betrag_summe, 2);

	echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
	echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
	echo "<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
				<div class='ausdruck_abschluss_steuer_netto'>" . number_format($steuer_betrag_summe, $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($steuer_summe_brutto, $kommastellen, ",", ".") . "</div>";
	echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";


	# ausgabe Gutscheine Bericht wenn in Konfig freigegeben

	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {

		echo "<br />Gutscheine Bericht<br />";
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";

		$gsQlLoad = mysql_fetch_array(mysql_query("SELECT SUM(betrag_geladen) AS gsSumme, COUNT(betrag_geladen) AS gsAnzahl, 
									SUM(betrag_geladen-(betrag_geladen/(1+tax))) AS gsTaxSum 
								FROM gutscheine 
								LEFT JOIN gutschein_buchungen ON gutscheine.gs_id = gutschein_buchungen.gs_id
								WHERE kassa_abschluss_id='" . $id . "' " . $whereOnUserGs . " AND bon_id = 0 AND LOWER(verkaufsart) <> 'gskostenlos'  "));

		/*
		$gsQlEinl = mysql_fetch_array(mysql_query("SELECT COUNT(abgeschlossener_bon.bon_id) AS gsAnzahl, gesamt_summe, abgeschlossener_bon_zahlung.Name AS zaName,
														SUM(zahlbetrag) AS gsSumme, 
														SUM((abgeschlossener_bon_steuern.gesamt_betrag*(1+abgeschlossener_bon_steuern.tax_rate)) - abgeschlossener_bon_steuern.gesamt_betrag) AS gsTaxSum
												FROM abgeschlossener_bon
												LEFT JOIN abgeschlossener_bon_steuern ON abgeschlossener_bon.bon_id = abgeschlossener_bon_steuern.bon_id							
												LEFT JOIN abgeschlossener_bon_zahlung ON abgeschlossener_bon.bon_id = abgeschlossener_bon_zahlung.bon_id
												LEFT JOIN zahlungsart ON zahlungsart.Name = abgeschlossener_bon_zahlung.Name
												WHERE kassa_abschluss_id = '" . $id . "' " . $whereOnUser . " AND zahlungsart.gs_zahlung = 1 ")); 
*/

		$gsQlEinl = mysql_fetch_array(mysql_query("select COUNT(ab.bon_id) AS gsAnzahl,gesamt_summe, abgeschlossener_bon_zahlung.Name AS zaName, (sum(gesamt_betrag) + sum(gesamt_betrag*(1+abgeschlossener_bon_steuern.tax_rate) - gesamt_betrag) ) AS gsSumme,
SUM(gesamt_betrag*(1+abgeschlossener_bon_steuern.tax_rate) - gesamt_betrag)
 AS gsTaxSum 
 from abgeschlossener_bon ab 
 LEFT JOIN abgeschlossener_bon_steuern ON ab.bon_id = abgeschlossener_bon_steuern.bon_id
 left join abgeschlossener_bon_zahlung on abgeschlossener_bon_zahlung.bon_id = ab.bon_id left join zahlungsart on abgeschlossener_bon_zahlung.Name = zahlungsart.Name 
 WHERE kassa_abschluss_id = '" . $id . "' " . $whereOnUser . " AND zahlungsart.gs_zahlung = 1"));

		echo "<div class='ausdruck_abschluss_steuer_satz'> &nbsp;</div><div class='ausdruck_abschluss_steuer_netto'>Anzahl</div>
				<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div><div class='ausdruck_abschluss_steuer_brutto'>Betr. Brut.</div>";

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
					<div class='ausdruck_abschluss_steuer_satz'>Aufladung</div>			
					<div class='ausdruck_abschluss_steuer_netto' >" . $gsQlLoad['gsAnzahl'] . "</div>
					<div class='ausdruck_abschluss_steuer_betrag' >" . number_format($gsQlLoad['gsTaxSum'], $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto' >" . number_format($gsQlLoad['gsSumme'], $kommastellen, ",", ".") . "</div>
					
					
					<div class='ausdruck_abschluss_steuer_satz'>Einlösung</div>			
					<div class='ausdruck_abschluss_steuer_netto' >" . $gsQlEinl['gsAnzahl'] . "</div>
					<div class='ausdruck_abschluss_steuer_betrag' >" . number_format($gsQlEinl['gsTaxSum'], $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto' >" . number_format($gsQlEinl['gsSumme'], $kommastellen, ",", ".") . "</div>
					
				</div>";



		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
		echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite"></div>';

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'></div>";
	}


	# ausgabe Produkte Bericht wenn in Konfig freigegeben
	if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {
		echo "<br />Produkte Bericht<br />";
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";

		$prodQl = mysql_query("SELECT abgeschlossener_bon.bon_id, kassa_abschluss_id, abgeschlossener_bon_produkte.PRINTNAME AS artPrintname, 
							abgeschlossener_bon_produkte.CATEGORY AS catID, SUM(abgeschlossener_bon_produkte.pricesell*stueck) AS prodSumme, 
							SUM(abgeschlossener_bon_produkte.pricesell*stueck*tax_rate) AS prodSteuer, abgeschlossener_bon_produkte.produkt_id, 
							SUM(abgeschlossener_bon_produkte.stueck) AS prodStueck	
				FROM abgeschlossener_bon
				LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon_produkte.bon_id = abgeschlossener_bon.bon_id
				LEFT JOIN products ON abgeschlossener_bon_produkte.produkt_id = products.id
				LEFT JOIN categories ON abgeschlossener_bon_produkte.CATEGORY = categories.id
				WHERE kassa_abschluss_id ='" . $id . "' AND products.kassenabschluss_anzeigen = 1
					AND abgeschlossener_bon_produkte.CATEGORY <> 9999 AND has_childs=0 " . $whereOnUser . "
				GROUP BY abgeschlossener_bon_produkte.PRINTNAME ORDER BY abgeschlossener_bon_produkte.REFERENCE ASC, artPrintname ASC");

		$prodBruttoTotalSumme = 0;
		$prodQtySumme = 0;

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
					<div class='kassenabschlNameColumn' >Artikel Bez.</div>			
					<div class='ausdruck_abschluss_steuer_betrag' >Anzahl</div>
					<div class='ausdruck_abschluss_steuer_brutto' >Ums. Brut.</div>
					
				</div>";

		while ($prodR = mysql_fetch_array($prodQl)) {

			$prodBruttoTotalSumme += ($prodR['prodSteuer'] + $prodR['prodSumme']);
			#	$prodNettoSumme += $prodR['prodSumme'];
			$prodQtySumme += $prodR['prodStueck'];

			echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
					<div class='kassenabschlNameColumn'>" . $prodR['artPrintname'] . "</div>			
					<div class='ausdruck_abschluss_steuer_betrag' >" . number_format($prodR['prodStueck'], 1, ",", "") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto' >" . number_format($prodR['prodSumme'] + $prodR['prodSteuer'], $kommastellen, ",", ".") . "</div>
					
				</div>";
		}

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
		echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<div class='kassenabschlNameColumn'>Summe</div>

					<div class='ausdruck_abschluss_steuer_betrag' >" . number_format($prodQtySumme, 1, ",", "") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto' >" . number_format($prodBruttoTotalSumme, $kommastellen, ",", ".") . "</div>
				</div>			
				<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
	}

	if (defined('FUNKTION_KASSENABSCHL_CATEGORYLISTE') && strtolower(FUNKTION_KASSENABSCHL_CATEGORYLISTE) == 'ja') {
		/* Warengruppen ausgeben */
		echo "<br />";
		echo "Warengruppen Bericht<br />";
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";

		echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<div class='ausdruck_abschluss_steuer_satz'>Warengr.</div>
					<div class='ausdruck_abschluss_steuer_netto'>Ums. Net.</div>
					<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
					<div class='ausdruck_abschluss_steuer_brutto'>Ums. Brut.</div>";
		echo '</div>';


		$sql = "select categories.name as kategorie, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, abgeschlossener_bon_produkte.CATEGORY AS catID
							FROM abgeschlossener_bon_produkte
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
							LEFT JOIN categories ON abgeschlossener_bon_produkte.category=categories.id
							WHERE kassa_abschluss_id='" . $id . "' AND has_childs=0 " . $whereOnUser . " GROUP BY kategorie ORDER BY categories.anzeige_reihenfolge ASC, categories.NAME ASC";
		$sql_kategorien = mysql_query($sql);
		if (!$sql_kategorien) {
			echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;
		while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
			$summe = $row_kategorien['summe'];
			$steuer = $row_kategorien['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;
			if ($row_kategorien['catID'] == 0) $categoryName = "Rabatte";
			else $categoryName = $row_kategorien['kategorie'];

			$prtSteuer = round($brutto, 2) - round($summe, 2);

			echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
			echo "<div class='kassenabschlCatNameColumn'>" . $categoryName . "</div>
						<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe, $kommastellen, ",", ".") . "</div>
						<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer, $kommastellen, ",", ".") . "</div>
						<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto, $kommastellen, ",", ".") . "</div>";
			echo '</div>';
		}

		$prtSteuer_summe = round($summe_gesamt + $steuer_gesamt, 2) - round($summe_gesamt, 2);

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
		echo '<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe_gesamt, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($summe_gesamt + $steuer_gesamt, $kommastellen, ",", ".") . "</div> 
				</div>
				<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
	}
	# Storno Bericht 

	# Sondertische suchen und diese ausweisen
	if (strtolower(GASTRO_VERSION) == 'ja') {
		$sonderTischerRes = "";

		$getSonderT = mysql_query("SELECT * FROM (
		(SELECT '' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon.bon_id = abgeschlossener_bon_produkte.bon_id
							WHERE kassa_abschluss_id=" . $id . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)							
							UNION ALL
							(SELECT 'zahlungFrei' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte_frei.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte_frei.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon_frei ON abgeschlossener_bon_frei.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte_frei ON abgeschlossener_bon_frei.bon_id = abgeschlossener_bon_produkte_frei.bon_id
							WHERE kassa_abschluss_id=" . $id . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)) AS zahlungFrei
				ORDER BY tischId ASC");
		$zahlungFreiArray = array();
		$zahlungArray = array();

		while ($getSonderR = mysql_fetch_array($getSonderT)) {
			$taxVal = $getSonderR['summeSummeBrutto'] - $getSonderR['summeSummeNetto'];
			$zalungFreiHeader = "";
			if ($getSonderR['zahlungC'] == "zahlungFrei") {
				$zalungFreiHeader = "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite bbold'>Zahlung Frei</div>";
				array_push($zahlungFreiArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
			} else {
				array_push($zahlungArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
			}




			$sonderTischerRes .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
										" . $zalungFreiHeader . "
										<div class='kassenabschlCatNameColumn'>" . $getSonderR['tischName'] . "</div>
										<div class='ausdruck_abschluss_steuer_netto'>" . number_format($getSonderR['summeSummeNetto'], 2, ",", ".") . "</div>
										<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($taxVal, 2, ",", ".") . "</div>
										<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($getSonderR['summeSummeBrutto'], 2, ",", ".") . "</div>
								</div><br />";
		}
		if (mysql_num_rows($getSonderT) > 0) {

			echo "<br />Tische gesondert Ausweisen<br />";
			$sonderTableH = "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>
						<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
							<div class='kassenabschlCatNameColumn'>Tisch</div>
							<div class='ausdruck_abschluss_steuer_netto'>Netto</div>
							<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
							<div class='ausdruck_abschluss_steuer_brutto'>Brutto</div>
						</div>";
			#echo $sonderTischerRes;
			$outputSonderTable = "";
			if (count($zahlungFreiArray) > 0) {
				$sumNetF = 0;
				$sumTaxF = 0;
				$sumBrutF = 0;
				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>Sonder Tische Zahlung Frei </div>";
				$outputSonderTable .= $sonderTableH;
				for ($i = 0; $i < count($zahlungFreiArray); $i++) {
					$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>												
												<div class='kassenabschlCatNameColumn'>" . $zahlungFreiArray[$i][0] . "</div>
												<div class='ausdruck_abschluss_steuer_netto'>" . number_format($zahlungFreiArray[$i][1], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($zahlungFreiArray[$i][2], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($zahlungFreiArray[$i][3], 2, ",", ".") . "</div>
											</div>";

					$sumNetF += $zahlungFreiArray[$i][1];
					$sumTaxF += $zahlungFreiArray[$i][2];
					$sumBrutF += $zahlungFreiArray[$i][3];
				}

				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>
							<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
							<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
							<div class='ausdruck_abschluss_steuer_netto'>" . number_format($sumNetF, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($sumTaxF, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($sumBrutF, 2, ",", ".") . "</div> 
						</div>
						<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
			}
			if (count($zahlungArray) > 0) {
				$sumNet = 0;
				$sumTax = 0;
				$sumBrut = 0;
				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>Sonder Tische bezahlt</div>";
				$outputSonderTable .= $sonderTableH;
				for ($j = 0; $j < count($zahlungArray); $j++) {

					$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>												
												<div class='kassenabschlCatNameColumn'>" . $zahlungArray[$j][0] . "</div>
												<div class='ausdruck_abschluss_steuer_netto'>" . number_format($zahlungArray[$j][1], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($zahlungArray[$j][2], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($zahlungArray[$j][3], 2, ",", ".") . "</div>
											</div>";
					$sumNet += $zahlungArray[$j][1];
					$sumTax += $zahlungArray[$j][2];
					$sumBrut += $zahlungArray[$j][3];
				}
				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>
							<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
							<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
							<div class='ausdruck_abschluss_steuer_netto'>" . number_format($sumNet, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($sumTax, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($sumBrut, 2, ",", ".") . "</div> 
						</div>
						<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
			}

			echo $outputSonderTable;
		}
	}

	if (strtolower(KASSENABSCHLUSS_STORNOS_AUSWEISEN) == 'ja') {

		echo "<br />";
		echo "Storno Bericht Benutzer<br />";
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
		echo "<div class='ausdruck_abschluss_steuer_satz'>Benutzer</div>
					<div class='ausdruck_abschluss_steuer_netto'>Stor. Net.</div>
					<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
					<div class='ausdruck_abschluss_steuer_brutto'>Stor. Brut.</div>";
		echo '</div>';
		/*
				// 2018-05-21 RFR: Storno Bericht wurde doppelt angezeigt - offenbar wenn anderer storniert halt als gebucht
				$sql_storno = mysql_query("SELECT benutzer.name AS stornoBenutzer, SUM(pricesell*stueck) AS summe, SUM(pricesell*stueck*tax_rate) AS steuer, storno
										FROM abgeschlossener_bon_produkte
										LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
										LEFT JOIN benutzer ON abgeschlossener_bon.storno_person_id=benutzer.id OR abgeschlossener_bon.verkaufer_id=benutzer.id
										WHERE abgeschlossener_bon_produkte.stueck < 0 AND kassa_abschluss_id='".$id."' ".$whereOnUser."
										GROUP BY stornoBenutzer ORDER BY stornoBenutzer");
				*/
		$sql_storno = mysql_query("SELECT benutzer.name AS stornoBenutzer, SUM(pricesell*stueck) AS summe, SUM(pricesell*stueck*tax_rate) AS steuer, storno
										FROM abgeschlossener_bon_produkte
										LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
										LEFT JOIN benutzer ON abgeschlossener_bon.storno_person_id=benutzer.id
										WHERE abgeschlossener_bon_produkte.stueck < 0 AND kassa_abschluss_id='" . $id . "' " . $whereOnUser . "
										GROUP BY stornoBenutzer ORDER BY stornoBenutzer");
		if (!$sql_storno) {
			echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;

		while ($row_storno = mysql_fetch_assoc($sql_storno)) {
			$summe = $row_storno['summe'];
			$steuer = $row_storno['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			$prtSteuer = round($brutto, 2) - round($summe, 2);

			echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
			echo "<div class='kassenabschlCatNameColumn'>" . $row_storno['stornoBenutzer'] . "</div>
							<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe, $kommastellen, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer, $kommastellen, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto, $kommastellen, ",", ".") . "</div>";

			echo "</div>";
		}

		$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
		echo " <div class='ausdruck_abschluss_steuer_satz'>Summe</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe_gesamt, $kommastellen, ",", ".") . " </div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto_gesamt, $kommastellen, ",", ".") . "</div>";
		echo '</div>
					<div class="cclear"></div>';


		if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {
			echo "<br />";
			echo "Storno Bericht Produkte<br />";
			echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
			echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
			echo "<div class='ausdruck_abschluss_steuer_satz'>Produkt</div>
							<div class='ausdruck_abschluss_steuer_netto'>Stor. Net.</div>
							<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
							<div class='ausdruck_abschluss_steuer_brutto'>Stor. Brut.</div>";
			echo "</div>";

			$sql_storno = mysql_query("select abgeschlossener_bon_produkte.NAME AS prodName, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, storno
										FROM abgeschlossener_bon_produkte
										LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
										WHERE abgeschlossener_bon_produkte.stueck < 0  AND has_childs=0 AND kassa_abschluss_id='" . $id . "' " . $whereOnUser . "
										GROUP BY prodName ORDER BY prodName");

			if (!$sql_storno) {
				echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
				exit(1);
			}
			$summe_gesamt = 0;
			$steuer_gesamt = 0;
			$brutto_gesamt = 0;

			while ($row_storno = mysql_fetch_assoc($sql_storno)) {
				$summe = $row_storno['summe'];
				$steuer = $row_storno['steuer'];
				$brutto = $summe + $steuer;
				$summe_gesamt += $summe;
				$steuer_gesamt += $steuer;
				$brutto_gesamt += $brutto;

				$prtSteuer = round($brutto, 2) - round($summe, 2);

				echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
				echo "<div class='kassenabschlCatNameColumn'>" . $row_storno['prodName'] . "</div>
								<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe, $kommastellen, ",", ".") . "</div>
								<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer, $kommastellen, ",", ".") . "</div>
								<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto, $kommastellen, ",", ".") . "</div>";

				echo "</div>";
			}

			$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

			echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
			echo " <div class='ausdruck_abschluss_steuer_satz'>Summe</div>
						<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe_gesamt, $kommastellen, ",", ".") . " </div>
						<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
						<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto_gesamt, $kommastellen, ",", ".") . "</div>";
			echo '</div>
						<div class="cclear"></div>';
		}

		echo '<hr />';
	}


	/* Benutzer ausgeben - Variablen hab ich gleich gelassen von Kategorien, - nicht verwirren lassen - */
	echo "<br />";
	echo "Benutzer Bericht <br />";
	echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
	echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
	echo "<div class='ausdruck_abschluss_steuer_satz'>Benutzer</div>
				<div class='ausdruck_abschluss_steuer_netto'>Anz. Bon</div>
				<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
				<div class='ausdruck_abschluss_steuer_brutto'>Ums. Brut.</div>";
	echo '</div>';
	$sql = "select benutzer.name as benutzer, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, 
							 COUNT(DISTINCT abgeschlossener_bon.bon_id) AS anzBons
						FROM abgeschlossener_bon_produkte
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN benutzer ON abgeschlossener_bon.verkaufer_id=benutzer.id
						WHERE kassa_abschluss_id='" . $id . "'  AND has_childs=0 " . $whereOnUser . " GROUP BY benutzer";
	$sql_kategorien = mysql_query($sql);
	if (!$sql_kategorien) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	$summe_gesamt = 0;
	$steuer_gesamt = 0;
	$brutto_gesamt = 0;
	$gesAnzBons = 0;

	while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
		$summe = $row_kategorien['summe'];
		$steuer = $row_kategorien['steuer'];
		$brutto = $summe + $steuer;
		$summe_gesamt += $summe;
		$steuer_gesamt += $steuer;
		$brutto_gesamt += $brutto;
		$gesAnzBons += $row_kategorien['anzBons'];

		$prtSteuer = round($brutto, 2) - round($summe, 2);
		$bonRevUser = false;
		$bonRevUser = " (" . number_format(round($brutto, 2) / $row_kategorien['anzBons'], $kommastellen, ",", ".") . ")";

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
		echo "<div class='ausdruck_abschluss_steuer_satz'>" . $row_kategorien['benutzer'] . "</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . $row_kategorien['anzBons'] . $bonRevUser . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto, $kommastellen, ",", ".") . "</div>";
		echo '</div>';
	}

	$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);
	$bonRevSum = false;
	if ($gesAnzBons > 0) $bonRevSum = " (" . number_format(round($brutto_gesamt, 2) / $gesAnzBons, $kommastellen, ",", ".") . ")";
	echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
	echo " <div class='ausdruck_abschluss_steuer_satz'>Summe</div>
				<div class='ausdruck_abschluss_steuer_netto'>" . $gesAnzBons . $bonRevSum . " </div>
				<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto_gesamt, $kommastellen, ",", ".") . "</div>";
	echo '</div>
		<div class="cclear"></div>';

	$checkLic = checkLicenseViolations('kassenabschluss', 'htmlPrint', $id);

	if ($checkLic[0] == true) {
		echo "<div class='licenseAlertHtmlPrint'>" . $checkLic[1] . "</div>";

		echo "<script> licenseStatus = '" . $checkLic[1] . "'; </script>";
	}

	# if invoice print is set to html, qr images are stored in include/qr_lib/temp/
	# on kassenabschluss, only html print, this folder will emptied

	if (is_dir("include/qr_lib/temp")) {
		$xDir = 'include/qr_lib/temp/';
		foreach (glob($xDir . '*.*') as $vX) {
			unlink($vX);
		}
	}
}

function gutschein_bankomat_ausfuehren($gutscheinbetrag){
	return gutschein_bankomat($gutscheinbetrag);
}

function get_ajax_terminal_process(){
	return get_terminal_process();
}

//Hier wird der Bon tatsächlich storniert und in die DB eingetragen
function storniere_bon_ausfuehren(){
	$ammount = json_decode($_REQUEST['test'], true);

	$help = '';
	$count = 0;
	$counter = 0;
	//foreach($ammount as $key => $value){
	//	$ammount[$key] = (int)$ammount[$key];
	//}
	foreach($ammount as $key => $value){
		foreach ($ammount[$counter] as $key_prod=> $value_prod)
		{
										   
												   
			if($value_prod > 0){
				$help[$count] = $key_prod;
				
				$storno_prod[$key_prod]= $value_prod;
				$count++;
			}
		}
		$counter++;
	}
	//var_dump($storno_prod);
	if(!empty($help))
	{
		$ids = implode(',', $help);
		$help = "AND abgeschlossener_bon_produkte.ID IN (" . $ids . ")";
			 
	}
	else
	{
		echo "<script>
		openGeneralDialog('validateFormStorno', 'Fehlender Storno Anzahl Stück', '<p>Es wurde kein Produkt zum Stornieren ausgewählt.</p>', 'wrapper_bon');
					
						
		</script>";
		exit();
	}
	
	//log_to_file("--------> storniere_bon_ausfuehren");
	$bon_id = ($_REQUEST['bon_id']);
	$storno_grund = ($_REQUEST['storno_grund']);
	$kommentar = ($_REQUEST['kommentar']);
	$storno_zahlungsart = ($_REQUEST['storno_zahlungsart']);
	$user = $_SESSION['userId'];
	$kassenabschluss_id = ist_kassa_offen();

	//log_to_file("bon_id: ".$bon_id);
	//log_to_file("storno_grund: ".$storno_grund);
	//log_to_file("kommentar: ".$kommentar);
	//log_to_file("storno_zahlungsart: ".$bon_id);
	//log_to_file("user: ".$user);
	//log_to_file("kassenabschluss_id: ".$kassenabschluss_id);

	if ($kassenabschluss_id == false) print_fehler("Kassa ist nicht offen");

	$logTx = $storno_grund . "---zahlungsart-> " . $storno_zahlungsart . " user -> " . $user;

	$ec_gutschrift = false;
	$storniere_bankomat = false;
	$storniere_gutschein = false;
	if ($storno_zahlungsart == 'asInvoice') {
		$asInvZahlung = array();
		$i = 0;
		$qL = mysql_query("SELECT abgeschlossener_bon_zahlung.Name as Name, zahlbetrag, karten_terminal FROM abgeschlossener_bon_zahlung 
								LEFT JOIN zahlungsart ON abgeschlossener_bon_zahlung.name=zahlungsart.NAME
								WHERE bon_id = $bon_id");
		while ($rowZ = mysql_fetch_array($qL)) {
			$asInvZahlung[$i] = array($rowZ['Name'], $rowZ['zahlbetrag']);
			// Wenn ein Bankomat Terminal dabei war, dann storniere über das Terminal
			if ($rowZ['karten_terminal']) {
				$storniere_bankomat = true;
				// Nur die letzte EC Kartenzahlung von diese Terminal darf storniert werden!
				list($zahlTerminalId, $zahlTerminalType) = get_my_bankomat_terminal_id();
				if (!ist_das_die_lezte_EC_zahlung($bon_id)) {
					echo "Nur die lezte EC Zahlung kann storniert werden!";
					echo "<script>
							sITPos_Alert('Storno Hinweis', 'Nur die lezte EC Zahlung kann storniert werden!', 'OK', 'wrapper_bon'); 
							</script>";
					exit(1);
				}
				if ($zahlTerminalType == 'six') {
					//echo "SIX EC Zahlung kann nicht storniert werden - führe Gutschrift durch!";

					echo "<script>
							sITPos_Alert('Storno Hinweis', 'SIX Zahlung kann nicht storniert werden', 'OK', 'wrapper_bon'); 
							</script>";

					$ec_gutschrift = true;
					//exit (1);
				}
			} else if ($rowZ['Name'] == 'Gutschein Einlösung') {
				$storniere_gutschein = true;
			}
			$i++;
		}
	}

	// Das ALTER TABLE muss VOR der Transaktion gemacht werden, da es ansonsten autocommit erzwingt
	// MySQL unterstützt offenbar kein ALTER TEMPORARY TABLE ...., deswegen einfach vor der Transaktion
	$createQlA = mysql_query("CREATE TEMPORARY TABLE abgeschlossener_bon_temp LIKE abgeschlossener_bon");
	if (!$createQlA) {
		$zahlSqlError = true;
	}
	$createQlB = mysql_query("CREATE TEMPORARY TABLE abgeschlossener_bon_produkte_temp LIKE abgeschlossener_bon_produkte");
	if (!$createQlB) {
		$zahlSqlError = true;
	}
	$alterQl = mysql_query("ALTER TABLE abgeschlossener_bon_produkte_temp DROP PRIMARY KEY, change id id int(11);");
	if (!$alterQl) {
		$zahlSqlError = true;
	}
	$createQlC = mysql_query("CREATE TEMPORARY TABLE abgeschlossener_bon_steuern_temp LIKE abgeschlossener_bon_steuern");
	if (!$createQlC) {
		$zahlSqlError = true;
	}
	$alterQlB = mysql_query("ALTER TABLE abgeschlossener_bon_steuern_temp DROP PRIMARY KEY, change id id int(11);");
	if (!$alterQlB) {
		$zahlSqlError = true;
	}

	starte_transaktion();
	$zahlSqlError = false;
	$zahlSqlErrorMsg = "";

	//echo '<pre>';
	$udQl = mysql_query("UPDATE abgeschlossener_bon SET storno=true, storno_grund='$storno_grund', storno_bemerkung='$kommentar', storno_person_id='$user', 
					storno_datum= NOW() WHERE bon_id=$bon_id");
	if (!$udQl) {
		$zahlSqlError = true;
	}

	#run_mysql_query($sql, "Bon wurde storniert", "Fehler beim stornieren des Bons - Tabelle: abgeschlossener_bon");

	// Damit der query nicht bei jeder Änderung der Tabelle angepasst werden müssen, verwende ich temp Tables und ändere die nötigen felder
	// da kann nur ein Bon sein, deswegen brauche ich index nicht droppen

	$insQlTmpA = mysql_query("INSERT INTO abgeschlossener_bon_temp (SELECT * FROM abgeschlossener_bon WHERE bon_id=$bon_id)");
	if (!$insQlTmpA) {
		$zahlSqlError = true;
	}
	#run_mysql_query($sql, "Temp Table wurde befuellt", "FEHLER bei befuellen Temp Table - Tabelle: abgeschlossener_bon_temp");
	$setQlGw = mysql_query("UPDATE abgeschlossener_bon_temp SET gesamt_summe=0 WHERE bon_id=$bon_id");
			if (!$setQlGw) {
				$zahlSqlError = true;
			}
	$counter =0;
	
	//foreach($ammount as $key => $value){
		//foreach ($ammount[$counter] as $key_prod=> $value_prod)
		foreach ($storno_prod as $key_prod=> $value_prod)
		{
			
			if($key_prod != 0){
			
				$getQlGw = mysql_query("UPDATE abgeschlossener_bon_temp SET gesamt_summe=gesamt_summe+(SELECT -sum($value_prod*pricesell*(1+tax_rate)) FROM abgeschlossener_bon_produkte WHERE bon_id=$bon_id AND ID=$key_prod) WHERE bon_id=$bon_id");
				if (!$getQlGw) {
					echo "getQlGw";
					$zahlSqlError = true;
				}
				#run_mysql_query($sql, "Temp Table wurde geaendert", "FEHLER bei aendern Temp Table - Tabelle: abgeschlossener_bon_produkte_temp");
			}
		}
		//$counter++;
	//}
	$updQlTmp = mysql_query("UPDATE abgeschlossener_bon_temp SET sync_success_filialsystem=false, bon_id=NULL, storno=true, retourgeld=0, kassa_abschluss_id=$kassenabschluss_id,
				bon_erstellt_datum= NOW(), storno_bemerkung='Storno zu Bon " . $bon_id . "', ce_zahlung_data='', ce_kunden_beleg='', ce_zahlung_beleg='' WHERE bon_id=$bon_id");
	if (!$updQlTmp) {
		$zahlSqlError = true;
	}
	#run_mysql_query($sql, "Temp Table wurde geaendert", "FEHLER bei aendern Temp Table - Tabelle: abgeschlossener_bon_temp");

	$insQl = mysql_query("INSERT INTO abgeschlossener_bon (SELECT * FROM abgeschlossener_bon_temp)");
	if (!$insQl) {
		$zahlSqlError = true;
	}
	$neue_bon_id = mysql_insert_id();
	#$neue_bon_id=run_mysql_query($sql, "Storno wurde durchgefuehr", "FEHLER bei stornieren - Tabelle: abgeschlossener_bon");

	$dropQlTmp = mysql_query("DROP TEMPORARY TABLE abgeschlossener_bon_temp");
	if (!$dropQlTmp) {
		$zahlSqlError = true;
	}
	#run_mysql_query($sql, "Storno wurde durchgefuehr", "FEHLER bei stornieren - Tabelle: abgeschlossener_bon");

	// die Produkte kopieren

	$insQlTmpB = mysql_query("INSERT INTO abgeschlossener_bon_produkte_temp (SELECT * FROM abgeschlossener_bon_produkte WHERE abgeschlossener_bon_produkte.bon_id=$bon_id " . $help . ")");
	
	if (!$insQlTmpB) {
		$zahlSqlError = true;
	}

	$counter = 0;
	#run_mysql_query($sql, "Temp Table wurde befuellt", "FEHLER bei befuellen Temp Table - Tabelle: abgeschlossener_bon_produkte_temp");
	//foreach($ammount as $key => $value){
	//	foreach ($ammount[$counter] as $key_prod=> $value_prod)
		foreach ($storno_prod as $key_prod=> $value_prod)
		{
			//echo "key: ".$key_prod.", value: ".$value_prod."<br>";
			$row_produkt = mysql_fetch_assoc(mysql_query("select * from abgeschlossener_bon_produkte_temp where id=".$key_prod));
			//echo "select * from abgeschlossener_bon_produkte_temp where id=".$key_prod."<br>";
					   
			//if (!$row_produkt) $errorMsg .= "Datenbank Select Error: " . mysql_error();
	
			$gesamt_brutto = berechne_bruttopreis($row_produkt["PRICESELL"], $row_produkt["tax_rate"], $value_prod);
			
			//list($einzel_brutto, $gesamt_brutto, $steuer_einzel, $steuer_gesamt) = berechne_bruttopreis($row_produkt["PRICESELL"], $row_produkt["tax_rate"], $value_prod);
			$updQlTmpB = mysql_query("UPDATE abgeschlossener_bon_produkte_temp 
							SET 
							PRICESELL_brutto_gesamt =$gesamt_brutto[1],
							filialsystem_sync_done=0,
							sync_success_filialsystem=false,
							id=NULL, 
							bon_id=$neue_bon_id, 
							stueck=$value_prod*-1, 
							create_ts=NOW(), 
							update_ts=NOW() 
							WHERE ID=$key_prod");
							
			if (!$updQlTmpB) {
				$zahlSqlError = true;
				
			}
			#run_mysql_query($sql, "Temp Table wurde geaendert", "FEHLER bei aendern Temp Table - Tabelle: abgeschlossener_bon_produkte_temp");
		}
	//	$counter++;
	//}

	$insPrQl = mysql_query("INSERT INTO abgeschlossener_bon_produkte (SELECT * FROM abgeschlossener_bon_produkte_temp)");
	if (!$insPrQl) {
		$zahlSqlError = true;
		
	}
	#run_mysql_query($sql, "Storno wurde durchgefuehr", "FEHLER bei stornieren - Tabelle: abgeschlossener_bon_produkte");

	$dropQlTmpB = mysql_query("DROP TEMPORARY TABLE abgeschlossener_bon_produkte_temp");
	if (!$dropQlTmpB) {
		$zahlSqlError = true;
		
	}
	#run_mysql_query($sql, "Storno wurde durchgefuehr", "FEHLER bei stornieren - Tabelle: abgeschlossener_bon_produkte");

	# wenn es sich um einen Combi Artikel handelt
	$searchParents = mysql_query("SELECT ID, bon_id, parent_id, isparent_id FROM abgeschlossener_bon_produkte 
					WHERE has_childs = 1 AND bon_id = " . $neue_bon_id . "");
	while ($searchParentRow = mysql_fetch_array($searchParents)) {
		$tmpIsparent = $searchParentRow['isparent_id'];
		$updateChilds = mysql_query("UPDATE abgeschlossener_bon_produkte SET filialsystem_sync_done=0,sync_success_filialsystem=false,parent_id = " . $searchParentRow['ID'] . " 
								WHERE parent_id = " . $searchParentRow['isparent_id'] . " AND bon_id = " . $neue_bon_id . "  ");
		$updateParent = mysql_query("UPDATE abgeschlossener_bon_produkte SET filialsystem_sync_done=0,sync_success_filialsystem=false,isparent_id = " . $searchParentRow['ID'] . "
								WHERE isparent_id = " . $tmpIsparent . " AND bon_id = " . $neue_bon_id . " ");
	}

	// die Steuern kopieren **************************************

	$insQlTmpB = mysql_query("INSERT INTO abgeschlossener_bon_steuern_temp (SELECT * FROM abgeschlossener_bon_steuern WHERE bon_id=$bon_id)");
	if (!$insQlTmpB) {
		
		$zahlSqlError = true;
	}
	#run_mysql_query($sql, "Temp Table wurde befuellt", "FEHLER bei befuellen Temp Table - Tabelle: abgeschlossener_bon_steuern_temp");

	$updQlTmpB = mysql_query("UPDATE abgeschlossener_bon_steuern_temp SET sync_success_filialsystem=false,id=NULL, bon_id=" . $neue_bon_id . ", gesamt_betrag=(SELECT sum(stueck*pricesell) FROM abgeschlossener_bon_produkte WHERE bon_id=$neue_bon_id), update_ts=NOW(), create_ts=NOW() ");
	if (!$updQlTmpB) {
		
		$zahlSqlError = true;
	}
	#run_mysql_query($sql, "Temp Table wurde geaendert", "FEHLER bei aendern Temp Table - Tabelle: abgeschlossener_bon_steuern_temp");

	$insTaxQl = mysql_query("INSERT INTO abgeschlossener_bon_steuern (SELECT * FROM abgeschlossener_bon_steuern_temp)");
	if (!$insTaxQl) {
		
		$zahlSqlError = true;
	}
	#run_mysql_query($sql, "Storno wurde durchgefuehr", "FEHLER bei stornieren - Tabelle: abgeschlossener_bon_steuern");

	$dropQlTmpB = mysql_query("DROP TEMPORARY TABLE abgeschlossener_bon_steuern_temp");
	if (!$dropQlTmpB) {
		
		$zahlSqlError = true;
	}
	#run_mysql_query($sql, "Storno wurde durchgefuehr", "FEHLER bei stornieren - Tabelle: abgeschlossener_bon_steuern");		
	//echo "Bon $bon_id mit Grund $storno_grund und Kommentar $kommentar wurde storniert !";


	if (defined('LAENDERKENNUNG_DE') && LAENDERKENNUNG_DE != 'A') {
	} else {

		$dep_table_write_result = dep_table_schreiben($neue_bon_id, 'storniereBon');

		if ($dep_table_write_result[0] == false) {
			if ($dep_table_write_result[2] == 'sig') {
				$eC = "Signatur Error";
				$dialogHeader = "Bon signieren Fehler";
				$dialogContent = "Beim signieren ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $neue_bon_id . "<br />" . $dep_table_write_result[1] . "";
			} else if ($dep_table_write_result[2] == 'dep') {
				$eC = "DEP Error";
				$dialogHeader = "Daten Erfassungsprotokoll Fehler";
				$dialogContent = "Beim Schreiben in die Datenbank der Daten Erfassungs Protokoll Daten ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $neue_bon_id . "<br />" . $dep_table_write_result[1] . "";
			} else if ($dep_table_write_result[2] == 'dep_sig') {
				$eC = "DEP und Signatur Error";
				$dialogHeader = "Daten Erfassungsprotokoll und Signatur Fehler";
				$dialogContent = "Beim schreiben vom Daten Erfassungs Protokoll und signieren des Bons ist ein Fehler aufgetreten !!!<br />Bon Nr:" . $neue_bon_id . "<br />" . $dep_table_write_result[1] . "";
			}

			if (defined('DISPLAY_DEP_SIGN_ERROR') && strtolower(DISPLAY_DEP_SIGN_ERROR) == 'ja') {
				echo "<script>
									openGeneralDialog('dep_or_signature_Error', '" . $dialogHeader . "', '" . $dialogContent . "', 'wrapper_bon');			
							</script>";
			}
		} else if ($dep_table_write_result[0] == true && $dep_table_write_result[3] == 'unsig') {
			$zahlSqlError = true;
			echo "Sammelbeleg erstellen";
			$dialogHeader = 'Sammelbeleg erstellen';
			$dialogContent = '<p>Der letzte Bon wurde mit Signatur Einheit ausgefallen erstellt.</p><p>Zahlung wird abgebrochen, erstellen Sie einen Sammelbeleg und führen Sie danach den Zahlungsabschluss erneut aus.</p>';

			echo "<script>
								openGeneralDialog('dep_or_signature_Error', '" . $dialogHeader . "', '" . $dialogContent . "', 'wrapper');			
						</script>";
		}
	}


	// Zahlung eintragen
	if ($storno_zahlungsart == 'asInvoice') {
		for ($i = 0; $i < sizeof($asInvZahlung); $i++) {
			$zArt = $asInvZahlung[$i][0];
			$zValue = $asInvZahlung[$i][1] * -1;

			//$insZaQl = mysql_query("INSERT INTO abgeschlossener_bon_zahlung SET bon_id=" . $neue_bon_id . ", name='$zArt', zahlbetrag='$zValue',  zahlbetrag_tatsaechlich='$zValue'");
			$insZaQl = mysql_query("INSERT INTO abgeschlossener_bon_zahlung SET bon_id=" . $neue_bon_id . ", name='$zArt', zahlbetrag=(SELECT sum(stueck*pricesell_brutto) FROM abgeschlossener_bon_produkte WHERE bon_id=$neue_bon_id),  zahlbetrag_tatsaechlich=(SELECT sum(stueck*pricesell_brutto) FROM abgeschlossener_bon_produkte WHERE bon_id=$neue_bon_id)");
			//echo  "INSERT INTO abgeschlossener_bon_zahlung SET bon_id=" . $neue_bon_id . ", name='$zArt', zahlbetrag=(SELECT sum(stueck*pricesell_brutto) FROM abgeschlossener_bon_produkte WHERE bon_id=$neue_bon_id),  zahlbetrag_tatsaechlich=(SELECT sum(stueck*pricesell_brutto) FROM abgeschlossener_bon_produkte WHERE bon_id=$neue_bon_id)";
			if (!$insZaQl) {
				
				$zahlSqlError = true;
			}
			// Alex gutschein
			if ($zArt == 'Gutschein Einlösung') {
				$zValue = $asInvZahlung[$i][1];
				storniere_gutschein_bon($bon_id, $neue_bon_id, $zValue);
			}

			#run_mysql_query($sql, "Storno Zahlung wurde gebucht", "FEHLER bei Storno Zahlung - Tabelle: abgeschlossener_bon_zahlung");
		}
	} else {
		$insZaQl = mysql_query("INSERT INTO abgeschlossener_bon_zahlung SET bon_id=" . $neue_bon_id . ", name='$storno_zahlungsart', zahlbetrag=(SELECT sum(stueck*PRICESELL_brutto) FROM abgeschlossener_bon_produkte WHERE bon_id=$neue_bon_id),  zahlbetrag_tatsaechlich=(SELECT sum(stueck*PRICESELL_brutto) FROM abgeschlossener_bon_produkte WHERE bon_id=$neue_bon_id)");
		if (!$insZaQl) {
			
			$zahlSqlError = true;
		}
		#run_mysql_query($sql, "Storno Zahlung wurde gebucht", "FEHLER bei Storno Zahlung - Tabelle: abgeschlossener_bon_zahlung");

	}
	//echo '</pre>';
	//$zahlSqlError=true;
	//$zahlSqlErrorMsg.=" provozierter Fehler ";

	// Storno war erfolgreich, wenn jetzt eine Bankomatzahlung war dann den Bankomat Storno ausführen
	if ($storniere_bankomat) {
		//echo "Storno mit Bankomat ausführen";
		ini_set('max_execution_time', 0);
		// Wenn ein Fehler beim Bankomat stornieren auftritt, dann soll ein Rollback gemacht werden
		if (!storniere_bankomat($neue_bon_id, $bon_id, $ec_gutschrift)) $zahlSqlError = true;
		ini_set('max_execution_time', 30);
	}


	if ($zahlSqlError == true) {
		echo "------------------------>ERROR<--------------------------------<br>";
		# bei dep fehler oder sig fehler und SIGNATUR_ERROR_BON_ROLLBACK ist auf ja gesetzt wird zahlSqlError Variable gesetzt
		mysql_query("ROLLBACK");
		mysql_query("ALTER TABLE abgeschlossener_bon AUTO_INCREMENT = 1");
		mysql_query("ALTER TABLE dep AUTO_INCREMENT = 1");
		writeSitposLog(basename(__FILE__) . " " . __LINE__, "Bon stornieren Rollback, Bon Id: " . $neue_bon_id . "\n" . $zahlSqlErrorMsg);
		exit(1);
	} else {

		writeSitposLog(basename(__FILE__) . " " . __LINE__, "Bon stornieren Commit, Bon Id: " . $neue_bon_id . ". " . mysql_error());
		mysql_query("COMMIT");

		// Alex upsync woocommerce storno
		//upsync();
	}
	mysql_query("set autocommit=1");

	if (defined('KASSENLADE_VORHER_OEFFNEN') && strtolower(KASSENLADE_VORHER_OEFFNEN) == 'ja' && get_ladeoeffnen_bonid('lade_oeffnen', $bon_id) == true) {
		//log_to_file("KASSENLADE_VORHER_OEFFNEN: ".strtolower(KASSENLADE_VORHER_OEFFNEN));
		echo '<script>kassenladeOeffnen();</script>';
	}

	bon_ausdrucken(true, $neue_bon_id, 'storno');	#  bildschirm ausdruck, passiert immer, auch wenn pdf ausdruck gestzt ist

	if (strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja') {
		bon_ausdrucken_pdf($neue_bon_id, 200, false, false, false);
	}
	

	//log_to_file("--------> storniere_bon_ausfuehren");
}
function storniere_gutschein_bon($bon_id, $neue_bon_id, $loadAmount)
{

	$kassenabschluss_id = ist_kassa_offen();

	$selQl = mysql_fetch_array(mysql_query("SELECT betrag, gutschein_nr,gutscheine.gs_id, abgeschlossener_bon_zahlung.zahlbetrag as zahlbetrag, MIN(gutschein_buchungen.id), verkaufsart 
	FROM gutscheine 
	LEFT JOIN gutschein_buchungen 
	ON gutscheine.gs_id = gutschein_buchungen.gs_id
	LEFT JOIN abgeschlossener_bon_zahlung
	ON gutschein_buchungen.bon_id = abgeschlossener_bon_zahlung.bon_id
	WHERE abgeschlossener_bon_zahlung.Name = 'Gutschein Einlösung' AND gutschein_buchungen.bon_id = '" . $bon_id . "' "));
	mysql_query("START TRANSACTION");

	$gs_id = $selQl['gutschein_nr'];
	$db_id =  $gs_id . date('mdYhis', time());
	$preLoadVal = $selQl['zahlbetrag'];

	$updQl = mysql_query("UPDATE gutscheine SET betrag = betrag + " . $preLoadVal . ", 
							gutschein_aufgeladen = NOW()
							WHERE gs_id = '" . $selQl['gs_id'] . "'");

	$insQl = mysql_query("INSERT INTO gutschein_buchungen SET id = '" . $db_id . "', gs_id = " . $selQl['gs_id'] . "bon_id = " . $neue_bon_id . "
							, kassa_abschluss_id = " . $kassenabschluss_id . ",
							verkaufer_id = " . $_SESSION['userId'] . ", betrag_geladen = '" . $preLoadVal . "', datum_buchung = NOW(),
							verkaufsart = 'gsVerkauf', zahlungsart_name = 'Gutschein Einlösung' ");

	mysql_query("COMMIT");

	if (preg_match('/^' . GS_PREFIX . '/', $db_id) || strtolower(GUTSCHEIN_PRINT_NONE_PREFIX) == 'ja') {
		# vom System vergebene Karten nr und wenn konfig für andere auch gesetzt wird gedruckt	
		//printGutscheinBon($gutscheinCardNo, $loadFunction, 140, $preLoadVal, $loadAmount, 'zahlungsBestaetigung', $gsVerkaufsart, $gsZahlungsartName);
		require_once("ajax_funktionen_kp.php");
		printGutscheinBon($gs_id, 'bestehendeaufladen', 140, $selQl['betrag'], $preLoadVal, 'zahlungsBestaetigung');
	}
}
// Hier wird das stornieren des bons bestätigt, Zahlungsart ausgewählt, Stornogrund ausgewählt etc
function storniere_bon()
{
	$bon_id = ($_REQUEST['bon_id']);
	//echo ($bon_id);

	echo "<form id='formular_storno' name='formular_storno' onsubmit='return validate_formular_storno($bon_id)' >";
	echo '<input type="hidden" name="funktion" value="storniere_bon_ausfuehren" />';
	echo '<input type="hidden" name="bon_id" value="' . $bon_id . '" />';
	echo '<select  class="schrift kpSelect stornoSelect" name="storno_grund"> 
					<option  class="schrift kpOption" disabled selected>--- bitte Storno Grund w&auml;hlen ---</option>';
	$sql = "SELECT grund FROM storno_grund";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		echo "<option class='schrift kpOption'>";
		echo $row_produkt["grund"];
		echo "</option>";
	}
	echo '</select>';
	echo '<br />';
	echo '<br />';
	echo '<select id="stornoPaymentSelect" class="schrift kpSelect" name="storno_zahlungsart" onchange="validateZahlungsarten(' . $bon_id . ')"  > 
					<option class="schrift kpOption" disabled selected>--- bitte Zahlungsart w&auml;hlen ---</option>';
	$sql = "SELECT name FROM zahlungsart WHERE rueckgabe_zahlungsart=true ORDER BY reihenfolge";
	$sql_produkte = mysql_query($sql);
	if (!$sql_produkte) {
		echo "SQL Fehler: " . mysql_error();
		exit(1);
	}
	while ($row_produkt = mysql_fetch_assoc($sql_produkte)) {
		echo "<option class='schrift kpOption'>";
		echo $row_produkt["name"];
		echo "</option>";
	}
	echo '		<option class="schrift kpOption" value="asInvoice" >Bon entsprechend</option> 
				</select>';
	echo '<br />';
	echo '<br />';
	echo '<div class="kpBillStornoCommentDiv"><div class="kpBillStornoCommentTxt" >Kommentar:</div><input class="kpBillStornoCommentField" type="text"  class="schrift" name="kommentar" />
				<div class="cclear"></div>
				
				</div>';

	echo '<div class="kpBillStornoButDiv" ><input type="submit" class="button_gross button_none_float schrift orange" value="Stornieren"></div>';
	echo "</form><br>";
	echo"<div style='text-align: center;'><button style='font-weight: bold;height: 25px;margin-bottom:5px;  align: center ;border-radius:.3em; border: solid 2px #ac6225; color:black;' id='set0' >Alle Produkte auf 0 setzen</button></div><br>";
	echo'<script>
		let help = document.getElementById("set0");
		help.onclick = ()=>{
			for(let i = 0; document.getElementById("amount"+i);i++){
				document.getElementById("amount"+i).value = 0;
			}
		}
	</script>';

	bon_ausdrucken(true, $bon_id, 'storno');
}

function checkLicConfigGui()
{
	// function checkLicOnKassaOeffnen()   glob _2 395 
	// 		ret Val -> return array($licResult, $licCheckMsg);

	$checkLicConfig = checkLicOnKassaOeffnen();

	if (isset($checkLicConfig[0]) && $checkLicConfig[0] != '') {
		#file_put_contents("kpcheckit.txt",basename( __FILE__) ." ". __LINE__ ." ".date('Y-m-d H:i:s')."\t".$checkLicConfig[0]." - ".$checkLicConfig[1]."	\n", FILE_APPEND );
		echo json_encode(array($checkLicConfig[0],  $checkLicConfig[1]));
	}
}

function kassa_oeffnen()
{
	global $incr;

	#KPE Feb2021 -> nach hause tel...
	#	function -> global_functions_2
	$checkLicOnKassaOeffnen = checkLicOnKassaOeffnen();

	$checkLicensVerified = checkLicenseLastVerify('', false);

	#echo "<p>Test Austsieg aus kassa oeffnen -> ajax_funktionen.php Zeile 7032</p>";
	#exit('x');

	if (isset($_REQUEST['wechselgeld']) && $_REQUEST['wechselgeld'] > 0) $wechselgeld = $_REQUEST['wechselgeld'];
	else $wechselgeld = 0;
	$kassa_id = KASSA_ID;
	$verkaufer = $_SESSION["userId"];
	$setDepSignDisplayError = mysql_query("UPDATE konfiguration SET wert = 'ja' WHERE name = 'DISPLAY_DEP_SIGN_ERROR'");
	#Kassa ist nicht geoeffnet, eröffne die Kassa
	#prüfen wir nochmal ob die Kassa wirklich nicht eröffnent ist, könnte in Multikassa Konfiguration von anderem Terminal eröffnet worden sein
	$checkKassaOpen = mysql_query("SELECT kassa_offen FROM kassa_abschluesse WHERE kassa_offen = 1");
	$offenNumRows = mysql_num_rows($checkKassaOpen);
	if ($offenNumRows == 0) {
		$sql = "INSERT INTO kassa_abschluesse SET kassen_id='$kassa_id', datum_start=now(), verkaufer_id=$verkaufer, kassa_offen=1, wechselgeld=$wechselgeld";
		run_mysql_query($sql, "Kassa wurde eroeffnet", "Kassa eroeffnung fehlgeschlagen: kassa_abschluesse");

		if (strtolower(GASTRO_VERSION) == 'ja') echo "<script >window.location.href='tische.php'</script>";
		else if (strtolower(GASTRO_VERSION) != 'ja' && strtolower(WARENKOERBE_ABLEGEN) == 'ja') echo "<script >window.location.href='wk_ablage.php'</script>";
		else echo "<script >window.location.href='kassieren.php'</script>";
	} else if ($offenNumRows == 1) {
		# wenn schon geöffnet, könnte seit abfrage beim Seite laden ein anderes Teminal eröffnet haben
		if (strtolower(GASTRO_VERSION) == 'ja') $uUrl = "tische.php";
		else if (strtolower(GASTRO_VERSION) != 'ja' && strtolower(WARENKOERBE_ABLEGEN) == 'ja') $uUrl = "wk_ablage.php";
		else $uUrl = "kassieren.php";

		/*if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_KASSA_OEFFNEN == "ja") {
					$options = array(
						'http' => array (
							'header' => "Content-type: application/x-www-form-urlencoded\r\nConnection: close\r\n",
							'method' => "POST",
							'content' => http_build_query(array("funktion" => "upsync", "selVal" => "incr"))
						)
					);
					$context = stream_context_create($options);
					$result = file_get_contents("ajax_funktionen.php", false, $context);
					echo "<script>console.log('done')</script>";
				} else {
					echo "<script>console.log('not activated')</script>";
				}*/

		echo "<h2 style='text-align:center'>Kassa bereits geöffnet</h2>
						<p style='text-align:center' >Sie werden in 3 Sekunden weitergeleitet</p>
				<meta http-equiv='refresh' content='3;URL=" . $uUrl . "'>";
	} else if ($offenNumRows > 1) {
		echo "<h2>Systemfehler Kassa mehrfach geöffnet !!!!!!</h2>";
	}

	if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_KASSA_OEFFNEN == "ja") {
		upsync();
	}

	if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_PRODUKTE_KASSA_OEFFNEN == "ja") {
		$incr = "FALSE";
		syncProducts();
	}
	$kassa_id = FILIALSYSTEM_KASSA_NAME;
	$url='';
	if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_KUNDEN_BON == "ja") {
		$incr= 'FALSE';
		
		transfer_table($url, 'kunden', 'id', $kassa_id);
	}
	if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_KUNDENLIMITS == "ja") {
		transfer_table($url, 'kunden_attribute', 'kunden_id', $kassa_id);
	}
	if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_PRODUKTLIMITS == "ja") {
		transfer_table($url, 'kunden_produkte_verkaufslimit', 'produkt_verkaufslimit_id', $kassa_id);
	}
	$incr= 'TRUE';
	// TODO: Alex
}

// Macht von allen konfigurierten Terminals den Kassenabschluss und schreibt es in die Datenbank
// derzeit werden alle in des Feld ce_balance reingeschrieben
function ec_terminal_kassenabschluss($abschluss_bon)
{
	$ce_balance_text = "";
	$sqlP = mysql_query("SELECT terminal_id, ip_adresse, terminal_type FROM zahlungsterminal");
	sitpos_welt_anzeigen("EC Terminal Abschluss ...");
	while ($rowP = mysql_fetch_array($sqlP)) {
		$zahlTerminalId = preg_replace('/\s/', '', $rowP['terminal_id']);
		$zahlTerminalType = $rowP['terminal_type'];

		$exe_command = get_command_line_for_ce_terminal($zahlTerminalType, $zahlTerminalId);

		$command = ' C:\\sitpos\\bankomat\\' . $zahlTerminalType . '\\' . $exe_command . ' balance ' . $zahlTerminalId . ' ';
		//echo $command;			
		$resp = shell_exec($command);
		if (mb_detect_encoding($resp, 'UTF-8') != 'UTF-8')
			$resp = utf8_encode($resp);
		$resp = str_replace("'", "", $resp);		// ansonsten wir der String abgeschnitten - deswegen alle ' rauslöschen
		$resp = str_replace("&", "&amp;", $resp);

		log_to_file("Kassabschluss EC: " . $resp);
		$pos = strpos($resp, '<SITPOSBANKOMAT>');
		log_to_file("pos: " . $pos);
		if ($pos !== false) {
			$resp = substr($resp, $pos);
		}
		//$resp=iconv('cp1252', 'utf-8',$resp);
		log_to_file("resp: " . $resp);
		$resp = iconv('cp1252', 'utf-8//IGNORE', $resp);
		// XML Fehler nicht anzeigen, wird nachher abgefragt
		//log_to_file($resp);
		libxml_use_internal_errors(true);
		$xml = simplexml_load_string($resp);

		libxml_use_internal_errors(false);
		$ce_balance_text = $ce_balance_text . "=== Terminal Name: $zahlTerminalId ===\n";
		if ($xml === false) {
			$ce_balance_text = $ce_balance_text . "Fehler beim Abfragen des Terminals\n";
		} else $ce_balance_text = $ce_balance_text . $xml->Balance;
	}
	$sqlI = mysql_query("UPDATE kassa_abschluesse SET ce_balance='" . $ce_balance_text . "' WHERE id='" . $abschluss_bon . "'");
}


function kassa_schliessen_db_schreiben()
{
	$verkaufer = $_SESSION["userId"];
	$abschluss_bon = $_REQUEST['abschluss_bon'];

	# funktion in global_functions

	//schliesse die Kasse
	$sql = "UPDATE kassa_abschluesse SET datum_ende=now(), verkaufer_id_abschluss='" . $verkaufer . "', kassa_offen=false WHERE id=$abschluss_bon";
	//echo $sql;

	run_mysql_query($sql, "Kassa wurde geschlossen", "Kassa schliessen fehlgeschlagen: kassa_abschluesse");
	//header('Location: kassieren.php');
	ini_set('max_execution_time', 0);
	ec_terminal_kassenabschluss($abschluss_bon);
	ini_set('max_execution_time', 30);
	if (strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja') {
		//sitpos_welt_ausblenden();
		sitpos_welt_anzeigen("Kassenabschluss drucken ...");
		kassenabschluss_ausdrucken_pdf($abschluss_bon, 200);
	}

	if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_PRODUKTE_KASSA_ABSCHLUSS == "ja") {
		sitpos_welt_anzeigen("Produkt vom Filialsystem synchronisieren ...");
		$incr = "TRUE";
		syncProducts();
	}

	# else -> wird in global_js_function mit seite drucken ausgedruckt !
}

function ea_db_schreiben()
{

	$bemerkung = $_REQUEST['bemerkung'];
	$gesamt_betrag = $_REQUEST['gesamt_betrag'];
	$ea_typ = $_REQUEST['ea_typ'];
	if (isset($_POST['enthUst']) && is_numeric($_POST['enthUst'])) $enthalteneUst = $_POST['enthUst'];
	else $enthalteneUst = 0;
	#$ea_taxrate=$_POST['ea_taxrate'];
	$verkaufer = $_SESSION["userId"];
	$kassa_id = KASSA_ID;

	$kassenabschluss_id = ist_kassa_offen();
	if ($kassenabschluss_id == false) {
		print_fehler("Kassa ist nicht offen");
		exit;
	}

	// Wenn es eine Auszahlung ist, dann mit minus Betrag speichern
	if ($ea_typ == 'ein') $text = "Bar Einzahlung";
	else {
		$text = "Bar Auszahlung";
		$gesamt_betrag *= -1;
	}

	//speichere den EA
	$sql = "INSERT INTO ein_aus_zahlungen SET kassa_abschluss_id=$kassenabschluss_id, kassa_id='" . $kassa_id . "', 
						verkaufer_id=$verkaufer, gesamt_betrag=$gesamt_betrag, enthalt_steuer_betrag = '" . $enthalteneUst . "', zahlung_erfolgt_datum=NOW(), 
						timestamp=NOW(), typ='" . $ea_typ . "', bemerkung='" . $bemerkung . "'";
	//echo $sql;

	$bon_id = run_mysql_query($sql, "Zahlung wurde gebucht", "Fehler beim Zahlung buchen: $sql");

	ein_auszahlung_anzeigen(true, $bon_id);

	if (strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja') {
		ein_auszahlung_drucken_pdf($bon_id, 50);
	}
}

// *************************************************************************
// Kassenbericht ausdrucken
function kassenbericht_ausdrucken($bedingung, $ea_bedingung, $gs_bedingung = false)
{

	echo "Einnahmen Bericht <br />";
	echo "<hr />";
	/* Zahlungen ausgeben */
	//$kassastand=$value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;
	$kommastellen = KASSENABSCHLUSS_NACHKOMMASTELLEN_ANZEIGEN;
	$sql = "select abgeschlossener_bon_zahlung.name as name, SUM(zahlbetrag) as betrag, kassastand_wirksam, einnahmen_wirksam 
						FROM abgeschlossener_bon_zahlung
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_zahlung.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN zahlungsart ON abgeschlossener_bon_zahlung.name=zahlungsart.name
						" . $bedingung . " GROUP BY name";
	$sql_zahlungen = mysql_query($sql);
	if (!$sql_zahlungen) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		if ($row_zahlungen['kassastand_wirksam']) $bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		if ($row_zahlungen['einnahmen_wirksam']) $einnahmen = $einnahmen + $row_zahlungen['betrag'];
		$betrag = number_format($row_zahlungen['betrag'], $kommastellen, ",", ".");
		echo '<div class="ausdruck_ganze_zeile">';
		echo "<div class='ausdruck_abschluss_einnahme_name'>" . $row_zahlungen['name'] . "</div><div class='ausdruck_abschluss_einnahme_betrag'> " . $betrag . "</div>";
		echo '</div>';
	}


	// Ein- Auszahlungen
	$sql = "select typ, SUM(gesamt_betrag) as betrag
						FROM ein_aus_zahlungen
						LEFT JOIN kassa_abschluesse ON ein_aus_zahlungen.kassa_abschluss_id=kassa_abschluesse.id
						" . $ea_bedingung . " GROUP BY typ";
	$sql_zahlungen = mysql_query($sql);
	if (!$sql_zahlungen) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		$betrag = $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind immer Kassawirksam
		$bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind nicht Einnahmenwirksam
		//if($row_zahlungen['einnahmen_wirksam']) $einnahmen=$einnahmen+$row_zahlungen['betrag'];
		$typ = $row_zahlungen['typ'];
		if ($typ == 'ein') $text = "Bar Einzahlung";
		else {
			$text = "Bar Auszahlung";
		}

		$betrag = number_format($row_zahlungen['betrag'], $kommastellen, ",", ".");
		echo '<div class="ausdruck_ganze_zeile">';
		echo "<div class='ausdruck_abschluss_einnahme_name'>" . $text . "</div><div class='ausdruck_abschluss_einnahme_betrag'> " . $betrag . "</div>";
		echo '</div>';
	}

	echo '<div class="ausdruck_ganze_zeile">';
	echo "<hr />";
	echo '</div>';
	echo '<div class="ausdruck_ganze_zeile">';
	echo "<div class='ausdruck_abschluss_einnahme_name'>Tageseinnahmen (ohne GS)</div><div class='ausdruck_abschluss_einnahme_betrag'>" . number_format($einnahmen, $kommastellen, ",", ".") . "</div>";
	echo '</div>';
	echo '<div class="ausdruck_ganze_zeile">';
	echo "<div class='ausdruck_abschluss_einnahme_name'>Bar Einnahmen</div><div class='ausdruck_abschluss_einnahme_betrag'>" . number_format($bar_einnahmen, $kommastellen, ",", ".") . "</div>";
	echo '</div>';
	echo '<div class="ausdruck_ganze_zeile">';
	echo "<hr />";
	echo '</div>';

	# Einnamen aus Gutschein Ausstellen, Ausgabe

	$gsVk = mysql_query("SELECT betrag_geladen AS gutscheinVerk
							FROM gutschein_buchungen
							LEFT JOIN zahlungsart ON zahlungsart.Name = gutschein_buchungen.zahlungsart_name
							" . $gs_bedingung . "  AND LOWER(verkaufsart) = 'gsverkauf' AND zahlungsart.kassastand_wirksam = 1  ");
	$sumGsVk = 0;
	while ($gsVerk = mysql_fetch_array($gsVk)) {
		$sumGsVk += $gsVerk['gutscheinVerk'];
	}
	if ($sumGsVk > 0) {
		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>";
		echo "<div class='ausdruck_abschluss_einnahme_name'>Einnahmen aus GS Ausstellen:</div>
					<div class='ausdruck_abschluss_einnahme_betrag'>" . number_format($sumGsVk, $kommastellen, ",", ".") . "</div>";
		echo '</div>
					<div class="ausdruck_ganze_zeile ausdruck_bon_gesamt_breite">';
		echo "<hr />";
		echo '</div>';
	}

	/* Steuern ausgeben */
	echo "<br />";
	echo "<br />";
	echo "Steuern Bericht <br />";
	echo "<hr />";
	$sql = "select tax_rate, SUM(gesamt_betrag) as betrag 
						FROM abgeschlossener_bon_steuern
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_steuern.bon_id=abgeschlossener_bon.bon_id
						" . $bedingung . " GROUP BY tax_rate";
	$sql_steuern = mysql_query($sql);
	if (!$sql_steuern) {
		echo "SQL Fehler beim Kassen Abschluss Steuer: " . mysql_error();
		exit(1);
	}
	$steuer_betrag_summe = 0;
	$steuer_summe = 0;
	$steuer_summe_brutto = 0;
	echo '<div class="ausdruck_ganze_zeile">';
	echo "<div class='ausdruck_abschluss_steuer_satz'>Steuer</div><div class='ausdruck_abschluss_steuer_netto'>Ums. Net.</div>
				<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div><div class='ausdruck_abschluss_steuer_brutto'>Ums. Brut.</div>";
	echo '</div>';
	while ($row_steuern = mysql_fetch_assoc($sql_steuern)) {
		$steuersatz = $row_steuern['tax_rate'] * 100;
		$steuer_betrag = $row_steuern['betrag'];
		$steuer_betrag_summe += $steuer_betrag;

		$steuer = $steuer_betrag * $row_steuern['tax_rate'];
		$steuer_summe += $steuer;

		$steuer_brutto = $steuer_betrag + $steuer;
		$steuer_summe_brutto += $steuer_brutto;

		$prtSteuer = round($steuer_brutto, 2) - round($steuer_betrag, 2);

		echo '<div class="ausdruck_ganze_zeile">';
		echo "<div class='ausdruck_abschluss_steuer_satz'>$steuersatz% </div><div class='ausdruck_abschluss_steuer_netto'>" . number_format($steuer_betrag, $kommastellen, ",", ".") . " </div>
					<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($prtSteuer, $kommastellen, ",", ".") . "</div><div class='ausdruck_abschluss_steuer_brutto'>" . number_format($steuer_brutto, $kommastellen, ",", ".") . "</div>";
		echo '</div>';
	}

	$prtSteuer_summe = round($steuer_summe_brutto, 2) - round($steuer_betrag_summe, 2);

	echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
	echo '<div class="ausdruck_ganze_zeile">';
	echo "<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
				<div class='ausdruck_abschluss_steuer_netto'>" . number_format($steuer_betrag_summe, $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($steuer_summe_brutto, $kommastellen, ",", ".") . "</div>";
	echo "</div>";
	echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
	/*	Ende Steuern */
	// ******************************************************		

	/* Gutscheine ausgeben */

	$gsEnabled = false;
	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {
		$gsEnabled = true;

		echo "<br />";
		echo "Gutscheine Bericht <br />";
		echo "<div class='ausdruck_ganze_zeile'><hr /></div>";

		$gsQlLoad = mysql_fetch_array(mysql_query("SELECT SUM(betrag_geladen) AS gsSumme, COUNT(betrag_geladen) AS gsAnzahl, 
									SUM(betrag_geladen-(betrag_geladen/(1+tax))) AS gsTaxSum 
								FROM gutscheine 
								LEFT JOIN gutschein_buchungen ON gutscheine.gs_id = gutschein_buchungen.gs_id
								" . $gs_bedingung . " AND LOWER(verkaufsart) = 'gsverkauf' "));

		$gsQlEinl = mysql_fetch_array(mysql_query("SELECT COUNT(abgeschlossener_bon.bon_id) AS gsAnzahl, gesamt_summe, abgeschlossener_bon_zahlung.Name AS zaName,
										SUM(zahlbetrag) AS gsSumme, 
										SUM((abgeschlossener_bon_steuern.gesamt_betrag*(1+abgeschlossener_bon_steuern.tax_rate)) - abgeschlossener_bon_steuern.gesamt_betrag) AS gsTaxSum
										FROM abgeschlossener_bon
										LEFT JOIN abgeschlossener_bon_steuern ON abgeschlossener_bon.bon_id = abgeschlossener_bon_steuern.bon_id							
										LEFT JOIN abgeschlossener_bon_zahlung ON abgeschlossener_bon.bon_id = abgeschlossener_bon_zahlung.bon_id
										LEFT JOIN zahlungsart ON zahlungsart.Name = abgeschlossener_bon_zahlung.Name
										" . $bedingung . " AND zahlungsart.gs_zahlung = 1 "));

		echo "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
				<div class='ausdruck_abschluss_steuer_satz'>Aufladung</div>			
				<div class='ausdruck_abschluss_steuer_netto' >" . $gsQlLoad['gsAnzahl'] . "</div>
				<div class='ausdruck_abschluss_steuer_betrag' >" . number_format($gsQlLoad['gsTaxSum'], $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_brutto' >" . number_format($gsQlLoad['gsSumme'], $kommastellen, ",", ".") . "</div>
								
				<div class='ausdruck_abschluss_steuer_satz'>Einlösung</div>			
				<div class='ausdruck_abschluss_steuer_netto' >" . $gsQlEinl['gsAnzahl'] . "</div>
				<div class='ausdruck_abschluss_steuer_betrag' >" . number_format($gsQlEinl['gsTaxSum'], $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_brutto' >" . number_format($gsQlEinl['gsSumme'], $kommastellen, ",", ".") . "</div>
				
			</div>";


		echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
		echo '<div class="ausdruck_ganze_zeile"></div>';
	}
	/* Warengruppen ausgeben */
	echo "<br />";
	echo "Warengruppen Bericht<br />";
	echo "<div class='ausdruck_ganze_zeile'><hr /></div>";

	echo '<div class="ausdruck_ganze_zeile">';
	echo "<div class='ausdruck_abschluss_steuer_satz'>Warengruppe</div>
				<div class='ausdruck_abschluss_steuer_netto'>Ums. Net.</div>
				<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
				<div class='ausdruck_abschluss_steuer_brutto'>Ums. Brut.</div>";
	echo '</div>';

	$sql = "select categories.name as kategorie, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, 
									abgeschlossener_bon_produkte.CATEGORY AS catID  
						FROM abgeschlossener_bon_produkte
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN categories ON abgeschlossener_bon_produkte.category=categories.id
						" . $bedingung . " AND abgeschlossener_bon_produkte.CATEGORY <> 9999  GROUP BY kategorie
						 ORDER BY categories.anzeige_reihenfolge ASC, categories.name ASC";

	# 9999 sind Abschluss- Null Belege

	$sql_kategorien = mysql_query($sql);
	if (!$sql_kategorien) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	$summe_gesamt = 0;
	$steuer_gesamt = 0;
	$brutto_gesamt = 0;
	while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
		$summe = $row_kategorien['summe'];
		$steuer = $row_kategorien['steuer'];
		$brutto = $summe + $steuer;
		$summe_gesamt += $summe;
		$steuer_gesamt += $steuer;
		$brutto_gesamt += $brutto;
		if ($row_kategorien['catID'] == 0) $categoryName = "Rabatte";
		else $categoryName = $row_kategorien['kategorie'];

		$prtSteuer = round($brutto, 2) - round($summe, 2);

		echo '<div class="ausdruck_ganze_zeile">';
		echo "<div class='ausdruck_abschluss_steuer_satz'>" . $categoryName . "</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto, $kommastellen, ",", ".") . "</div>";
		echo '</div>';
	}

	$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);
	echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
	echo '<div class="ausdruck_ganze_zeile">';
	echo "<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe_gesamt, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto_gesamt, $kommastellen, ",", ".") . "</div>";
	echo '</div>';
	// ********************************************************************

	// Rabatte
	$sql = "select SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer 
						FROM abgeschlossener_bon_produkte
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
						" . $bedingung . "  AND pricesell <0 ";
	$sql_kategorien = mysql_query($sql);
	if (!$sql_kategorien) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	$summe_gesamt = 0;
	$steuer_gesamt = 0;
	$brutto_gesamt = 0;
	while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
		$summeRabatte = $row_kategorien['summe'];
		$steuerRabatte = $row_kategorien['steuer'];
		$bruttoRabatte = $summeRabatte + $steuerRabatte;
		$summe_gesamt += $summeRabatte;
		$steuer_gesamt += $steuerRabatte;
		$brutto_gesamt += $bruttoRabatte;

		$prtSteuerRabatte = round($bruttoRabatte, 2) - round($summeRabatte, 2);

		echo '<div class="ausdruck_ganze_zeile">';
		echo "<div class='ausdruck_abschluss_steuer_satz'>davon Rabatte</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summeRabatte, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuerRabatte, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($bruttoRabatte, $kommastellen, ",", ".") . "</div>";
		echo '</div>';
	}
	echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
	// **************************************************************

	if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {
		echo "<br />";
		echo "Produkte Bericht <br />";
		echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
		echo "<div class='ausdruck_ganze_zeile'>";
		echo "<div class='ausdruck_abschluss_steuer_satz'>Produkt</div>
					<div class='ausdruck_abschluss_steuer_netto'>Ums. Net.</div>
					<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
					<div class='ausdruck_abschluss_steuer_brutto'>Ums. Brut.</div>";
		echo '</div>';

		$sql = "SELECT abgeschlossener_bon_produkte.NAME AS prodName, abgeschlossener_bon_produkte.PRINTNAME AS artPrintname, 
								abgeschlossener_bon_produkte.CATEGORY AS catID, SUM(abgeschlossener_bon_produkte.pricesell*stueck) AS summe,
								SUM(abgeschlossener_bon_produkte.pricesell*stueck*tax_rate) AS steuer, 
								abgeschlossener_bon_produkte.produkt_id 
							FROM abgeschlossener_bon_produkte
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
							LEFT JOIN products ON abgeschlossener_bon_produkte.produkt_id = products.id
							LEFT JOIN categories ON abgeschlossener_bon_produkte.CATEGORY = categories.id
							" . $bedingung . " AND products.kassenabschluss_anzeigen = 1 AND has_childs=0 
							GROUP BY artPrintname ORDER BY artPrintname ASC";


		$sql_products = mysql_query($sql);
		if (!$sql_products) {
			echo "SQL Fehler beim Kassen Bericht: " . mysql_error();
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;
		while ($row_products = mysql_fetch_assoc($sql_products)) {
			$summe = $row_products['summe'];
			$steuer = $row_products['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			$prtSteuer = round($brutto, 2) - round($summe, 2);

			echo "<div class='ausdruck_ganze_zeile'>";
			echo "<div class='ausdruck_abschluss_steuer_satz'>" . $row_products['prodName'] . "</div>
						<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe, $kommastellen, ",", ".") . "</div>
						<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer, $kommastellen, ",", ".") . "</div>
						<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto, $kommastellen, ",", ".") . "</div>";
			echo "</div>";
		}
		$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

		echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
		echo "<div class='ausdruck_ganze_zeile'>";
		echo "<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summe_gesamt, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto_gesamt, $kommastellen, ",", ".") . "</div>";
		echo "</div>";

		# Rabatte,  die Werte sind aus Warengruppe übernommen

		$prtSteuerRabatte = round($bruttoRabatte, 2) - round($summeRabatte, 2);
		echo "<div class='ausdruck_ganze_zeile'>";
		echo "<div class='ausdruck_abschluss_steuer_satz'>davon Rabatte</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . number_format($summeRabatte, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuerRabatte, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($bruttoRabatte, $kommastellen, ",", ".") . "</div>";
		echo "</div>";

		echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
	}

	# Sondertische suchen und diese ausweisen
	if (strtolower(GASTRO_VERSION) == 'ja') {
		$sonderTischerRes = "";
		/*
			$getSonderT=mysql_query("SELECT tische.id, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_steuern.gesamt_betrag) AS summeSummeNetto,
									SUM(abgeschlossener_bon_steuern.gesamt_betrag * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_steuern ON abgeschlossener_bon.bon_id = abgeschlossener_bon_steuern.bon_id
							".$bedingung." AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id");
*/

		$bedingungFrei = preg_replace('/abgeschlossener_bon/', 'abgeschlossener_bon_frei', $bedingung);
		$getSonderT = mysql_query("SELECT * FROM (
							(SELECT '' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon.bon_id = abgeschlossener_bon_produkte.bon_id
							" . $bedingung . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)							
							UNION ALL
							(SELECT 'zahlungFrei' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte_frei.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte_frei.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon_frei ON abgeschlossener_bon_frei.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte_frei ON abgeschlossener_bon_frei.bon_id = abgeschlossener_bon_produkte_frei.bon_id
							" . $bedingungFrei . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)) AS zahlungFrei
				ORDER BY tischId ASC");
		$zahlungFreiArray = array();
		$zahlungArray = array();


		while ($getSonderR = mysql_fetch_array($getSonderT)) {
			$taxVal = $getSonderR['summeSummeBrutto'] - $getSonderR['summeSummeNetto'];
			$zalungFreiHeader = "";
			if ($getSonderR['zahlungC'] == "zahlungFrei") {
				$zalungFreiHeader = "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite bbold'>Zahlung Frei</div>";
				array_push($zahlungFreiArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
			} else {
				array_push($zahlungArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
			}
		}
		if (mysql_num_rows($getSonderT) > 0) {

			echo "<br />Tische gesondert Ausweisen<br />";
			$sonderTableH = "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>
						<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
							<div class='kassenabschlCatNameColumn'>Tisch</div>
							<div class='ausdruck_abschluss_steuer_netto'>Netto</div>
							<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
							<div class='ausdruck_abschluss_steuer_brutto'>Brutto</div>
						</div>";
			$outputSonderTable = "";
			if (count($zahlungFreiArray) > 0) {
				$sumNetF = 0;
				$sumTaxF = 0;
				$sumBrutF = 0;
				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>Sonder Tische Zahlung Frei </div>";
				$outputSonderTable .= $sonderTableH;
				for ($i = 0; $i < count($zahlungFreiArray); $i++) {
					$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>												
												<div class='kassenabschlCatNameColumn'>" . $zahlungFreiArray[$i][0] . "</div>
												<div class='ausdruck_abschluss_steuer_netto'>" . number_format($zahlungFreiArray[$i][1], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($zahlungFreiArray[$i][2], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($zahlungFreiArray[$i][3], 2, ",", ".") . "</div>
											</div>";

					$sumNetF += $zahlungFreiArray[$i][1];
					$sumTaxF += $zahlungFreiArray[$i][2];
					$sumBrutF += $zahlungFreiArray[$i][3];
				}

				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>
							<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
							<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
							<div class='ausdruck_abschluss_steuer_netto'>" . number_format($sumNetF, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($sumTaxF, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($sumBrutF, 2, ",", ".") . "</div> 
						</div>
						<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
			}
			if (count($zahlungArray) > 0) {
				$sumNet = 0;
				$sumTax = 0;
				$sumBrut = 0;
				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>Tische bezahlt</div>";
				$outputSonderTable .= $sonderTableH;
				for ($j = 0; $j < count($zahlungArray); $j++) {

					$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>												
												<div class='kassenabschlCatNameColumn'>" . $zahlungArray[$j][0] . "</div>
												<div class='ausdruck_abschluss_steuer_netto'>" . number_format($zahlungArray[$j][1], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($zahlungArray[$j][2], 2, ",", ".") . "</div>
												<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($zahlungArray[$j][3], 2, ",", ".") . "</div>
											</div>";
					$sumNet += $zahlungArray[$j][1];
					$sumTax += $zahlungArray[$j][2];
					$sumBrut += $zahlungArray[$j][3];
				}
				$outputSonderTable .= "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>
							<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'>
							<div class='ausdruck_abschluss_steuer_satz'>Summe</div>
							<div class='ausdruck_abschluss_steuer_netto'>" . number_format($sumNet, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_betrag'>" . number_format($sumTax, 2, ",", ".") . "</div>
							<div class='ausdruck_abschluss_steuer_brutto'>" . number_format($sumBrut, 2, ",", ".") . "</div> 
						</div>
						<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite'><hr /></div>";
			}

			echo $outputSonderTable;
		}
	}
	/* Benutzer ausgeben - Variablen hab ich gleich gelassen von Kategorien, - nicht verwirren lassen - */

	echo "<br />";
	echo "Benutzer Bericht <br />";
	echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
	echo "<div class='ausdruck_ganze_zeile'>";
	echo "<div class='ausdruck_abschluss_steuer_satz'>Benutzer</div>
				<div class='ausdruck_abschluss_steuer_netto'>Anz. Bon</div>
				<div class='ausdruck_abschluss_steuer_betrag'>Steuer</div>
				<div class='ausdruck_abschluss_steuer_brutto'>Umsatz Brutto</div>";
	echo '</div>';
	$sql = "select benutzer.name as benutzer, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer,
							COUNT(DISTINCT abgeschlossener_bon.bon_id) AS anzBons
						FROM abgeschlossener_bon_produkte
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN benutzer ON abgeschlossener_bon.verkaufer_id=benutzer.id
						" . $bedingung . "   GROUP BY benutzer";
	$sql_kategorien = mysql_query($sql);
	if (!$sql_kategorien) {
		echo "SQL Fehler beim Kassen Abschluss: " . mysql_error();
		exit(1);
	}
	$summe_gesamt = 0;
	$steuer_gesamt = 0;
	$brutto_gesamt = 0;
	$gesAnzBons = 0;
	while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
		$summe = $row_kategorien['summe'];
		$steuer = $row_kategorien['steuer'];
		$brutto = $summe + $steuer;
		$summe_gesamt += $summe;
		$steuer_gesamt += $steuer;
		$brutto_gesamt += $brutto;

		$prtSteuer = round($brutto, 2) - round($summe, 2);
		$gesAnzBons += $row_kategorien['anzBons'];

		echo "<div class='ausdruck_ganze_zeile'>";
		echo "<div class='ausdruck_abschluss_steuer_satz'>" . $row_kategorien['benutzer'] . "</div>
					<div class='ausdruck_abschluss_steuer_netto'>" . $row_kategorien['anzBons'] . "</div>
					<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer, $kommastellen, ",", ".") . "</div>
					<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto, $kommastellen, ",", ".") . "</div>";
		echo '</div>';
	}
	$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);
	echo "<div class='ausdruck_ganze_zeile'><hr /></div>";
	echo " <div class='ausdruck_abschluss_steuer_satz'>&nbsp; </div>
				<div class='ausdruck_abschluss_steuer_netto'>" . $gesAnzBons . " </div>
				<div class='ausdruck_abschluss_steuer_betrag'>" .  number_format($prtSteuer_summe, $kommastellen, ",", ".") . "</div>
				<div class='ausdruck_abschluss_steuer_brutto'>" .  number_format($brutto_gesamt, $kommastellen, ",", ".") . "</div>";
	echo '</div>';
	// ************************************************************

	//Fusszeile_ausdrucken();
	//if ($bildschirm) echo "</pre>";
	//else echo "</div'></pre>";
}

function kassenbericht_ausdrucken_pdf($min_id = false, $max_id = false, $dateFrom = false, $dateTo = false, $bonHeight = false)
{

	if (isset($_POST['requestDateFrom'])) $datum_von = $_POST['requestDateFrom'];
	if (isset($_POST['requestDateTo'])) $datum_bis = $_POST['requestDateTo'];

	if (isset($_POST['abschlIdVon'])) $minId = $_POST['abschlIdVon'];
	if (isset($_POST['abschlIdBis'])) $maxId = $_POST['abschlIdBis'];

	$iu = $bonHeight;

	if ($dateFrom == false) $dateFrom = $datum_von;
	if ($dateTo == false) $dateTo = $datum_bis;

	if ($min_id == false) $min_id = $minId;
	if ($max_id == false) $max_id = $maxId;


	if ($bonHeight == false) $bonHeight = AUSDRUCK_PDF_GESAMTE_HOEHE;

	require_once('include/fpdf.php');

	$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, druckbreite  FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));

	if ($printer['druckbreite'] == true && $printer['druckbreite'] > 35) $bonWidth = $printer['druckbreite'];
	else $bonWidth = preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);

	$drucker = $printer[0];

	$margin = $printer[1];
	$margins = explode(",", $margin);

	if (isset($margins[2])) $marginLR = preg_replace('/\D/', '', $margins[2]);
	else $marginLR = 0;
	if (isset($margins[1])) $marginBottom = preg_replace('/\D/', '', $margins[1]);
	else $marginBottom = 0;
	if (isset($margins[0])) $marginTop = preg_replace('/\D/', '', $margins[0]);
	else $marginTop = 0;

	$pdf = new FPDF('P', 'mm', array($bonWidth, $bonHeight));
	$pdf->SetMargins($marginLR, $marginTop, 0);
	$pdf->AddPage();


	$fontConfig = SCHRIFT_AUSDRUCK_KASSENABSCHL_PDF;

	if (
		strpos(strtolower($fontConfig), 'arial') !== false  || strpos(strtolower($fontConfig), 'helvetica') !== false ||
		strpos(strtolower($fontConfig), 'sans serif') !== false
	) {
		$pdfFont = "Arial";
		$z = "Arial";
	} else if (
		strpos(strtolower($fontConfig), 'times') !== false  || strpos(strtolower($fontConfig), 'roman') !== false ||
		(strpos(strtolower($fontConfig), 'serif') !== false &&  strpos(strtolower($fontConfig), 'sans') == false)
	) {
		$pdfFont = "Times";
		$z = "Times";
	} else if (strpos(strtolower($fontConfig), 'courier') !== false) {
		$pdfFont = "Courier";
		$z = "Courir";
	} else {
		$pdfFont = "Arial";
		$z = "Default";
	}

	preg_match('/\d+px | \d+pt/', $fontConfig, $m);
	preg_match('/\d+/', $m[0], $match);
	$pdfFontSize = $match[0];				#  stimmt nicht wirklich, fpdf verwendet hier pt und nciht px, pt ist auf inch bezogen, px auf sreen dott size.

	$lineHeight = $pdfFontSize / 2.5;

	$pdf->SetFont($pdfFont, '', $pdfFontSize);
	#	$pdf->Cell(0, 6, $z." / ".$fontConfig." -- ".$pdfFontSize, 'B', 1, 'C');

	$headArray = kopfzeile_ausdrucken('', 'printPdf');

	for ($i = 0; $i < sizeof($headArray); $i++) {
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($headArray[$i])), 0, 1, 'C');
	}

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, 2, "", 0, 1, 'C');
	} else $pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Fa kopf


	$sql_abschl = mysql_query("select MIN(id) as min_id, MAX(id) as max_id, kassen_id from kassa_abschluesse 
				WHERE datum_start>='" . $dateFrom . " 00:00:00' AND datum_start<='" . $dateTo . " 23:59:59' and kassa_offen=false");
	if (!$sql_abschl) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler bei Kassenbericht erstellen: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	$row_absch = mysql_fetch_object($sql_abschl);
	#$min_id=$row_absch->min_id;
	#$max_id=$row_absch->max_id;
	$kassen_id = KASSA_ID;

	if ($min_id == false || $max_id == false) $pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "Keine Kassenabschlüsse im selektierten Zeitraum gefunden"), 0, 'L', 0);

	$bedingung = "WHERE abgeschlossener_bon.kassa_abschluss_id>='" . $min_id . "' AND abgeschlossener_bon.kassa_abschluss_id<='" . $max_id . "' ";
	$ea_bedingung = "WHERE kassa_abschluesse.id>='" . $min_id . "' AND kassa_abschluesse.id<='" . $max_id . "'";
	$gs_bedingung = "WHERE gutschein_buchungen.kassa_abschluss_id>='" . $min_id . "' AND gutschein_buchungen.kassa_abschluss_id<='" . $max_id . "'";

	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	$pdf->Cell(0, $lineHeight, "KASSENBERICHT", 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "", 0, 1, 'C');

	$pdf->Cell(0, $lineHeight, "Kassenabschluss ID ab :" . $min_id, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Kassenabschluss ID bis :" . $max_id, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Kassen ID : " . $kassen_id, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Datum von : " . $dateFrom, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight, "Datum bis : " . $dateTo, 0, 1, 'L');
	$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');

	$pdf->Cell(0, $lineHeight, "Einnahmen Bericht", 0, 1, 'L');
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
	$pdf->Cell(0, 1, "", 0, 1, 'C');


	/* Zahlungen ausgeben */
	//$kassastand=$value->wechselgeld;
	$bar_einnahmen = 0;
	$einnahmen = 0;
	$sql_zahlungen = mysql_query($sql = "select abgeschlossener_bon_zahlung.name as name, SUM(zahlbetrag) as betrag, kassastand_wirksam, einnahmen_wirksam 
						FROM abgeschlossener_bon_zahlung
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_zahlung.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN zahlungsart ON abgeschlossener_bon_zahlung.name=zahlungsart.name
						" . $bedingung . " GROUP BY name");


	if (!$sql_zahlungen) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler bei Kassenbericht erstellen: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		if ($row_zahlungen['kassastand_wirksam']) $bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		if ($row_zahlungen['einnahmen_wirksam']) $einnahmen = $einnahmen + $row_zahlungen['betrag'];
		$betrag = number_format($row_zahlungen['betrag'], 2, ",", ".");

		$leftRestWidth = ($bonWidth - ($marginLR * 2)) - preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_EINNAHME_BETRAG);

		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, iconv('UTF-8', 'windows-1252', $row_zahlungen['name']), 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .35, $lineHeight, $betrag, 0, 1, 'R');
	}

	// Ein- Auszahlungen
	$sql_zahlungen = mysql_query("select typ, SUM(gesamt_betrag) as betrag
						FROM ein_aus_zahlungen
						LEFT JOIN kassa_abschluesse ON ein_aus_zahlungen.kassa_abschluss_id=kassa_abschluesse.id
						" . $ea_bedingung . " GROUP BY typ");

	if (!$sql_zahlungen) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler bei Kassenbericht erstellen: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	while ($row_zahlungen = mysql_fetch_assoc($sql_zahlungen)) {
		$betrag = $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind immer Kassawirksam
		$bar_einnahmen = $bar_einnahmen + $row_zahlungen['betrag'];
		//Ein- Auszahlungen sind nicht Einnahmenwirksam
		//if($row_zahlungen['einnahmen_wirksam']) $einnahmen=$einnahmen+$row_zahlungen['betrag'];
		$typ = $row_zahlungen['typ'];
		if ($typ == 'ein') $text = "Bar Einzahlung";
		else {
			$text = "Bar Auszahlung";
		}

		$betrag = number_format($row_zahlungen['betrag'], 2, ",", ".");
		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, iconv('UTF-8', 'windows-1252', $text), 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .35, $lineHeight, $betrag, 0, 1, 'R');
	}

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, "Tageseinnahmen (ohne GS)", 0, 0, 'R');
	$pdf->Cell(($bonWidth - ($marginLR)) * .35, $lineHeight, number_format($einnahmen, 2, ",", "."), 0, 1, 'R');

	$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, "Bar Einnahmen", 0, 0, 'R');
	$pdf->Cell(($bonWidth - ($marginLR)) * .35, $lineHeight, number_format($bar_einnahmen, 2, ",", "."), 0, 1, 'R');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, 1, "", 0, 1, 'C');
	} else $pdf->Cell(0, 1, "", "B", 1, 'C');


	# Einnamen aus Gutschein Ausstellen, Ausgabe

	$gsVk = mysql_query("SELECT betrag_geladen AS gutscheinVerk
							FROM gutschein_buchungen
							LEFT JOIN zahlungsart ON zahlungsart.Name = gutschein_buchungen.zahlungsart_name
							" . $gs_bedingung . "  AND LOWER(verkaufsart) = 'gsverkauf' AND zahlungsart.kassastand_wirksam = 1  ");
	$sumGsVk = 0;
	while ($gsVerk = mysql_fetch_array($gsVk)) {
		$sumGsVk += $gsVerk['gutscheinVerk'];
	}
	if ($sumGsVk > 0) {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		$pdf->Cell(($bonWidth - ($marginLR)) * .65, $lineHeight, "Einnahmen aus GS Ausstellen", 0, 0, 'R');
		$pdf->Cell(($bonWidth - ($marginLR)) * .35, $lineHeight, number_format($sumGsVk, 2, ",", "."), 0, 1, 'R');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	}

	$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');

	/* Steuern ausgeben */
	$pdf->Cell(0, $lineHeight, "Steuern Bericht", 0, 1, 'L');
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, .5, "", 0, 1, 'C');
	} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
	$pdf->Cell(0, 1, "", 0, 1, 'C');

	$sql_steuern = mysql_query("select tax_rate, SUM(gesamt_betrag) as betrag 
						FROM abgeschlossener_bon_steuern
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_steuern.bon_id=abgeschlossener_bon.bon_id
						" . $bedingung . " GROUP BY tax_rate");

	if (!$sql_steuern) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler bei Kassenbericht erstellen: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}
	$steuer_betrag_summe = 0;
	$steuer_summe = 0;
	$steuer_summe_brutto = 0;

	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Steuer", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Ums. Netto", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brutto", 0, 1, 'R');

	while ($row_steuern = mysql_fetch_assoc($sql_steuern)) {
		$steuersatz = $row_steuern['tax_rate'] * 100;
		$steuer_betrag = $row_steuern['betrag'];
		$steuer_betrag_summe += $steuer_betrag;

		$steuer = $steuer_betrag * $row_steuern['tax_rate'];
		$steuer_summe += $steuer;

		$steuer_brutto = $steuer_betrag + $steuer;
		$steuer_summe_brutto += $steuer_brutto;

		$prtSteuer = round($steuer_brutto, 2) - round($steuer_betrag, 2);


		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Steuer " . $steuersatz . "%", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($steuer_betrag, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($steuer_brutto, 2, ",", "."), 0, 1, 'R');
	}
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$prtSteuer_summe = round($steuer_summe_brutto, 2) - round($steuer_betrag_summe, 2);

	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($steuer_betrag_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($steuer_summe_brutto, 2, ",", "."), 0, 1, 'R');

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');

	/*	Ende Steuern */

	# ausgabe Gutscheine Bericht wenn in Konfig freigegeben

	if (
		defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION')
		&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'
	) {
		$pdf->Cell(0, $lineHeight, "Gutscheine Bericht", 0, 1, 'L');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, " ", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Anzahl", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Betr. Brutto", 0, 1, 'R');


		$gsQlLoad = mysql_fetch_array(mysql_query("SELECT SUM(betrag_geladen) AS gsSumme, COUNT(betrag_geladen) AS gsAnzahl, 
									SUM(betrag_geladen-(betrag_geladen/(1+tax))) AS gsTaxSum 
								FROM gutscheine 
								LEFT JOIN gutschein_buchungen ON gutscheine.gs_id = gutschein_buchungen.gs_id
								" . $gs_bedingung . " AND LOWER(verkaufsart) = 'gsverkauf' "));

		$gsQlEinl = mysql_fetch_array(mysql_query("SELECT COUNT(abgeschlossener_bon.bon_id) AS gsAnzahl, gesamt_summe, abgeschlossener_bon_zahlung.Name AS zaName,
										SUM(zahlbetrag) AS gsSumme, 
										SUM((abgeschlossener_bon_steuern.gesamt_betrag*(1+abgeschlossener_bon_steuern.tax_rate)) - abgeschlossener_bon_steuern.gesamt_betrag) AS gsTaxSum
										FROM abgeschlossener_bon
										LEFT JOIN abgeschlossener_bon_steuern ON abgeschlossener_bon.bon_id = abgeschlossener_bon_steuern.bon_id							
										LEFT JOIN abgeschlossener_bon_zahlung ON abgeschlossener_bon.bon_id = abgeschlossener_bon_zahlung.bon_id
										LEFT JOIN zahlungsart ON zahlungsart.Name = abgeschlossener_bon_zahlung.Name
										" . $bedingung . " AND zahlungsart.gs_zahlung = 1 "));

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Aufladung", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $gsQlLoad['gsAnzahl'], 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($gsQlLoad['gsTaxSum'], 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($gsQlLoad['gsSumme'], 2, ",", "."), 0, 1, 'R');

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', "Einlösung"), 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $gsQlEinl['gsAnzahl'], 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($gsQlEinl['gsTaxSum'], 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($gsQlEinl['gsSumme'], 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	}
	# ende gutschein Ausgabe
	/* Warengruppen ausgeben */
	if (defined('FUNKTION_KASSENABSCHL_CATEGORYLISTE') && strtolower(FUNKTION_KASSENABSCHL_CATEGORYLISTE) == 'ja') {
		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "Warengruppen Bericht", 0, 1, 'L');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Warengr.", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Ums. Netto", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brutto", 0, 1, 'R');

		$sql_kategorien = mysql_query("select categories.name as kategorie, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer 
							FROM abgeschlossener_bon_produkte
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
							LEFT JOIN categories ON abgeschlossener_bon_produkte.category=categories.id
							" . $bedingung . "  GROUP BY kategorie ORDER BY categories.anzeige_reihenfolge ASC, categories.NAME ASC");

		if (!$sql_kategorien) {
			$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler bei Kassenbericht erstellen: " . mysql_error()), 0, 'L', 0);
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;

		while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
			$summe = $row_kategorien['summe'];
			$steuer = $row_kategorien['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			$prtSteuer = round($brutto, 2) - round($summe, 2);

			if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $row_kategorien['kategorie'])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
				$posY = $pdf->GetY();
				$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
				$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $row_kategorien['kategorie']), 0, 'L', 0);
				$posY_2 = $pdf->GetY();
				$pdf->SetXY($posX, $posY);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
				$pdf->SetY($posY_2);
			} else {
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $row_kategorien['kategorie']), 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
			}
		}
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe_gesamt, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');

		$sql_kategorien = mysql_query("select SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer 
							FROM abgeschlossener_bon_produkte
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
							" . $bedingung . "  AND pricesell<0");

		if (!$sql_kategorien) {
			$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler bei Kassenbericht erstellen: " . mysql_error()), 0, 'L', 0);
			exit(1);
		}
		$summe_gesamt = 0;
		$steuer_gesamt = 0;
		$brutto_gesamt = 0;
		while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
			$summe = $row_kategorien['summe'];
			$steuer = $row_kategorien['steuer'];
			$brutto = $summe + $steuer;
			$summe_gesamt += $summe;
			$steuer_gesamt += $steuer;
			$brutto_gesamt += $brutto;

			$prtSteuer = round($brutto, 2) - round($summe, 2);


			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Davon Rabatte", 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($summe, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
		}

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	}
	# ausgabe nach Produkte

	if (defined('FUNKTION_KASSENABSCHL_PRODUKTLISTE') && strtolower(FUNKTION_KASSENABSCHL_PRODUKTLISTE) == 'ja') {

		$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
		$pdf->Cell(0, $lineHeight, "Produkte Bericht", 0, 1, 'L');
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, .5, "", 0, 1, 'C');
		} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
		$pdf->Cell(0, 1, "", 0, 1, 'C');

		$prodColumnWidth = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO);

		$pdf->Cell($prodColumnWidth, $lineHeight, "Artikel Bez.", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Anzahl", 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brut.", 0, 1, 'R');

		$prodQl = mysql_query("SELECT abgeschlossener_bon_produkte.NAME AS prodName, abgeschlossener_bon_produkte.PRINTNAME AS artPrintname, 
								SUM(abgeschlossener_bon_produkte.pricesell*stueck*(1+tax_rate)) AS summe,
								abgeschlossener_bon_produkte.CATEGORY AS catID, produkt_id, SUM(stueck) AS anz 
							FROM abgeschlossener_bon_produkte
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
							LEFT JOIN products ON abgeschlossener_bon_produkte.produkt_id = products.id
							LEFT JOIN categories ON abgeschlossener_bon_produkte.CATEGORY = categories.id
							" . $bedingung . " AND products.kassenabschluss_anzeigen = 1 AND has_childs=0 
							GROUP BY artPrintname ORDER BY artPrintname ASC");


		while ($prodR = mysql_fetch_array($prodQl)) {

			$prodBruttoSumme += $prodR['summe'];
			$prodQtySumme += $prodR['anz'];

			if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $prodR['prodName'])) > $prodColumnWidth) {
				$posY = $pdf->GetY();
				$posX = $prodColumnWidth + $marginLR;
				$pdf->MultiCell($prodColumnWidth, $lineHeight, iconv('UTF-8', 'windows-1252', $prodR['prodName']), 0, 'L', 0);
				$posY_2 = $pdf->GetY();
				$pdf->SetXY($posX, $posY);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prodR['anz'], 1, ",", ""), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($prodR['summe'], 2, ",", "."), 0, 1, 'R');
				$pdf->SetY($posY_2);
			} else {
				$pdf->Cell($prodColumnWidth, $lineHeight, iconv('UTF-8', 'windows-1252', $prodR['prodName']), 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prodR['anz'], 1, ",", ""), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($prodR['summe'], 2, ",", "."), 0, 1, 'R');
			}
		}
		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

		$pdf->Cell($prodColumnWidth, $lineHeight, "Summe", 0, 0, 'L');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, $prodQtySumme, 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($prodBruttoSumme, 2, ",", "."), 0, 1, 'R');

		if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	}


	# Sondertische suchen und diese ausweisen
	if (strtolower(GASTRO_VERSION) == 'ja') {
		$sonderTischerRes = "";
		$bedingungFrei = preg_replace('/abgeschlossener_bon/', 'abgeschlossener_bon_frei', $bedingung);
		$getSonderT = mysql_query("SELECT * FROM (
							(SELECT '' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte ON abgeschlossener_bon.bon_id = abgeschlossener_bon_produkte.bon_id
							" . $bedingung . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)							
							UNION ALL
							(SELECT 'zahlungFrei' AS zahlungC, tische.id AS tischId, tischName, tische.report_sonder, 
									SUM(abgeschlossener_bon_produkte_frei.PRICESELL*stueck) AS summeSummeNetto,
									SUM((abgeschlossener_bon_produkte_frei.PRICESELL*stueck) * (1+tax_rate)) AS summeSummeBrutto
							FROM tische 
							LEFT JOIN raum ON raum.id = tische.raum
							LEFT JOIN abgeschlossener_bon_frei ON abgeschlossener_bon_frei.gastro_tisch_id = tische.id
							LEFT JOIN abgeschlossener_bon_produkte_frei ON abgeschlossener_bon_frei.bon_id = abgeschlossener_bon_produkte_frei.bon_id
							" . $bedingungFrei . " AND (tische.report_sonder = 1 OR raum.report_sonder = 1)
							GROUP BY tische.id)) AS zahlungFrei
				ORDER BY tischId ASC");
		$zahlungFreiArray = array();
		$zahlungArray = array();

		if (mysql_num_rows($getSonderT) > 0) {
			while ($getSonderR = mysql_fetch_array($getSonderT)) {
				$taxVal = $getSonderR['summeSummeBrutto'] - $getSonderR['summeSummeNetto'];
				$zalungFreiHeader = "";
				if ($getSonderR['zahlungC'] == "zahlungFrei") {
					$zalungFreiHeader = "<div class='ausdruck_ganze_zeile ausdruck_bon_gesamt_breite bbold'>Zahlung Frei</div>";
					array_push($zahlungFreiArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
				} else {
					array_push($zahlungArray, array($getSonderR['tischName'], $getSonderR['summeSummeNetto'], $taxVal, $getSonderR['summeSummeBrutto']));
				}
			}

			$pdf->Cell(0, $lineHeight, "Tische gesondert Ausweisen", 0, 1, 'L');

			$outputSonderTable = "";
			if (count($zahlungFreiArray) > 0) {
				$sumNetF = 0;
				$sumTaxF = 0;
				$sumBrutF = 0;
				$pdf->Cell(0, $lineHeight, "Sonder Tische Zahlung Frei", 0, 1, 'L');
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, .5, "", 0, 1, 'C');
				} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
				$pdf->Cell(0, 1, "", 0, 1, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Tisch", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Netto", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Brutto", 0, 1, 'R');
				for ($i = 0; $i < count($zahlungFreiArray); $i++) {
					$taxVal = round($zahlungFreiArray[$i][3], 2) - round($zahlungFreiArray[$i][1], 2);
					if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
						$posY = $pdf->GetY();
						$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
						$pdf->MultiCell(
							preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ),
							$lineHeight,
							iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0]),
							0,
							'L',
							0
						);
						$posY_2 = $pdf->GetY();
						$pdf->SetXY($posX, $posY);
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungFreiArray[$i][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungFreiArray[$i][3], 2, ",", "."), 0, 1, 'R');

						$pdf->SetY($posY_2);
					} else {
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $zahlungFreiArray[$i][0]), 0, 0, 'L');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungFreiArray[$i][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungFreiArray[$i][3], 2, ",", "."), 0, 1, 'R');
					}

					$sumNetF += $zahlungFreiArray[$i][1];
					$sumTaxF += $zahlungFreiArray[$i][2];
					$sumBrutF += $zahlungFreiArray[$i][3];
				}

				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

				$prtSteuer_summeF = round($sumBrutF, 2) - round($sumNetF, 2);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($sumNetF, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summeF, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($sumBrutF, 2, ",", "."), 0, 1, 'R');

				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

				if (count($zahlungArray) > 0) $pdf->Cell(0, $lineHeight, "", 0, 1, 'C');
			}
			if (count($zahlungArray) > 0) {
				$sumNet = 0;
				$sumTax = 0;
				$sumBrut = 0;
				$pdf->Cell(0, $lineHeight, "Sonder Tische Zahlung", 0, 1, 'L');
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
				$pdf->Cell(0, 1, "", 0, 1, 'C');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Tisch", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Netto", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Brutto", 0, 1, 'R');
				for ($j = 0; $j < count($zahlungArray); $j++) {
					$taxVal = round($zahlungArray[$j][3], 2) - round($zahlungArray[$j][1], 2);
					if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0])) > preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ)) {
						$posY = $pdf->GetY();
						$posX = preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ) + $marginLR;
						$pdf->MultiCell(
							preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ),
							$lineHeight,
							iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0]),
							0,
							'L',
							0
						);
						$posY_2 = $pdf->GetY();
						$pdf->SetXY($posX, $posY);
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungArray[$j][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungArray[$j][3], 2, ",", "."), 0, 1, 'R');

						$pdf->SetY($posY_2);
					} else {
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $zahlungArray[$j][0]), 0, 0, 'L');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($zahlungArray[$j][1], 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($taxVal, 2, ",", "."), 0, 0, 'R');
						$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($zahlungArray[$j][3], 2, ",", "."), 0, 1, 'R');
					}

					$sumNet += $zahlungArray[$j][1];
					$sumTax += $zahlungArray[$j][2];
					$sumBrut += $zahlungArray[$j][3];
				}
				if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
					$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
				} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

				$prtSteuer_summe = round($sumBrut, 2) - round($sumNet, 2);
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, number_format($sumNet, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
				$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($sumBrut, 2, ",", "."), 0, 1, 'R');
			}
			if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
				$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
			} else $pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
			$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
		}
	}



	/* Benutzer ausgeben - Variablen hab ich gleich gelassen von Kategorien, - nicht verwirren lassen - */
	$pdf->Cell(0, $lineHeight * 1.5, "", 0, 1, 'C');
	$pdf->Cell(0, $lineHeight, "Benutzer Bericht", 0, 1, 'L');
	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, .5, "", 'B', 1, 'C');
	$pdf->Cell(0, 1, "", 0, 1, 'C');

	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Benutzer", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, "Anz. Bon", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, "Steuer", 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, "Ums. Brutto", 0, 1, 'R');


	#COUNT(abgeschlossener_bon.bon_id) AS anzBons-- $gesAnzBons=0; - $gesAnzBons+=$row_kategorien['anzBons'];

	$sql_kategorien = mysql_query("select benutzer.name as benutzer, SUM(pricesell*stueck) as summe, SUM(pricesell*stueck*tax_rate) as steuer, 
							COUNT(DISTINCT abgeschlossener_bon.bon_id) AS anzBons
						FROM abgeschlossener_bon_produkte
						LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
						LEFT JOIN benutzer ON abgeschlossener_bon.verkaufer_id=benutzer.id
						" . $bedingung . "   GROUP BY benutzer");
	if (!$sql_kategorien) {
		$pdf->MultiCell(0, $lineHeight, iconv('UTF-8', 'windows-1252', "SQL Fehler bei Kassenbericht erstellen: " . mysql_error()), 0, 'L', 0);
		exit(1);
	}

	$summe_gesamt = 0;
	$steuer_gesamt = 0;
	$brutto_gesamt = 0;
	$gesAnzBons = 0;
	while ($row_kategorien = mysql_fetch_assoc($sql_kategorien)) {
		$summe = $row_kategorien['summe'];
		$steuer = $row_kategorien['steuer'];
		$brutto = $summe + $steuer;
		$summe_gesamt += $summe;
		$steuer_gesamt += $steuer;
		$brutto_gesamt += $brutto;

		$prtSteuer = round($brutto, 2) - round($summe, 2);
		$gesAnzBons += $row_kategorien['anzBons'];

		$bonRevUser = false;
		$bonRevUser = " (" . number_format(round($brutto, 2) / $row_kategorien['anzBons'], 2, ",", ".") . ")";

		$pdf->Cell(
			preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ),
			$lineHeight,
			iconv('UTF-8', 'windows-1252', $row_kategorien['benutzer']),
			0,
			0,
			'L'
		);
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $row_kategorien['anzBons'] . $bonRevUser, 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer, 2, ",", "."), 0, 0, 'R');
		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto, 2, ",", "."), 0, 1, 'R');
	}

	if (defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja') {
		$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');
	} else $pdf->Cell(0, $lineHeight / 4, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 4, "", 0, 1, 'C');

	$prtSteuer_summe = round($brutto_gesamt, 2) - round($summe_gesamt, 2);

	$bonRevSum = false;
	$bonRevSum = " (" . number_format(round($brutto_gesamt, 2) / $gesAnzBons, 2, ",", ".") . ")";


	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, "Summe", 0, 0, 'L');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_NETTO), $lineHeight, $gesAnzBons . $bonRevSum, 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BETRAG), $lineHeight, number_format($prtSteuer_summe, 2, ",", "."), 0, 0, 'R');
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_BRUTTO), $lineHeight, number_format($brutto_gesamt, 2, ",", "."), 0, 1, 'R');


	# margin bottom Cell
	if ($marginBottom > 0) {
		$pdf->SetDrawColor(150);
		$pdf->Cell(($bonWidth / 2) - 2, $marginBottom, "", 0, 0, 'R');
		$pdf->Cell(4, $marginBottom, "", "B", 1, 'C');
		$pdf->SetDrawColor(0);
	}

	if ($pdf->PageNo() > 1) {
		kassenbericht_ausdrucken_pdf($min_id, $max_id, $dateFrom, $dateTo, $bonHeight * $pdf->PageNo());
		return false;
	}

	$outputTarget = __DIR__ . "\docs\sIT_kassenbericht_" . date('d_m_H_i') . ".pdf";
	$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";

	$writeFile = $pdf->Output($outputTarget, "F");

	#exec($command, $output, $error_code);
	$error_code = seiteDrucken($drucker, $outputTarget, "kassenberichtPrint");
}

function kassenbericht_ausfuehren()
{
	#$datum_von=($_REQUEST['datum_von']);
	#$datum_bis=($_REQUEST['datum_bis']);

	$min_id = $_POST['abschlIdVon'];
	$max_id = $_POST['abschlIdBis'];

	$datum_von = $_POST['abschlDatumVon'];
	$datum_bis = $_POST['abschlDatumBis'];

	if ($min_id == 0 || $max_id == 0) {
		echo "<div class='ausdruck_ganze_zeile'>					
					<p>Fehler: Wählen Sie Bericht Beginn und Ende aus.</p>
				</div>";
		return false;
	} else if ($max_id < $min_id) {
		echo "<div class='ausdruck_ganze_zeile'>
					<p>Fehler: Die Beginn Id muss kleiner als die Ende Id sein.</p>
				</div>";
		return false;
	}

	// Suche die IDs der Kassenabschlüsse von bis ....
	//echo "von: $datum_von  bis: $datum_bis";
	/*	$sql="select MIN(id) as min_id, MAX(id) as max_id, kassen_id from kassa_abschluesse 
					WHERE datum_start>='".$datum_von." 00:00:00' AND datum_start<='".$datum_bis." 23:59:59' and kassa_offen=false";
			$sql_abschl = mysql_query($sql);
			if (! $sql_abschl)
			{
				echo "SQL Fehler: " . mysql_error();
				exit(1);
			}
		*/
	#$row_absch=mysql_fetch_object($sql_abschl);
	#$min_id=$row_absch->min_id;
	#$max_id=$row_absch->max_id;

	$kassen_id = KASSA_ID;
	if ($min_id) {
		// echo "Abschluesse von $min_id bis $max_id";
	} else echo "Keine Kassenabschlüsse in dieser Zeit gefunden";

	// Betroffen sind jetzt alle IDs von $min_id bis $max_id
	$bedingung = "WHERE abgeschlossener_bon.kassa_abschluss_id>='$min_id' AND abgeschlossener_bon.kassa_abschluss_id<='$max_id'";
	$ea_bedingung = "WHERE kassa_abschluesse.id>='$min_id' AND kassa_abschluesse.id<='$max_id'";
	$gs_bedingung = "WHERE gutschein_buchungen.kassa_abschluss_id>='$min_id' AND gutschein_buchungen.kassa_abschluss_id<='$max_id'";

	#AND LOWER(verkaufsart) = 'gsverkauf' AND zahlungsart.kassastand_wirksam = 1
	kopfzeile_ausdrucken();
	echo "<br />";
	echo "KASSENBERICHT<br /><br /><br />";
	echo "Kassenabschluss ID ab :" . $min_id . "<br />";
	echo "Kassenabschluss ID bis:" . $max_id . "<br />";
	echo "Kassen ID             : " . $kassen_id . "<br />";
	echo "Datum von             : " . $datum_von . "<br />";
	echo "Datum bis             : " . $datum_bis . "<br />";
	echo "<br />";
	echo "<br />";
	kassenbericht_ausdrucken($bedingung, $ea_bedingung, $gs_bedingung);
}

function lieferscheinErstellen($lieferschein_id = false, $lieferscheinHeight = false, $callFrom = false, $auftragsscheinLieferDate = false, $disableLieferscheinPrint = false)
{

	$lieferDatum = "NULL";
	if (isset($_POST['lieferDatum']) && $_POST['lieferDatum'] != "") $lieferDatum = $_POST['lieferDatum'];
	else if ($callFrom == 'rechnung_erstellen' && $auftragsscheinLieferDate == true) $lieferDatum = $auftragsscheinLieferDate;

	$disableReferenceBonPrint = "printenabled";
	if (isset($_POST['disableReferenceBonPrint']) && $_POST['disableReferenceBonPrint'] != "") $disableReferenceBonPrint = $_POST['disableReferenceBonPrint'];
	else if ($callFrom == 'rechnung_erstellen' && $disableLieferscheinPrint === true) $disableReferenceBonPrint = 'printdisabled';
	else if ($callFrom == 'rechnung_erstellen' && $disableLieferscheinPrint === false) $disableReferenceBonPrint = 'printenabled';

	if (defined('GASTRO_VERSION') && strtolower(GASTRO_VERSION) == 'ja') $currentCart = $_SESSION['gastroTisch'];
	else if (defined('WARENKOERBE_ABLEGEN') && strtolower(WARENKOERBE_ABLEGEN) == 'ja') $currentCart = $_SESSION['ablageWarenkorb'];
	else $currentCart = $_SESSION['aktuellerWarenkorb'];

	$errorMsg = "";

	#	$lsDat=mysql_fetch_array(mysql_query("SELECT MAX(lieferschein_id), MAX(auftrags_nr)  FROM lieferschein_referenz"));
	$lsDat = mysql_fetch_array(mysql_query("SELECT lieferschein_id, auftrags_nr  FROM lieferschein_referenz WHERE id = ( SELECT MAX(id) FROM lieferschein_referenz )"));

	if ($lsDat[0] == NULL || $lsDat[0] == 0) $lieferschein_id = 1;
	else $lieferschein_id = $lsDat[0] + 1;

	if ($lsDat[1] == NULL || $lsDat[1] == 0) $auftrags_nr = 1;
	else $auftrags_nr = $lsDat[1] + 1;

	if ($disableReferenceBonPrint == 'printdisabled') $disableRefBonPrintDb = 1;
	else $disableRefBonPrintDb = 0;

	# prüfen ob es diese Ls Nr schon gibt

	#$getLsNr=mysql_fetch_array(mysql_query("SELECT aus_ls_nr FROM offener_bon WHERE bon_id = ".$currentCart." AND aus_ls_nr >0 LIMIT 1"));
	$getLsNr = mysql_fetch_array(mysql_query("SELECT aus_ls_nr, lieferschein_referenz.id AS lsDb_id 
										FROM offener_bon 
										LEFT JOIN lieferschein_referenz ON lieferschein_id = aus_ls_nr
										WHERE bon_id = " . $currentCart . " AND aus_ls_nr IN (SELECT lieferschein_id FROM lieferschein_referenz WHERE geloescht = 0 ) LIMIT 1"));

	if ($getLsNr['aus_ls_nr'] > 0) {
		# die ls nr gibts schon und ist als nicht gelöscht gesetzt  leiferschein wird upgedatet

		$refBonDbId = $getLsNr['lsDb_id'];
		$updRef = mysql_query("UPDATE lieferschein_referenz
								SET lieferschein_erstellt_datum = NOW(), auftrags_liefer_datum = '" . $lieferDatum . "', 
								kunden_id = (SELECT DISTINCT kunden_id FROM offener_bon WHERE bon_id = " . $currentCart . "), 
								geloescht = 0, disable_refbon_print = " . $disableRefBonPrintDb . "
								WHERE id = " . $refBonDbId . " ");
		if (!$updRef) writeLog(basename(__FILE__) . " " . __LINE__, "ls ref update: " . mysql_error());
		$lsRefId = $refBonDbId;
		$lieferschein_id = $getLsNr['aus_ls_nr'];
		# die ls produkte für diesen Ls werden komplett gelöscht und unten aus dem offenen Bon (wie beim erstellen)
		# neu hineingeschrieben
		$delLsProd = mysql_query("DELETE FROM lieferschein WHERE lieferschein_id = " . $lieferschein_id . " ");
		# wird hier nur definiert da sonst später bei der abfrage ein Error kommt
		$insRef = false;
	} else {

		$insRef = mysql_query("INSERT INTO lieferschein_referenz 
							SET lieferschein_id = " . $lieferschein_id . ", auftrags_nr = " . $auftrags_nr . ", lieferschein_erstellt_datum = NOW(), 
								auftrags_liefer_datum = '" . $lieferDatum . "', kunden_id = (SELECT DISTINCT kunden_id FROM offener_bon WHERE bon_id = " . $currentCart . "), 
								geloescht = 0, disable_refbon_print = " . $disableRefBonPrintDb . "  ");
		if (!$insRef) {
			echo "Error beim erstellen von Lieferschein Referenz. " . mysql_error();
			return false;
		}

		$lsRefId = mysql_insert_id();
	}

	$copyQl = mysql_query("INSERT INTO lieferschein
						(ref_id, lieferschein_id, produkt_id, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, IMAGE, DISPLAY, VARPRICE, printname, 
							NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, articlePrinted, stueck, tax_rate, has_childs, parent_id, has_parent, childPrint)
						SELECT " . $lsRefId . ", " . $lieferschein_id . ", produkt_id, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, IMAGE, DISPLAY, VARPRICE, printname, 
							NEGATIVEPRICE, PRODUKTORDER, SICHTBAR, articlePrinted, stueck, tax_rate, has_childs, parent_id, has_parent, childPrint
						FROM offener_bon WHERE bon_id = " . $currentCart . " ");

	if (!$copyQl) {
		echo "Datenbank Lieferschein erstellen Error. " . mysql_error();
		return false;
	}

	$searchChilds = mysql_query("SELECT ID, lieferschein_id, parent_id, has_childs, has_parent FROM lieferschein WHERE parent_id > 0 AND lieferschein_id = " . $lieferschein_id . "");
	while ($searchR = mysql_fetch_array($searchChilds)) {
		$pID = mysql_fetch_assoc(mysql_query("SELECT ID, parent_id FROM lieferschein WHERE parent_id = " . $searchR['parent_id'] . " AND lieferschein_id = " . $lieferschein_id . " "));

		$upD_parentId = mysql_query("UPDATE lieferschein SET has_parent = " . $pID['ID'] . " WHERE has_parent = " . $pID['parent_id'] . " 
								AND lieferschein_id = " . $searchR['lieferschein_id'] . "  ");
		$upD_parentId2 = mysql_query("UPDATE lieferschein SET parent_id = " . $pID['ID'] . " WHERE ID =  " . $pID['ID'] . " 
								AND lieferschein_id = " . $searchR['lieferschein_id'] . " ");
	}



	if (($insRef == true || $updRef == true) && $copyQl == true && $callFrom != 'rechnung_erstellen') {
		$delQl = mysql_query("DELETE FROM offener_bon WHERE bon_id = " . $currentCart . "  ");
		if (!$delQl) $errorMsg .= "Datenbank Löschen offener Bon Error. " . mysql_error();

		else {
			if ($disableReferenceBonPrint == 'printenabled') {
				# Abfrage ob Lieferschein auf A4 gesetzt ist
				$lsPrinterA4 = mysql_fetch_array(mysql_query("SELECT drucker_id, drucker_margin_pdf, druckbreite, zoom_factor  FROM drucker 
						WHERE LOWER(ist_lieferscheindrucker) = 'ja' AND LOWER(ist_a4) = 'ja' LIMIT 1 "));

				if ($lsPrinterA4 !== false) {
					#writeLog(basename( __FILE__)." ". __LINE__ , "Lieferschein printer parms->".$lsPrinterA4['drucker_id']."");
					#lieferschein_ausdrucken_a4_pdf($lieferschein_id, $lieferscheinHeight, $recallNo, $disableRefBonPrint, $callFrom, $lsPrinterA4, $lieferschein_nr);			
					$printRes = lieferschein_ausdrucken_a4_pdf($lsRefId, false, false, $disableReferenceBonPrint, $callFrom, $lsPrinterA4);
					$printResult = "Lieferschein Nr." . $printRes[3] . " erstellt.";
				} else $printResult = lieferschein_ausdrucken_pdf($lsRefId, false, false, $disableReferenceBonPrint, $callFrom);
			} else $printResult = "Lieferschein Nr." . $lieferschein_id . ", ohne Ausdruck  erstellt ";
		}

		echo $printResult;
	} else if (($insRef == true || $updRef == true) && $copyQl == true && $callFrom == 'rechnung_erstellen') {

		$updLs = mysql_query("UPDATE lieferschein_referenz SET geloescht = '1' WHERE lieferschein_id = " . $lieferschein_id . " ");
		if (!$updLs) $updRes = ", Fehler beim Löschen vom Lieferschein: " . mysql_error();
		#return array("print Result: ".$printResult."\n", $lieferschein_id);
		return array("", $lieferschein_id, $lsRefId);
	}
}
# im tabel lieferschein_referenz eine spalte (upgrade ) refBonPrint anlegen
# diese spalte beim lieferschein erstellen ebfüllen, und dem entsprechend beim ausdruck agieren. somit sollte der print aus der Lieferschein Seite auch ok sein !!!


# Lieferschein A4 Ausdruck 
function lieferschein_ausdrucken_a4_pdf($lieferschein_id)
{

	$getPDF_A4_rechung = mysql_fetch_array(mysql_query("SELECT * FROM pdf_a4_rechnung WHERE name = 'lieferschein_template_a4'"));

	eval($getPDF_A4_rechung['a4_template']);

	$printResult = a4Lieferschein_pdf_DB($lieferschein_id);

	return $printResult;

	#	writeLog(basename( __FILE__)." ". __LINE__ , " ".implode(" / ", $printResult)." ls id: ".$lieferschein_id." ls nr ".$lieferschein_nr);
	#	success / printerPrint / E:\Programme\xampp\htdocs\sITpos\docs\A4_ls_V01_567_04_11_14_12.pdf

}

// Druckt den LS auf A4 oder Bondrucker aus
function lieferschein_ausdrucken_pdf_a4_oder_bon()
{
	// Ist das ein A4 Druck?
	# Abfrage ob Lieferschein auf A4 gesetzt ist
	$lsPrinterA4 = mysql_fetch_array(mysql_query("SELECT drucker_id, drucker_margin_pdf, druckbreite, zoom_factor  FROM drucker 
									WHERE LOWER(ist_lieferscheindrucker) = 'ja' AND LOWER(ist_a4) = 'ja' LIMIT 1 "));

	if ($lsPrinterA4 !== false) {
		$lieferschein_id = $_POST['lieferscheinId'];
		$lieferschein_nr = $_POST['lieferscheinNr'];


		// A4 Bon Drucken gibt den Namen der Datei zurück
		$printRes = lieferschein_ausdrucken_a4_pdf($lieferschein_id);

		#$printRes[0] 'success/error, [1] printerPrint/browserPrint
		#writeLog(basename( __FILE__)." ". __LINE__ , " ".implode(" / ", $printRes)." ####### ls id: ".$lieferschein_id." ls nr ".$lieferschein_nr);

		if (!isset($printRes[4])) $printRes[4] = false;
		echo json_encode(array($printRes[0], $printRes[1], 'A4', $printRes[4]));
	} else  // wenn nicht A4, dann auf den Bon Drucken
	{
		lieferschein_ausdrucken_pdf();
	}
}

function lieferschein_ausdrucken_pdf($lieferschein_id = false, $lieferscheinHeight = false, $recallNo = false, $disableRefBonPrint = false, $callFrom = false, $lieferschein_nr = false)
{

	if ($lieferscheinHeight == false) $lieferscheinHeight = AUSDRUCK_PDF_GESAMTE_HOEHE;

	if ($lieferschein_id == false) {		# wird von ajax aufgerufen, aus der Seite lieferschein, lieferschein print ohne erstellen, 
		if (isset($_POST['lieferscheinId']) && $_POST['lieferscheinId'] > 0) {
			$lieferschein_id = $_POST['lieferscheinId'];
			$lieferschein_nr = $_POST['lieferscheinNr'];
		} else {
			echo "Ungültige Lieferschein Nr. ";
			return false;
		}
	}


	require_once('include/fpdf.php');

	$userIp = getUserIp();
	$selectPrinterByIp = false;
	$pridByIp = false;
	$checkPrByIp = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite, drucker_id  
								FROM drucker WHERE ip_adressen LIKE '%" . $userIp . "%' LIMIT 1"));
	if ($checkPrByIp !== false && strtolower(LIEFERSCHEIN_DRUCK_NACH_IP) == 'ja') {

		$printer = $checkPrByIp;
	} else {
		$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, druckbreite, zoom_factor 
											FROM drucker WHERE LOWER(ist_lieferscheindrucker) = 'ja' "));
	}

	if ($printer['druckbreite'] == true && $printer['druckbreite'] > 35) $lieferscheinWidth = $printer['druckbreite'];
	else $lieferscheinWidth = preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);

	$drucker = $printer[0];

	$margin = $printer[1];
	$margins = explode(",", $margin);
	$zoomF = $printer['zoom_factor'];
	if (is_null($zoomF)) $zoomF = 1.0;

	if (isset($margins[2])) $marginLR = preg_replace('/\D/', '', $margins[2]);
	else $marginLR = 0;
	if (isset($margins[1])) $marginBottom = preg_replace('/\D/', '', $margins[1]);
	else $marginBottom = 0;
	if (isset($margins[0])) $marginTop = preg_replace('/\D/', '', $margins[0]);
	else $marginTop = 0;
	$margins = explode(",", $margin);


	$pdf = new FPDF('P', 'mm', array($lieferscheinWidth, $lieferscheinHeight));
	$pdf->SetMargins($marginLR, $marginTop, 0);			// margin right (optional) set to 0, rest of pager width	
	$pdf->AddPage();

	$fontConfig = SCHRIFT_AUSDRUCK_PDF;


	if (
		strpos(strtolower($fontConfig), 'arial') !== false  || strpos(strtolower($fontConfig), 'helvetica') !== false ||
		strpos(strtolower($fontConfig), 'sans serif') !== false
	) {
		$pdfFont = "Arial";
		$z = "Arial";
	} else if (
		strpos(strtolower($fontConfig), 'times') !== false  || strpos(strtolower($fontConfig), 'roman') !== false ||
		(strpos(strtolower($fontConfig), 'serif') !== false &&  strpos(strtolower($fontConfig), 'sans') == false)
	) {
		$pdfFont = "Times";
		$z = "Times";
	} else if (strpos(strtolower($fontConfig), 'courier') !== false) {
		$pdfFont = "Courier";
		$z = "Courir";
	} else {
		$pdfFont = "Arial";
		$z = "Default";
	}

	preg_match('/\d+px | \d+pt/', $fontConfig, $m);
	preg_match('/\d+/', $m[0], $match);
	$pdfFontSize = $match[0];

	$lineHeight = $pdfFontSize / 2.5;

	$pdf->SetFont($pdfFont, '', $pdfFontSize);
	#$pdf->Cell(0, 6, "Hilfszelle: ".$disableRefBonPrint, 'B', 1, 'C');

	$headArray = kopfzeile_ausdrucken('', 'printPdf');
	for ($i = 0; $i < sizeof($headArray); $i++) {
		$pdf->Cell($lieferscheinWidth - ($marginLR / 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($headArray[$i])), 0, 1, 'C');
	}

	$pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Fa kopf

	$lsProducts = array();
	$lsI = 0;

	$addWhere = "";
	if ($callFrom == 'rechnung_erstellen') {
		# ist für auftragsscheine relevant, nicht für lieferseine, 
		$addWhere = "AND (products.auftragsschein_print = 'ja' OR (products.auftragsschein_print = 'category' AND categories.auftragsschein_print = 'ja' ))";
	}

	// RFR 15.10.2018: geloescht, aus der Feldliste vom query entfernt - hoffe wir brauchen das nicht!
	$lsQl = mysql_query("SELECT lieferschein.ID AS lsProdId, lieferschein_referenz.lieferschein_id AS lieferscheinNummer, 
								lieferschein_referenz.auftrags_nr AS auftragsNummer, lieferschein_referenz.lieferschein_erstellt_datum, 
								lieferschein_referenz.auftrags_liefer_datum, lieferschein_referenz.kunden_id, lieferschein.PRICESELL, 
								tax_rate, stueck, lieferschein.printname, has_childs, has_parent, parent_id, childPrint, disable_refbon_print, 
								categories.anz_refbons AS refbonsByCat, products.anz_refbons AS refbonsByProd, categories.ID AS catId, 
								categories.auftragsschein_print AS catAuftragPrt, products.auftragsschein_print AS prodAuftragPrt 	
							FROM lieferschein_referenz 
							LEFT JOIN lieferschein ON lieferschein_referenz.id = lieferschein.ref_id
							LEFT JOIN categories ON lieferschein.CATEGORY = categories.ID
                            LEFT JOIN products ON lieferschein.produkt_id = products.ID
							WHERE lieferschein_referenz.id = " . $lieferschein_id . " 
							 " . $addWhere . "");

	#	AND (products.auftragsschein_print <> 'nein' AND categories.auftragsschein_print <> 'nein')
	if (mysql_num_rows($lsQl) == 0) {
		return false;
	}

	while ($lsRow = mysql_fetch_array($lsQl)) {
		if ($callFrom == 'rechnung_erstellen') {

			$docNr = $lsRow['auftragsNummer'];
			$docNa = 'auftr';
			$bonBenennung = AUFTRAGSSCHEIN_BENENNUNG;
		} else {
			$docNr = $lsRow['lieferscheinNummer'];
			$docNa = 'ls';
			$bonBenennung = LIEFERSCHEIN_BENENNUNG;
		}

		$kd = $lsRow['kunden_id'];
		$lsDatum = $lsRow['lieferschein_erstellt_datum'];
		$lsDisableRefPrint = $lsRow['disable_refbon_print'];
		$einzel_preis = $lsRow["PRICESELL"];
		if (EINZELPREIS_IM_BON_BRUTTO == strtolower('ja')) $einzel_preis = $einzel_preis * (1 + $lsRow["tax_rate"]);
		$summe = $einzel_preis * $lsRow["stueck"];

		if ($lsRow['has_childs'] == 1) {
			if (EINZELPREIS_IM_BON_BRUTTO == strtolower('ja')) {
				$findChilds = mysql_fetch_array(mysql_query("SELECT SUM(PRICESELL* (1 + tax_rate)) AS combiEinzelPr FROM lieferschein 
														WHERE parent_id = " . $lsRow['lsProdId'] . " "));
			} else {
				$findChilds = mysql_fetch_array(mysql_query("SELECT SUM(PRICESELL) AS combiEinzelPr FROM lieferschein 
														WHERE parent_id = " . $lsRow['lsProdId'] . " "));
			}
			$einzel_preis = $findChilds['combiEinzelPr'];
		} else if ($lsRow['has_childs'] != 1 && $lsRow['has_parent'] > 0 && $lsRow['childPrint'] == 0) {
			continue;  # hier werden die inhalte vom combiartikel übersprungen, nicht angezeigt
		}

		$lsProducts[$lsI]['printname'] = $lsRow["printname"];
		$lsProducts[$lsI]['einzel_preis'] = number_format($einzel_preis, 2, ",", ".");
		$lsProducts[$lsI]['stueck'] = $lsRow["stueck"];
		
		// RFR: Wenn eine Kommastelle ist, dann zweistellig, ansonsten keine Komma anzeigen bei Stück
		if ((int) $lsRow["stueck"] == $lsRow["stueck"]) {
			$lsProducts[$lsI]['ausdruckStueck'] = number_format($lsRow["stueck"], 0, "", ".");
		} else $lsProducts[$lsI]['ausdruckStueck'] = number_format($lsRow["stueck"], 2, ",", ".");
		
		//$lsProducts[$lsI]['ausdruckStueck'] = number_format($lsRow["stueck"], 1, ",", "");

		$lsProducts[$lsI]['summe'] = $summe;
		$lsProducts[$lsI]['ausdruckSumme'] = number_format($summe, 2, ",", ".");
		$lsProducts[$lsI]['childPrint'] = $lsRow["childPrint"];
		$lsProducts[$lsI]['has_parent'] = $lsRow["has_parent"];


		$refbonsCat = $lsRow["refbonsByCat"];
		$refbonsProd = $lsRow["refbonsByProd"];

		# errechnen bzw ausortieren der Anzahl Referenz bon nach Warengruppe/Produkte in DB eingetragen

		$qtyRefbons = 1;												# default auf 1 gesetzt

		if ($refbonsCat > 0) {
			$qtyRefbons = $refbonsCat;
		}		# ist es definiert, also ein Zahl größer null wird diese genommen
		if ($refbonsCat == '0') {
			$qtyRefbons = 0;
		}						# ist die Anzahl 0, wird der defaultwert auf 0 gesetzt, also der defaultwert überschrieben
		if ($refbonsProd == '') {
			$qtyRefbons = $qtyRefbons;
		}					# prod überschreibt category, wenn leer, nicht definiert, category val bleibt
		if ($refbonsProd == '0') {
			$qtyRefbons = 0;
		}					# prod überschreibt category und default, wenn 0, auf 0 gesetzt
		if ($refbonsProd > 0) $qtyRefbons = $refbonsProd;				# prod überschreibt category und default, wenn größer 0, auf diesen Wert gesetzt

		if ($lsRow['catId'] == 0) $qtyRefbons = 0;			# rabatte (einzel u gesamtrabatt) haben category Id 0 und werden hier als ref bon nicht ausgegeben

		$lsProducts[$lsI]['refbonQty'] = $qtyRefbons;					# aussortierten Wert ins array schreiben

		$lieferDatum = $lsRow["auftrags_liefer_datum"];
		$auftragsNummer = $lsRow['auftragsNummer'];

		$lsI++;
	}

	if ($kd > 0) {
		$kundenDetails = mysql_fetch_assoc(mysql_query("SELECT * FROM kunden WHERE id= " . $kd . ""));
		$pdf->Cell(0, 2, "", 0, 1, 'C'); 	#  trennlinie unterhalb von Kunden Druck, falls Kunde ausgegeben wird

		$bonWidth = $lieferscheinWidth;

		if ($kundenDetails['Firma'] != '') $pdf->Cell(($bonWidth - ($marginLR * 2)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['Firma'])), 0, 1, 'L');

		if (strlen($kundenDetails['anrede']) > 0) $cAnr = $kundenDetails['anrede'] . " ";
		else $cAnr = "";
		if (strlen($kundenDetails['titel']) > 0) $cTitel = $kundenDetails['titel'] . " ";
		else $cTitel = "";

		if (strlen($kundenDetails['vorname']) > 0 || strlen($kundenDetails['nachname']) > 0) {
			if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) > 0) $printN = $kundenDetails['vorname'] . " " . $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) == 0 && strlen($kundenDetails['nachname']) > 0) $printN =  $kundenDetails['nachname'];
			else if (strlen($kundenDetails['vorname']) > 0 && strlen($kundenDetails['nachname']) == 0) $printN =  $kundenDetails['vorname'];
			else $printN = "";

			$pdf->Cell(($bonWidth - ($marginLR * 2)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($cAnr . $cTitel . $printN)), 0, 1, 'L');
		}


		if (strlen($kundenDetails['strasse1']) > 0) $pdf->Cell(($bonWidth - ($marginLR * 2)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['strasse1'])), 0, 1, 'L');
		if (strlen($kundenDetails['strasse2']) > 0) $pdf->Cell(($bonWidth - ($marginLR * 2)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['strasse2'])), 0, 1, 'L');
		if ($kundenDetails['plz'] != '' || $kundenDetails['Ort'] != '')
			$pdf->Cell(($bonWidth - ($marginLR * 2)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['plz'])) . " " . iconv('UTF-8', 'windows-1252', strip_tags($kundenDetails['Ort'])), 0, 1, 'L');

		$pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Kunden Druck, falls Kunde ausgegeben wird
	}

	if ($callFrom == 'rechnung_erstellen') $docBenennung = AUFTRAGSSCHEIN_BENENNUNG;
	else $docBenennung = LIEFERSCHEIN_BENENNUNG;

	$pdf->Cell(0, 1.5, "", 0, 1, 'C');
	if (defined('AUFTRAGSSCHEIN_NR_AUF_RECH_FETT') && strtolower(AUFTRAGSSCHEIN_NR_AUF_RECH_FETT) == 'ja') {
		$fontWeight = 'B';
	} else $fontWeight = '';
	if (defined('AUFTRAGSSCHEIN_NR_AUF_RECH_FONTSIZE') && AUFTRAGSSCHEIN_NR_AUF_RECH_FONTSIZE > 5) {
		$fontSize = AUFTRAGSSCHEIN_NR_AUF_RECH_FONTSIZE;
		$lineHeight = $fontSize / 2.5;
	} else $fontSize = $pdfFontSize;
	$pdf->SetFont($pdfFont, $fontWeight, $fontSize);

	$pdf->Cell(0, $lineHeight * 1.2, $docBenennung . $docNr, 0, 1, 'L');
	$pdf->SetFont($pdfFont, '', $pdfFontSize);
	$lineHeight = $pdfFontSize / 2.5;

	$pdf->SetFont($pdfFont, '', $pdfFontSize);
	$lineHeight = $pdfFontSize / 2.5;

	$dDate = strtotime($lsDatum);
	$lsDatum = date('j.n.Y H:i:s', $dDate);

	$txLineW = preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM);
	$pdf->Cell($txLineW * $zoomF, $lineHeight, "Datum: " . $lsDatum, '', 0, 'L');
	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)) * $zoomF, $lineHeight, "EUR", '', 1, 'R');
	$pdf->Cell(0, $lineHeight, "", 0, 1, 'C');

	$pdf->SetLineWidth(.3);

	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)) * $zoomF, $lineHeight * 1.2, iconv('UTF-8', 'windows-1252', 'Artikel'), "B", 0, 'L');
	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM)) * $zoomF, $lineHeight * 1.2, iconv('UTF-8', 'windows-1252', 'Pr.'), "B", 0, 'R');
	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)) * $zoomF, $lineHeight * 1.2, iconv('UTF-8', 'windows-1252', 'Anz.'), "B", 0, 'R');
	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)) * $zoomF, $lineHeight * 1.2, 'Sum.', "B", 1, 'R');

	$pdf->SetLineWidth(.2);
	$pdf->Cell(0, $lineHeight / 2, "", 0, 1, 'C');

	$lieferscheinSumme = 0;

	$lsRefProducts = array();
	$lsRefCount = 0;

	for ($i = 0; $i < sizeof($lsProducts); $i++) {

		if ($lsProducts[$i]['has_parent'] > 0 && $lsProducts[$i]['childPrint'] == 1) {
			$lsProducts[$i]['einzel_preis'] = "";

			$lsProducts[$i]['ausdruckStueck'] = "";
			$lsProducts[$i]['ausdruckSumme'] = "";
			$lsProducts[$i]['summe'] = 0;
		}

		$anzRefPrints = $lsProducts[$i]['refbonQty'];

		if ($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $lsProducts[$i]['printname'])) > (preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)) * $zoomF) {
			$posY = $pdf->GetY();
			$posX = ((preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)) * $zoomF) + $marginLR;
			$pdf->MultiCell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', $lsProducts[$i]['printname']), 1, 'L', 0);  # border-0; align L, fill-0,
			$posY_2 = $pdf->GetY();
			$pdf->SetXY($posX, $posY);
			$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM)) * $zoomF, $lineHeight, $lsProducts[$i]['einzel_preis'], 0, 0, 'R');
			$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', $lsProducts[$i]['ausdruckStueck']), 0, 0, 'R');
			$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)) * $zoomF, $lineHeight, $lsProducts[$i]['ausdruckSumme'], 0, 1, 'R');
			$pdf->SetY($posY_2);
		} else {
			$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', $lsProducts[$i]['printname']), 0, 0, 'L');
			$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM)) * $zoomF, $lineHeight, $lsProducts[$i]['einzel_preis'], 0, 0, 'R');
			$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', $lsProducts[$i]['ausdruckStueck']), 0, 0, 'R');
			$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)) * $zoomF, $lineHeight, $lsProducts[$i]['ausdruckSumme'], 0, 1, 'R');
		}



		if ($lsProducts[$i]['stueck'] > 1) {
			$zSize = $lsProducts[$i]['stueck'];

			for ($z = 0; $z < $zSize; $z++) {
				if ($anzRefPrints > 0) {					#hier wird die Anzahl stück und wenn so definiert die Anz ref Prints pro Produkt (wäscherei Anzug) sumiert
					for ($x = 0; $x < $anzRefPrints; $x++) {
						if ($anzRefPrints > 1) $displQ = " - " . ($x + 1) . "/" . $anzRefPrints;
						else $displQ = "";
						$lsRefProducts[$lsRefCount]['printname'] = $lsProducts[$i]['printname'] . $displQ;
						$lsRefCount++;
					}
				}
			}
		} else {
			if ($anzRefPrints > 0) {				# stückzahl 1, Qty ref print by categorie or product defined in loop
				for ($x = 0; $x < $anzRefPrints; $x++) {
					if ($anzRefPrints > 1) $displQ = " - " . ($x + 1) . "/" . $anzRefPrints;
					else $displQ = "";
					$lsRefProducts[$lsRefCount]['printname'] = $lsProducts[$i]['printname'] . $displQ;
					$lsRefCount++;
				}
			}
		}

		$lieferscheinSumme += $lsProducts[$i]['summe'];
	}


	$pdf->Cell(0, $lineHeight / 2, "", "B", 1, 'C');
	$pdf->Cell(0, $lineHeight / 2, "", 0, 1, 'C');

	$toRepl = array('/:/', '/Nr/', '/\s/');
	$lsBez = preg_replace($toRepl, '', $docBenennung);

	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', $lsBez . " Summe"), 0, 0, 'L');
	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM)) * $zoomF, $lineHeight, "", 0, 0, 'R');
	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)) * $zoomF, $lineHeight, "", 0, 0, 'R');
	$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)) * $zoomF, $lineHeight, number_format($lieferscheinSumme, 2, ",", "."), 0, 1, 'R');


	$lsDate = strtotime($lieferDatum);

	if (date('Y', $lsDate) > '2015') {		# abfrage auf, ist überhaupt ein datum eingetragen 
		$lieferDatum = date('j.n.Y', $lsDate);
		$pdf->Cell(0, $lineHeight * 2, "", 0, 1, 'L');
		$getFooterTxt = mysql_fetch_assoc(mysql_query("SELECT wert FROM konfiguration WHERE name = 'AUSDRUCK_EXTRA_FUSSZEILE_AUFTRAG_TEXT'"));
		$printTxt = preg_replace('/Platzhalter-Datum/i', $lieferDatum, $getFooterTxt['wert']);
		$pdf->MultiCell(($lieferscheinWidth * $zoomF) - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', $printTxt), 0, 'L', 0);
	}

	if ((defined('AUFTRAG_REFERENZBON_DRUCKEN') && strtolower(AUFTRAG_REFERENZBON_DRUCKEN) != 'ja') || $lsRefCount <= 0 || $lsDisableRefPrint != 0) {
		$marginBottom += REFERENCE_BON_HOEHE * REFERENCE_BON_QTY_OFFSET;
	}


	# margin bottom Cell
	if ($marginBottom > 0) {
		$pdf->SetDrawColor(150);
		$spacW = ($lieferscheinWidth / 2) - 5;
		$pdf->Cell($spacW, $marginBottom, "", 0, 0, 'C');
		$pdf->Cell(5, $marginBottom, "", "B", 1, 'C');
		$pdf->SetDrawColor(0);
	}



	if (defined('AUFTRAG_REFERENZBON_DRUCKEN') && strtolower(AUFTRAG_REFERENZBON_DRUCKEN) == 'ja' && $lsRefCount > 0 && $lsDisableRefPrint == 0) {

		$refBonH = REFERENCE_BON_HOEHE;

		$Ldate = date_create($lsDatum);
		$refBonDate = date_format($Ldate, 'j.n.Y');
		$fS1 = REFERENCE_BON_SCHRIFT_GROESSE;
		$refBonOffset = REFERENCE_BON_QTY_OFFSET;

		if ($refBonH == 9 || $refBonH == 10 && $refBonOffset == 2) {
			$lineHeight = 5;			# marigns 1, 2
			$lineHeight2 = 4;
			$fS2 = $fS1 / 2;
			if ($fS2 > 10) $fS2 = 10;
		} else if ($refBonH == 17 || $refBonH == 18 && $refBonOffset == 1) {
			$lineHeight = 10;						# marigns 5, 5
			$lineHeight2 = 8;
			$fS2 = $fS1 / 2;
			if ($fS2 > 12) $fS2 = 12;
		} else if ($refBonH == 20 && $refBonOffset == 1) {
			$lineHeight = 12;						# marigns 16, 0
			$lineHeight2 = 8;
			$fS2 = $fS1 / 2;
			if ($fS2 > 14) $fS2 = 14;
		} else {
			$lineHeight = round($refBonH * .6);
			$lineHeight2 = round($refBonH * .4);
			$fS2 = $fS1 / 2;
		}


		$qtyOfRef = sizeof($lsRefProducts);
		for ($z = 0; $z < $refBonOffset; $z++) {			# im Streifen Mode werden die ersten beiden Streifen, logisch auf den Lieferschein teil gedruckt.	
			$pdf->SetFont($pdfFont, '', $fS2);			# für nicht Ref Nr, halbe Font Size
			$dateW = $pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $refBonDate));
			$restWidth = ($lieferscheinWidth) - ($dateW + 1.5 + $marginLR);


			$pdf->Cell($lieferscheinWidth, REFERENCE_BON_MARGIN_TOP, "", "L", 1, 'C');		# margin Top
			if ($z > 0 && $qtyOfRef == 1) {
				$dateTxt = "";
				$refTxt = "";
			} else {
				$dateTxt = $refBonDate;
				$refTxt = $auftragsNummer . " -" . ($z + 1) . "/" . $qtyOfRef;
			}
			if (defined('AUFTRAG_REFERENZBON_NR_LINKS') && strtolower(AUFTRAG_REFERENZBON_NR_LINKS) == 'ja') {
				$pdf->SetFont($pdfFont, 'B', $fS1);
				$pdf->Cell($restWidth - 5, $lineHeight, $refTxt, "L", 0, 'L');
				$pdf->Cell(1.5, $lineHeight, "", 0, 0, 'C');
				$pdf->SetFont($pdfFont, '', $fS2);
				$pdf->Cell($dateW + 5, $lineHeight, $dateTxt, 0, 1, 'C');
			} else {
				$pdf->Cell($dateW, $lineHeight, $dateTxt, "L", 0, 'L');
				$pdf->Cell(1.5, $lineHeight, "", 0, 0, 'C');
				$pdf->SetFont($pdfFont, 'B', $fS1);
				$pdf->Cell($restWidth, $lineHeight, $refTxt, 0, 1, 'C');
			}
			$pdf->SetFont($pdfFont, '', $fS2);
			//print_r($lsRefProducts);
			//echo $lineHeight2 . $lsRefProducts[$z]['printname'];
			// Wenn nur ein Produkt am LS geschrieben wird, dann kommt ein Fehler, deswegen Abfragen ob printname gesetzt ist
			if (isset($lsRefProducts[$z]['printname'])) {
				$pdf->Cell($lieferscheinWidth - $marginLR, $lineHeight2, iconv('UTF-8', 'windows-1252', $lsRefProducts[$z]['printname']), "L", 1, 'L');
			} else $pdf->Cell($lieferscheinWidth - $marginLR, $lineHeight2, "", "L", 1, 'L'); // Weiss nicht ob das zweite notwendig ist
			$pdf->Cell($lieferscheinWidth - $marginLR, REFERENCE_BON_MARGIN_BOTTOM, "", "L", 1, 'C');
		}
	}


	if ($pdf->PageNo() > 1) {
		lieferschein_ausdrucken_pdf($lieferschein_id, $lieferscheinHeight * $pdf->PageNo(), $pdf->PageNo(), $disableRefBonPrint, $callFrom);
		return false;
	}

	if (defined('AUFTRAG_REFERENZBON_DRUCKEN') && strtolower(AUFTRAG_REFERENZBON_DRUCKEN) == 'ja' && $lsRefCount > 0 && $lsDisableRefPrint == 0) {
		#	Drucker Einstellungen für Epson TM U-220 Receipt
		#		Druckeinstellungen-> Papierquelle für Streifen drucken (bon höhe unter 30mm) NoFeed, Cut, für bon Höhe > 30 Feed, Cut
		#												Papiereinsparung (für beide bon Höhen) unten.									

		$pdf->SetAutoPageBreak(false);
		$pdf->SetMargins($marginLR, 0);				# left, top, right

		# dieser Bereich trickst den hardware abstand zwichen Druckkopf und Bon schneiden (messer) aus.
		# dabei werden die ersten zwei Putzereistreifen logisch auf den Lieferschein teil gedruckt und die restlichen in einer Schleife
		# mit add Page gedruckt. Für die beiden auf dem Lieferscheinteil gedrckten werden hinten zwei Seiten/leere Putzereistreifen nachgedruckt. Dabei
		# wird der Schneidevorgang verschoben und es gelingt unter den minimum Seitenhöhe Streifren zu drucken.
		#     im Druckerdreiben muss die Papierquelle auf NoFeed, Cut gestellt sein. Im anderen Druck Modus - Feed, Cut !!!
		for ($j = $refBonOffset; $j < $lsRefCount + $refBonOffset; $j++) {
			$pdf->AddPage();
			if ($j < $lsRefCount) {

				$pdf->SetFont($pdfFont, '', $fS2);				# für nicht Ref Nr, halbe Font Size
				$dateW = $pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $refBonDate));
				$restWidth = ($lieferscheinWidth) - ($dateW + 1.5 + $marginLR);
				$pdf->Cell($lieferscheinWidth, REFERENCE_BON_MARGIN_TOP, "", "L", 1, 'C');		# margin Top
				if (defined('AUFTRAG_REFERENZBON_NR_LINKS') && strtolower(AUFTRAG_REFERENZBON_NR_LINKS) == 'ja') {
					$dateTxt = $refBonDate;
					$refTxt = $auftragsNummer . " -" . ($j + 1) . "/" . $qtyOfRef;
					$pdf->SetFont($pdfFont, 'B', $fS1);
					$pdf->Cell($restWidth - 5, $lineHeight, $refTxt, "L", 0, 'L');
					$pdf->Cell(1.5, $lineHeight, "", 0, 0, 'C');
					$pdf->SetFont($pdfFont, '', $fS2);
					$pdf->Cell($dateW + 5, $lineHeight, $dateTxt, 0, 1, 'C');
				} else {
					$pdf->Cell($dateW, $lineHeight, $refBonDate, "L", 0, 'L');
					$pdf->Cell(1.5, $lineHeight, "", "", 0, 'C');
					$pdf->SetFont($pdfFont, 'B', $fS1);
					$pdf->Cell($restWidth, $lineHeight, $auftragsNummer . " -" . ($j + 1) . "/" . $qtyOfRef, 0, 1, 'C');
				}
				$pdf->SetFont($pdfFont, '', $fS2);
				$pdf->Cell($lieferscheinWidth + $marginLR, $lineHeight2, iconv('UTF-8', 'windows-1252', $lsRefProducts[$j]['printname']), "L", 1, 'L');
				$pdf->Cell($lieferscheinWidth - $marginLR, REFERENCE_BON_MARGIN_BOTTOM, "", "L", 1, 'C');
			} else {
				$zz = "-" . $refBonH . " / " . REFERENCE_BON_MARGIN_TOP . " / " . REFERENCE_BON_MARGIN_BOTTOM;

				$pdf->Cell($lieferscheinWidth, REFERENCE_BON_MARGIN_TOP, "", "L", 1, 'C');		# margin Top					
				$pdf->Cell($lieferscheinWidth, $lineHeight, "", "L", 1, 'C');				# hier werden die Zellen die im Lieferscheinteil eingefügt wurden als
				$pdf->Cell($lieferscheinWidth, $lineHeight2, "", "L", 1, 'C');			# 	leere Zellen hinten angehängt, damit die letzten auch geschnitten werden	
				$pdf->Cell($lieferscheinWidth, REFERENCE_BON_MARGIN_BOTTOM, "", "L", 1, 'C');
			}
		}
	}

	$outputTarget = __DIR__ . "\docs\sIT_" . $docNa . "_" . $docNr . "_" . date('d_m_H_i') . ".pdf";
	$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";

	$writeFile = $pdf->Output($outputTarget, "F");

	#	$time_start = microtime(true);
	# irgendwann früher auskommentiert ??  feb 2021
	//exec($command, $output, $error_code);
	# Feb 2021 KPE auf Funktion umgestellt
	#$printLs=pclose(popen($command, "r"));
	$error_code = seiteDrucken($drucker, $outputTarget, "lieferscheinPrint");
	#	$time_end = microtime(true);
	#	$execution_time = ($time_end - $time_start)/60;

	echo "Lieferschein Nr. " . $lieferschein_id . " erstellt.";
}


function rechnungsVordruckErstellen()
{
	if (defined('GASTRO_VERSION') && strtolower(GASTRO_VERSION) == 'ja') $aktBon = $_SESSION['gastroTisch'];
	else if (defined('WARENKOERBE_ABLEGEN') && strtolower(WARENKOERBE_ABLEGEN) == 'ja') $aktBon = $_SESSION['ablageWarenkorb'];
	else $aktBon = $_SESSION['aktuellerWarenkorb'];


	if ($aktBon > 0) {
		$prePrintProdArray = array();
		$ppArrayIndex = 0;
		$ppQl = mysql_query("SELECT * FROM offener_bon WHERE bon_id = " . $aktBon . " ");
		$cArtikel = mysql_num_rows($ppQl);
		$sumPrice = 0;

		if ($cArtikel > 0) {
			while ($ppRow = mysql_fetch_array($ppQl)) {
				if ($ppRow['has_parent'] > 0)	continue;
				$prePrintProdArray[$ppArrayIndex]['printname'] = $ppRow['printname'];
				$prePrintProdArray[$ppArrayIndex]['PRICESELL'] = $ppRow['PRICESELL'];
				$prePrintProdArray[$ppArrayIndex]['stueck'] = $ppRow['stueck'];
				$prePrintProdArray[$ppArrayIndex]['tax_rate'] = $ppRow['tax_rate'];

				if ($ppRow['has_childes'] == 1) {
					$combiPrise = 0;
					$getChildData = mysql_fetch_assoc(mysql_query("SELECT SUM(PRICESELL*(1+tax_rate)) AS CombiPrice 
										WHERE has_parent = " . $ppRow['ID'] . " "));
					$prePrintProdArray[$ppArrayIndex]['PRICESELL'] = $getChildData['CombiPrice'];
					$prePrintProdArray[$ppArrayIndex]['tax_rate'] = 0;
				}
				$tischId = $ppRow['bon_id'];
				$ppArrayIndex++;
			}


			$tischN = mysql_fetch_array(mysql_query("SELECT tischName FROM tische WHERE id = " . $tischId . " "));
			$prePrintDataArray = array('tischname' => $tischN[0], 'tischId' => $tischId);


			$printResp = rechnungsVordruckPrint_pdf($prePrintProdArray, $prePrintDataArray, false);

			echo "aktueller Bon: " . $aktBon . " Anz Artikel: " . $cArtikel . " array count: " . sizeof($prePrintProdArray) . "<br />" . $printResp;
		} else {
			echo "Warenkorb ist leer.";
			return false;
		}
	} else {
		$aktBon = false;
		echo "kein aktueller Warenkorb....";
		return false;
	}
}

function rechnungsVordruckPrint_pdf($preprintProdData, $preprintData, $printHeight = false)
{
	require_once('include/fpdf.php');

	/* ****************** weggenommen RFR
					$printer=mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite, drucker_id  
												FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));
					*/

	# Drucker auswahl nach Kriterien !!
	$userIp = getUserIp();
	$selectPrinterByIp = false;
	$pridByIp = false;
	$checkPrByIp = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite, drucker_id  
											FROM drucker WHERE ip_adressen LIKE '%" . $userIp . "%' LIMIT 1"));
	if ($checkPrByIp !== false) {
		$selectPrinterByIp = true;
		$pridByIp = $checkPrByIp['drucker_id'];
	}

	if (isset($_SESSION['selectedMobilPrinterId']) && $_SESSION['selectedMobilPrinterId'] > 0) {
		$prid = $_SESSION['selectedMobilPrinterId'];
		$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  
										FROM drucker WHERE drucker_id = " . $prid . " "));
	} else if ($selectPrinterByIp == true && $pridByIp > 0) {
		# übernehme die oben schon ausgelesenen Werte.
		$printer = $checkPrByIp;
	} else if (isset($targetPrinter) && strlen($targetPrinter) > 2) {
		$targetPrinter = strtolower($targetPrinter);
		$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  
								FROM drucker WHERE LOWER(funktion) = '" . $targetPrinter . "' "));
		if ($printer['win_drucker_name'] == false) {
			$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  
								FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));
		}
	} else {
		$printer = mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_pdf, zoom_factor, druckbreite  
								FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));
	}
	// Ende Drucker aufwählen??? - RFR

	if ($printer['druckbreite'] == true && $printer['druckbreite'] > 35) $bonWidth = $printer['druckbreite'];
	else $bonWidth = preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);

	$drucker = $printer[0];
	$margin = $printer[1];
	$margins = explode(",", $margin);

	if ($printHeight == false) $printHeight = AUSDRUCK_PDF_GESAMTE_HOEHE;

	if (is_int($printer[2]) || is_float($printer[2])) $zoomF = $printer[2];
	else $zoomF = 1;

	$zoomF = $printer[2];
	$bonWidth *= $zoomF;

	if (isset($margins[2])) $marginLR = preg_replace('/\D/', '', $margins[2]);
	else $marginLR = 0;
	if (isset($margins[1])) $marginBottom = preg_replace('/\D/', '', $margins[1]);
	else $marginBottom = 0;
	if (isset($margins[0])) $marginTop = preg_replace('/\D/', '', $margins[0]);
	else $marginTop = 0;

	$pdf = new FPDF('P', 'mm', array($bonWidth, $printHeight));
	$pdf->SetMargins($marginLR, $marginTop, 0);
	$pdf->AddPage();

	$fontConfig = SCHRIFT_AUSDRUCK_PDF;


	if (
		strpos(strtolower($fontConfig), 'arial') !== false  || strpos(strtolower($fontConfig), 'helvetica') !== false ||
		strpos(strtolower($fontConfig), 'sans serif') !== false
	) {
		$pdfFont = "Arial";
	} else if (
		strpos(strtolower($fontConfig), 'times') !== false  || strpos(strtolower($fontConfig), 'roman') !== false ||
		(strpos(strtolower($fontConfig), 'serif') !== false &&  strpos(strtolower($fontConfig), 'sans') == false)
	) {
		$pdfFont = "Times";
	} else if (strpos(strtolower($fontConfig), 'courier') !== false) {
		$pdfFont = "Courier";
	} else {
		$pdfFont = "Arial";
	}

	preg_match('/\d+px | \d+pt/', $fontConfig, $m);
	preg_match('/\d+/', $m[0], $match);
	$pdfFontSize = $match[0] * $zoomF;				#  stimmt nicht wirklich, fpdf verwendet hier pt und nciht px, pt ist auf inch bezogen, px auf sreen dott size.



	$lineHeight = $pdfFontSize / 2.5;

	$pdf->SetFont($pdfFont, '', $pdfFontSize);

	$headArray = kopfzeile_ausdrucken('', 'printPdf');
	for ($i = 0; $i < sizeof($headArray); $i++) {
		$pdf->Cell($bonWidth - ($marginLR * 2), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($headArray[$i])), 0, 1, 'C');
	}
	$pdf->Cell(0, 2, "", 'B', 1, 'C'); 	#  trennlinie unterhalb von Fa kopf

	$benutzer = $_SESSION['userName'];

	$pdf->SetFont($pdfFont * 1.3, 'B', $pdfFontSize);
	$pdf->Cell(0, $lineHeight * 1.5, BELEG_BENENNUNG . " Vordruck", 0, 1, 'C');
	$pdf->SetFont($pdfFont, '', $pdfFontSize);
	if (defined('GASTRO_VERSION') && strtolower(GASTRO_VERSION) == 'ja') {
		$pdf->Cell(0, $lineHeight, "Tisch: " . iconv('UTF-8', 'windows-1252', $preprintData['tischname']), 0, 1, 'L');
	}
	$pdf->Cell(($bonWidth - ($marginLR)) / 2, $lineHeight, $benutzer, 0, 0, 'L');
	$pdf->Cell(($bonWidth - ($marginLR)) / 2, $lineHeight, date("j.n.Y H:i"), 0, 1, 'R');
	$pdf->Cell(0, 2, "", 'B', 1, 'C');

	$gesamtSumme = 0;
	$pdf->Cell(0, $lineHeight, "", 0, 1, 'C');
	for ($i = 0; $i < sizeof($preprintProdData); $i++) {


		$einzel_preis = $preprintProdData[$i]["PRICESELL"];
		$einzel_preis = $einzel_preis * (1 + $preprintProdData[$i]["tax_rate"]);
		$summe = $einzel_preis * $preprintProdData[$i]["stueck"];
		$einzel_preis = number_format($einzel_preis, 2, ",", ".");
		$displStk = number_format($preprintProdData[$i]['stueck'], 1, ",", "");
		$displSumme = number_format($summe, 2, ",", ".");
		$gesamtSumme += $summe;


		$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM) * $zoomF, $lineHeight, $displStk, 0, 0, 'R');

		$printName = $preprintProdData[$i]['printname'];

		# Zeile Einzelrabatt bilden wenn Einzelrabatt ...
		$rabattLine = false;
		$origPr = false;
		# ist relevant wenn original Preis auf den Bon bzw Bon Vordruck gedruckt wird
		if (preg_match('/von\s€\s([0-9]+(,[0-9]+))/', $printName, $matchOrigPr)) {
			$origPr = $matchOrigPr[0];
			$printName = preg_replace('/' . $origPr . '/', '', $printName);
			#writeLog(basename( __FILE__)." ". __LINE__ , "match res: ".$matchOrigPr[0]." / ".$printName);
		}
		if (preg_match('/\d{1,},\d{1,}\%\sRabatt/', $printName, $matchRes)) {
			# Einzelrabatt Komma Zahl, steht mit "," im Produkt Table
			$rabattLine = true;
			$tmpPrintN = preg_split("/\d{1,},\d{1,}\%\sRabatt/", $printName);
			if (isset($tmpPrintN[1]) && strlen($tmpPrintN[1]) > 0) $tmpPrintNameEnd = "\n" . trim($tmpPrintN[1]);
			else $tmpPrintNameEnd = "";
			$printName = $tmpPrintN[0] . "\n" . trim($matchRes[0] . " " . $origPr . " inkludiert") . $tmpPrintNameEnd;
		} else if (preg_match('/\d{1,}%\sRabatt/', $printName, $matchRes)) {
			# Einzelrabatt gerade Zahl
			$rabattLine = true;
			$tmpPrintN = preg_split("/\d{1,}%\sRabatt/", $printName);
			if (isset($tmpPrintN[1]) && strlen($tmpPrintN[1]) > 0) $tmpPrintNameEnd = "\n" . trim($tmpPrintN[1]);
			else $tmpPrintNameEnd = "";
			$printName = $tmpPrintN[0] . "\n" . trim($matchRes[0] . " " . $origPr . " inkludiert") . $tmpPrintNameEnd;
		}

		if (
			$pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $printName)) > preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)
			|| $rabattLine == true  || preg_match("/\\n/", $printName)
		) {
			$posY = $pdf->GetY();
			$posX = ((preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)) * $zoomF) + $marginLR;
			$pdf->MultiCell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', $printName), 0, 'L', 0);
			$posY_2 = $pdf->GetY();
			$pdf->SetXY($posX, $posY);
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM) * $zoomF, $lineHeight, $einzel_preis, 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM) * $zoomF, $lineHeight, $displSumme, 0, 1, 'R');
			$pdf->SetY($posY_2);
		} else {
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) * $zoomF, $lineHeight, iconv('UTF-8', 'windows-1252', $printName), 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM) * $zoomF, $lineHeight, $einzel_preis, 0, 0, 'R');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM) * $zoomF, $lineHeight, $displSumme, 0, 1, 'R');
		}
	}

	$pdf->Cell(0, $lineHeight * 1.1, "", "B", 1, 'C');

	$displGesamtSumme = number_format($gesamtSumme, 2, ",", ".");
	$zW = preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM) + preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM);
	$zW *= $zoomF;
	$pdf->SetFont($pdfFont, 'B', $pdfFontSize);
	$pdf->Cell(0, $lineHeight / 2, "", 0, 1, 'C');
	$pdf->Cell($zW, $lineHeight, "Rechnungssumme: ", 0, 0, 'L', 0);
	$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM) * $zoomF, $lineHeight, $displGesamtSumme, 0, 1, 'R', 0);

	$pdf->SetFont($pdfFont, '', $pdfFontSize);

	if ($marginBottom > 0) $pdf->Cell(0, $marginBottom, "", 0, 1, 'C');

	# margin bottom Cell
	$pdf->SetDrawColor(100);
	$pdf->Cell(($bonWidth - $marginLR) / 2, $marginBottom, "", 0, 0, 'R');
	$pdf->Cell(5, $marginBottom, "", "B", 1, 'C');
	$pdf->SetDrawColor(0);


	if ($pdf->PageNo() > 1) {
		rechnungsVordruckPrint_pdf($preprintProdData, $preprintData, $printHeight * $pdf->PageNo());
		return false;
	}

	$outputTarget = __DIR__ . "\docs\sIT_bonVordruck_" . date('d_m_H_i') . ".pdf";
	$command = "C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";


	$writeFile = $pdf->Output($outputTarget, "F");

	#exec($command, $output, $error_code);
	$error_code = seiteDrucken($drucker, $outputTarget, "rechnungsVordruck");

	return $error_code;
}

function download_file($filename)
{
	$vorgeschlagener_dateiname = KASSA_ID . "_Backup_" . date('Ymd_Hi', time()) . ".sql";
	if (file_exists($filename)) {
		
		header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename=' . $vorgeschlagener_dateiname);
		flush();
		readfile($filename);
	}
}

function run_backup_command()
{
	ini_set('max_execution_time', 0);

	if (defined('LAENDERKENNUNG_DE') && strtolower(LAENDERKENNUNG_DE) == 'a') {
		$callFromPhpFile = "depExportFromBackupFunction";
		require_once("ajax_funktionen_kp.php");

		$runDepToFile = getReportDataExportProtocol('backupRunDepToFile');
	}
	$filename = __dir__ . "\\uploads\\tempfile.sql";

	$command = "c:\\xampp\\mysql\\bin\\mysqldump -u " . SQL_USER . " -p" . SQL_PW . " " . SQL_DB . " --add-drop-database >" . $filename;
	#$command="c:\\xampp\\mysql\\bin\\mysqldump --add-drop-database -u ".SQL_USER." -p ".SQL_PW." ".SQL_DB." >".$filename;
	file_put_contents('kpcheckit.txt', " run backup -> " . $command . "", FILE_APPEND);
echo $command;
	$output = array();
	exec($command, $output, $error_code);
	if ($error_code) {
		echo ("Error Code - " . $error_code . ", beim Backup ist ein Fehler Aufgetreten !");
		
	} else download_file($filename);
}



function run_restore_command($filename, $hostIdCheck = false)
{

	$userInfo = $_SESSION["userName"] . "/" . $_SESSION["userId"];
	writeSitposLog(basename(__FILE__) . " " . __LINE__, "Benutzer/id: " . $userInfo . " - " . date('Y-m-d_H:i:s') . ", DB Restore ausgeführt.");

	$command = "c:\\xampp\\mysql\\bin\\mysql --user=" . SQL_USER . " --password=" . SQL_PW . " " . SQL_DB . " < $filename";

	$output = array();
	ini_set('max_execution_time', 0);
	try{
		drop_foreignkey();
		exec($command, $output, $error_code);
	}
	catch  (Exception $e) 
	{
		echo 'Error: ',  $e->getMessage(), "\n";

	}
	finally
	{
		set_foreignkey();
	}


	if ($error_code) {
		$uPos = strpos($command, "--user=");
		$pwPos = strpos($command, "--password=");

		#file_put_contents('kpcheckit.txt', " backup command -> ".$command."\n".$output." /n".$error_code , FILE_APPEND);

		$command = substr_replace($command, "***", $uPos, 55);

		var_dump($command);
		echo ("<p>Fehler beim Import, Error Code, - " . $error_code . ".</p>");
		//var_dump($output);
	} else {
		$licenseMsg = false;
		$licenseMsg = licenseDeleteOnRestore();
		echo $licenseMsg;
		echo ("<p>Restore wurde erfolgreich beendet</p>");
		echo ("<p>Sie werden in 5 Sekunden weitergeleitet</p>");
		header('Refresh: 5; url=datensicherung.php?backUp=finished');
	}

	ini_set('max_execution_time', 30);
}

function drop_foreignkey()
{
	mysql_query("set foreign_key_checks = 0;");
	mysql_query("ALTER TABLE `products` DROP FOREIGN KEY `FK_categories`;");
}
function set_foreignkey()
{
	mysql_query("ALTER TABLE products ADD CONSTRAINT FK_categories FOREIGN KEY (CATEGORY) REFERENCES categories(ID);");
	mysql_query("set foreign_key_checks = 1;");

	
}

function changeZahlungOnBon()
{
	$bonId = false;
	$zahlArt = false;
	if (isset($_POST['bonId']) && $_POST['bonId'] > 0 && isset($_POST['zahlungsArt']) && strlen($_POST['zahlungsArt']) > 1) {
		$bonId = $_POST['bonId'];
		$zahlArt = $_POST['zahlungsArt'];
	}
	if (ist_zahlungsart_ec_terminal_enabled($zahlArt)) {
		echo "Ziel Zahlungsart $zahlArt kann icht verwendet werden - ist EC Terminal";
		exit(1);
	}
	if ($bonId !== false && $zahlArt !== false) {
		$checkId = mysql_query("SELECT abgeschlossener_bon.bon_id AS bonID, kassa_offen, abgeschlossener_bon.kassa_abschluss_id AS abschlId, 
										abgeschlossener_bon_zahlung.Name AS Zahlung
									FROM abgeschlossener_bon
									LEFT JOIN kassa_abschluesse ON kassa_abschluesse.id = abgeschlossener_bon.kassa_abschluss_id
									LEFT JOIN abgeschlossener_bon_zahlung ON abgeschlossener_bon_zahlung.bon_id = abgeschlossener_bon.bon_id
									WHERE abgeschlossener_bon.bon_id = " . $bonId . "");
		$checkX = "";
		$checkNo = mysql_num_rows($checkId);
		$kassaOffen = false;
		$qlBonId = false;
		$kassenAbschlId = false;
		$qlZahlart = false;
		while ($checkBonId = mysql_fetch_array($checkId)) {
			$kassaOffen = $checkBonId['kassa_offen'];
			$qlBonId = $checkBonId['bonID'];
			$kassenAbschlId = $checkBonId['abschlId'];
			$qlZahlart = $checkBonId['Zahlung'];
			if (ist_zahlungsart_ec_terminal_enabled($qlZahlart)) {
				echo "Original Zahlungsart $qlZahlart kann nicht geändert werden - ist EC Terminal";
				exit(1);
			}
		}

		if ($kassaOffen != 1 || $qlBonId <= 0 || $checkNo > 1 || preg_match('/' . $qlZahlart . '/', $zahlArt)) {
			if ($qlBonId === false) {
				echo "Änderung von Zahlung konnte nicht ausgeführt werden<br />Bon Nr " . $qlBonId . " konnte nicht gefunden werden.";
			} else if ($kassaOffen == 0 || $kassaOffen == false) {
				echo "Änderung von Zahlung wurde nicht ausgeführt.<br />Bon Nr befindet sich bereits in einem Kassenabschluss.
										 Kassenabschluss Id, " . $kassenAbschlId . "";
			}

			#else if("'".$qlZahlart."'" == "'".$zahlArt."'"){
			else if (preg_match('/' . $qlZahlart . '/', $zahlArt)) {
				echo "Änderung von Zahlung wurde nicht ausgeführt<br />Gleiche Zahlungsart ausgewählt.";
			} else if ($checkNo > 1) {
				echo "Änderung von Zahlung wurde nicht ausgeführt.<br />Bon Nr " . $qlBonId . " wurde mit mehr als einer Zahlungsart abgeschlossen";
			} else echo "Änderung von Zahlung wurde nicht ausgeführt.";

			exit(1);
		} else {
			$user = $_SESSION['userId'];
			# checken ob es sich um eine gemischte Zahlart handelt
			$checkZahlQl = mysql_fetch_array(mysql_query("SELECT COUNT(bon_id) AS AnzZahlungen FROM abgeschlossener_bon_zahlung WHERE bon_id = " . $bonId . " "));
			$gsZahlungToChange = false;
			if ($checkZahlQl['AnzZahlungen'] > 1) {
				echo "Fehler<br />Bon wurde mit mehreren (" . $checkZahlQl['AnzZahlungen'] . ") Zahlungsarten abgeschlossen, <br />Änderung von Zahlungsart nicht möglich.";
				exit(1);
			} else {
				if (defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja') {
					$gsQl = mysql_fetch_array(mysql_query("SELECT bon_id, count(bon_id) AS anzahlBonNr, gs_id, kassa_abschluss_id, rechnung_betrag 
												FROM gutschein_buchungen WHERE bon_id = " . $bonId . " LIMIT 1"));

					if ($gsQl['bon_id'] == $bonId) {
						# die ursprüngliche Zahlung ist eine gutschein zahlung
						$gsZahlungToChange = true;
						$gsId = $gsQl['gs_id'];
						$kassaAbschlId = $gsQl['kassa_abschluss_id'];
						$rechnBetrag = $gsQl['rechnung_betrag'];
					}
				}

				$updQl = mysql_query("UPDATE abgeschlossener_bon_zahlung SET Name = '" . $zahlArt . "' WHERE bon_id = " . $bonId . " ");
				if (!$updQl) {
					writeSitposLog(basename(__FILE__) . " " . __LINE__, "SQL Error Zahlung ändern, Bon Nr " . $bonId . ": " . mysql_error());
					echo "Datenbank Error, Zahlungsart konnte nicht geändert werden.";
					exit(1);
				} else {
					$sqlMsg = false;
					if ($gsZahlungToChange == true) {

						$insGsBuchung = mysql_query("INSERT INTO gutschein_buchungen SET gs_id = '" . $gsId . "', bon_id = '" . $bonId . "', 
												kassa_abschluss_id = '" . $kassaAbschlId . "', verkaufer_id= " . $user . ", rechnung_betrag = '-" . $rechnBetrag . "', datum_buchung = NOW()     ");
						if (!$insGsBuchung) {
							writeLog(basename(__FILE__) . " " . __LINE__, "Datenbank Error, einfügen der Gutscheinbuchung aus Zahlung ändern: " . mysql_error());
							$sqlMsg .= "Datenbank Error, einfügen der Gutscheinbuchung aus Zahlung ändern: " . mysql_error();
						} else {
							$updQl = mysql_query("UPDATE gutscheine SET betrag = betrag + " . $rechnBetrag . "   WHERE gs_id = " . $gsId . "");
							if (!$updQl) {
								writeLog(basename(__FILE__) . " " . __LINE__, "Datenbank Error, updaten vom Gutscheinwert aus Zahlung ändern: " . mysql_error());
								$sqlMsg .= "Datenbank Error, , updaten vom Gutscheinwert aus Zahlung ändern: " . mysql_error();
							}
						}
						echo $sqlMsg;
					}
					bon_ausdrucken_pdf($bonId, 200, 'changeZahlung', $user, false, false);

					echo "Zahlung für Bon Nr. " . $bonId . " geändert.";
				}
			}
		}
	} else echo "Fehler, Bon Nr oder Zahlungsart konnte nicht verwendet werden !!!";
}



function restore_durchfuehren()
{

	$uploaddir = 'uploads/';
	$uploadfile = $uploaddir . basename($_FILES['upload_file']['name']);

	echo '<pre>';
	if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $uploadfile)) {
		echo "<p>Datei, " . basename($uploadfile) . " wurde erfolgreich hochgeladen.</p>";

		run_restore_command($uploadfile, false);
	} else {
		echo "Fehler beim Upload der Datei!\n";
	}

	echo "</pre>";
}

function xmlBonAusdrucken($abgeschBonId)
{
	$callFrom = 'xmlSchnittstelle';
	bon_ausdrucken_pdf($abgeschBonId, false, $callFrom, false, false, false);
}

function licenseDeleteOnRestore()
{
	# db auslesen um lizenzierungs mac zu bekommen
	$licenseDelMsg = '';
	$macAdi = getMacAddresses();
	$licCheck = false;
	$getDbLicData = mysql_query("SELECT license FROM license_encrypted");
	while ($checkLicR = mysql_fetch_array($getDbLicData)) {
		$nNat = explode("-", sitPosDecrypt($checkLicR['license'], SITPOS_CRYPT));
		if (strtolower($nNat[0]) == 'basis' ||  strtolower($nNat[0]) == 'basis light' ||  strtolower($nNat[0]) == 'basis start') {
			if (in_array($nNat[4], $macAdi)) $licCheck = true;
		}
	}

	if ($licCheck == true) $licenseDelMsg .= '<p>Basislizenz bestätigt</p>';
	else {
		$licenseDelMsg .= '<p>Basislizenz NICHT bestätigt</p>';
		$delLicense = mysql_query("DELETE FROM license_encrypted");
		if (!$delLicense) {
			$licenseDelMsg .= "<p>Datenbank Fehler beim Löschen vom Lizenz Table.</p>";
		} else {
			$licenseDelMsg .= "<p>Datenbank Lizenz Einträge aus Lizenz Table gelöscht.</p>";
		}
		$delLicSetsKonfig = mysql_query("DELETE FROM konfiguration_sitpos WHERE name = 'BASIS_LIZENZ_VORHANDEN' OR name = 'BASIS_LIGHT_LIZENZ_VORHANDEN'
						OR name = 'LIZENZ_VERSION' OR name = 'ANZAHL_USER_LIZENZEN' OR name = 'ABHOL_LIZENZ' OR name = 'GUTSCHEIN_LIZENZ' 
						OR name = 'KASSABUCH_LIZENZ' OR name = 'LIEFERSCHEIN_LIZENZ'");
		if (!$delLicSetsKonfig) {
			$licenseDelMsg .= "<p>Datenbank Fehler beim Löschen vom Lizenz Einträge in Konfiguration.</p>";
		} else {
			$licenseDelMsg .= "<p>Datenbank Lizenz Einträge aus Konfiguration gelöscht.</p>";
		}
	}

	writeSitposLog(basename(__FILE__) . "*+* " . __LINE__, "licenseDeleteOnRestore Msg: " . $licenseDelMsg);

	return $licenseDelMsg;
}



function get_products()
{
	$query = mysql_query("DESCRIBE products;");
	$result = array();
	$fields = array(
		"REFERENCE", "CODE", "NAME", "PRICEBUY", "PRICESELL", "CATEGORY", "TAXCAT",
		"DISPLAY", "VARPRICE", "PRINTNAME", "NEGATIVEPRICE", "PRODUKTORDER", "SICHTBAR","ist_favorit"
	);
	/*while ($row = mysql_fetch_assoc($query)) {
            $fields[] = $row['Field'];
		}*/
	$cats = array();

	$query = mysql_query("SELECT ID, NAME FROM categories");

	while ($row = mysql_fetch_assoc($query)) {
		$cats[$row['ID']] = $row['NAME'];
	}

	$tax = array();

	$query = mysql_query("SELECT ID, RATE FROM taxes;");

	while ($row = mysql_fetch_assoc($query)) {
		$tax[$row['ID']] = $row['RATE'];
	}

	$result[] = $fields;


	$query = mysql_query("SELECT " . implode(",", $fields) . " FROM products  WHERE geloescht = 0");
	$z = 0;
	//var_dump($cats);
	while ($row = mysql_fetch_assoc($query)) {
		//file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ." - ".$z." - ".$row['NAME']." - ".$cats[$row['CATEGORY']]." - ".$tax[$row['TAXCAT']]."\n ", FILE_APPEND);

		$row['CATEGORY'] = $cats[$row['CATEGORY']];
		$row['TAXCAT'] = $tax[$row['TAXCAT']];

		$result[] = $row;
	}

	#file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ." - ".sizeof($result)."\n".json_encode($result)." #", FILE_APPEND);


	echo json_encode($result);
}
// Synchronisiert die Tabellen abgeschlosser_bon_* in das Zentralsystem
function upsync_abgeschlossener_bon()
{
	log_to_file("Aufruf upsync_abgeschlossner_bon");
	session_write_close();

	$bon_id = null;
	if (isset($_POST['bon_id']))
		$bon_id = $_POST['bon_id'];


	// Wenn full oder incr und kein structure sync noch erfolgt ist, dann mache ein structure sync
	if (defined('FILIALSYSTEM_ERP_PROGRAMM') && FILIALSYSTEM_ERP_PROGRAMM == "sITPos") {
		
		include 'synchronize/sync_table_structure.php';
		include 'synchronize/sync_data.php';
	}
}

$synchronizeTables = array("products", "categories");


function update_table_mit_array($table_name, $array, $table_key)
{
	if (!empty($array)) {
		ini_set('memory_limit', '-1');
		$fields = get_fields($table_name);
		$rows_update = 0;
		$rows_insert = 0;
		mysql_query("Start transaction");
		foreach ($array as $element) {
			//echo "Bearbeite Array";
			//var_dump($element);
			set_time_limit(600);
			$table_id = urldecode($element[$table_key]);

			$sql_string_update = "";
			$sql_string_insert1 = "";
			$sql_string_insert2 = "";

			foreach ($element as $key => $value) {
				if (in_array($key, $fields)) {
					$value = urldecode($value);
					$value = addslashes($value);

					if (isset($sql_string_update) && !empty($sql_string_update)) $sql_string_update = $sql_string_update . ", " . $key . "='" . $value . "'";
					else $sql_string_update = " " . $key . "='" . $value . "'";

					if (isset($sql_string_insert1) && !empty($sql_string_insert1)) $sql_string_insert1 = $sql_string_insert1 . ", " . $key;
					else $sql_string_insert1 = " (" . $key;

					if (isset($sql_string_insert2) && !empty($sql_string_insert2)) $sql_string_insert2 = $sql_string_insert2 . ", '" . $value . "'";
					else $sql_string_insert2 = " ('" . $value . "'";
				}
			}

			$sql_string_update = "UPDATE $table_name SET " . $sql_string_update . " WHERE $table_key='" . $table_id . "'";
			$sql_string_insert = "INSERT INTO $table_name " . $sql_string_insert1 . ") VALUES " . $sql_string_insert2 . ")";


			if (does_a_record_exist("SELECT $table_key FROM $table_name WHERE $table_key='" . $table_id . "'")) { //TODO: return ts
				//$ts = strtotime($ts);
				//if ($ts < $time) {
				run_sql_insert($sql_string_update);
				//echo "UPDATE : $sql_string_update";
				$rows_update++;
				//}
			} else {
				run_sql_insert($sql_string_insert);
				//echo "INSERT :" . $sql_string_insert;
				$rows_insert++;
			}
		}
		mysql_query("commit");
		echo "Datensätze in Tabelle $table_name eingefügt: " . $rows_insert . " geändert: " . $rows_update . "<br>";
		return;
	} else echo "Sync von Table $table : Keine Daten gefunden";
}


function rename_array_key($array, $old_key, $new_key)
{
	foreach ($array as &$val) {
		if (array_key_exists($old_key, $val)) {
			$val[$new_key] = $val[$old_key];
		} else $val[$new_key] = '';		// Wenn der key nicht gesetzt ist, dann leer setzen
		unset($val[$old_key]);
	}
	return ($array);
}

function rename_array_key_price($array, $new_key)
{
	foreach ($array as &$val) {
		if (isset($val['articlePrices'][0]['price'])) {
			$val[$new_key] = $val['articlePrices'][0]['price'];
		} else $val[$new_key] = '';
		//unset($val[$old_key]);
	}
	return ($array);
}

function delete_array_key($array, $key)
{
	foreach ($array as &$val) {
		unset($val[$key]);
	}
	return ($array);
}


function syncNewDBFields()
{
	session_write_close();
	$time = -microtime(true);
	// Wenn full oder incr und kein structure sync noch erfolgt ist, dann mache ein structure sync
	if (defined('FILIALSYSTEM_ERP_PROGRAMM') && FILIALSYSTEM_ERP_PROGRAMM == "WeClapp") {
		WeClapp_warehouse_stock_movement($full_sync = false);
	}else if (defined('FILIALSYSTEM_ERP_PROGRAMM') && FILIALSYSTEM_ERP_PROGRAMM == "shopify") {
		//send_order_to_shopify();
	}
	else  // sITPos Filialsystem upsync
	{
		//Tabellen mit allen Felder werden syncronisiert
		include 'synchronize/sync_table_structure.php';
			
			$time += microtime(true);
			echo "<br>Dauer DB Felder sync: " . $time . "<br>";
	}
}
function syncGutscheineBuchungen()
{
	global $incr;
	session_write_close();
	set_time_limit(120);
	$time = -microtime(true);
	$url = FILIALSYSTEM_URL_ZENTRALSYSTEM;
	$url = $url . "/synchronize";

	if (isset($_POST['incremental']) && $_POST['incremental'] == "true") {
		$incr = "TRUE";
	}

	$kassa_id = FILIALSYSTEM_KASSA_NAME;
	//ini_set('memory_limit', '555555M');
	echo "<br> Kassenid= " . $kassa_id . "<br>";
	transfer_table($url, 'gutschein_buchungen', 'id', $kassa_id);

	$time += microtime(true);
	echo "<br>Dauer: " . $time . "<br>";
	return;
}


function syncGutscheine()
{
	global $incr;
	session_write_close();
	set_time_limit(120);
	$time = -microtime(true);
	$url = FILIALSYSTEM_URL_ZENTRALSYSTEM;
	$url = $url . "/synchronize";

	if (isset($_POST['incremental']) && $_POST['incremental'] == "true") {
		$incr = "TRUE";
	}

	$kassa_id = FILIALSYSTEM_KASSA_NAME;
	//ini_set('memory_limit', '555555M');
	transfer_table($url, 'gutscheine', 'gs_id', $kassa_id);
	transfer_table($url, 'gutscheine_buchungen', 'id', $kassa_id);

	$time += microtime(true);
	echo "<br>Dauer: " . $time . "<br>";
	return;
}

function loesche_alle_produkte()
{
	$qL = mysql_query("TRUNCATE products");
	if (!$qL) {
		echo "Fehler beim l&ouml;schen der Produkte";
		return (false);
	}
	echo "Alle Produkte wurden geloescht<br>";
	write_audit_log("Alle Produkte wurden geloescht - Synchronisieren Menü");

	$qL = mysql_query("TRUNCATE combiartikel");
	if (!$qL) {
		echo "Fehler beim l&ouml;schen der Kombi Produkte";
		return (false);
	}
	echo "Alle Kombiartikel wurden gelöscht<br>";
	write_audit_log("Alle Kombi Produkte wurden geloescht - Synchronisieren Menü");
}

function loesche_alle_warengruppen()
{
	//$qL=mysql_query("TRUNCATE categories");
	$qL = mysql_query("DELETE FROM categories WHERE 1");
	if (!$qL) {
		echo "Fehler beim l&ouml;schen der Warengruppen" . mysql_error();
		return (false);
	}
	echo "Alle Warengruppen wurden geloescht<br>";
	$qL = mysql_query("ALTER TABLE categories AUTO_INCREMENT = 1");
	write_audit_log("Alle Warengruppen wurden geloescht - Synchronisieren Menü");
}

// Zeigt alle Childs von einem Kombi Produkt an
// wird nur bei Änderung von Kombi Produkten verwendet
function kombi_produkte_childs_anzeigen()
{
	//var_dump($_REQUEST);
	echo "<table class='auswertungen'>";
	$ergebnis = false;
	$offener_bon_produkt_id = $_REQUEST['offener_bon_produkt_id'];
	$sql = "SELECT produkt_id FROM offener_bon WHERE id=$offener_bon_produkt_id";
	$Q1 = mysql_query($sql);
	$row1 = mysql_fetch_assoc($Q1);
	$parent_produkt_id = $row1['produkt_id'];
	$sql = "SELECT offener_bon.ID, offener_bon.NAME, TAXCAT, RATE as tax_rate, stueck, PRICESELL, darf_geloescht_werden
				from offener_bon 
				LEFT JOIN taxes ON TAXCAT=taxes.ID
				LEFT JOIN combiartikel ON offener_bon.produkt_id=productid AND childvon='$parent_produkt_id'
				WHERE has_parent='$offener_bon_produkt_id'";
	$Q1 = mysql_query($sql);
	if (!$Q1) echo mysql_error();
	while ($row1 = mysql_fetch_assoc($Q1)) {
		//var_dump($row1);
		$name = $row1['NAME'];
		$line_id = $row1['ID'];
		$netto_preis = $row1['PRICESELL'];
		$tax_rate = $row1['tax_rate'];
		$stueck = $row1['stueck'];
		$darf_geloescht_werden = $row1['darf_geloescht_werden'];

		list($einzel_brutto, $gesamt_brutto, $steuer_einzel, $steuer_gesamt) = berechne_bruttopreis($row1["PRICESELL"], $row1["tax_rate"], 1);
		$gesamt_brutto_anzeige = number_format($gesamt_brutto, 2, ',', '.');
		//var_dump($row1);
		// Wenn dar_gelöscht_werden NULL ist, dann wurde das Produkt hinzugefügt -> darf also gelöscht werden
		if ($darf_geloescht_werden == 1 or is_null($darf_geloescht_werden)) $del_string = "<button class='button orange' onclick='delete_offene_bon_id_kombi($line_id, $offener_bon_produkt_id)'>L&ouml;schen</button>";
		else $del_string = "";
		$ergebnis .= "<tr> <td>" . $del_string . "</td> 
							<td width='50%'>$name</td> 
							<td width='20%' align='right'>$gesamt_brutto_anzeige</td></tr>";
	}
	if ($ergebnis !== false) echo $ergebnis;
	$gesamtpreis_brutto = berechne_bruttopreis_von_kombiartikel($offener_bon_produkt_id);
	$gesamtpreis_brutto_anzeige = number_format($gesamtpreis_brutto, 2, ',', '.');
	echo "<tr><td colspan='3'><hr /></td></tr>";
	echo "<tr> <td></td> <td width='50%'></td> <td width='20%' align='right'>$gesamtpreis_brutto_anzeige</td></tr> ";
	echo "</table>";
	return $ergebnis;
}

// Zeigt die Speisen Art - Vorspeise, Hauptspeise ... an
// wird nur bei Kombi Produkten als Ajax aufgerufen
function kombi_produkte_speisen_gaenge_anzeigen()
{
	$offener_bon_parent_id = $_REQUEST['offener_bon_produkt_id'];
	$sql = "SELECT article_art_id FROM offener_bon WHERE ID='" . $offener_bon_parent_id . "'";
	$Q1 = mysql_query($sql);
	if ($Q1) {
		while ($row1 = mysql_fetch_assoc($Q1)) {
			$selected_artikel_art = $row1['article_art_id'];
		}
	}
	// Vorspeise Hauptspeiche Nachspeise *******************
	$artQl = mysql_query("SELECT * FROM artikel_art");
	$artikelArtSelect = "";
	while ($artRow = mysql_fetch_array($artQl)) {
		if ($artRow['id'] === $selected_artikel_art) $selected = " editierenArtikelArtSelBut_selected ";
		else $selected = " editierenArtikelArtSelBut ";
		$artikelArtSelect .= "<button id=\"kombi_artikelArtSelBut" . $artRow['id'] . "\" class='schrift $selected' style='height:30%;' onclick='setArtikelArt_kombi(" . $artRow['id'] . ", this.id, " . $offener_bon_parent_id . ")' >" . $artRow['bezeichnung'] . "</button>";
	}
	$artikelArtSelect .= "<button id='artikelArtSelBut0' class='schrift editierenArtikelArtSelBut' style='height:30%;' onclick='setArtikelArt_kombi(" . 0 . ", this.id, " . $offener_bon_parent_id . ")' >-X-</button>";

	echo "<input type='text' id='artSelectedVal' class='floatL' />" . $artikelArtSelect . "";
	// Ende Vorspeise Hauptspeiche Nachspeise *******************
}

// Gibt den Kundennamen von der ID retour
function get_kundenname_for_kunden_id($kunden_id)
{
	global $con_i;
	$anzeige = false;
	$Q1 = sIT_mysql_run_query($con_i, "SELECT * FROM kunden WHERE id='" . $kunden_id . "'", $stop_on_error = true);
	while ($row1 = sIT_mysql_get_row($Q1)) {
		$anzeige = $row1['vorname'] . " " . $row1['nachname'] . $row1['Firma'];
	}
	return ($anzeige);
}

// Legt einen neuen Tisch in Raum an und ordnet den Kunden zu
function neuen_tisch_anlegen($raum, $tisch_name, $ist_temp = false)
{
	global $con_i;
	$Q1 = sIT_mysql_run_query($con_i, "INSERT INTO tische SET raum=$raum, tischName='$tisch_name', ist_temporaer='$ist_temp', 
											breite='" . TEMPORAERE_TISCHE_BREITE . "', hoehe='" . TEMPORAERE_TISCHE_HOEHE . "'", true);
	$tisch_id = sIT_mysql_insert_id($con_i);
	return ($tisch_id);
}
// Die Funktion legt einen neuen Tisch an wenn ein telefonanruf kommt
function telefon_create_table($update_anrufprotokoll = true)
{
	global $con_i;
	$raum = TELEFON_RAUM_UM_TISCHE_ANZULEGEN;
	$kunden_id = $_REQUEST['kunden_id'];
	if (isset($_REQUEST['telefon_nummer'])) $telefon_nummer = $_REQUEST['telefon_nummer'];
	if (isset($_REQUEST['telefon_anruf_id'])) $telefon_anruf_id = $_REQUEST['telefon_anruf_id'];
	if (isset($_REQUEST['update_anrufprotokoll']) && strtolower($_REQUEST['update_anrufprotokoll']) == 'false') $update_anrufprotokoll = false;

	$tisch_name = get_kundenname_for_kunden_id($kunden_id);
	if (empty($tisch_name)) $tisch_name = $telefon_nummer;
	$table_id = neuen_tisch_anlegen($raum, $tisch_name, true);
	if ($update_anrufprotokoll) sIT_mysql_run_query($con_i, "UPDATE telefon_anrufprotokoll SET tisch_id=$table_id WHERE ID=$telefon_anruf_id", true);
	// jetzt den Kunden zuordnen
	echo $table_id;
	return ($table_id);
}

// Funktion wird vom Kunden aus aufgerufen - legt einen temp Tisch an und ordnet den Kunden zu
// leitet dann auf den Tisch weiter
function telefon_create_table_weiterleiten($update_anrufprotokoll = true)
{
	require_once("api/telefon/telefon_funktionen.php");
	$tisch_id = telefon_create_table(false);
	$kunden_id = 0;
	if (isset($_REQUEST['kunden_id'])) $kunden_id = $_REQUEST['kunden_id'];
	telefon_tisch_oeffnen($tisch_id, $kunden_id);
}

// Fügt eine Telefon Nummer zu einem Kunden hinzu
function telefon_nummer_zu_kunden_hinzufuegen()
{
	global $con_i;
	$kunden_id = $_REQUEST['kunden_id'];
	$kunden_name = get_kundenname_for_kunden_id($kunden_id);
	$telefon_nr = $_REQUEST['telefon_nr'];
	echo "F&uuml;ge Telefon Nummer " . $telefon_nr . " zu Kunden $kunden_name hinzu<br>";
	$feld = false;
	$sql = "SELECT telefon1, telefon2, mobil FROM kunden WHERE id=$kunden_id";
	$Q1 = sIT_mysql_run_query($con_i, $sql, true);
	while ($row1 = sIT_mysql_get_row($Q1)) {
		if (empty($row1['telefon1'])) $feld = "telefon1";
		else if (empty($row1['telefon2'])) $feld = "telefon2";
		else if (empty($row1['mobil'])) $feld = "mobil";
	}
	if ($feld === false) {
		echo "<h3>Fehler - alle Telefon Nummer Felder sind schon ausgefüllt</h3>";
	} else {
		echo "Bef&uuml;lle Feld $feld mit der Telefonnummer<br>";
		$sql2 = "UPDATE kunden SET $feld='" . $telefon_nr . "' WHERE id=$kunden_id";
		$Q2 = sIT_mysql_run_query($con_i, $sql2, true);
		if (!$Q2) log_to_file("Fehler beim einfügen der Telefon Nummer in Kunden ID $kunden_id");
		else echo "Telefon Nummer wurde zum Kunden $kunden_name hinzugef&uuml;gt";
	}
}

// Funktion zeigt die letzten 50 Einkäufe eines Kunden an
function kunden_einkaeufe_anzeigen($kunden_id = false)
{
	global $con_i;

	if ($kunden_id === false) {
		$kunden_id = $_REQUEST['kunden_id'];
	}
	echo '<head><link rel="stylesheet" type="text/css" href="sITeditor/sITeditor.css">';
	echo '<link rel="stylesheet" href="sITeditor/jquery/tablesorter-master/css/theme.blue.css"></head>';
	echo 'Kunden ID: ' . $kunden_id . "<table class='tablesorter-blue'>";
	$Q1 = sIT_mysql_run_query($con_i, "SELECT * FROM abgeschlossener_bon 
									WHERE kunden_id=$kunden_id
									ORDER BY bon_id DESC 
									LIMIT 50", $stop_on_error = true);
	while ($row1 = sIT_mysql_get_row($Q1)) {
		$bon_id = $row1['bon_id'];
		$bon_erstellt_datum = $row1['bon_erstellt_datum'];
		$gesamt_summe = $row1['gesamt_summe'];
		echo '<tr class="tablesorter-headerRow">';
		echo "<th >" . $bon_erstellt_datum . "</th><th>Bon: " . $bon_id . "</th><th></th><th>" . number_format($gesamt_summe, 2, ',', '.') . "</th>";
		echo "</tr>";
		$Q2 = sIT_mysql_run_query($con_i, "SELECT * FROM abgeschlossener_bon_produkte 
									WHERE bon_id='" . $bon_id . "'
									ORDER BY abgeschlossener_bon_produkte.bon_id DESC 
									LIMIT 10", $stop_on_error = true);
		while ($row2 = sIT_mysql_get_row($Q2)) {
			$name = htmlentities(utf8_encode($row2['printname']));
			$stueck = $row2['stueck'];
			$brutto_gesamt = $row2['PRICESELL_brutto_gesamt'];
			$brutto = $row2['PRICESELL_brutto'];
			$beilagen_minus = $row2['beilagen_minus'];
			$beilagen_plus = $row2['beilagen_plus'];
			if (!empty($beilagen_minus)) $name .= "<br>- " . htmlentities(utf8_encode($row2['beilagen_minus']));
			if (!empty($beilagen_plus)) $name .= "<br>+ " . htmlentities(utf8_encode($row2['beilagen_plus']));
			echo "<tr class='even'>";
			echo "<td>" . $name . "</td><td>" . number_format($stueck, 0, ',', '.') . "</td><td>" . number_format($brutto, 2, ',', '.') . "</td><td>" . number_format($brutto_gesamt, 2, ',', '.') . "</td>";
			echo "</tr>";
		}
	}
	echo "</table>";
}

function KPE_Test()
{

	$fFile = file_get_contents('log/testBankomStrg.txt');
	$fFile2 = $fFile;
	$xZulu = "";

	$xZulu .= "1'120";
	$xZulu .= "\n";

	$xZulu .= "1&apos;110.00";

	$xZulu .= "\n";

	$xZulu .= "1'110.00";

	$ceVendorBon = iconv('UTF-8', 'windows-1252', $xZulu);
	$ceVendorBonx = iconv('UTF-8', 'windows-1252//IGNORE', $xZulu);

	$fFile = iconv('UTF-8', 'windows-1252', $fFile);

	$fFile2 = mb_convert_encoding($fFile2, 'UTF-8', 'windows-1252');

	echo "gr-x-\n" . $ceVendorBon . "\n\n" . $ceVendorBonx . "\n iconv utf8-> win 1252\n" . $fFile . "\n mbConvert utf8-> win 1252\n" . $fFile2;
}

function kpPrintTest()
{
	$testMsg = "hob nur gschaut ";
	$zulu = drucke_letzten_ec_kundenbeleg_reprint();

	echo json_encode(array('Success', $testMsg, $zulu));
}


/*	
	function kartenzahlungRequest(){
		$terminalId=false;
		$zahlbetrag=false;
		$zahlartName=false;
		$user_id=$_SESSION['userId'];
		if(isset($_POST['terminalId']) && strlen($_POST['terminalId']) > 2 ) $terminalId=$_POST['terminalId'];
		if(isset($_POST['zahlbetrag']) && strlen($_POST['zahlbetrag']) > 2 ) $zahlbetrag=$_POST['zahlbetrag'];
		if(isset($_POST['zahlartName']) && strlen($_POST['zahlartName']) > 2 ) $zahlartName=$_POST['zahlartName'];
		
		if($terminalId !== false && $zahlbetrag !== false && $zahlartName !== false){
			$insQlPay=mysql_query("INSERT INTO karten_zahlung SET terminal_id = '".$terminalId."', betrag = '".$zahlbetrag."', zahlart = '".$zahlartName."', 
						zahl_status = 'offen', user_id = '".$user_id."', date_time = NOW() ");
			if(!$insQlPay){
				echo "Response von karten zah req: ERROR ".mysql_error();
			}
			else echo "Response von karten zah req: ".$terminalId." / ".$zahlbetrag." / ".$zahlartName." - ".mysql_insert_id();
		}
		
		
		else echo "Response von karten zah req  irgendwas = false";
		
		
	}
*/


$funktion = false;
if (isset($_REQUEST['funktion']) && $_REQUEST['funktion'] != '') $funktion = rtrim($_REQUEST['funktion']);
else if (isset($backupCallFromPhpFile) && $backupCallFromPhpFile == 'commandLineBackup') $funktion = 'commandLineBackup';

if (isset($_REQUEST['gutscheinbetrag']))
	$gutscheinbetrag = $_REQUEST['gutscheinbetrag'];

check_login();
switch ($funktion) {
	case "anzahl_erhoehen":
		anzahl_erhoehen();
		break;
	case "anzahl_verringern":
		anzahl_verringern();
		break;
	case "zeile_loeschen":
		zeile_loeschen();
		break;
	case "bon_anzeigen":
		bon_anzeigen();
		break;
	case "zeile_einzelrabatt":
		zeile_einzelrabatt();
		break;
	case "gesamtrabatt":
		gesamtrabatt();
		break;
	case "warenkoerbe_anzeigen":
		zeige_warenkoerbe();
		break;
	case "zahlung_abgeschlossen":
		zahlung_abgeschlossen();
		break;
	case "zahlung_abgeschlossen_splitbon":
		zahlung_abgeschlossen_splitbon();
		break;
	case "zahlung_abgeschlossen_zahlungfrei":
		zahlung_abgeschlossen_zahlungfrei();
		break;
	case "bon_ausdrucken_pdf":
		bon_ausdrucken_pdf();
		break;
	case "EC_bon_reprint":
		EC_bon_reprint();
		break;
	case "bon_ausdrucken_a4_pdf":
		bon_ausdrucken_a4_pdf();
		break;
	case "bon_ausdrucken":
		bon_ausdrucken();
		break;
	case "bon_nachdrucken":
		bon_nachdrucken();
		break;
	case "storniere_bon":
		storniere_bon();
		break;
	case "storniere_bon_ausfuehren":
		storniere_bon_ausfuehren();
		break;
	case "ausloggen":
		ausloggen();
		break;
	case "kassa_oeffnen":
		kassa_oeffnen();
		break;
	case "kassenabschluss_ausdrucken":
		kassenabschluss_ausdrucken();
		break;
	case "ec_kassenabschluss_ausdrucken":
		ec_kassenabschluss_ausdrucken();
		break;
	case "ec_bons_ausdrucken":
		ec_bons_ausdrucken();
		break;
	case "kassenabschluss_ausdrucken_pdf":
		kassenabschluss_ausdrucken_pdf();
		break;
	case "kassa_schliessen_db_schreiben":
		kassa_schliessen_db_schreiben();
		break;
	case "ea_db_schreiben":
		ea_db_schreiben();
		break;
	case "ein_auszahlung_anzeigen":
		ein_auszahlung_anzeigen();
		break;
	case "ein_auszahlung_drucken_pdf":
		ein_auszahlung_drucken_pdf();
		break;
	case "kassenbericht_ausfuehren":
		kassenbericht_ausfuehren();
		break;
	case "kassenbericht_ausdrucken_pdf":
		kassenbericht_ausdrucken_pdf();
		break;
	case "run_backup_command":
		run_backup_command();
		break;
	case "run_auto_backup_command":
		run_auto_backup_command();
		break;
	case "restore_durchfuehren":
		restore_durchfuehren();
		break;
	case "editieren_abgeschlossen":
		editieren_abgeschlossen();
		break;
	case "lieferscheinErstellen":
		lieferscheinErstellen();
		break;
	case "lieferschein_ausdrucken_pdf":
		lieferschein_ausdrucken_pdf();
		break;
	case "lieferschein_ausdrucken_pdf_a4_oder_bon":
		lieferschein_ausdrucken_pdf_a4_oder_bon();
		break;
	case "rechnungsVordruckErstellen":
		rechnungsVordruckErstellen();
		break;
	case "kartenzahlungRequest":
		kartenzahlungRequest();
		break;
	case "xmlBonAusdrucken":
		# wid hier nicht aufgerufen, der aufruf erfolgt in getXMLdata.php
		break;
	case "commandLineBackup":
		# wid hier nicht aufgerufen, der aufruf erfolgt in getXMLdata.php
		#file_put_contents('kpcheckit.txt', "\n " .basename(__FILE__) . " ". __LINE__ ."\nxxxxxxxxxxxxxxxx\n ", FILE_APPEND);
		break;
	case "functionDirectCall":
		# funktionen die nicht über ajax aufgerufen werden, zb A4 Druck aus Lieferschein Sammelrechnung
		break;
	case "testXX":
		licenseDeleteOnRestore(false);
		break;
	case "changeZahlungOnBon":
		changeZahlungOnBon();
		break;
	case "get_products":
		get_products();
		break;
	case "upsync":
		upsync();
		break;
	case "upsync_abgeschlossener_bon":
		upsync_abgeschlossener_bon();
		break;
	case "syncProducts":
		syncProducts();
		break;
	case "sync_von_Zentralsystem":
		sync_von_Zentralsystem();
		break;
	case "loesche_alle_produkte":
		loesche_alle_produkte();
		break;
	case "loesche_alle_warengruppen":
		loesche_alle_warengruppen();
		break;
	case "kombi_produkte_childs_anzeigen":
		kombi_produkte_childs_anzeigen();
		break;
	case "kombi_produkte_speisen_gaenge_anzeigen":
		kombi_produkte_speisen_gaenge_anzeigen();
		break;
	case "zeile_loeschen_kombi":
		zeile_loeschen_kombi();
		break;

	case "telefon_create_table":
		telefon_create_table();
		break;
	case "telefon_create_table_weiterleiten":
		telefon_create_table_weiterleiten();
		break;
	case "telefon_nummer_zu_kunden_hinzufuegen":
		telefon_nummer_zu_kunden_hinzufuegen();
		break;
	case "checkLicConfigGui":
		checkLicConfigGui();
		break;
	case "kunden_einkaeufe_anzeigen":
		kunden_einkaeufe_anzeigen();
		break;
		#   Test only 
		#case "A4KassenabschlTest": kassenabschluss_ausdrucken_a4(305); break;
	case "A4KassenabschlTest":
		kassenabschluss_ausdrucken_pdf(308, false);
	case "kpPrintTest":
		kpPrintTest();
		break;
	case "KPE_Test":
		KPE_Test();
		break;
	case "syncGutscheine":
		syncGutscheine();
		break;
	case "syncGutscheineBuchungen":
		syncGutscheineBuchungen();
		break;
	case "syncNewDBFields":
		syncNewDBFields();
		break;
	case "gutschein_bankomat_ausfuehren":
		gutschein_bankomat_ausfuehren($gutscheinbetrag);
		break;
	case "get_ajax_terminal_process":
		get_ajax_terminal_process();
		break;
	case "setwarenkorbid":

		$wid = $_POST['warenkorbid'];
		
		if (isset($wid) && $wid > 0) {
			$file = "display/tisch_id_anzeigen.txt";

			$myfile = fopen($file, "w") or die("Unable to open file!");
			$text = $_REQUEST['warenkorbid'];

			fwrite($myfile, $text);
			fclose($myfile);

			//$current = file_get_contents($file);
			//file_put_contents($file, $wid, FILE_APPEND | LOCK_EX);
		}
		break;
	default:
		echo "Falscher aufruf von ajax_funktionen, funktion $funktion nicht bekannt";
}
