<?php
	require_once("config/connect.php");
	require_once("global_functions.php");
	
	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 Kritärien !!
		$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');
				}
		}
			
		/*
		# 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);
		}
		*/
		// ****************************************
		// 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");
		
		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);
			//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']);
		
		$sql="select id, name, pricesell, tax_rate, 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($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."'";
				//echo $sql_query;							 
				run_mysql_query($sql_query);
				
				$_SESSION["last_updated_product"]=$id;
				$_SESSION["last_insert_product"] =0;
			
		}
	}
	
	//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{
					// 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, name, printname,  articlePrinted, supplyprint, 
																beilagen_aenderung_minus, beilagen_aenderung_plus, article_art_id, funktion, 
																artikel_art.bezeichnung AS artikelArtBezeichnung, reihung, PRICESELL, tax_rate
															FROM offener_bon 			
															LEFT JOIN drucker ON supplyprint = drucker_id
															LEFT JOIN artikel_art ON article_art_id = artikel_art.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));
				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']." ");
		}
		
		$openBonLine=mysql_fetch_assoc(mysql_query("SELECT has_childs, stueck, NAME, printname FROM offener_bon WHERE id = '".$id."'"));
		
		if($openBonLine['has_childs'] == 1)$delQl=mysql_query("DELETE FROM offener_bon WHERE has_parent = '".$id."' ");
		
		$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);
		}
			
		$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
				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 ."%";
				
				// 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' ";
				//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("paymentFinishZahlungsfrei", $mysql_bon_id);
			
			}
		
			#### 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("paymentFinishZahlungsfrei", $mysql_bon_id);			
			}
			
			// 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){				
				$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){
			$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){
				$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){
			$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){
			$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){
					$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 {
						$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;
				$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>";	
		}
		mysql_query("set autocommit=1");
		
		if($gutscheinBetragAbbuchen != false && $gutscheinKartenNr != false){
			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'){
			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("paymentFinish", $insertedBonId);
			
		}
			
		
		
		// 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){
				$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'){
			$disablePrint=true;
			}
		else $disablePrint=false;
		
		if(defined('AUSDRUCK_RECHNUNGSBON_PDF') && strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja' && $printTargetA4 == false && $disablePrint==false){			
			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'){
				echo "<printToBrowser>".$a4PrintResult[2]."</printToBrowser>";
			}
					
		}
		
		
		else { 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' ){
				
				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()
	{		
		
		// schauen ob er Abholschein Nummer zurückgesetzt werden muss
		abholschein_nummer_zuruecksetzen();
		$zahlungsart_value=$_REQUEST['zahlungsart_value'];
		$zahlungsart_name=$_REQUEST['zahlungsart_name'];
		$zahlungsart_id=$_POST['zahlungsart_id'];
		$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'];
			#	if(isset($_POST['expressmode']) && $_POST['expressmode'] == 'express')$zahlungExpress = true;
			#	else $zahlungExpress = false;
			
					# 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;
							#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'];
		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;
		
		// Sollte vorher etwas ausgefallen sein durch fehler und ein Rollback gemacht worden sein
		mysql_query("ALTER TABLE abgeschlossener_bon AUTO_INCREMENT = 1");
		mysql_query("ALTER TABLE dep AUTO_INCREMENT = 1");
		
		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);
		}
		if (!$sql_produkte)
		{
			$zahlSqlError=true;
			$zahlSqlErrorMsg.=mysql_error()."\n";
			echo "SQL Fehler: " . mysql_error();
		}
		$gesamt_summe=0;
		$lieferscheinLink=false;
		$addTxtId=false;
		$addTxt="";
		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);

			}
			$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;
		}
	

		$qtyUser=checkCurrentActiveUser();
			# kommt eine Zahl retour, Errors werden keine abgefangen
			
		$ecData='';
		$dataStrg='';
		$ecKundenBeleg='';
		$vkBelegPrint='';
		$ecVerkauferBeleg='';
		
		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();
		}
		
		$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."' ";
		$insQl=mysql_query($sql);
		if(!$insQl){
			$zahlSqlError=true;
			$zahlSqlErrorMsg.=mysql_error()."\n";
		}
		$mysql_bon_id=mysql_insert_id();
		
		writeSitposLog(basename( __FILE__)." ". __LINE__ , "abgeschlosssener Bon erstellt, Bon Id: ".$mysql_bon_id.". ".mysql_error());

		// Steuer berechnen und in abgeschlossener_bon eintragen
		$writeTax=steuer_berechnen($bon_id, true, $mysql_bon_id);
		
		// 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 
				FROM offener_bon WHERE bon_id='".$bon_id."'";
		$sql_produkte = mysql_query($sql);
		if (!$sql_produkte)
		{
			$zahlSqlError=true;
			$zahlSqlErrorMsg.=mysql_error()."\n";
			echo "SQL Fehler: " . mysql_error();
			# wenn hier ein exit kommt passiert kein rollback
			#exit(1);
		}
		
		$pattern = array("/'/", "/´/", '/"/');
		$replace = array("\'", "\`", '\"');
		
		$lieferscheinSource=false;
		
		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="'.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="'.$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.'",
													beilagen_minus="'.$row_produkt["beilagen_aenderung_minus"].'",
													beilagen_plus="'.$row_produkt["beilagen_aenderung_plus"].'"  ');
			if(!$insQl){
				$zahlSqlError=true;
				$zahlSqlErrorMsg.=mysql_error()."\n";
			}
			
		}
		

			# 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";
				}
			
			}
			
		// 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";
			echo "SQL Fehler: " . mysql_error();
		}
		$default_zahlungsart=false;
		while ($row_zahlungsart=mysql_fetch_assoc($sql_zahlungsart))
		{
			$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;
		// 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;			
		}
		
		# 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;
		
					
			# 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;
		}
		
		$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";
		}
		
		$i=0;	$bar_erhalten=0; $gutschein_erhalten=0; $bankomat_zahlung=0; $bank_zahlung=0; $checkZaBank=false;
		
		$newRetourGeldContent="";
		if($zahlungExpressZahlart == true){
				$getExpressZahlungsart=mysql_fetch_array(mysql_query("SELECT id, name  FROM zahlungsart WHERE express_zahlart = true LIMIT 1"));
				if($getExpressZahlungsart['name'] != false){
					$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";
				}

				$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);

				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++;
			//	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
					$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";
					}

					$newRetourGeldContent.="<div class='retourgeldDialogTxt' >".$za_name.": </div><div class='retourgeldDialogBetr'>".number_format($za_tatsaechlich, 2, ",", ".")."</div><div class='cclear'></div>";

				}
			}
		}
		
		if($gutscheinBetragAbbuchen != false && $gutscheinKartenNr != false){		
			if(is_array($gsArray) && count($gsArray) > 0){
				$updGutschError=false;
				$errorContent="";
				for($i=0; $i < sizeof($gsArray); $i++){
					$getGsId=mysql_fetch_array(mysql_query("SELECT gs_id FROM gutscheine WHERE gutschein_nr = '".$gsArray[$i][0]."'"));
					$gsId=$getGsId['gs_id'];

					$updGutschMulti=mysql_query("UPDATE gutscheine SET betrag = betrag - ".$gsArray[$i][1]." WHERE gs_id = '".$gsId."' ");
					$insGutschMulti=mysql_query("INSERT INTO gutschein_buchungen SET 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].",";
					}
				}
				if($updGutschError != false){
					$dialogContent="<p>Beim Abbuchen vom Gutschein mit der/den Nr: ".$errorContent." ist ein Fehler aufgetreten !</p>";
					$zahlSqlError=true;
					$zahlSqlErrorMsg.=mysql_error()."\n";
					echo "<script>
								openGeneralDialog('gutscheinkarte_abbuchen_fehler', 'Fehler beim Abbuchen von der Gutscheinkarte', '".$dialogContent."', 'wrapper');			
						</script>";	
				}
			}
			else{
				$getGsId=mysql_fetch_array(mysql_query("SELECT gs_id FROM gutscheine WHERE gutschein_nr = '".$gutscheinKartenNr."' "));
				$gsId=$getGsId['gs_id'];
				
				$updGutsch=mysql_query("UPDATE gutscheine SET betrag = betrag - ".$gutscheinBetragAbbuchen." WHERE gs_id = '".$gsId."' ");
				$insGutsch=mysql_query("INSERT INTO gutschein_buchungen SET 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){
					$zahlSqlError=true;
					$zahlSqlErrorMsg.=mysql_error()."\n";
					$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;
				}
			}
		
		
		}
		
		$lieferscheinNr=false;
		if(defined('LIEFERSCHEINDRUCK_BEI_RECHNUNG') && strtolower(LIEFERSCHEINDRUCK_BEI_RECHNUNG) == 'ja'){
					# 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";
					}
					
						#run_mysql_query($updAbgeschlBon, "", "Fehler beim schreiben Auftragsschein Nr - Tabelle: abgeschlossener_bon");

				}
	
		}
		
		if(defined('LAENDERKENNUNG_DE') && LAENDERKENNUNG_DE != 'A'){	}
		else {
			$dep_table_write_result=dep_table_schreiben($mysql_bon_id, false);			# zweites parm = callFrom
		
			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:".$mysql_bon_id."<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:".$mysql_bon_id."<br />".$dep_table_write_result[1]."";
						}
					}
					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]."";
					}
					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]."";
					}
					
					else {
						$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;
				$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>";
			}
									
		}
		
		$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");
			
			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>";	
			writeSitposLog(basename( __FILE__)." ". __LINE__ , "abgeschlosssener Bon erstellt Commit, Bon Id: ".$mysql_bon_id.". ".mysql_error());
		}
		mysql_query("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){
			$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");
			$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("paymentFinish", $mysql_bon_id);						
		}
		
		$sourceParam=false;
		if($checkZaBank == true)$sourceParam= "PrintBankdata";
		
		// Drucke jetzt den Bon aus				
		if(defined('AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN') && strtolower(AUSDRUCK_RECHNUNGSBON_UNTERDRUECKEN) == 'ja'){
			$disablePrint=true;
		}
		else $disablePrint=false;
		
		if(defined('AUSDRUCK_RECHNUNGSBON_PDF') && strtolower(AUSDRUCK_RECHNUNGSBON_PDF) == 'ja' && $printTargetA4 == false && $disablePrint==false){
			bon_ausdrucken_pdf($mysql_bon_id, $sourceParam, false, false, false, false);
	
		}
		
		else if($printTargetA4 == true && $disablePrint==false){ 
				
			$a4PrintResult=bon_ausdrucken_a4_pdf($mysql_bon_id, false, 'nonAjax', $lieferscheinNr); 
			if($a4PrintResult[1] == 'browserPrint'){
				echo "<printToBrowser>".$a4PrintResult[2]."</printToBrowser>";
			}
			
		}
		
		else if ($disablePrint != true) {  
			bon_ausdrucken(false, $mysql_bon_id, $sourceParam, $lieferscheinNr); 
				# disable bon print wird für html druck in kassieren.php ca zeile 1050 gesteuert

		}
		
		if($delOffenerBon==true){
				#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>";	
			}
			
		}
				
		if( strtolower(RETOURGELD_POPUP_ANZEIGEN) == 'ja' && $zahlungExpress == false ){

					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 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){
		
		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;
			
		}
				
		$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);
		
		#$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)*.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-$marginLR)*.6, $lineHeight, $text, 0, 0, 'L');
            $pdf->Cell(($bonWidth-$marginLR)*.4, $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)*.4, $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");
		
		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');
		
		$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");
		
		exec($command, $output, $error_code);
	
	
	}
	
	function bon_ausdrucken_a4_pdf($bon_id = false, $sourceParam=false, $callFrom=false, $lieferscheinNr=false){
		if(isset($_POST['requestId']) && $_POST['requestId'] != "") $requestId=$_POST['requestId'];
		else $requestId="";
		if(isset($_POST['requestFunktion']) && $_POST['requestFunktion'] != "") $requestFunktion=$_POST['requestFunktion'];
		else $requestFunktion="";
		if(isset($_POST['a4downloadIndicator']) && $_POST['a4downloadIndicator'] == true) $a4downloadIndicator = true;
		else $a4downloadIndicator = false;
		$printRequest=false;
		if(isset($_POST['printRequest']) && $_POST['printRequest'] != "") $printRequest = $_POST['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
		$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";
		else $kopfzeilenParm="";
		
		// 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>";
		}
		
		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>";
		echo '<div class="ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite">';echo "<hr />";echo '</div>';
		
		
		
		/// ========================================================================
		// Produkte Ausdrucken
		$sql="select abgeschlossener_bon_produkte.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	
		while ($row_produkt=mysql_fetch_assoc($sql_produkte))
		{
			$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,2,",",".");
				
			$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 );
				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 "<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 $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
		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='';
		
		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 />";
		
		if($monatsAbschlBeleg==false){
		
			// Steuern ausgeben
			echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'><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);
			}
			while ($row_produkt=mysql_fetch_assoc($sql_produkte))
			{
				$steuersatz=$row_produkt["tax_rate"]*100;
				$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,",",".");
				
				echo "<div class='ausdruck_ganze_zeile  ausdruck_bon_gesamt_breite'><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>";
			}
		
			echo "<br><br>";
			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_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_tatsaechlich"];
				$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_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;
		
		
		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;
		
		$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))*.35, $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))*.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');
		
		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))*.35, $lineHeight, number_format($einnahmen,2,",","."), 0, 1, 'R');
		$pdf->Cell(($bonWidth-($marginLR))*.65, $lineHeight, $einnamenTxt, 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, 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, "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(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))*.35, $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(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; 
			
			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");
		
		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);
		
		
	}
	
	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."'";
		$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"));
			
			
			
			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(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 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);
				}
		}
	}
	
	//Hier wird der Bon tatsächlich storniert und in die DB eingetragen
	function 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();
	
		if ($kassenabschluss_id==false) print_fehler("Kassa ist nicht offen");
		
		$logTx=$storno_grund."---zahlungsart-> ".$storno_zahlungsart." user -> ".$user;
		
		$ec_gutschrift=false;
		$storniere_bankomat=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);
						}
					}
				$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");
		
		$updQlTmp=mysql_query("UPDATE abgeschlossener_bon_temp SET bon_id=NULL, gesamt_summe=gesamt_summe*-1, 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");
		
		$sql = "SELECT gesamt_summe FROM abgeschlossener_bon WHERE bon_id='$neue_bon_id'";
		$result = mysql_query($sql);
		$value = mysql_fetch_object($result);
		$zahlbetrag = $value->gesamt_summe;

		// die Produkte kopieren

		$insQlTmpB=mysql_query("INSERT INTO abgeschlossener_bon_produkte_temp (SELECT * FROM abgeschlossener_bon_produkte 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_produkte_temp");
		
		$updQlTmpB=mysql_query("UPDATE abgeschlossener_bon_produkte_temp SET id=NULL, bon_id=".$neue_bon_id.", stueck=stueck*-1, create_ts=NOW(), update_ts=NOW()");
		if(!$updQlTmpB){ $zahlSqlError=true; 	}
			#run_mysql_query($sql, "Temp Table wurde geaendert", "FEHLER bei aendern Temp Table - Tabelle: abgeschlossener_bon_produkte_temp");
		
		
		$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 parent_id = ".$searchParentRow['ID']." 
								WHERE parent_id = ".$searchParentRow['isparent_id']." AND bon_id = ".$neue_bon_id."  ");
				$updateParent=mysql_query("UPDATE abgeschlossener_bon_produkte SET 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 id=NULL, bon_id=".$neue_bon_id.", gesamt_betrag=gesamt_betrag*-1, 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;
				$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'");
				if(!$insZaQl){ $zahlSqlError=true; 	}
					#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='$zahlbetrag',  zahlbetrag_tatsaechlich='$zahlbetrag'");
			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){
				# 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");
		}
		mysql_query("set autocommit=1");
		
		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);
		}

	}
	
	// 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()' >";
		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>";
		
		bon_ausdrucken(true, $bon_id, 'storno');
	}
	
	function kassa_oeffnen()
	{
		global $incr;
		
		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 (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>";
				}*/

				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 = "TRUE";
				syncProducts();
			}
	}
	
	// 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);
			$pos=strpos($resp, '<SITPOSBANKOMAT>');
			if ($pos!==false)
			{
				$resp=substr($resp,$pos);
			}
			$resp=iconv('cp1252', 'utf-8',$resp);
			// XML Fehler nicht anzeigen, wird nachher abgefragt
			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);
		}
		
		
		# 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, SUM(pricesell*stueck) AS summe, SUM(pricesell*stueck*tax_rate) AS steuer, 
								CATEGORY AS catID, produkt_id 
							FROM abgeschlossener_bon_produkte
							LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_produkte.bon_id=abgeschlossener_bon.bon_id
							".$bedingung."  GROUP BY prodName";
							
			$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, SUM(pricesell*stueck*(1+tax_rate)) AS summe,
								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
							".$bedingung."  GROUP BY prodName");
				
			#$pdf->Cell(0, $lineHeight, mysql_num_rows($prodQl), 0, 1, 'L');	
			
			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');
			
	/*		$prodSteuerSumme=0;
			$prodNettoSumme=0; 
			$prodQtySumme=0;
							
			if (! $sql_products) {
				$pdf->MultiCell( preg_replace('/[^\d]/', '', AUSDRUCK_ABSCHLUSS_STEUER_SATZ), $lineHeight, iconv('UTF-8', 'windows-1252', $row_kategorien['kategorie']) , 0, 'L', 0); 
				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;
			}
		*/
		}
		
		
		# 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);
		
	}
	
	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.".$printRes[1].$printRes[4];
						// Hier wird immer Window eröffnet - noch ändern auf öffnen schauen.
						//echo "<script>window.open('".$printRes[4]."', '_blank')</script>";
						
					}					
					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);
			//var_dump($printRes);
			if ($printRes[1]==='printerPrint') echo "Target: Printer nicht supported - Bildschirm Druck konfigurieren";
			else
			{
				$printResult="Lieferschein Nr.".$printRes[3]." erstellt.".$printRes[1].$printRes[4];
				$filename = $printRes[4];
				echo $printRes[4];
				//echo "<script>window.open('".$filename."', '_blank')</script>";
			}
			//$printResult="Lieferschein Nr.".$printRes[3]." erstellt.".$printRes[1].$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"];
			$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);
		
		//exec($command, $output, $error_code);
		$printLs=pclose(popen($command, "r"));
		
			#	$time_end = microtime(true);
			#	$execution_time = ($time_end - $time_start)/60;
				

	}
	

	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);
					
					return $error_code;
					

	
	}

	function download_file($filename)
	{
		$vorgeschlagener_dateiname=KASSA_ID."_Backup_".date('Ymd_Hi', time());
		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";

		$checkLocation=getenv("HOMEPATH");
		if(preg_match("/users\\\kp_/i", $checkLocation)){
				$command="e:\\Programme\\xampp\\mysql\\bin\\mysqldump --add-drop-database -u ".SQL_USER." -p".SQL_PW." --databases sitpos ".SQL_DB." >".$filename;
				
		}
		else {
			$command="c:\\xampp\\mysql\\bin\\mysqldump --add-drop-database -u ".SQL_USER." -p".SQL_PW." --databases sitpos ".SQL_DB." >".$filename;	
		}
			
		$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){
			#	deleteLic noneLic licConfirmed	
				
		$checkLocation=getenv("HOMEPATH");
		if(preg_match("/users\\\kp_/i", $checkLocation)){
			$command="e:\\Programme\\xampp\\mysql\\bin\\mysql --user=".SQL_USER." --password=".SQL_PW." ".SQL_DB." < $filename";
		}
		else{
			$command="c:\\xampp\\mysql\\bin\\mysql --user=".SQL_USER." --password=".SQL_PW." ".SQL_DB." < $filename";
		}
		
		$output=array();
		ini_set('max_execution_time', 0);		
		
		exec($command, $output, $error_code);
		if($error_code)
		{
			echo $command . "<br>";
			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');
		}
		
		ini_set('max_execution_time', 30);		
	}
	
	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'){
				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");
        /*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;");

        while ($row = mysql_fetch_assoc($query)) {
			$row['CATEGORY'] = $cats[$row['CATEGORY']];
			$row['TAXCAT'] = $tax[$row['TAXCAT']];
            $result[] = $row;
        }

        echo json_encode($result);
	}
	
	// Synchronisiert die Tabellen in das Zentralsystem
	function upsync() {
		session_write_close();
		
		$selVal = "incr";
		if (isset($_POST['selVal'])) {
			$selVal = $_POST['selVal'];
		}

		//RFR: keine Ahung - das wird nicht verwendet
		/*
		if (isset($_POST['origin'])) {
			$origin = $_POST['origin'];
		}*/
		
		// Wenn full oder incr und kein structure sync noch erfolgt ist, dann mache ein structure sync
		if ($selVal !== "incr") {
			include 'synchronize/sync_table_structure.php';
		} else {
			$query = mysql_query("SELECT ID FROM sync_info WHERE wert='structure';");

			if (mysql_num_rows($query) == 0) {
				include 'synchronize/sync_table_structure.php';
			}
		}
		echo "Synchronisiere Daten";
		include 'synchronize/sync_data.php';
	}

$synchronizeTables = array("products", "categories");

function get_table_from_host($url) {
	global $incr;
	if ($incr === "TRUE") $CONDITION="&incr=TRUE";
	else $CONDITION="&incr=FALSE";
	echo $url . $CONDITION;
    $xml = simplexml_load_file($url . $CONDITION);

	if (!$xml) {
		echo "Keine Änderungen in: $url$CONDITION\n";
		foreach(libxml_get_errors() as $error) {
			echo "\t", $error->message . "\n";
		}
	}
	return($xml);
}

function does_a_record_exist($query) {
	$sqlP=mysql_query($query);
	if (! $sqlP) {
		die('ERROR: ' . mysql_error() );
	}
	if (mysql_num_rows($sqlP)>=1) {
		$row = mysql_fetch_assoc($sqlP);
		//echo var_dump($row);
		return (TRUE);
	}
	else return (FALSE);
}

function run_sql_insert($query) {
	$sqlP=mysql_query($query);
	if (! $sqlP) {
		die('ERROR: ' . mysql_error() . ' Kommando: ' . $query );
	}
	else return (TRUE);
}

function get_fields($table) {
	$query = mysql_query("DESCRIBE $table;");
	$result = array();
	if($query) {
		while($row = mysql_fetch_assoc($query)) {
			$result[] = $row['Field'];
		}
	}
	return $result;
}

	// Diese Funktion transferiert die Tabelle von einem ERP System
	// Entweder sITpos Filialsystem oder WeClapp
	function transfer_table($url, $table_name, $table_key, $kassa_id)
	{
		if (defined('FILIALSYSTEM_ERP_PROGRAMM') && FILIALSYSTEM_ERP_PROGRAMM == "WeClapp" )
		{
			echo "transfer_table($url, $table_name, $table_key, $kassa_id)";
			echo "Transferiere von WeClapp";
			transfer_table_WeClapp($table_name, $kassa_id);
		}
		else
		{
			echo "Transferiere von sITpos Filialsystem";
			transfer_table_sITpos($url, $table_name, $table_key, $kassa_id);
		}
	}
	
	function transfer_table_WeClapp_get_data($resource)
	{
		$ch = curl_init();
		$url = FILIALSYSTEM_URL_ZENTRALSYSTEM;
		$url=$url.$resource;
		//echo $url;
		$token=FILIALSYSTEM_TOKEN;
		
		curl_setopt($ch, CURLOPT_URL, $url);
		
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		curl_setopt($ch, CURLOPT_HEADER, FALSE);

		//curl_setopt($ch, CURLOPT_POST, TRUE);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
		
		//curl_setopt($ch, CURLOPT_POSTFIELDS, $items_string);
		
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		  "Content-Type: application/json",
		  "AuthenticationToken: $token"
		));

		$response = curl_exec($ch);
		if ($response === false) echo 'Curl-Fehler: ' . curl_error($ch);
		curl_close($ch);
		
		var_dump($response);
		$resArr = json_decode($response, true);
		return($resArr['result']);
	}
	
	function transfer_table_WeClapp_put_data($resource, $items_string)
	{
		$ch = curl_init();
		$url = FILIALSYSTEM_URL_ZENTRALSYSTEM;
		$url=$url.$resource;
		//echo $url;
		$token=FILIALSYSTEM_TOKEN;
		
		curl_setopt($ch, CURLOPT_URL, $url);
		
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		curl_setopt($ch, CURLOPT_HEADER, FALSE);

		curl_setopt($ch, CURLOPT_POST, TRUE);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
		
		curl_setopt($ch, CURLOPT_POSTFIELDS, $items_string);
		
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		  "Content-Type: application/json",
		  "AuthenticationToken: $token"
		));

		$response = curl_exec($ch);
		if ($response === false) 
		{
			echo 'Curl-Fehler: ' . curl_error($ch);
			return (false);
		}
		curl_close($ch);
		
		//var_dump($response);
		$resArr = json_decode($response, true);
		return($resArr);
	}
	
	function transfer_table_WeClapp_categories()
	{
		$result_arr=transfer_table_WeClapp_get_data('articleCategory');
		return($result_arr);
	}
	
	function transfer_table_WeClapp_products()
	{
		$result_arr=transfer_table_WeClapp_get_data('article');
		return($result_arr);
	}
	
	function transfer_table_WeClapp_findSalestax()
	{
		$result_arr=transfer_table_WeClapp_get_data('tax/findSalesTax?dispatchCountryCode=AT');
		return($result_arr);
	}
	
	function transfer_table_WeClapp_steuern()
	{
		$result_arr=transfer_table_WeClapp_get_data('tax');
		return($result_arr);
	}
	
	function transfer_table_WeClapp_warehouse()
	{
		$result_arr=transfer_table_WeClapp_get_data('warehouse');
		return($result_arr);
	}
	
	function WeClapp_get_default_warehouse_level_id()
	{
		$array=transfer_table_WeClapp_warehouse();
		$default_warehouse_level=false;
		foreach ($array as $key => $value)
		{
			if ($array[$key]['warehouseType']==='STANDARD')
			{
				$default_warehouse_level=$array[$key]['defaultLevelId'];
			}
		}			
		//echo "Default Warehouse Level ".$default_warehouse_level;
		return ($default_warehouse_level);
	}
	
	// Bei WeClapp darf nie ein Full Sync gemacht werden, weil ansonsten die Artikel öfters ausgebucht werden!
	function WeClapp_warehouse_stock_movement($full_sync=false)
	{
		$warehouse_level=WeClapp_get_default_warehouse_level_id();	// Sucht die default_wherehouse_level_id von WeClapp heraus
		if ($full_sync) $where="";
		else $where=" WHERE filialsystem_sync_done=0 ";
		$sql="SELECT * from abgeschlossener_bon_produkte $where";
		$Q1=mysql_query($sql);
		if (!$Q1) echo "Fehler ".mysql_error();
		else
		{
			while ($row1=mysql_fetch_assoc($Q1))
			{
				//var_dump($row1);
				$abgeschlossener_bon_id=$row1['ID']; 
				 $articleId=$row1['produkt_id']; 
				 $quantity=$row1['stueck']; 
				 $sourceWarehouseLevelId=$warehouse_level;
				 $movementNote="abgeschlossern_bon_produkt_id:".$row1['produkt_id']; 
				 $batchNumber="kassa1";
				 
				 $data = array(
						'articleId' => $articleId,
						'quantity' => $quantity,
						'sourceWarehouseLevelId' => $sourceWarehouseLevelId,
						'movementNote' => $movementNote,
						'batchNumber' => $batchNumber
					);
				$items_string=json_encode($data);
				$result=transfer_table_WeClapp_put_data("warehouseStockMovement/bookOutgoingMovement", $items_string);
				if ($result!==false)
				{
					// Technisch hat es funktioniert, jetzt könnte es noch einen logischen Fehler geben
					var_dump($result);
					$result_string=json_encode($result);
					log_to_file("Sync abgeschlossener_bon_produkte zu WeClapp:  abgeschlosserner_bon_produkt_id: ".$articleId." Name :".$row1['NAME']." WeClapp: ".$result_string, false, true);
					$sql2="UPDATE abgeschlossener_bon_produkte SET filialsystem_sync_done=1 WHERE ID=$abgeschlossener_bon_id";
					$Q2=mysql_query($sql2);
					if (!$Q2) echo "Fehler ".mysql_error();
				}
				
			}
		}
	}
	
	function update_table_mit_array($table_name, $array, $table_key)
	{
		if (!empty($array))
		{
			ini_set('memory_limit', '-1');
			$fields = get_fields($table_name);
			$rows = 0;
			mysql_query("Start transaction");
			foreach ($array as $element) 
			{
				//echo "Bearbeite Array";
				//var_dump($element);
				set_time_limit(60);
				$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++;
					//}
				} else {
					run_sql_insert($sql_string_insert);
					//echo "INSERT :" . $sql_string_insert;
					$rows++;
				}
			}
			mysql_query("commit");
			echo "Datensätze in Tabelle $table_name eingefügt/geändert: " . $rows . "<br>";
			return;
			
		}
		else echo "Sync von Table $table : Keine Daten gefunden";
	}
	
	function transfer_table_WeClapp($table_name, $kassa_id) 
	{
		if ($table_name=='categories')
		{
			$array=transfer_table_WeClapp_categories();
			$array=rename_array_key($array, 'id', 'ID');
			$array=rename_array_key($array, 'name', 'NAME');
			update_table_mit_array('categories', $array, 'ID');
		}
		else if ($table_name=='products')
		{
			$array1=transfer_table_WeClapp_findSalestax();
			$array=transfer_table_WeClapp_products();
			var_dump($array);
			exit;
			$array=rename_array_key($array, 'id', 'ID');
			$array=rename_array_key($array, 'name', 'NAME');
			$array=rename_array_key($array, 'ean', 'CODE');
			$array=rename_array_key($array, 'articleCategoryId', 'CATEGORY');
			$array=rename_array_key($array, '', 'TAXCAT');
			$array=rename_array_key($array, 'articleNumber', 'REFERENCE');
			$array=rename_array_key_price($array, 'PRICESELL');
			
			
			update_table_mit_array('products', $array, 'ID');
		}
		else if ($table_name=='taxes')
		{
			$array=transfer_table_WeClapp_steuern();
			$array=rename_array_key($array, 'id', 'ID');
			$array=rename_array_key($array, 'name', 'NAME');
			$array=rename_array_key($array, 'ean', 'CODE');
			$array=rename_array_key($array, 'taxValue', 'RATE');
			foreach ($array as $key => $value)
			{
				if ($array[$key]['taxType']==='VALUE_ADDED_TAX' || $array[$key]['taxType']==='TAX_FREE')
				{
					$array[$key]['RATE']=$array[$key]['RATE']/100;
				}
				else unset($array[$key]);
				
			}			
			update_table_mit_array('taxes', $array, 'ID');
		}
		else if ($table_name=='warehouse')
		{
			
		}
	}
	
	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 transfer_table_sITpos($url, $table_name, $table_key, $kassa_id) {
		global $incr;
		ini_set('memory_limit', '-1');
		$xml=get_table_from_host($url . "/export_xml.php?TABELLE=".$table_name."&KASSA=".$kassa_id."&INCR=".$incr."&token=".FILIALSYSTEM_TOKEN);
		if (!$xml) {
			return true;
		}
		$fields = get_fields($table_name);
		$rows = 0;
		mysql_query("Start transaction");
		foreach ($xml->row as $reihe) {
			set_time_limit(60);
			$table_id=urldecode($reihe->$table_key);
			
			$time = strtotime(urldecode($reihe->ts));
	
			$sql_string_update="";
			$sql_string_insert1="";
			$sql_string_insert2="";
	
			$array=get_object_vars($reihe);
	
			foreach($array 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); 
				$rows++;
				//}
			} else {
				run_sql_insert($sql_string_insert);
				$rows++;
			}
			unset($xml);
			//$rows++;
		}
		mysql_query("commit");
		echo "Datensätze in Tabelle $table_name eingefügt/geändert: " . $rows . "<br>";
		return;
	}

	function syncProducts() 
	{
		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;
		
		// Kunden synchronisieren!
		if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_SYNCHRONISATION_KUNDEN_BON == "ja")
		{
			transfer_table($url, 'kunden', 'id', $kassa_id);
		}
		
		//ini_set('memory_limit', '555555M');
		if (FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_UEBERNEHMEN_ZENTRALSYSTEM == "ja")
		{
			transfer_table($url, 'categories', 'ID', $kassa_id);
			transfer_table($url, 'combiartikel', 'id', $kassa_id);
			// Tabelle products immer als letzte synchronisieren - sonst könnte es ein Problem geben mit Zeit weil immer beim
			// Products Tabelle die synchronisiereungszeit geschrieben wird!
			transfer_table($url, 'products', 'ID', $kassa_id);
		}
		//transfer($url, 'products', 'ID', $kassa_id);
		$time += microtime(true);
		echo "<br>Dauer: " . $time . "<br>";
		return;
	}
	
	// Kunden synchronisieren muss manchmal extra aufgerufen werden (z.b. vor dem Kunden auf Bon hinzufügen)
	// Ansonsten wird es mit den Produkten mit synchronisiert
	function syncKunden() 
	{
		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, 'kunden', '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");
		if(!$qL)
		{
			echo "Fehler beim l&ouml;schen der Warengruppen";
			return (false);
		}		
		echo "Alle Warengruppen wurden geloescht<br>";
		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' onclick='setArtikelArt_kombi(".$artRow['id'].", this.id, ".$offener_bon_parent_id.")' >".$artRow['bezeichnung']."</button>";
		}
		$artikelArtSelect.="<button id='artikelArtSelBut0' class='schrift editierenArtikelArtSelBut' 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 "<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 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';
	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 "syncProducts": syncProducts(); break;
		case "syncKunden": syncKunden(); 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 "kunden_einkaeufe_anzeigen": kunden_einkaeufe_anzeigen(); break;
		
		
		default:
			echo "Falscher aufruf von ajax_funktionen, funktion $funktion nicht bekannt";			
	}

	















	

?>