<?php
	require_once("config/connect.php");
	require_once("display/display.php");
	require_once("include/qr_lib/qr_sitposprint.php");	
	require_once("global_functions_ec_terminal.php");
	require_once("global_functions_2.php");
	require_once("auswertungen_global_functions.php");
	require_once("config/sIT_global_db_functions.php");
	
	function wurde_arbeitszeit_geschrieben($benutzer_id, $con)
	{
		$datum=date("Y-m-d");
		
		$Q1=sIT_mysql_run_query($con, "SELECT ID, benutzer_id, datum, absenz_name, az_beginn, az_ende 
										FROM arbeitszeit_schreiben
										WHERE datum='$datum' AND benutzer_id='$benutzer_id'", true);
		if (sIT_mysql_num_rows($Q1)>0) return true;
		else return false;
	}
	
	// Funktion schaut nach, ob alle Zeiten geschrieben wurden
	function wurden_alle_arbeitszeiten_geschrieben()
	{
		$con=sIT_mysql_connect(SQL_HOST, SQL_USER, SQL_PW, SQL_DB);
		
		$datum=date("Y-m-d");
		
		$Q1=sIT_mysql_run_query($con, "SELECT id,name from benutzer WHERE arbeitszeit_schreiben=1", true);
		while ($row1=sIT_mysql_get_row($Q1))
		{
			$user_id=$row1['id'];
			if (! wurde_arbeitszeit_geschrieben($user_id, $con)) return(false);
		}
		return(true);
	}
	
	// Funktion berechnet den Brutto Preis einer Produktzeile
	function berechne_bruttopreis($netto_preis, $tax_rate, $stueck)
	{
		$brutto_einzel=$netto_preis+$netto_preis*$tax_rate;
		$brutto_summe=$brutto_einzel*$stueck;
		$brutto_summe=round($brutto_summe, 2);
		
		$netto_summe=$netto_preis*$stueck;
		
		$steuer=$netto_preis*$tax_rate;
		$steuer_summe=$brutto_summe-$netto_summe;
		$steuer_summe=round($steuer_summe, 2);
		
		/*
		
		$steuer_summe=$netto_preis*$tax_rate*$stueck;
		*/
		
		return(array($brutto_einzel, $brutto_summe, $steuer, $steuer_summe));
	}
	
	// Berechnet den Gesamtpreis brutto von einem Kombiartikel aus den Childs
	// netto macht keinen Sinn, da mehrere Steuersätze beteiligt sind!
	function berechne_bruttopreis_von_kombiartikel($offene_produkt_kombi_id)
	{
		$gesamtpreis_brutto=0;
		$sql="SELECT offener_bon.ID, offener_bon.NAME, TAXCAT, RATE as tax_rate, stueck, PRICESELL 
				from offener_bon 
				LEFT JOIN taxes ON TAXCAT=taxes.ID
				WHERE has_parent='$offene_produkt_kombi_id'";
		$Q1=mysql_query($sql);
		if (! $Q1) echo mysql_error();
		while ($row1=mysql_fetch_assoc($Q1))
		{
			$line_id=$row1['ID'];
			$netto_preis=$row1['PRICESELL'];
			$tax_rate=$row1['tax_rate'];
			$stueck=$row1['stueck'];
			list($brutto_einzel, $brutto_summe, $steuer, $steuer_summe)=berechne_bruttopreis($netto_preis, $tax_rate, $stueck);
			$gesamtpreis_brutto+=$brutto_einzel;
		}
		$sql="UPDATE offener_bon SET PRICESELL='".$gesamtpreis_brutto."' WHERE ID='$offene_produkt_kombi_id'";
		mysql_query($sql);
		return $gesamtpreis_brutto;
	}
	
	// Wenn ein Kombiprodukt geändert wird, (Beilagen)
	// und es mehr als ein Stück ist, dann wird das Produkt in 2 Produkte aufgeteilt
	// einmal ein Stück und einmal der Rest
	function ein_kombiprodukt_wegsplitten($parent_produkt_id)
	{
		$currentUserId=$_SESSION['userId'];
		$Q1=mysql_query("SELECT * FROM offener_bon WHERE ID='".$parent_produkt_id."'");
		while ($row1=mysql_fetch_assoc($Q1))
		{
			if ($row1['stueck']>1)
			{
				echo "Stück ist größer als 1";
				$neue_stueck=$row1['stueck']-1;
				
				$dbId=$parent_produkt_id;
				$origData=mysql_fetch_array(mysql_query("SELECT * FROM offener_bon WHERE ID = ".$dbId.""));
				$name=$origData['NAME'];
				$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 = ".$origData['PRICESELL'].", 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 = '".$neue_stueck ."', tax_rate = '".$origData['tax_rate']."', beilagen_aenderung_minus = '".$origData['beilagen_aenderung_minus']."', 
									beilagen_aenderung_plus = '".$origData['beilagen_aenderung_plus']."', article_art_id = '".$origData['article_art_id']."', 
									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']."',
									benutzer_id = '".$currentUserId."', has_childs = '".$origData['has_childs']."'");
				
				if(!$insQl) 
				{
					writeSitposLog(basename( __FILE__)."*+* ". __LINE__ , "Datenbank Error: ".mysql_error());
					echo mysql_error();
				}
				else {
					
					$insertedId=mysql_insert_id();
					// 2 Sterne an den geänderten Artikel hängen
					$sql="UPDATE offener_bon SET PRINTNAME='".mysql_real_escape_string($name." **")."' WHERE ID = ".$dbId."";
					echo $sql;
					mysql_query($sql);
					
					// 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 = ".$origData['PRICESELL'].", CATEGORY = '".$origData['CATEGORY']."', 
									TAXCAT = '".$origData['TAXCAT']."', IMAGE = '".$origData['IMAGE']."', DISPLAY = '".$origData['DISPLAY']."', 
									VARPRICE = '".$origData['VARPRICE']."', printname = '".$origData['printname']."', 
									NEGATIVEPRICE = '".$origData['NEGATIVEPRICE']."', PRODUKTORDER = '".$origData['PRODUKTORDER']."', 
									SICHTBAR = '".$origData['SICHTBAR']."', supplyprint = '".$origData['supplyprint']."', articlePrinted = 0, 
									stueck = '".$neue_stueck ."', tax_rate = '".$origData['tax_rate']."', beilagen_aenderung_minus = '', 
									beilagen_aenderung_plus = '', article_art_id = '".$origData['article_art_id']."', benutzer_id = '".$currentUserId."',
									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");
					}
					
					$updQl=mysql_query("UPDATE offener_bon SET stueck = 1 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 = 1 WHERE has_parent = ".$dbId." ");
					berechne_bruttopreis_von_kombiartikel($dbId);
					berechne_bruttopreis_von_kombiartikel($insertedId);
					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;
				}
				
			}
		}
	}
	
	function reini_debug($fehler="")
	{
		echo "<script> alert ('".$fehler."') </script>";
	}
	
	# DEP exportieren
	function getReportDataExportProtocol($callFrom=false){
		if(!isset($_SESSION)){session_start();}
		
		$tableCol="dep.datum_zeit";
		$sqlDateWhere=getReportDateWhere($tableCol, 'reports');
		
		$dateWhere=$sqlDateWhere[0];		
		$whereInfo=$sqlDateWhere[1];
	
		if(isset($_POST['reportTarget']) && $_POST['reportTarget'] != "")	$reportTarget=$_POST['reportTarget'];
		else if($callFrom=='backupRunDepToFile'){		
			$reportTarget='backupRunDepToFile';
		}
		else $reportTarget=false;
		
		$belege_all=array();
		
			# den startbeleg auslesen
			
		$getStartbeleg=mysql_fetch_array(mysql_query("SELECT bon_id FROM abschluss_belege ORDER BY bon_id ASC LIMIT 1"));
		
		if(!$getStartbeleg['bon_id']) $getStartbeleg['bon_id']=0;
		
		$sigStartbeleg=$getStartbeleg['bon_id'];
		if($dateWhere == '') $addWehre='WHERE beleg_nr >= '.$getStartbeleg['bon_id'].' ';
		else  $addWehre=' AND beleg_nr >= '.$getStartbeleg['bon_id'].' ';
		
		$xQl=mysql_query("SELECT * FROM dep ".$dateWhere.$addWehre." ORDER BY beleg_nr");
		
		while($rowQl=mysql_fetch_array($xQl)){
			$dDate = strtotime( $rowQl['datum_zeit'] );
			$depDate=date( 'Y-m-d', $dDate )."T".date( 'H:i', $dDate )."_";
			$belegStr=$rowQl['kassen_id']."_".$rowQl['beleg_nr']."_".$depDate.$rowQl['betr_satz_norm']."_".$rowQl['betr_satz_erm_1']."_".$rowQl['betr_satz_erm_2']."_".$rowQl['betr_satz_null']."_".$rowQl['betr_satz_besonder']."_".$rowQl['umsatz_zaehler']."_".$rowQl['zertif_nr']."_".$rowQl['signatur_vorigerbeleg'];
			
			if($rowQl['signjws'] == "" || $rowQl['signjws'] == 'unsigniert'){				
				array_push($belege_all, $belegStr);
			}
			else{
				array_push($belege_all, $rowQl['signjws']);
			}
		
		}
		
		$signaturZert=false;
		$zertifizierungsStellen=false;
		
		if(defined('SIGNATUR_MODUS') && strtolower(SIGNATUR_MODUS) == 'com' && defined('ZERTIFIKATS_NR') && ZERTIFIKATS_NR > 100){
			$cardInfo = new COM('ATrustRegistrierkasseCom.Registrierkasse');
			$ret=$cardInfo->Initialize;

			$retInfo=$cardInfo->LoadInfo;

			$signaturZert=$cardInfo->Certificate;
			$zertifizierungsStellen=$cardInfo->IssuerCertificate;

		}
		else if(defined('SIGNATUR_MODUS') && strtolower(SIGNATUR_MODUS) != 'com' && defined('ZERTIFIKATS_NR') && ZERTIFIKATS_NR > 100){
			$commandZert="C:\sitpos\_rkExe\ATrustRegistrierkasseExe.exe --cardinfo";		
			exec($commandZert, $outputZert, $error_codeZert);
			
			$cardInfo=explode(";", $outputZert[0]);
			$signaturZert=$cardInfo[2];
			$zertifizierungsStellen=array($cardInfo[3]);
			
		}
		
		$dData=array("Signaturzertifikat" => $signaturZert, "Zertifizierungsstellen" => $zertifizierungsStellen, "Belege-kompakt" => $belege_all) ;
		$dataRes=json_encode(array("Belege-Gruppe" => array($dData)));

		if($reportTarget == 'screen'){
			$savePath="docs/reports/depExport.json";		
			file_put_contents($savePath, $dataRes);

			echo "<a href='".$savePath."' download='DEP Export ".date('Y-m-d H-i').".json'>
						<button  class='button_none_float button_gross orange kassenAbschlBut' style='display:block; margin:5px auto;'>Dep Speichern</button>
					</a><br /><br /><br />
					<hr /><input type='hidden' value=' display success' />"; // .$dataRes;
			echo "Anzahl der Belege :". count($belege_all);
		}
		
				
		else if($reportTarget == 'backupRunDepToFile')
		{	
			$dataPath=urldecode(AUTOMATISCH_BACKUP_PFAD);
			$savePath=$dataPath. "/depBackup_".date('Ymd_His').".json";
			//$savePath=__dir__ . "/docs/dep_backup/depBackup_".date('Ymd_His').".json";
			
			if (is_writable($savePath))
			{
				$return_code=file_put_contents($savePath, $dataRes);	
				if ($return_code)
					echo "Fehler beim DEP Backup";
				else
					echo "OK";
			}
			else echo "Pfad ist nicht schreibbar!";
		}
	}
	
	function run_auto_backup_command($callFrom=false){
		sitpos_welt_anzeigen("Backup wird durchgefuehrt ...");
		ini_set('max_execution_time', 0);
		$dataPath=urldecode(AUTOMATISCH_BACKUP_PFAD);
		
		if (preg_match("/^[a-z]:[\\ | \/]*/i", $dataPath)) {
				# erkennen hier externes Laufwerk, Stick, ....
			$filename=$dataPath.KASSA_ID."_backup_".date('Y_m_d_Hi').".sql";
		}
	
		else $filename=__dir__ . "/".$dataPath.KASSA_ID."_backup_".date('Y_m_d_Hi').".sql";
		
		$checkLocation=getenv("HOMEPATH");
		if(preg_match("/users\\\kp_/i", $checkLocation)){
				$command="e:\\Programme\\xampp\\mysql\\bin\\mysqldump -u ".SQL_USER." -p".SQL_PW." ".SQL_DB." --add-drop-database >$filename";
		}
		else {
			$command="c:\\xampp\\mysql\\bin\\mysqldump -u ".SQL_USER." -p".SQL_PW." ".SQL_DB." --add-drop-database >$filename";
		}
		$output=array();
		exec($command, $output, $error_code);
		
		if(defined('LAENDERKENNUNG_DE') && strtolower(LAENDERKENNUNG_DE) == 'a'){
			//require_once("ajax_funktionen_kp.php");
			$runDepToFile=getReportDataExportProtocol('backupRunDepToFile');
		}
		
		if($callFrom == 'kassenabschluss'){
			return json_encode(array($dataPath, $output, $error_code, $filename));
		}
		else echo json_encode(array($dataPath, $output, $error_code, $filename));
		ini_set('max_execution_time', 30);
	}
	
	
	function a4_lieferschein_drucken($ls_nr)
	{
		
		$printRes=lieferschein_ausdrucken_a4_pdf($ls_nr, false);
		if ($printRes[1]==='printerPrint') $printResult="Target: Printer nicht supported - Bildschirm Druck einstellen";
		else
		{
			$printResult="Lieferschein Nr.".$printRes[3]." erstellt.".$printRes[1].$printRes[4];
			$filename = $printRes[4];
		
			echo "<script>window.open('".$filename."', '_blank')</script>";
		}
	}
	
	// Wen die Abholschein Nummer höher ist, dann zurücksetzen - Küchenbildschirm
	function abholschein_nummer_zuruecksetzen()
	{
		$nummer=false;
		$sql="select abholschein_nr from fortlaufende_nummern WHERE id='1'";
		$sql_nummern = mysql_query($sql);
		if (! $sql_nummern)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($row_nummern=mysql_fetch_assoc($sql_nummern))
		{
			$abholschein_nr=$row_nummern['abholschein_nr'];
			if ($abholschein_nr >= intval(KUECHE_ABHOLSCHEIN_MAX_NUMMER))
			{
				mysql_query("UPDATE fortlaufende_nummern SET abholschein_nr='1' WHERE id='1'");
			}
		}
		return($abholschein_nr);
	}
	
	// Funktion liest das Betriebssystem aus und gibt den String zurück
	function getOS() { 
    $user_agent     =   $_SERVER['HTTP_USER_AGENT'];
    $os_platform    =   "Unknown OS Platform";
    $os_array       =   array(
                            '/windows nt 10/i'     =>  'Windows 10',
                            '/windows nt 6.3/i'     =>  'Windows 8.1',
                            '/windows nt 6.2/i'     =>  'Windows 8',
                            '/windows nt 6.1/i'     =>  'Windows 7',
                            '/windows nt 6.0/i'     =>  'Windows Vista',
                            '/windows nt 5.2/i'     =>  'Windows Server 2003/XP x64',
                            '/windows nt 5.1/i'     =>  'Windows XP',
                            '/windows xp/i'         =>  'Windows XP',
                            '/windows nt 5.0/i'     =>  'Windows 2000',
                            '/windows me/i'         =>  'Windows ME',
                            '/win98/i'              =>  'Windows 98',
                            '/win95/i'              =>  'Windows 95',
                            '/win16/i'              =>  'Windows 3.11',
                            '/macintosh|mac os x/i' =>  'Mac OS X',
                            '/mac_powerpc/i'        =>  'Mac OS 9',
                            '/linux/i'              =>  'Linux',
                            '/ubuntu/i'             =>  'Ubuntu',
                            '/iphone/i'             =>  'iPhone',
                            '/ipod/i'               =>  'iPod',
                            '/ipad/i'               =>  'iPad',
                            '/android/i'            =>  'Android',
                            '/blackberry/i'         =>  'BlackBerry',
                            '/webos/i'              =>  'Mobile'
                        );
		foreach ($os_array as $regex => $value) { 

			if (preg_match($regex, $user_agent)) {
				$os_platform    =   $value;
			}
		}   
		return $os_platform;
	}

	// Funktion gibt bei Mobilen Geräten true zurück, ansonsten false
	function is_mobile()
	{
		$os_version=getOS();
		if ($os_version == "Android") return true;
		else return false;
	}
	
	
	
	function check_login($seiten_adminlevel=0, $return_on_error=false, $pageType=false)
	{		
		#session_start();
		
		$checkLevel=mysql_fetch_array(mysql_query("SELECT wert FROM konfiguration WHERE name = '".$pageType."' "));
		
	#	return $checkLevel[0]." -- ".$pageType;
		
		if(isset($_SESSION["userName"]) && $_SESSION["userName"] !='' && $_SESSION["userId"] >0){
			$currentUserName=$_SESSION["userName"];
			$currentUserId=$_SESSION["userId"];
		#	if(isset($_SESSION["ist_admin"]) && $_SESSION["ist_admin"] == true ){
			if($_SESSION["userLevel"] >= $checkLevel[0]){
				return true;			
			}
			else if($pageType == 'kassenabschluss'){
				if($_SESSION["userLevel"] >= ENABLERKEY_KASSENABSCHLUSS ){
					return true;
				}
				else {
					session_destroy();
					header('Location: http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/') . '/index.php');
					die();
				}
			}
			else if( $pageType == 'standardUser' ){
				return true;			
			}
			else {
				session_destroy();
				header('Location: http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/') . '/index.php');
				die();
			}	
		}
		else {
		
			session_destroy();
			header('Location: http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/') . '/index.php');
		}
		
	}
	
	
	
	function get_name_for_room($id)
	{
		$tisch_name=false;
		$sql="select tischName from tische WHERE id='".$id."'";
		$sql_tische = mysql_query($sql);
		if (! $sql_tische)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($row_tisch=mysql_fetch_assoc($sql_tische))
		{
			$tisch_name=$row_tisch['tischName'];
		}
		return($tisch_name);
	}
	
	function get_name_for_verkaufer_id($id)
	{
		$benutzer_name=false;
		$sql="select name from benutzer WHERE id='".$id."'";
		$sql_benutzer = mysql_query($sql);
		if (! $sql_benutzer)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($row_benutzer=mysql_fetch_assoc($sql_benutzer))
		{
			$benutzer_name=$row_benutzer['name'];
		}
		return($benutzer_name);
	}
	
	function get_drucker_name_for_drucker_id($id)
	{
		$drucker_name=false;
		$sql="select funktion from drucker WHERE drucker_id='".$id."'";
		$sql_benutzer = mysql_query($sql);
		if (! $sql_benutzer)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($row_benutzer=mysql_fetch_assoc($sql_benutzer))
		{
			$drucker_name=$row_benutzer['funktion'];
		}
		return($drucker_name);
	}
	
	// Funktion sucht die express zahlart aus dem Table heraus
	function get_express_zahlart()
	{
		$express_zahlart=false;
		$sql="select Name from zahlungsart WHERE express_zahlart=TRUE";
		$sqlQ = mysql_query($sql);
		if (! $sqlQ)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($rowQ=mysql_fetch_assoc($sqlQ))
		{
			$express_zahlart=$rowQ['Name'];
		}
		return($express_zahlart);
	}
	
	function menue_anzeigen($warenkorb_anzeigen=false)
	{
		$displayMobile=false;
		
		$uLevel=$_SESSION['userLevel'];
		
		if(isset($_SESSION['requested_resolution']) && ($_SESSION['requested_resolution'] == 'handy' || $_SESSION['requested_resolution'] == 'tablet')){
				$displayMobile=true;
			}

		if(isset($_SESSION['userLevel']) && $_SESSION['userLevel'] >= 2) $ist_admin= true;
		else $ist_admin = false;
		
		if(defined('AUFTRAG_LIEFER_TERMIN_DRUCKEN') && strtolower(AUFTRAG_LIEFER_TERMIN_DRUCKEN) == 'ja'){ echo "<script>auftragsLieferterminDrucken = 'ja';</script>"; }
		else { echo "<script>auftragsLieferterminDrucken = false; </script>"; }
			
		
		if(defined('FUNKTION_BUTTON_LIEFERSCHEIN') &&  strtolower(FUNKTION_BUTTON_LIEFERSCHEIN) == 'ja'){ 
			$getLieferscheinMenu="<li><a href='lieferscheine.php'>Lieferscheine</a></li>";
			
			
		}	
		else{ 
			$getLieferscheinMenu="";
		}
		
		echo '<div id="menu" class="menue">';
		echo '<div id="menu_links_slider">
				<img id="menuReiterLinks" class="orange button" src="images/menuIcon.png" />
					<div id="menue_links_sliderCont" class="menue_links_sliderCont" >
						<ul id="menu-bar">';
			
				echo			'<li  class="active menuLeft"><a id="mainMenuLeftUser" href="#">Menü Benutzer</a>
								<ul>';
					if($displayMobile==false){			
						    if($uLevel >= ENABLERKEY_EINAUSZAHLUNG) echo '<li id="menuLiEinAusZahl" class="active"><a href="ein_aus_zahlungen.php">Ein- Auszahlung buchen</a></li>';
							if($uLevel >= ENABLERKEY_BONJORNAL) 	echo '<li id="menuLiBonjournal" class="active"><a href="bonjournal_bons.php">Bonjournal</a></li>';
							if($uLevel >= ENABLERKEY_LIEFERSCHEINE)		echo $getLieferscheinMenu.'';
							if(defined('TELEFON_ANRUFE_ANZEIGEN') &&  strtolower(TELEFON_ANRUFE_ANZEIGEN) == 'ja'){ 
								echo '<li><a href="telefonanrufe_sITeditor.php">Telefon Anrufe</a></li>';
							}
							if($uLevel >= ENABLERKEY_KASSENABSCHLUSS) echo '<li><a href="kassenabschluss.php">Kassenabschluss</a></li>';
							if($uLevel >= ENABLERKEY_KASSENBERICHT) echo '<li><a href="kassenbericht.php">Kassenbericht</a></li>';
							if($uLevel >= ENABLERKEY_BENUTZER_ABRECHNUNG) echo '<li><a href="kassenabrechnung_user.php">Benutzer Abrechnung</a></li>';
							if($uLevel >= ENABLERKEY_BENUTZER_VERSCHIEBEN && strtolower(GASTRO_VERSION)=='ja')
									echo '<li><a href="benutzer_verschieben.php">Benutzer Tische übergeben</a></li>';
							if($uLevel >= ENABLERKEY_BENUTZER_MONATSBELEG &&(defined('LAENDERKENNUNG_DE') && LAENDERKENNUNG_DE == 'A')){
									echo '<li><a href="abschlussbeleg_erstellen.php">Abschluss Beleg erstellen</a></li>';
							}
							if($uLevel >= ENABLERKEY_BENUTZER_FINANZEXPORT) echo '<li><a href="export_finanzdaten.php">Export Finanz Daten</a></li>';				
							if($uLevel >= ENABLERKEY_DATENSICHERUNG) echo '<li><a href="datensicherung.php">Datensicherung</a></li>';
							if($uLevel >= ENABLERKEY_ARBEITSZEITEN_SCHREIBEN) echo '<li><a href="arbeitszeiten_schreiben.php">Arbeitszeiten</a></li>';
					}
							echo '<li><a class="logOffButton" href="user_logoff.php" >Logout </a></li>
								</ul>
							</li>';
			
			if(defined('BASIS_LIGHT_LIZENZ_VORHANDEN') && strtolower(BASIS_LIGHT_LIZENZ_VORHANDEN) == 'ja' ){
				$konfN="'ENABLERKEY_ADMIN_WARENGRUPPEN', 'ENABLERKEY_ADMIN_PRODUKTE', 
						'ENABLERKEY_ADMIN_UMST_SAETZE', 'ENABLERKEY_ADMIN_ZAHLUNGSARTEN', 'ENABLERKEY_ADMIN_STORNOGRUENDE', 
						'ENABLERKEY_ADMIN_BENUTZER', 'ENABLERKEY_ADMIN_KUNDEN', 'ENABLERKEY_ADMIN_AUSWERTUNGEN', 'ENABLERKEY_ADMIN_KONFIGURATION',
						'ENABLERKEY_ADMIN_DATEN_IMPORT', 'ENABLERKEY_ADMIN_GUTSCHEINE'";
			}
			else{
				if (defined('BASIS_LIZENZ_VORHANDEN') && strtolower(BASIS_LIZENZ_VORHANDEN) )
				{
				$konfN="'ENABLERKEY_ADMIN_WARENGRUPPEN', 'ENABLERKEY_ADMIN_PRODUKTE', 'ENABLERKEY_ADMIN_ARTIKEL_ARTEN', 'ENABLERKEY_ADMIN_COMBIARTIKEL', 
						'ENABLERKEY_ADMIN_UMST_SAETZE', 'ENABLERKEY_ADMIN_ZAHLUNGSARTEN', 'ENABLERKEY_ADMIN_STORNOGRUENDE', 
						'ENABLERKEY_ADMIN_BENUTZER', 'ENABLERKEY_ADMIN_KUNDEN', 'ENABLERKEY_ADMIN_AUSWERTUNGEN', 'ENABLERKEY_ADMIN_KONFIGURATION',
						'ENABLERKEY_ADMIN_DATEN_IMPORT', 'ENABLERKEY_ADMIN_GUTSCHEINE', 'ENABLERKEY_ADMIN_HAPPYHOUR'";
				}
				else
				{
					// Keine Lizenz vorhanden
					$konfN="'ENABLERKEY_ADMIN_WARENGRUPPEN', 'ENABLERKEY_ADMIN_PRODUKTE', 
						'ENABLERKEY_ADMIN_UMST_SAETZE', 'ENABLERKEY_ADMIN_ZAHLUNGSARTEN', 'ENABLERKEY_ADMIN_STORNOGRUENDE', 
						'ENABLERKEY_ADMIN_BENUTZER', 'ENABLERKEY_ADMIN_KUNDEN', 'ENABLERKEY_ADMIN_AUSWERTUNGEN', 'ENABLERKEY_ADMIN_KONFIGURATION',
						'ENABLERKEY_ADMIN_DATEN_IMPORT', 'ENABLERKEY_ADMIN_GUTSCHEINE'";
					
				}
			}
			$query="SELECT wert FROM konfiguration WHERE name IN(".$konfN.") AND ".$uLevel." >= wert";
			$query1="SELECT wert FROM konfiguration WHERE name IN AND ".$uLevel." >= wert";
			$checkAdminRechte=mysql_query($query);
			
			if(defined('GUTSCHEIN_LIZENZ') && strtolower(GUTSCHEIN_LIZENZ) == 'ja' && defined('GUTSCHEIN_KARTE_FUNKTION') 
					&& strtolower(GUTSCHEIN_KARTE_FUNKTION) == 'ja'){
				$gutscheinFunktion=true;
			}
			else $gutscheinFunktion=false;
			
			$numberEnabled=mysql_num_rows($checkAdminRechte);
			
			# das admin menu wird nur angezeigt wenn min 1 adminMenu punkt für den jeweiligen user freigegeben ist, unabhängig ob der benutzer admin ist od nicht

			if ($numberEnabled > 0 && $displayMobile==false){
				echo		'<li id="adminMenu" class="active menuRight"><a href="#">Menü Admin</a>
								<ul>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM != "ja")
									{
										if($uLevel >= ENABLERKEY_ADMIN_WARENGRUPPEN) echo '<li><a href="anlegen_categories.php">Warengruppen</a></li>';
										if($uLevel >= ENABLERKEY_ADMIN_PRODUKTE) echo '<li><a href="anlegen_produkte.php">Produkte</a></li>';
										if($uLevel >= ENABLERKEY_ADMIN_ARTIKEL_ARTEN && strtolower(GASTRO_VERSION) == 'ja' && 
													defined('BASIS_LIZENZ_VORHANDEN') && strtolower(BASIS_LIZENZ_VORHANDEN) == 'ja'){ 
														echo '<li><a href="anlegen_artikel_arten.php">Speisen Gänge</a></li>';
										}
										if($uLevel >= ENABLERKEY_ADMIN_COMBIARTIKEL && defined('BASIS_LIZENZ_VORHANDEN') && 
											strtolower(BASIS_LIZENZ_VORHANDEN) == 'ja'){
												echo '<li><a href="anlegen_combiartikel.php">Kombinations Produkte</a></li>';
										}	
									}
									//if($uLevel >= ENABLERKEY_ADMIN_UMST_SAETZE) echo '<li><a href="anlegen_steuern.php">Umsatzsteuersätze</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_ZAHLUNGSARTEN) echo '<li><a href="anlegen_zahlungsart.php">Zahlungsarten</a></li>';	
									if($uLevel >= ENABLERKEY_ADMIN_ZAHLUNGSTERMINAL && defined('ECKARTE_LIZENZ')) echo '<li><a href="anlegen_ec_terminal.php">EC Karten Terminal</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_STORNOGRUENDE) echo '<li><a href="anlegen_storno_grund.php">Stornogr&uuml;nde</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_BENUTZER) echo '<li><a href="anlegen_benutzer.php">Benutzer</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_KUNDEN && defined('BASIS_LIZENZ_VORHANDEN') 
											&& strtolower(BASIS_LIZENZ_VORHANDEN) == 'ja') 
									{
										echo '<li><a href="anlegen_kunden_sITeditor.php">Kunden</a></li>';
									}
									
									if($uLevel >= ENABLERKEY_ADMIN_AUSWERTUNGEN || $uLevel >= ENABLERKEY_BENUTZER_KASSENBUCH){
										echo '<li><a href="auswertungen.php">Auswertungen</a></li>';
									}
									if($uLevel >= ENABLERKEY_ADMIN_KONFIGURATION) echo '<li><a href="anlegen_konfiguration_gui.php">Konfiguration</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_DATEN_IMPORT) echo '<li><a href="daten_import.php">Daten Import</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_GUTSCHEINE && $gutscheinFunktion == true && defined('GUTSCHEIN_LIZENZ') && 
											strtolower(GUTSCHEIN_LIZENZ) == 'ja') echo '<li><a href="anlegen_gutscheine.php">Gutschein Funktion</a></li>';
								if(defined('BASIS_LIZENZ_VORHANDEN') && strtolower(BASIS_LIZENZ_VORHANDEN) == 'ja'){
									if($uLevel >= ENABLERKEY_ADMIN_HAPPYHOUR) echo '<li><a href="anlegen_happyhour.php">Zeitabhängige Preise Profil</a></li>';
								}
					
					echo		'</ul>
							</li>';	
					if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja")
					{
					echo		'<li id="adminMenu" class="active menuRight"><a href="#">Filialsystem</a>
								<ul>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja") echo '<li><a href="import_xml.php">Synchronisieren</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_WARENGRUPPEN) echo '<li><a href="anlegen_categories.php">Warengruppen</a></li>';
									if($uLevel >= ENABLERKEY_ADMIN_PRODUKTE) echo '<li><a href="anlegen_produkte.php">Produkte</a></li>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja") echo '<li><a href="anlegen_inventur.php">Inventur</a></li>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja") echo '<li><a href="anlegen_filialsystem_lagerstand.php">Lagerstand</a></li>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja") echo '<li><a href="anlegen_filialsystem_einkauf.php">Einkauf</a></li>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja") echo '<li><a href="anlegen_filialsystem_angebot.php">Angebot</a></li>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja") echo '<li><a href="anlegen_filialsystem_auftrag.php">Auftrag</a></li>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja") echo '<li><a href="anlegen_filialsystem_lieferschein.php">Lieferschein</a></li>';
									if(FILIALSYSTEM_IST_FILIALSYSTEM == "ja" && FILIALSYSTEM_ANZEIGEN_INVENTUR == "ja") echo '<li><a href="anlegen_filialsystem_rechnung.php">Rechnung</a></li>';
									
									echo '</ul>
								</li>';	
					}
				}			
						
					if(strtolower(GASTRO_VERSION) == 'ja' && basename($_SERVER['PHP_SELF'])=="tische.php" ){
							//	echo '<li id="salesMenuBut" class="active menuButSales"><a href="kassieren.php">bonieren</a></li>';
							//	<a href='kassieren.php'><button class='button_none_float menuCenterLayoutTischeBut orange'>Bonieren</button></a>
						$menuGastroCenterDiv="<div class='menuGastroTischeCenter'>
								<div class='menuGastroTischeCenterInnerDiv'>
									<div class='menuGastroTischeCenterListDiv'>
										
										<div class='cclear'></div>
									</div>
								</div>
							</div>";

					}
					else{

						$menuGastroCenterDiv="";

						if(basename($_SERVER['PHP_SELF']) != "kassieren.php" && strtolower(GASTRO_VERSION) != 'ja') 
							echo '<li id="salesMenuBut" class="active menuButSales"><a href="kassieren.php">Verkauf</a></li>';
						else if(basename($_SERVER['PHP_SELF']) != "tische.php" && strtolower(GASTRO_VERSION) == 'ja')
							echo '<li id="salesMenuBut" class="active menuButSales"><a href="tische.php">Tisch Auswahl</a></li>';
					}
				
				echo	'</ul>';   # äusserstes menu list element ende 
				
				echo	'</div>
				
		</div>';	# menu  ende 
				

		
			if(basename($_SERVER['PHP_SELF'])=="kassieren.php" && (strtolower(GASTRO_VERSION) != 'ja' && strtolower(WARENKOERBE_ABLEGEN) != 'ja')){
								echo "<div id='menuDivLeft' class='menuDivLeft' >
									<div id='uhrzeit' class='bonierenAufDiv'></div>
									</div>";
								echo "<div id='menue_warenkoerbe' class='menu_warenkoerbe' >";
									if ($warenkorb_anzeigen){  zeige_warenkoerbe(); 			}
								echo "</div>";
			}
			else echo "<div id='menuDivLeft' class='menuDivLeft' ></div>";
		
		
		if((basename($_SERVER['PHP_SELF'])=="kassieren.php" || basename($_SERVER['PHP_SELF'])=="tische.php") && strtolower(GASTRO_VERSION) == 'ja' && ist_kassa_offen() > 0 ){
			if(!isset($_SESSION['gastroTisch'])){
					$tQl=mysql_fetch_array(mysql_query("SELECT MIN(id) FROM tische WHERE raum = (SELECT id FROM raum ORDER BY reihenfolge ASC LIMIT 1)"));
					$currentTable=$tQl[0];
					$_SESSION['gastroTisch']=$currentTable;
			}
			else $currentTable=$_SESSION['gastroTisch'];
			
			echo "<div id='menuDivLeft' class='menuDivLeft' >
						<input id='currentTableId' type='hidden' value=".$currentTable." />";
					if($displayMobile == false){
							preg_match('/\d+px/', SCHRIFT_DEFAULT, $match);
								if($match[0]== true){
									$fontS=preg_replace('/\D+/', '', $match[0]);
									if($fontS > 16 && $fontS <= 20){	$setFontH='style="font-size:'. .85 .'em;  "';	}
									else if($fontS > 20 ){	$setFontH='style="font-size:'. .8 .'em;  "';}
									else if($fontS <= 16 ){	$setFontH='style="font-size:'. 1.1 .'em;  "';	}
									else $fontS="";
								}
							
							echo	"<div ".$setFontH." class='bonierenAufDiv'>
										<div>Aktueller Tisch:</div>
											<div>".get_name_for_room($currentTable)."</div>	
											<div id='uhrzeit'></div>
									</div>";
					}
					
			echo		"</div>";
			
			
			
				
			if(basename($_SERVER['PHP_SELF'])=="kassieren.php"){
				$buttonWidth='width:22%;';
				if(defined('BUTTON_ZUTISCHE_OHNE_DRUCKEN') && strtolower(BUTTON_ZUTISCHE_OHNE_DRUCKEN) == 'ja'){
						$toTableNoPrint="<button id='' class='button_none_float menuGastroKassierenCenterButTischeNoPrint' style='".$buttonWidth."'
												onclick=\"printGastroSupply('', 'moveWithoutPrint')\">&nbsp;</button>";
					
					}
					else{ 
						$toTableNoPrint="";
						$buttonWidth='width:30.5%;';
					}
				
			
					if($displayMobile==true) $gastroTableDisplay="<div class='menuGastroKassierenTableDisplay'>".get_name_for_room($currentTable)."</div>";
					else $gastroTableDisplay="";
					echo	"<div class='menuGastroKassierenContainer' >
							<div class='menuGastroKassierenCenterInnerDiv'>
								<div class='menuGastroKassierenCenterListDiv' >
									<button id='' class='button_none_float menuGastroKassierenCenterButSplit' style='".$buttonWidth."'
										onclick='openSplitBon()' >&nbsp;</button>
									<button id='' class='button_none_float menuGastroKassierenCenterButTische' style='".$buttonWidth."'
												onclick=\"printGastroSupply('', '')\">&nbsp;</button>
									".$toTableNoPrint."
									<button id='' class='button_none_float menuGastroKassierenCenterButMove'  style='".$buttonWidth."'
										onclick='setMoveTableTo()' >&nbsp;</button>
									
								</div>
							</div>
						</div>
						".$gastroTableDisplay."";
		#		}
			}
		}
		
		else if((basename($_SERVER['PHP_SELF'])=="kassieren.php" || basename($_SERVER['PHP_SELF'])=="wk_ablage.php") && strtolower(WARENKOERBE_ABLEGEN) == 'ja' 
					&& strtolower(GASTRO_VERSION) != 'ja' && ist_kassa_offen() > 0 ){
			
				$wkName=false;
				if(basename($_SERVER['PHP_SELF'])=="kassieren.php"){
					if(isset($_SESSION['ablageWarenkorb'])){
						$wkId=$_SESSION['ablageWarenkorb'];
						$wkName=mysql_fetch_array(mysql_query("SELECT displayName FROM warenkoerbe WHERE id=".$wkId." "));
					}
					else {

						echo "<script> location.href='wk_ablage.php';</script>";
					}
				if($wkName != false)
					$wkTxt="<div class='aktuellerWarenkorbDisplay'>".$wkName[0]."</div>"; 
				else $wkTxt="";

					echo	"<div class='menuGastroKassierenContainer' >
							<div class='menuGastroKassierenCenterInnerDiv'>
								<div class='menuGastroKassierenCenterListDiv' >
									".$wkTxt."
									<a href='wk_ablage.php'><button id='' class='button_none_float orange menuGastroKassierenCenterBut' >Warenkörbe wählen</button></a>
								</div>
							</div>
						</div>";
				
				}
				
			
		
		}
		
			# prüfen ob eine Expresszahlung nach Zahlart angelegt ist
			$exprZa=mysql_fetch_array(mysql_query("SELECT count(express_zahlart) AS exprZahlart FROM zahlungsart WHERE express_zahlart <> 0"));
			$exprZahl = false;
			if($exprZa['exprZahlart'] == 1) $exprZahl = true;
			else if ($exprZa['exprZahlart'] == 0 || $exprZa['exprZahlart'] > 1) $exprZahl = false;
			
			$countFbutton=0;
		
			if(defined('FUNKTION_BUTTON_LADEOEFFNEN') &&  strtolower(FUNKTION_BUTTON_LADEOEFFNEN) == 'ja'){ $ladeOeffnen="block"; $countFbutton++; }	
				else{ $ladeOeffnen='none';  }
			if(defined('FUNKTION_BUTTON_BEZAHLEN_EXPRESS') &&  strtolower(FUNKTION_BUTTON_BEZAHLEN_EXPRESS) == 'ja'){ $bezahlenExpress="block"; $countFbutton++;}
				else{ $bezahlenExpress='none';  }			
			if(defined('FUNKTION_BUTTON_BEZAHLEN_EXPRESS_ZAHLART') &&  strtolower(FUNKTION_BUTTON_BEZAHLEN_EXPRESS_ZAHLART) == 'ja' && $exprZahl == true ){ 
					$bezahlenExpressZahlart="block"; $countFbutton++;}
				else{ $bezahlenExpressZahlart='none';  }
			if(defined('FUNKTION_BUTTON_BON_REPRINT') &&  strtolower(FUNKTION_BUTTON_BON_REPRINT) == 'ja'){ $bonReprint="block"; $countFbutton++; }	
				else{ $bonReprint='none';  }
			if(defined('FUNKTION_BUTTON_EC_KARTE_REPRINT') &&  strtolower(FUNKTION_BUTTON_EC_KARTE_REPRINT) == 'ja'){ $ecReprint="block"; $countFbutton++; }	
				else{ $ecReprint='none';  }	
			if(defined('FUNKTION_BUTTON_CHANGE_PAY') &&  strtolower(FUNKTION_BUTTON_CHANGE_PAY) == 'ja'
							&& (isset($_SESSION['userLevel']) && $_SESSION['userLevel'] >= ENABLERKEY_CHANGE_PAY)){ 
						$zahlungChange="block"; $countFbutton++; }	 else{ $zahlungChange='none';  }
			if(defined('FUNKTION_BUTTON_CUSTOMER_TOBILL') &&  strtolower(FUNKTION_BUTTON_CUSTOMER_TOBILL) == 'ja'
					&& defined('BASIS_LIZENZ_VORHANDEN') && strtolower(BASIS_LIZENZ_VORHANDEN) == 'ja'){ $customerTobill="block";  $countFbutton++; }	
			else{ $customerTobill='none';  }
			
			if(defined('FUNKTION_BUTTON_DELETE_BON') &&  strtolower(FUNKTION_BUTTON_DELETE_BON) == 'ja'
					&& (isset($_SESSION['userLevel']) && $_SESSION['userLevel'] >= ENABLERKEY_OFFENENBON_LOESCHEN)){ 
					$delBonUse="block";  $countFbutton++;}	else{ $delBonUse='none'; }
			
			if(defined('BON_ZUSATZ_TEXT_BUTTON') && strtolower(BON_ZUSATZ_TEXT_BUTTON) == 'ja'){ $bonAddTxt="block";   $countFbutton++;	} else { $bonAddTxt="none";	}
			
			if(defined('FUNKTION_BUTTON_ZIFFERNFELD_ANZEIGEN') &&  strtolower(FUNKTION_BUTTON_ZIFFERNFELD_ANZEIGEN) == 'ja'){ $displayNumpad="block";  $countFbutton++;}	else{ $displayNumpad='none'; }
			if(defined('FUNKTION_BUTTON_LIEFERSCHEIN') &&  strtolower(FUNKTION_BUTTON_LIEFERSCHEIN) == 'ja'
					&& defined('LIEFERSCHEIN_LIZENZ') && strtolower(LIEFERSCHEIN_LIZENZ) == 'ja'){  
							$displayLieferschein="block";  $countFbutton++;  }else{  	$displayLieferschein='none';  }
			if(defined('FUNKTION_BUTTON_RECHNUNGS_VORDRUCK') &&  strtolower(FUNKTION_BUTTON_RECHNUNGS_VORDRUCK) == 'ja')
					{  $displayInvPreprint="block";  $countFbutton++;  }	 else{  	$displayInvPreprint='none';  }
			if($gutscheinFunktion == true){
					$displayGutschKarte="block";  $countFbutton++; } 	else{  	$displayGutschKarte='none';  }
			

			$deleteBonTxt="<p>Bestätigen Sie um den gesamten Bon zu löschen.<p>"; 
		if(basename($_SERVER['PHP_SELF'])=="kassieren.php"){	
		#	if($countFbutton == 6 && $displayMobile==true ) $styleFbut="width:11%; height:65%; margin-top:1%;";
			if ($countFbutton == 6 && $displayMobile==true) $styleFbut="width:15.5%; height:65%;  margin-top:1%; ";
			else if ($countFbutton == 5 && $displayMobile==true) $styleFbut="width:19%; height:65%;  margin-top:1%; ";
			else if ($countFbutton == 4 && $displayMobile==true) $styleFbut="width:23.5%; height:67%;  margin-top:1%; ";
			else if ($countFbutton == 3 && $displayMobile==true) $styleFbut="width:30%; height:68%;  margin-top:1%; ";
			else if ($countFbutton == 2 && $displayMobile==true) $styleFbut="width:30%; height:68%; margin-top:1%; ";
			else if ($countFbutton == 1 && $displayMobile==true) $styleFbut="width:30%; height:68%; margin-top:1%; ";
			else if ($countFbutton == 7 && $displayMobile==true) $styleFbut="width:13%; height:62%; margin-top:1%; ";
			else if ($countFbutton == 8 && $displayMobile==true) $styleFbut="width:11%; height:62%; margin-top:1%; ";
			else if ($countFbutton > 8 && $displayMobile==true) $styleFbut="width:". (90/$countFbutton) ."%; height:62%; ";
			
			else if($countFbutton == 6 && $displayMobile==false ) $styleFbut="width:16%;";
			else if($countFbutton == 7 && $displayMobile==false ) $styleFbut="width:13.5%;";
			else if($countFbutton == 8 && $displayMobile==false ) $styleFbut="width:11.5%;";
			else if($countFbutton > 8 && $displayMobile==false ) $styleFbut="width:". (90/$countFbutton) ."%;";
			else $styleFbut="";
			
		#	writeLog(basename( __FILE__)." ". __LINE__ . "Anz But: ".$countFbutton.", ".$styleFbut." --- ".basename($_SERVER['PHP_SELF']));

		
			
			
			echo '<div id="menuDivRight" class="menuDivRight" >
					<button class="button orange funktionsButton displayNumpadButton" style="'.$styleFbut.' display:'.$displayNumpad.'" onclick="displayNumpad()"></button>
					
					<button class="button orange funktionsButton gutschKarteButton" style="'.$styleFbut.' display:'.$displayGutschKarte.'" onclick=\'gutscheinKarteBearbeiten("")\'></button>
					
					<button class="button orange funktionsButton kassenladeOeffnenButton" style="'.$styleFbut.' display:'.$ladeOeffnen.'" onclick="kassenladeOeffnen()"></button>
					<button class="button orange funktionsButton lieferscheinButton" style="'.$styleFbut.' display:'.$displayLieferschein.'" onclick="lieferscheinErstellen()"></button>
					<button class="button orange funktionsButton preprintInvButton" style="'.$styleFbut.' display:'.$displayInvPreprint.'" onclick="rechnungsVordruck()"></button>
					<img id="zahlungDisableImg" src="images/flatGray.png" />
					<button id="zahlungAbgeschlExprBut" class="button orange funktionsButton bezahlenExpressButton" style="'.$styleFbut.' display:'.$bezahlenExpress.'" onclick=\'zahlung_abgeschlossen("express")\'></button>';
					
			// Wenn das Schnellzahlen nach Zahlart eine Terminal zahlung ist, dann rufe ec karten zahlung auf
			$express_zahlart=get_express_zahlart();
			//echo $express_zahlart;
			if ($express_zahlart !== false && ist_zahlungsart_ec_terminal_enabled($express_zahlart))
			{
				
				echo '<button class="button orange funktionsButton bezahlenExpressZahlartButton" style="'.$styleFbut.' display:'.$bezahlenExpressZahlart.'" onclick=\'zahlung_abgeschlossen_ec("", "'.$express_zahlart.'", document.getElementById("zahlbetrag").value)\'></button>';
			}
			else
			{
				echo '<button class="button orange funktionsButton bezahlenExpressZahlartButton" style="'.$styleFbut.' display:'.$bezahlenExpressZahlart.'" onclick=\'zahlung_abgeschlossen("expressZahlart")\'></button>';
				
			}
			echo '<button class="button orange funktionsButton bonPrintButton" style="'.$styleFbut.' display:'.$bonReprint.'" onclick="reprintBon()"></button>
				  <button class="button orange funktionsButton ecPrintButton" style="'.$styleFbut.' display:'.$ecReprint.'" onclick="ec_reprintBon()"></button>
					<button class="button orange funktionsButton payChangeButton" style="'.$styleFbut.' display:'.$zahlungChange.'" onclick="changePayment(\'\')"></button>
					<button class="button orange funktionsButton deleteBonButton" style="'.$styleFbut.' display:'.$delBonUse.'"
								onclick=\'openGeneralDialog("stornoButton", "Gesamten Bon Löschen", "'.$deleteBonTxt.'", "wrapper")\' ></button>
					<button class="button orange funktionsButton addBonTxtButton" style="'.$styleFbut.' display:'.$bonAddTxt.'"
								onclick=\'openAddTxtModal("oOpen")\' ></button>
					<button class="button orange funktionsButton customerPlusButton" style="'.$styleFbut.' display:'.$customerTobill.'" onclick=\'openCutomerSearchDialog("optionSelect")\'></button>
				</div>	
				<div class="cclear"></div>';
				
			
					//	<div id="error_message" class="error_message" ></div>';   // wurde am unteren ende im product container gestellt
					// <button class="button" onclick="window.location.reload()">Reload Page</button>
					//	
					// <button class="button orange funktionsButton customerPlusButton" style="display:'.$customerTobill.'" 
					//	onclick=\'openGeneralDialog("billModalSearch", "Kundenname auf der Rechung vermerken.", "", "wrapper")\'></button>
		}
		
		else if(basename($_SERVER['PHP_SELF'])!="auswertungen.php"){
			$verrBut="";
			$menuWidth="";
			if(basename($_SERVER['PHP_SELF']) == "lieferscheine_verrechnen.php"){
				$zaQl=mysql_query("SELECT id, Name, standard FROM zahlungsart WHERE sichtbar = 1 ORDER BY reihenfolge");
				$zaSelect="<select id='lsVerrZahlungsSelect' class='zaSelect orange floatR' >
							<option value='' >Zahlung</option>";
				$zaIx=1;
				while($zaRow=mysql_fetch_array($zaQl)){

					$zaSelect.="<option value='".$zaIx."' >".$zaRow['Name']."</option>";
					$zaIx++;
				}
				$zaSelect.="</select>";
				
				
				
				$verrBut="<a href='lieferscheine.php'><button class='button_none_float orange floatR' style='margin:1% 15px 0 15px;' >Zurück zu Lieferscheine</button></a>
							".$zaSelect."
							<button onclick='lieferscheineVerrechnen()' class='button_none_float orange floatR' style='margin:1% 0 0 0;' >Lieferscheine Verrechnen</button>
							<div class='lsVerrA4Div floatR'>
								<label class='lsVerrA4CheckboxLabel' for='lsVerrA4Checkbox'> A4 Rech.</label><label class='cbLarge'><input type='checkbox' id='lsVerrA4Checkbox' /><span></span></label>
							</div>
							<button onclick='lieferscheineVerrechnenCheckAll()' class='button_none_float orange floatR' style='margin:1% 15px 0 0;' >Alle</button>";
				$menuWidth="style='width:90%; background:#fff;' ";
			}
			else if(basename($_SERVER['PHP_SELF']) == "anlegen_kunden.php"){
				global $backLink; 
				if($backLink == true){
					echo "<button class='button_none_float orange floatR ' style='margin:.5% 5% 0 0' onclick=\"location.href='kassieren.php'\">Zu Kassieren</button>";
				}
			}
			// Das hier dürfte der Standard sein, Menü ganz rechts für alle seiten, wo nichts anders definiert wurde
			echo '<div id="menuDivRight" class="menuDivRight" '.$menuWidth.'  >
				'.$verrBut;

			echo '</div>';
		
		}
		
		if(basename($_SERVER['PHP_SELF']) == "lieferscheine.php"){
			echo "<div id='menuDivRight' class='menuDivRight' >
						<a href='lieferscheine_verrechnen.php'><button class='button_none_float orange' style='margin:2% 0 0 0;' >Lieferscheine Verrechnen</button></a>
					</div>";
		}
		else if(basename($_SERVER['PHP_SELF']) == "lieferscheine_verrechnen.php"){
		/*	echo "<div id='menuDivRight' class='menuDivRight' >
						<button onclick='lieferscheineVerrechnen()' class='button_none_float orange' style='margin:2% 0 0 0;' >Lieferscheine Verrechnen</button>
						<a href='lieferscheine.php'><button class='button_none_float orange' style='margin:2% 0 0 0;' >Zurück zu Lieferscheine</button></a>
					</div>";
		*/
		}

		
		/*	else if(basename($_SERVER['PHP_SELF'])=="tische.php" || basename($_SERVER['PHP_SELF'])=="bonjournal_bons.php"){
				echo '<div id="menuDivRight" class="menuDivRight" >
						</div>';
			
			}
		*/	
		echo $menuGastroCenterDiv;
		echo '</div>';	# menu div ende
		
		echo "<div id='autologoffChecker'></div>";
	}

	// Function for basic field validation (present and neither empty nor only white space
	function IsNullOrEmptyString($question){
		return (!isset($question) || trim($question)==='');
	}

	function print_fehler($str)
	{
		echo '<script type="text/javascript">
			$( document ).ready(function() {
				$("#error_message").html("'.$str.'");
			});
		//	document.getElementById("error_message").innerHTML="'.$str.'";
			</script>';
	}

	function run_mysql_query($query, $erfolgsmeldung="", $fehlermeldung="")
	{
		$sql=$query;
		//echo $sql;
		if(mysql_query($sql))
		{
			if ($erfolgsmeldung=='') print_fehler ("erfolgreich");
			else print_fehler($erfolgsmeldung);
			$id=mysql_insert_id ();
			return($id);
		} 
		else
		{
			//echo "FEHLER: SQL Fehler $sql. " . mysql_error();
			if ($fehlermeldung!=='') print_fehler($fehlermeldung);
			print_fehler ("FEHLER: SQL Fehler $sql. " . mysql_error());
			echo ("FEHLER: SQL Fehler $sql. " . mysql_error());

		}
	}
	
	// Zeige den aktuellen offenen bon an, wird von 
	function offenen_bon_anzeigen($aktueller_bon, $callFrom=false)
	{
		$bonContent = "";
		
		if($callFrom=="splitBon"){
			$sql="SELECT offener_bon.id, name, pricesell, tax_rate, printname, stueck, kunden_id, beilagen_aenderung_minus, beilagen_aenderung_plus, 
					article_art_id, has_childs, has_parent, aus_ls_nr, bon_text AS bonAddedTxt, beilagen_prod_orig_preis, beilagen_sum_netto,
					beilagen_sum_brutto, beilagen_basispreis_key
					FROM offener_bon 
					LEFT JOIN bon_add_text ON offener_bon.bon_id = bon_add_text.offenerbon_id
					WHERE bon_id='".$aktueller_bon."' AND has_parent=0";
		}
		else $sql="SELECT offener_bon.id, name, pricesell, tax_rate, printname, stueck, kunden_id, beilagen_aenderung_minus, beilagen_aenderung_plus, 
					article_art_id, has_childs, has_parent, aus_ls_nr, bon_text AS bonAddedTxt, beilagen_prod_orig_preis, beilagen_sum_netto,
					beilagen_sum_brutto, beilagen_basispreis_key
					FROM offener_bon 
					LEFT JOIN bon_add_text ON offener_bon.bon_id = bon_add_text.offenerbon_id
					WHERE bon_id='".$aktueller_bon."' ";
		$sql_produkte = mysql_query($sql);
		if (! $sql_produkte)
		{
			$bonContent .= "SQL Fehler: " . mysql_error();
			exit(1);
		}
		
		$sql1="SELECT bon_text AS bonAddedTxt
					FROM bon_add_text 
					WHERE offenerbon_id='".$aktueller_bon."' ";
		$sql_produkte1 = mysql_query($sql1);
		if (! $sql_produkte1)
		{
			$bonContent .= "SQL Fehler: " . mysql_error();
			exit(1);
		}
		$bonZusatzText=false;
			# wird am ende der while schleife gesetzt !!
		while ($row_produkt1=mysql_fetch_assoc($sql_produkte1))
		{
			$bonZusatzText=$row_produkt1['bonAddedTxt'];
		}	
		
		$gesamt_summe=0;
		$split_gesamt_summe=0;
		$move_gesamt_summe=0;
				// hier stand ursprünglich der header
				
		$splitBonOp="";
		$moveBonOp="";
		if($callFrom=="splitBon"){
			$idPrefix='split_';
			$splitArray=array();
			if(isset($_SESSION['splitBon'.$aktueller_bon])){
				$_SESSION['splitBon'.$aktueller_bon] = array_values( $_SESSION['splitBon'.$aktueller_bon] );
				for($i=0; $i < sizeof($_SESSION['splitBon'.$aktueller_bon]); $i++){
					$lineId=$_SESSION['splitBon'.$aktueller_bon][$i][0];
					$splitQty=$_SESSION['splitBon'.$aktueller_bon][$i][1];
					$splitArray[$lineId]['splitQty']=$splitQty;
				}
			}
			else $splitArray[0]='';
			$splitBonActive=true;
			$moveBonActive=false;
		}
		else if($callFrom=="moveTotable"){
			$idPrefix='move_';
			$moveArray=array();
			if(isset($_SESSION['moveBon'.$aktueller_bon])){
				for($i=0; $i < sizeof($_SESSION['moveBon'.$aktueller_bon]); $i++){
					$lineId=$_SESSION['moveBon'.$aktueller_bon][$i][0];
					$moveQty=$_SESSION['moveBon'.$aktueller_bon][$i][1];
					$movePrice=$_SESSION['moveBon'.$aktueller_bon][$i][2];
					$namePrice=$_SESSION['moveBon'.$aktueller_bon][$i][2];
					$moveArray[$lineId]['moveQty']=$moveQty;
				}
			}
			else $moveArray[0]='';
			$moveBonActive=true;
			$splitBonActive=false;			
		}
		else{
			$idPrefix='';
			$splitBonActive=false;
			$moveBonActive=false;
		}
		
		
		
		while ($row_produkt=mysql_fetch_assoc($sql_produkte))
		{
				
			$summe=$row_produkt['pricesell']*(1+$row_produkt['tax_rate']);
			// RFR: runden ausgeschaltet am 20.11.2018
			$summe=$summe*$row_produkt['stueck'];
			//$summe=round($summe, 4)*$row_produkt['stueck'];
			if($callFrom=="splitBon"){
				// geändert RFR 06.12.2019 weil bei Rabatt falsch berechnet wurde um eine Kommazahl beim runden
				//$gesamt_summe=$gesamt_summe+$summe;
				$gesamt_summe=$gesamt_summe+round($summe,2);
				
			}
			else
			{
				// geändert RFR 06.12.2019 weil bei Rabatt falsch berechnet wurde um eine Kommazahl beim runden
				// if($row_produkt['has_childs'] != 1) $gesamt_summe=$gesamt_summe+$summe;
				if($row_produkt['has_childs'] != 1) $gesamt_summe=$gesamt_summe+round($summe,2);		# wenn es childs gibt, combiartikel werden die summen der childes genommen, also die vom
			}																				# parent nicht
			
			
			$anzeige_summe=number_format($summe, 2, ",", ".");
			
			$vk_preis=$row_produkt['pricesell'];
			
			if(EINZELPREIS_IM_BON_BRUTTO == strtolower('ja'))
			{ 
				// RFR: runden wieder weggenmommer am 20.11.2018
				//$vk_preis_anzeige=round($row_produkt['pricesell'], 4)*(1+$row_produkt['tax_rate']);
				$vk_preis_anzeige=$row_produkt['pricesell']*(1+$row_produkt['tax_rate']); 	
			}
			else {	$vk_preis_anzeige=$row_produkt['pricesell'];			}
			
			$vk_preis_anzeige=number_format ($vk_preis_anzeige, 2, ",", ".");
			$stk_anzeige=number_format($row_produkt['stueck'], 2, ",", ".");
			$nummer=$row_produkt['id'];
			$produkt_name=$row_produkt['printname'];
			$parentIndicat=false;				# wird für das Kundendisplay verwendet
			if($row_produkt['has_parent'] > 0) $parentIndicat=true;
				
			// vk_preis und vk_preis anzeige muss getrennt werden, da ansonsten rundungsfehler auftreten können mit nur 2 Nachkommas
			#	<div id='".$idPrefix."line".$nummer."' class='line_unselected' onclick='select_bon_line(\"line".$nummer."\")'>
			
			if($splitBonActive==true){
				$prodNummer=$row_produkt['id'];
				$splitLine=$idPrefix."line".$nummer;
				if(array_key_exists($splitLine, $splitArray)){
				$splitQty=$splitArray[$splitLine]['splitQty'];
					if($splitQty > $row_produkt['stueck']){
						$splitQty=$row_produkt['stueck'];
						for($i=0; $i< sizeof($_SESSION['splitBon'.$aktueller_bon]); $i++){
							if(preg_replace('/\D/', '', $_SESSION['splitBon'.$aktueller_bon][$i][0])==$nummer){
								$_SESSION['splitBon'.$aktueller_bon][$i][1]=$splitQty;
							}
						}
					}
				
				
				$row_produkt['stueck']=$row_produkt['stueck']-$splitQty;				
				$splitSumme=($row_produkt['pricesell']*(1+$row_produkt['tax_rate']))*$splitQty;
				$split_gesamt_summe+=$splitSumme;
				$split_anzeige_summe=number_format ($splitSumme,2,",",".");
				$splitQty_anzeige=number_format($splitQty,2,",",".");
				
				$splitBonOp.="<div id='splittedLine".$nummer."' class='line_unselected' onclick=\"select_bon_line(this.id)\">
								<div id='splitted_bon_summe".$nummer."' class='bon_summe class=line_unselected' >".$split_anzeige_summe."</div>
								<div id='splitted_bon_steuer".$nummer."' class=bon_steuer class=line_unselected>".$row_produkt['tax_rate'] * 100 ."</div>
								<div id='splitted_bon_stk".$nummer."' class=bon_stk class='line_unselected'>".$splitQty_anzeige."</div>
								<div id='splitted_bon_einzelpreis'".$nummer." hidden class=bon_einzelpreis class=line_unselected>".$vk_preis."</div>
								<div id='splitted_bon_einzelpreis_anzeige".$nummer."' class=bon_einzelpreis class=line_unselected>".$vk_preis_anzeige."</div>
								<div id='splitted_bon_name".$nummer."' class=bon_name class='line_unselected'>".($row_produkt['printname'])."</div>
							</div>";
				}
				
				
				
				if($row_produkt['stueck']==0) continue;
				$stk_anzeige=number_format($row_produkt['stueck'],1, ",",".");
				$anzeige_summe=number_format(($row_produkt['pricesell']*(1+$row_produkt['tax_rate']))*$row_produkt['stueck'],2,",",".");

			}
			
			else if($moveBonActive==true){
				$prodNummer=$row_produkt['id'];
				$moveLine=$idPrefix."line".$nummer;
					if(array_key_exists($moveLine, $moveArray)){
						$moveQty=$moveArray[$moveLine]['moveQty'];
						if($moveQty > $row_produkt['stueck']){
							$moveQty=$row_produkt['stueck'];
						}
						for($i=0; $i< sizeof($_SESSION['moveBon'.$aktueller_bon]); $i++){
							if(preg_replace('/\D/', '', $_SESSION['moveBon'.$aktueller_bon][$i][0])==$nummer){
								$_SESSION['moveBon'.$aktueller_bon][$i][1]=$moveQty;
							}
						}
							
						$row_produkt['stueck']=$row_produkt['stueck']-$moveQty;				
						$moveSumme=($row_produkt['pricesell']*(1+$row_produkt['tax_rate']))*$moveQty;
						$move_gesamt_summe+=$moveSumme;
						$move_anzeige_summe=number_format ($moveSumme,2,",",".");
						$moveQty_anzeige=number_format($moveQty,2,",",".");
						
						$moveBonOp.="<div id='movedLine".$nummer."' class='line_unselected' onclick=\"select_bon_line(this.id)\">
									<div id='moved_bon_summe".$nummer."' class='bon_summe class=line_unselected' >".$move_anzeige_summe."</div>
									<div id='moved_bon_steuer".$nummer."' class=bon_steuer class=line_unselected>".$row_produkt['tax_rate'] * 100 ."</div>
									<div id='moved_bon_stk".$nummer."' class=bon_stk class='line_unselected'>".$moveQty_anzeige."</div>
									<div id='moved_bon_einzelpreis'".$nummer." hidden class=bon_einzelpreis class=line_unselected>".$vk_preis."</div>
									<div id='moved_bon_einzelpreis_anzeige".$nummer."' class=bon_einzelpreis class=line_unselected>".$vk_preis_anzeige."</div>
									<div id='moved_bon_name".$nummer."' class=bon_name class='line_unselected'>".($row_produkt['printname'])."</div>
								</div>";
					}
					
					if($row_produkt['stueck']==0) continue;
				$stk_anzeige=number_format($row_produkt['stueck'],1, ",",".");
				$anzeige_summe=number_format(($row_produkt['pricesell']*(1+$row_produkt['tax_rate']))*$row_produkt['stueck'],2,",",".");
							
			}
			
			if($row_produkt['has_parent'] > 0) $hideLine = "hidden";
			else $hideLine = "";
			// RFR: 03.03.2020
			// keine Ahnung, warum das auskommentiert war - 
			// aber jetzt wird die Class elemHasChildes gesetzt, wenn es ein Kombiprodukt ist.
			if($row_produkt['has_childs'] == 1){
				$parentIdentic ="<input type='hidden' id='".$idPrefix."parentIdenticator".$nummer."' value = ". true ." />";
				$parentIdenticClass="elemHasChildes";
				if(strlen($row_produkt['printname']) > 1) $displayName=$row_produkt['printname'];
				else $displayName=$row_produkt['name'];
				$lastParentProdukt_name = $row_produkt['printname'];	# kundendisplay, der letzte Parent wir in der Variable gespeichert und ersetzt dann den last Child
				$lastParentProdukt_qty = $row_produkt['stueck'];
				$lastParentProdukt_price = $row_produkt['pricesell'];
			}
			else{
				$parentIdentic ="";
				$parentIdenticClass="";
			}
			
			
			
			$bonContent .= "<div id='".$idPrefix."line".$nummer."' ".$hideLine." class='line_unselected ".$parentIdenticClass."' onclick=\"select_bon_line(this.id)\">
					<div id='".$idPrefix."bon_summe".$nummer."' class='bon_summe class=line_unselected' >".$anzeige_summe."</div>
					<div id='".$idPrefix."bon_steuer".$nummer."' class=bon_steuer class=line_unselected>".$row_produkt['tax_rate'] * 100 ."</div>
					<div id='".$idPrefix."bon_stk".$nummer."' class=bon_stk class='line_unselected'>".$stk_anzeige."</div>
					<div id='".$idPrefix."bon_einzelpreis".$nummer."' hidden class=bon_einzelpreis class=line_unselected>".$vk_preis."</div>
					<div id='".$idPrefix."bon_einzelpreis_anzeige".$nummer."' class=bon_einzelpreis class=line_unselected>".$vk_preis_anzeige."</div>
					<div id='".$idPrefix."bon_name".$nummer."' class=bon_name class='line_unselected'>".($row_produkt['printname'])."</div>
					<input type='hidden' id='".$idPrefix."hiddenBeilagenMinusField".$nummer."' value = '".$row_produkt['beilagen_aenderung_minus']."' />
					<input type='hidden' id='".$idPrefix."hiddenBeilagenPlusField".$nummer."' value = '".$row_produkt['beilagen_aenderung_plus']."' />
					
					<input type='hidden' id='".$idPrefix."hiddenBeilagenBasispreisKeyField".$nummer."' value = '".$row_produkt['beilagen_basispreis_key']."' />
					
					<input type='hidden' id='".$idPrefix."hiddenArtikelArtField".$nummer."' value = '".$row_produkt['article_art_id']."' />
					<input type='hidden' name='lsSourceField' id='".$idPrefix."hiddenLsField".$nummer."' value = '".$row_produkt['aus_ls_nr']."' />
					".$parentIdentic."
					<input type='hidden' id='".$idPrefix."hiddenBeilagenOrigPr".$nummer."' value = '".$row_produkt['beilagen_prod_orig_preis']."' />
					<input type='hidden' id='".$idPrefix."hiddenBeilagenNetSum".$nummer."' value = '".$row_produkt['beilagen_sum_netto']."' />
					<input type='hidden' id='".$idPrefix."hiddenBeilagenBrutSum".$nummer."' value = '".$row_produkt['beilagen_sum_brutto']."' />
				</div>";
			
			$customerId=$row_produkt['kunden_id'];
			
			

		}
		$gesamt_summe_anz=number_format ($gesamt_summe,8,",",".");
		$gesamt_summe_display=number_format ($gesamt_summe,2,",",".");
		
		if($splitBonActive==true){
			$splitOrigin_gesamt_summe=$gesamt_summe-$split_gesamt_summe;
			
			$gesamt_summe_anz=number_format($split_gesamt_summe,2,",",".");
				$splitBonOp.="<input type='hidden' id='hiddenOriginBonSum' value='".number_format ($splitOrigin_gesamt_summe,2,",",".")."' />
							<input type='hidden' id='hiddenSplitBonSum' value='".number_format ($split_gesamt_summe,2,",",".")."' />
							<input type='hidden' id='hiddenTestSplitBonSum' value='".$gesamt_summe." - ".$split_gesamt_summe." --- ".$splitOrigin_gesamt_summe."' />";
				$bonContent .= "-|-".$splitBonOp;
			
		}
		else if($moveBonActive==true){
				
				$bonContent .= "-|-".$moveBonOp;
		}
			
				
		else	$bonContent .= "<input id='hiddenSumField' type='hidden' value='".$gesamt_summe_anz."' />
								<input id='hiddenSumDisplayField' type='hidden' value='".$gesamt_summe_display."' />";
				// hier stand ursprünglich das summen Feld
		
		// Auf Kundendisplay anzeigen *********************
		if (! empty($produkt_name)){
				# fwenn der letzte Eintrag aus dem offenen Bon einen Parent hat, also Child ist, wird der zuletzt ausgelesene Parent name genommen
			if($parentIndicat == true){
				$produkt_name=$lastParentProdukt_name;	
				$stk_anzeige=number_format($lastParentProdukt_qty, 1, ",",".");
				$anzeige_summe=number_format($lastParentProdukt_qty*$lastParentProdukt_price, 2, ",",".");
			}
			kundenanzeige_ausgeben($produkt_name, $stk_anzeige, $anzeige_summe, $gesamt_summe_display );
		}
		else 
		{
			$zeile1=""; $zeile2="";
			if ( NULL !== KUNDENANZEIGE_LEERLAUF_ZEILE1) $zeile1=KUNDENANZEIGE_LEERLAUF_ZEILE1;
			if ( NULL !== KUNDENANZEIGE_LEERLAUF_ZEILE2) $zeile2=KUNDENANZEIGE_LEERLAUF_ZEILE2;
			kundenanzeige_ausgeben_text ($zeile1, $zeile2);
		}
		$currentCart=$_SESSION['aktuellerWarenkorb'];
		
		if(isset($customerId) && $customerId >0) {
			$custData=mysql_fetch_array(mysql_query("SELECT Firma, anrede, titel, vorname, nachname FROM kunden WHERE id = $customerId"));
			
			if(strlen($custData[1]) > 0) $cAnr=$custData[1]." ";
			else $cAnr="";
			if(strlen($custData[2]) > 0) $cTitel=$custData[2]." ";
			else $cTitel="";
			
			$cName=false;
			if(strlen($custData[3]) > 0 && strlen($custData[4]) > 0)$cName=$custData[4]." ".$custData[3];
			else if(strlen($custData[3]) > 0 && strlen($custData[4]) == 0)$cName=$custData[3];
			else if(strlen($custData[3]) == 0 && strlen($custData[4]) > 0)$cName=$custData[4];
			else $cName="";
			
			$cFirma=false;
			if(strlen($custData[0]) >0 && (strlen($cAnr) >0 ||	strlen($cTitel) >0 || strlen($cName) >0 )) $cFirma=$custData[0].", ";
			else if(strlen($custData[0]) >0 && strlen($cAnr) == 0 && strlen($cTitel) == 0 && strlen($cName) == 0)$cFirma=$custData[0];
			else $cFirma="";
			
			$customerData=$cFirma.$cName;
			

		}
		else $customerData = "";
		
		
		#$customerData = strlen($customerData) > 25 ? substr($customerData,0,25)."..." : $customerData;	
			# macht error wenn an 15 stelle grad ein umlaut (multibyte char) kommt. klumpat
		global $pattern, $replace;   //   stored in connect.php
		$customerData=preg_replace($pattern, $replace, $customerData);
	
		$bonContent .= "<script>
		
				document.getElementById('zahlbetrag').value='". $gesamt_summe_anz ."';
				document.getElementById('zahlbetragDisplay').value='". $gesamt_summe_display ."';
				zahlung_gedrueckt();
				
				$('#bon_sum_div_customer_name, #kundenNameFeld').html('".$customerData."');
				$('#warenkorb".$currentCart."').each(function () {
					
					$(this).removeClass('line_unselected');
					$(this).addClass('line_selected');
				});
		
		
		</script>";
		
		#echo $bonContent;
		$cartContent=zeige_warenkoerbe('bonAnzeigenFunction');
		if($callFrom == 'bonieren_funktion'){
			return array($bonContent, $cartContent, $gesamt_summe_anz, $customerData, $currentCart, $gesamt_summe_display);
		}
		else{
			echo json_encode(array($bonContent, $cartContent, $bonZusatzText));
		}

	
	}
	
	// Funktion zeigt alle produkte einer Kategorie im Verkaufsfenster an
	function zeige_produkte($kategorie_id)
	{
		// Zeige zuerst die Sub Kategorien an
			$sql="select id, name, color, text_color from categories WHERE PARENTID=$kategorie_id AND geloescht=0
					ORDER by anzeige_reihenfolge, name ASC";
			$sql_kategorien = mysql_query($sql);
			if (! $sql_kategorien)
			{
				echo "SQL Fehler: " . mysql_error();
				exit(1);
			}
			// Zeige die Kategorien an
			while ($row_kategorien=mysql_fetch_assoc($sql_kategorien))
			{
				//echo mb_detect_encoding($row_kategorien['name']);
				echo "<input type='button'  class='button produkt_button' style='background-color:".$row_kategorien['color']."; color:".$row_kategorien['text_color']. "' value='".$row_kategorien['name']."' onclick='produkte_anzeigen(".$row_kategorien['id'] .")'/>";
			}
		
		// und dann die Produkte anzeigen
			# bg_color u txt_color kommt aus dem products Table, color u text_color aus categories
		$sql="SELECT products.id, products.name, bg_color, txt_color, color, text_color FROM products	
				LEFT JOIN categories on categories.id=products.category
				WHERE category='".$kategorie_id."' AND sichtbar=TRUE AND products.geloescht=0 ORDER by produktorder, NAME ASC";
		$sql_produkte = mysql_query($sql);
		if (! $sql_produkte)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		while ($row_produkt=mysql_fetch_assoc($sql_produkte))
		{
			if(isset($row_produkt['bg_color']) && strlen($row_produkt['bg_color']) > 3) $prodBgColor=$row_produkt['bg_color'];
			else $prodBgColor=$row_produkt['color'];
			if(isset($row_produkt['txt_color']) && strlen($row_produkt['txt_color']) > 3) $prodTxtColor=$row_produkt['txt_color'];
			else $prodTxtColor=$row_produkt['text_color'];
			echo "<input type='button'  class='button produkt_button' style='background-color:".$prodBgColor."; color:".$prodTxtColor."' 
				value='".$row_produkt['name']."' onclick='produkt_bonieren(".$row_produkt['id'] .")'/>";
		}
	}
			
	function zeige_warenkoerbe($callFrom=false)
	{
			$warenkoerbeCont="";
			$max_warenkorb=1;
			$sql="select DISTINCT bon_id FROM offener_bon ORDER BY bon_id";
			$sql_produkte = mysql_query($sql);
			if (! $sql_produkte)
			{
				$warenkoerbeCont .= "SQL Fehler: " . mysql_error();
				exit(1);
			}
			// 2018-05-10	Abfrage Gastro version hinzugefügt - Wenn F5 gedrückt wurde wurde Warenkorb 1 verwendet - obwohl es den nicht gibt
			if (mysql_num_rows($sql_produkte)==0 && strtolower(GASTRO_VERSION) !== 'ja') 
			{
				//echo "keine Warenkörbe gefudnen";
				$max_warenkorb=1;
				$_SESSION['aktuellerWarenkorb']=$max_warenkorb;
				$warenkoerbeCont .= "<input type='button'  class='warenkorb_button warenkorb_selected' id='warenkorb1' value='1' onclick='warenkorb_waehlen(this)'/>
							<input id='max_warenkorb' class='cclear' value='".$max_warenkorb."' hidden disabled/>";
				
			}
			else
			{	
				if(isset($_SESSION['aktuellerWarenkorb'])) $aktueller_bon=$_SESSION['aktuellerWarenkorb'];
				$existingCarts="";
				$extraClass="";
				while ($row_produkt=mysql_fetch_assoc($sql_produkte))
				{
					$extraClass="";
					$bon_id=$row_produkt['bon_id'];
					if($aktueller_bon == $bon_id) $extraClass="warenkorb_selected";
					$existingCarts.= "<input type='button'  class='warenkorb_button ".$extraClass."' id='warenkorb".$bon_id."' value='".$bon_id."' onclick='warenkorb_waehlen(this)'/>";
					$max_warenkorb=$bon_id;
				}

				if ($aktueller_bon>$max_warenkorb) $existingCarts.= "<input type='button'  class='warenkorb_button ".$extraClass."' id='warenkorb".$aktueller_bon."' 
								value='".$aktueller_bon."' onclick='warenkorb_waehlen(this)'/>";
				$warenkoerbeCont .= $existingCarts.="<input type='button'  class='warenkorb_button' value='+' onclick='warenkorb_waehlen(\"add\")'/>
											<input id='max_warenkorb' class='cclear' value='".$max_warenkorb."' hidden disabled/>";
			}
			
			if($callFrom == 'bonAnzeigenFunction'){
				return $warenkoerbeCont;
			}
			else echo $warenkoerbeCont;
			
				//	echo $max_warenkorb."<input id='max_warenkorb' value='".$max_warenkorb."' hidden disabled/>";
	}

	function ziffernblock_anzeigen($onclick_funktion, $callFrom=false)
	{
			
	/*	echo "<input type='button'  class='button ziffernblock_button orange' value='Storno' onclick='fnOpenNormalDialog()'/>";
		echo "<input type='button'  class='button ziffernblock_button orange' value='Storno' 
										onclick=\"openGeneralDialog('stornoButton', 'Gesamten Bon Löschen', '".$stornoContent."', 'wrapper')\" />";		//	openGeneralDialog(callFrom=false, boxTitle, dialogContent=false)
	*/
		if(defined('CE_BUTTON_TEXT') && strlen(CE_BUTTON_TEXT)>0){ 	$ceTxt=CE_BUTTON_TEXT;		}
		else $ceTxt='CE';
		
		$enterBut=false;
		if($callFrom=='bonieren'){
			$ziffernClass='ziffernblock_button';
				#<input type='button'  class='button ".$ziffernClass." orange' value='".$ceTxt."' onclick='".$onclick_funktion."'/>
			$firstKeyRow="<button class='button ".$ziffernClass." orange' value='CE' onclick='".$onclick_funktion."'>".$ceTxt."</button>
				<input type='button'  class='button ".$ziffernClass." orange' value='*' onclick='".$onclick_funktion."'/>
				<input type='button'  class='button ".$ziffernClass." orange' value='Enter' onclick='".$onclick_funktion."'/>";
			
		}
		else if($callFrom=='gutscheinModal' || $callFrom=='kassierenGutschModul'){
			if($callFrom=='kassierenGutschModul') $ziffernClass='ziffernblock_button';
			else $ziffernClass='ziffernblock_button_gutscheinmodal';
			$firstKeyRow="<button  class='button ".$ziffernClass." orange' value='CE' onclick='".$onclick_funktion."'>".$ceTxt."</button>
				<input type='button'  class='button ".$ziffernClass." orange' value='-' onclick='".$onclick_funktion."'/>
				<input type='button'  class='button ".$ziffernClass." orange' value='".GS_PREFIX."' onclick='".$onclick_funktion."'/>";
			$enterBut="<input type='button'  class='button ".$ziffernClass." orange' value='Enter' onclick='".$onclick_funktion."'/>
						<div class='cclear'></div>";
		}			#kassierenGutschModul
		
		else{ 
			$ziffernClass='ziffernblock_button';
			$firstKeyRow="<button  class='button ziffernblock_button2 orange' value='CE' onclick='".$onclick_funktion."' >".$ceTxt."</button>
					<input type='button'  class='button ".$ziffernClass." orange' value='*' onclick='".$onclick_funktion."'/>";					
		}
		
		echo $firstKeyRow;
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='7' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='8' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='9' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='4' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='5' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='6' onclick='".$onclick_funktion."'/>";
		echo "<br>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='1' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='2' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='3' onclick='".$onclick_funktion."'/>";
		echo "<br>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='0' onclick='".$onclick_funktion."'/>";
		echo "<input type='button'  class='button ".$ziffernClass." orange' value='.' onclick='".$onclick_funktion."'/>";
		echo $enterBut;
		//echo "<input type='button'  style='background-color:".ZIFFERN_FARBE."; height:" . ZIFFERN_HOEHE . "; width:" . ZIFFERN_BREITE . "' value='.' onclick='".$onclick_funktion."'/>";
	}
	
	function steuerung_anzeigen(){
		$uLevel=$_SESSION['userLevel'];
		echo "<div id='steuerung' >
				<div id='steuereungContent'>";
					echo "<input type='button'  class='button steuerung_button orange' value='+' onclick='funktionstaste_gedrueckt(this.value)'/>";
					echo "<input type='button'  class='button steuerung_button orange' value='-' onclick='funktionstaste_gedrueckt(this.value)'/>";
					if($_SESSION["userLevel"] >= ENABLERKEY_BONZEILE_LOESCHEN ){
						echo "<input type='button'  class='button steuerung_button orange deleteButton' value='' onclick=\"funktionstaste_gedrueckt('Del')\"/>";
					}
					if(strtolower(EDIT_BUT_DISPLAY) == 'ja'){
						echo "<input type='button'  id='editieren_button_id' class='button steuerung_button orange editButton' value='' />";
					}
					if(strtolower(FUNKTION_BUTTON_EINZELRABATT_ANZEIGEN) == 'ja'){
						echo "<input type='button'  class='button steuerung_button orange' value='%' onclick='funktionstaste_gedrueckt(\"ER\")'/>";
					}
					if(strtolower(FUNKTION_BUTTON_GESAMTRABATT_ANZEIGEN) == 'ja'){
						echo "<input type='button'  class='button steuerung_button orange' value='%%' onclick='funktionstaste_gedrueckt(\"GR\")'/>";
					}
				
			echo "</div>
						</div>";
	
	}
	
	function ist_kassa_offen()
	{
		$sql="select id from kassa_abschluesse	WHERE kassa_offen=true";
		$sql_offen = mysql_query($sql);
		if (! $sql_offen)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		$numResults = mysql_num_rows($sql_offen);
		if ($numResults > 0) 
		{
			$row=mysql_fetch_object($sql_offen);
			$kassa_offen_id=$row->id;
			return($kassa_offen_id);
		}
		else return(false);
	}
	
	function eroeffne_kassa()
	{
		$kp_contW=99-(int)str_replace("%","",ZIFFERN_CONTAINER_BREITE)."%;";
		
		echo "<style type='text/css'>						
						.selectRoomMenuDiv { display:none;}	
						.tischLayoutContainer  { display:none;}	
						.defineMobilePrinterDiv { display:none;}	
			</style>";
			
		if(isset($_SESSION['requested_resolution']) && $_SESSION['requested_resolution'] == true){
			$kp_contW=80 . "%";
			echo "<style type='text/css'>						
					.kassaOeffnenDiv{ margin:125px auto 0 auto; height:25% !important; padding:0 10%;		}	
					
			</style>";
			$ziffernBlockClass="ziffernblock_mobile";
		}
		
		else $ziffernBlockClass="ziffernblock";
		
		$abschlussStatus=monatsAbschlussStatus();

		$abschlussMsg=false;
		$abschlussMsgAdd=false;
		$abschlBonLink=false;
		//echo "Abschluss Status $abschlussStatus";
		if($abschlussStatus != false && NULLBELEG_AUTOMATISCH_ERSTELLEN == 'nein'){
			$abschlussMsg="<div class='kassaOeffnenAbschlWarningDiv'>
				<p style='font-weight:bold;'>".$abschlussStatus."</p>
				<button class='button_none_float button_gross orange kassaOeffnenBut' style='margin:0 0 2% 0;'
							onClick=\"document.location.href='abschlussbeleg_erstellen.php'\" >Abschluss Bon</button><br />
						</div>";
						
			$abschlussMsgAdd="<span style='font-weight:bold; font-size:1.2em; color:#c00'> trotzdem </span>";
		}
		else if($abschlussStatus != false)
		{
			// Das ist die Info, dass der Abschlussbeleg erstellt wurde
			$abschlussMsg="<div class='kassaOeffnenAbschlWarningDiv'>
				<p style='font-weight:bold;'>".$abschlussStatus."</p>
				<br />
						</div>";
						
			$abschlussMsgAdd="";
		}
		
		if(defined('KASSA_OFFNEN_FIXBETRAG_OPTION') && strtolower(KASSA_OFFNEN_FIXBETRAG_OPTION) == 'ja' &&
				defined('KASSA_OFFNEN_FIXBETRAG_BETRAG') && is_numeric(KASSA_OFFNEN_FIXBETRAG_BETRAG)){
			$defaultWechselg=KASSA_OFFNEN_FIXBETRAG_BETRAG;
		}		
		else {
			$lastA=mysql_fetch_array(mysql_query("SELECT id AS lastAbschl, wechselgeld FROM kassa_abschluesse 
											WHERE id=( SELECT max(id) FROM kassa_abschluesse) AND kassa_offen = 0"));
			$lastAbschl=$lastA['lastAbschl'];

			$revZ=mysql_fetch_array(mysql_query("SELECT SUM(zahlbetrag) AS gesBetragBon 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 = '".$lastAbschl."' AND kassastand_wirksam = 1"));
			$eaZ=mysql_fetch_array(mysql_query("SELECT SUM(gesamt_betrag) AS gesBetragEa FROM `ein_aus_zahlungen`
													WHERE kassa_abschluss_id = '".$lastAbschl."' "));
			$gsZ=mysql_fetch_array(mysql_query("SELECT SUM(betrag_geladen) AS gutschAusgest FROM gutschein_buchungen
												LEFT JOIN zahlungsart ON zahlungsart.id = gutschein_buchungen.zahlungsart_id
												WHERE kassa_abschluss_id = '".$lastAbschl."'AND LOWER(verkaufsArt) = 'gsverkauf' AND kassastand_wirksam = 1 ")); 
															
			$defaultWechselg=number_format($lastA['wechselgeld']+$eaZ['gesBetragEa']+$revZ['gesBetragBon']+$gsZ['gutschAusgest'], 2, ".", "");
		
		}
		
		echo '<div class="bon kassaOeffnenDiv" style="width:'.$kp_contW.'" >';
		
		echo $abschlussMsg;
			
		echo '<form class="kassaOeffnenForm" action="ajax_funktionen.php">';
		echo "<h2>Kassa ist geschlossen</h2>
				<p>Wollen Sie die Kassa jetzt ".$abschlussMsgAdd." eröffnen ?</p>";
		$date = date('d-m-Y H:i:s', time());
		echo "<p>Datum: $date</p>";
		echo '<p>Geben Sie das Wechselgeld ein : ';
		echo "<input type='text' name='wechselgeld' id='wechselgeld' class='schrift kassaOeffnenIp' value='".$defaultWechselg."' 
					onkeyup='formatNumberKp(this)'  maxlength='20'  />
				</p>";
		
		
		echo '<input type="hidden" name="funktion" value="kassa_oeffnen" />';
		
		echo "<input id='toggle' value='wechselgeld' type='hidden' disabled/>
				<div class='cclear'></div>";
		echo "<button type='submit' class='button_none_float button_gross orange kassaOeffnenBut' >Kassa &ouml;ffnen</button>";
		echo "</form>";
		echo '</div>';
		echo '<div class="'.$ziffernBlockClass.'" >';
		// Ziffernblock anzeigen, aber den * disablen
		ziffernblock_anzeigen("ziffer_gedrueckt(this.value, true)");
		echo '</div>
		<div class="cclear"></div>';
		echo '<script>	$("#menue_warenkoerbe, #menuDivRight").css({ "visibility":"hidden"	});	
							// kunstgriff damit der focus nach hinten kommt
						xGeld=$("#wechselgeld").val();
						$("#wechselgeld").val("");
						setTimeout(function () {$("#wechselgeld").focus().val(xGeld); }, 2);
			</script>';

		/*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>";
		}*/
			
	}
	
	function checkMobilerDrucker(){		
		if(defined('MOBILER_DRUCKER') && strtolower(MOBILER_DRUCKER) == 'ja'){
				if(isset($_SESSION['selectedMobilPrinterId']) && $_SESSION['selectedMobilPrinterId'] >0){
					return true;
				}
				else return false;
		}
		else {
				return true; 
		}
	}
	
	function defineMobilenDrucker(){
		$prQl=mysql_query("SELECT * FROM drucker");
		$printerSelect="<select id='defineMobilePrinterSelect' class='defineMobilePrinterSelect'>
			<option >Mobilen Drucker wählen</option>";
		while($prRow=mysql_fetch_array($prQl)){
			$prId=$prRow['drucker_id'];
			$printerSelect.="<option id=".$prId."  >".$prRow['win_drucker_name']." / ".$prRow['funktion']."</option>";
		}
		
		echo '
			<script>
				function mobilePrinterSelectBut(){
					console.log("function mobile drucker aufgerufen");
				printerId=$("#defineMobilePrinterSelect option:selected").prop(\'id\');
				if(printerId >0 ){
					
					xmlhttp=GetXmlHttpObject();
					xmlhttp.open("POST", "ajax_funktionen_kp.php", false);
					xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
					sendCont="functionKey=setSession&selectMobilePrinter=true&mobilePrinterId="+printerId;
					
					xmlhttp.send(sendCont);
					resp=xmlhttp.responseText;
					
					if (resp.toLowerCase().indexOf(\'success\') !== -1){
						console.log("function mobile drucker aufgerufen response: "+resp);
						location.reload(); 
					}
				}
				else return false;
			}
			</script>';
			
		$printerSelect.="</select>";
		
		echo "<style type='text/css'>						
						.selectRoomMenuDiv { display:none;}	
						#warenkoerbeLayoutContainer { display:none;}	
						.tischLayoutContainer  { display:none;}	
						.printerConfirmBut { position:relative; display:block; width:50%; line-height:1.5em;	margin:5% auto;		}
						</style>";
						
		echo "<div class='bon defineMobilePrinterDiv' style='' >
				<p>Auswahl mobilen Drucker</p>
				<p>".$printerSelect."</p>
				<button class='printerConfirmBut button_none_float orange' onclick='mobilePrinterSelectBut()' >Ausgew&auml;hlten Drucker bestigen</button>
				</div>";
	
	
	}
	
	
	function pdf_steuersaetze_ausgeben($bon_id, $pdf, $zoomF, $lineHeight)
	{
		
		$sql_produkte = mysql_query("select tax_rate, gesamt_betrag from abgeschlossener_bon_steuern WHERE bon_id='".$bon_id."'");
		if (! $sql_produkte)
		{
			echo "<script>console.log('Datenbank Fehler: '".mysql_error().")</script>";		
			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, ",", ".");
				
				$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_SATZ)*$zoomF, $lineHeight, $steuersatz, 0, 0, 'R');
				$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_NETTO)*$zoomF, $lineHeight, $netto , 0, 0, 'R');
				$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_STEUER)*$zoomF, $lineHeight, $steuer, 0, 0, 'R');
				$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_BRUTTO)*$zoomF, $lineHeight, $brutto, 0, 1, 'R');
				

		}
		return($pdf);
	}
	
	function bon_ausdrucken_pdf($bon_id=false, $bonHeight=false, $callFrom=false, $bedienerName=false, $targetPrinter=false, $qrDataStore=false){
		
		if(isset($_POST['requestId']) && $_POST['requestId'] != "") $requestId=$_POST['requestId'];
		else $requestId="";
		if(isset($_POST['requestFunktion']) && $_POST['requestFunktion'] != "") $requestFunktion=$_POST['requestFunktion'];
		else $requestFunktion="";
		$printRequest=false;
		if(isset($_POST['printRequest']) && $_POST['printRequest'] != "") $printRequest=$_POST['printRequest'];

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

		require_once('include/extended_fpdf.php'); 
		
		if($bon_id==false){
			$bon_id=$requestId;	
			$ajaxRequest=true;		
		}
		
		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];
		
		}
		
		# 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 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' "));
			
		}
		
		
		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;
		
		#$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 PDF_MemImage('P','mm', array($bonWidth, $bonHeight));
		$pdf->SetMargins($marginLR, $marginTop, 0);			// margin right (optional) set to 0, rest of pager width	
		$pdf->AddPage(); 

		$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="";
		
		$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]*$zoomF;				#  stimmt nicht wirklich, fpdf verwendet hier pt und nciht px, pt ist auf inch bezogen, px auf sreen dott size.
		
		
		
		
		if(defined('AUSDRUCK_LOGO_RECHNUNGSBON_PDF') && strtolower(AUSDRUCK_LOGO_RECHNUNGSBON_PDF) == 'ja'){
			$getImg=mysql_fetch_assoc(mysql_query("SELECT image, name, imgx, imgy FROM images WHERE name='bonlogo'"));

			if($getImg == true){
				$printRes=100;

				$imgWidth=($getImg['imgx']/$printRes)*25.4;  # umrechnung von inch auf mm !!!
				$imgHeigth=($getImg['imgy']/$printRes)*25.4;
				$imgWidth*=$zoomF;
				$imgHeigth*=$zoomF;
				if($imgWidth <= $bonWidth){
					$leftPos=($bonWidth-$imgWidth)/2;
					$leftPos+=$marginLR;
					$pdf->MemImage($getImg['image'], $leftPos, $marginTop, $imgWidth, $imgHeigth);
				}
				
				else{
					$pdf->MemImage($getImg['image'], $marginLR, $marginTop, $bonWidth-$marginLR, 0);
					$scal=$bonWidth/($imgWidth-$marginLR);
					$imgHeigth=$imgHeigth*$scal;
				}
	
				$pdf->Cell(0, $imgHeigth+5, "", 0, 1, 'C');	# das bild wird absolute positioniert, diese zelle dienst um die text zellen entsprechend nach dem bild beginnen zu lassen
															# platzhalter 
			}
		}
		
		$lineHeight=$pdfFontSize/2.5;
		
		$pdf->SetFont($pdfFont, '', $pdfFontSize); 

		$headArray=kopfzeile_ausdrucken($kopfzeilenParm, 'printPdf');
		for($i=0; $i < sizeof($headArray); $i++){
				$pdf->Cell($marginLR+($bonWidth-($marginLR*2)), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($headArray[$i])), 0, 1, 'C'); 
		
		}
		
		//$pdf->SetLineWidth(0.6);
		if(defined('BON_SEPERATORLINES_DICKE')) $pdf->SetLineWidth(BON_SEPERATORLINES_DICKE);
		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_produkte = mysql_query("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,
											ce_zahlung_data, ce_kunden_beleg, ce_zahlung_beleg, abholschein_nr
										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."'");

		if (! $sql_produkte) { 
				echo "<script>console.log('Datenbank Fehler: '".mysql_error().")</script>";		
				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"];
			$ceData=$row_produkt["ce_zahlung_data"];
			$ecKdBon=$row_produkt["ce_kunden_beleg"];
			$ceVendorBon=$row_produkt["ce_zahlung_beleg"];
			$abholschein_nr=$row_produkt["abholschein_nr"];
			
		}
		$dDate = strtotime( $datetime );
		$datetime = date( 'j.n.Y H:i:s', $dDate );
		
		if($kundenId > 0 ){
			$kdData=mysql_fetch_array(mysql_query("SELECT * FROM kunden WHERE id = ".$kundenId." "));
			if($kdData['kundennummer'] != "" ) $kundennummer=$kdData['kundennummer']; else $kundennummer="";
			$pdf->Cell(0, $lineHeight/3, "", 0, 1, 'C');
			// Cashback Karten Nummer auf Bon Drucken:
			if($kdData['loyality_card'] != "" ) $loyality_card=$kdData['loyality_card']; else $loyality_card="";
			if($loyality_card != "") $pdf->Cell($bonWidth-($marginLR/2), $lineHeight, "Cashback Karte Nr: ".iconv('UTF-8', 'windows-1252', $loyality_card), 0, 1, 'L');
			if($kundennummer != "") 
			{
				if(defined('BON_KUNDENNUMMER_DRUCKEN') && strtolower(BON_KUNDENNUMMER_DRUCKEN) == 'ja')
				{
					$pdf->SetFont('','B');
					$pdf->Cell($bonWidth-($marginLR/2), $lineHeight, "Kunden Nummer: ".iconv('UTF-8', 'windows-1252', $kundennummer), 0, 1, 'L');
					$pdf->SetFont('','');
				}
			}
			
			if($kdData['Firma'] != "" )$pdf->Cell($bonWidth-($marginLR/2), $lineHeight, iconv('UTF-8', 'windows-1252', $kdData['Firma']), 0, 1, 'L');
			if($kdData['anrede'] != "" ) $anrede=$kdData['anrede']." "; else $anrede="";
			if($kdData['titel'] != "" ) $titel=$kdData['titel']." "; else $titel="";
			if($kdData['vorname'] != "" ) $vorN=$kdData['vorname']." "; else $vorN="";
			if($kdData['nachname'] != "" ) $nachN=$kdData['nachname']; else $nachN="";
			$nName=$anrede.$titel.$vorN.$nachN;
			if($nName != "") $pdf->Cell($bonWidth-($marginLR/2), $lineHeight, iconv('UTF-8', 'windows-1252', $nName), 0, 1, 'L');
			if($kdData['strasse1'] != "" )$pdf->Cell($bonWidth-($marginLR/2), $lineHeight, iconv('UTF-8', 'windows-1252', $kdData['strasse1']), 0, 1, 'L');
			if($kdData['strasse2'] != "" )$pdf->Cell($bonWidth-($marginLR/2), $lineHeight, iconv('UTF-8', 'windows-1252', $kdData['strasse2']), 0, 1, 'L');
			if($kdData['plz'] != "" ) $plz=$kdData['plz']." "; else $plz="";
			if($kdData['Ort'] != "" ) $ort=$kdData['Ort']; else $ort="";
			if($kdData['anmerkung'] != "" ) $anmerkung=$kdData['anmerkung']; else $anmerkung="";
			
			$city=$plz.$ort;
			if($city != "") $pdf->Cell($bonWidth-($marginLR/2), $lineHeight, iconv('UTF-8', 'windows-1252', $city), 0, 1, 'L');
			if(trim($kdData['telefon1']) != "" ) $pdf->Cell($bonWidth-($marginLR/2), $lineHeight, "Tel. ".$kdData['telefon1'], 0, 1, 'L');
			else if($kdData['telefon2'] != "" && trim($kdData['telefon1']) == "" ) $pdf->Cell($bonWidth-($marginLR/2), $lineHeight, "Tel. ".$kdData['telefon2'], 0, 1, 'L');
			if(trim($kdData['mobil']) != "" ) $pdf->Cell($bonWidth-($marginLR/2), $lineHeight, "Mobil ".$kdData['mobil'], 0, 1, 'L');
			
			if($anmerkung != "") 
			{
				if(defined('BON_KUNDEN_ANMERKUNG_DRUCKEN') && strtolower(BON_KUNDEN_ANMERKUNG_DRUCKEN) == 'ja')
				{
					$pdf->Cell(0, $lineHeight/3, "", 0, 1, 'C');
					$pdf->MultiCell( $bonWidth-$marginLR, $lineHeight, iconv('UTF-8', 'windows-1252', $anmerkung) , 0, 'L', 0); 
				}
			}
			if(defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja'){ $pdf->Cell(0, $lineHeight/3, "", 0, 1, 'C');	}
			else $pdf->Cell(0, $lineHeight/3, "", "B", 1, 'C');
		}

		if (defined('BON_ZUSATZ_TEXT_RECHNUNG') && strtolower(BON_ZUSATZ_TEXT_RECHNUNG)==='ja')
		{
			if(strlen(trim($bonZusatzTxt)) > 0 )
			{
				$pdf->Cell(0, $lineHeight/3, "", 0, 1, 'C');
				$pdf->MultiCell( $bonWidth-$marginLR, $lineHeight, iconv('UTF-8', 'windows-1252', $bonZusatzTxt) , 0, 'L', 0); 
				if(defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja'){  $pdf->Cell(0, $lineHeight/3, "", 0, 1, 'C');	}
				else $pdf->Cell(0, $lineHeight/3, "", "B", 1, 'C');
			}
		}
		
		$pdf->Cell(0, $lineHeight/3, "", 0, 1, 'C');
		$txLineW=preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)+preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM)+preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM);
		$txLineW*=$zoomF;

		
		
		if($callFrom == 'monatsbelegErstellen')
		{
			$belegBenennung= "Monats Abschluss Beleg, ".BELEG_BENENNUNG;
			$pdf->Cell(0, $lineHeight*1.2, $belegBenennung." ".$bon_id, 0, 1, 'L');				
		}
		else if($callFrom == 'reactivatSammelBelegErstellen' || ($belegKennung !== false && preg_match("/Sammelbeleg /i", $belegKennung)))
		{
			$pdf->Cell(0, $lineHeight*1.2, $belegKennung, 0, 1, 'L');
			$pdf->Cell(0, $lineHeight*1.2, BELEG_BENENNUNG." ".$bon_id, 0, 1, 'L');
			
		}
		else
		{
			// Abholschein von Küchenbildschirm drucken
			if(defined('KUECHE_ABHOLSCHEIN_AUF_RECHUNUNG_DRUCKEN') && strtolower(KUECHE_ABHOLSCHEIN_AUF_RECHUNUNG_DRUCKEN) == 'ja')
			{
				$pdf->SetFont($pdfFont, 'B', KUECHE_ABHOLSCHEIN_SCHRIFT_GROESSE);
				$pdf->Cell(($bonWidth-($marginLR/2)), $lineHeight*2, $abholschein_nr, 0, 1, 'C');
				$pdf->SetFont($pdfFont, '', $pdfFontSize);
				$lineHeight=$pdfFontSize/2.5;
			}
			
			$belegBenennung= BELEG_BENENNUNG;
			$pdf->Cell($txLineW, $lineHeight*1.2, $belegBenennung." ".$bon_id, 0, 0, 'L');
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)*$zoomF, $lineHeight*1.2, "Kassenid: ".KASSA_ID, 0, 1, 'R');
				
			// Font von Auftragsschein setzen und dann drucken falls definiert
			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);
			
			if($auftragsscheinNr >0 && (defined('AUFTRAGSSCHEIN_NR_AUF_RECHNUNG') && strtolower(AUFTRAGSSCHEIN_NR_AUF_RECHNUNG) == 'ja'))
			{
				$pdf->Cell(($bonWidth-($marginLR/2)), $lineHeight*1.2, AUFTRAGSSCHEIN_BENENNUNG.$auftragsscheinNr, 0, 1, 'L');

			}
			
			$pdf->SetFont($pdfFont, '', $pdfFontSize);
			$lineHeight=$pdfFontSize/2.5;
		}

		
									
			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 && $callFrom!="xmlSchnittstelle") 
				$pdf->Cell(0, $lineHeight, AUSDRUCK_VERKAUFER_AUF_BON_TEXT." ".iconv('UTF-8', 'windows-1252', $userQl[0]), 0, 1, 'L');
			else if($bedienerName==true && $bedienerName!="" && $callFrom=="xmlSchnittstelle")			# bedienerName ist ausschließlich für xmlSchnittstelle ausdruck !
				$pdf->Cell(0, $lineHeight, AUSDRUCK_VERKAUFER_AUF_BON_TEXT." ".iconv('UTF-8', 'windows-1252', $bedienerName), 0, 1, 'L');
		}

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

		if(defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja'){  $pdf->Cell(0, $lineHeight/2, "", 0, 1, 'C');	}
		else $pdf->Cell(0, $lineHeight/2, "", "B", 1, 'C');
		$pdf->Cell(0, $lineHeight/4, "", 0, 1, 'C');
		
		$sql_produkte = mysql_query("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, beilagen_minus, beilagen_plus,
										IF (parent_id=0, isparent_id, parent_id) as reihenfolge
										FROM abgeschlossener_bon_produkte 
										LEFT JOIN lieferschein_referenz ON lsSource = lieferschein_referenz.id
										WHERE bon_id='".$bon_id."' 
										ORDER BY lieferschein_referenz.id ASC, reihenfolge, abgeschlossener_bon_produkte.ID ASC");

		if (!$sql_produkte)	{
			echo "<script>console.log('Datenbank Fehler: '".mysql_error().")</script>";		
			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)) 
		{
			$pdf->SetFont($pdfFont, $fontWeight, $fontSize);
			$lineHeight=$pdfFontSize/2.5;
			$einzel_preis=$row_produkt["PRICESELL"];
			$einzel_preis=$einzel_preis*(1+$row_produkt["tax_rate"]);

			$summe=round($einzel_preis, 8)*$row_produkt["stueck"];
	
			$einzel_preis=number_format($einzel_preis, $ezKom,",",".");
			$stueck=$row_produkt["stueck"];
				# COMBI ARTIKEL !!!
			$ist_child=false;
			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"];
			}
			
			
			if($row_produkt['parent_id'] > 0 && strtolower(BEILAGENTEXT_AUF_RECHNUNG_DRUCKEN) == 'ja')
			{
				$ist_child=true;
			}
			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"];
			
			// Beilagen auf Bon andrucken?
			if((strlen($row_produkt['beilagen_minus']) > 1 || strlen($row_produkt['beilagen_plus']) > 1) && strtolower(BEILAGENTEXT_AUF_RECHNUNG_DRUCKEN) == 'ja'){		
					# $printname = $printname."\nSonderartikel";		# war als Überschrift gedacht, lassen wir weg
				if(strlen($row_produkt['beilagen_minus']) > 1 ){
					$blTxtMin=false;
					$blTxtMin=preg_replace('/\;/', ',', $row_produkt['beilagen_minus']);
					$printname = $printname."\n- ".$blTxtMin;
				}
				if(strlen($row_produkt['beilagen_plus']) > 1 ){
					$blTxtPl=false;
					$blTxtPl=preg_replace('/\;/', ',', $row_produkt['beilagen_plus']);
					$printname = $printname."\n+ ".$blTxtPl;
					
				}
			}
			// Ende Beilagen
			if($row_produkt['parent_id'] > 0 )
			{
				//
			}
			else
			if($row_produkt['parent_id'] > 0 && $row_produkt['childPrint'] == 1){
				$ortstaxe=number_format($stueck*$row_produkt["PRICESELL"],2, ",", ".");
				$einzel_preis='';
				$stueck_anzeige='';
				$summe='';
				
				$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 );
				$lsHeader=iconv('UTF-8', 'windows-1252', $headerTxt.$row_produkt['lieferschein_id'].", ".$dateTime);
				$headW=$pdf->getstringwidth($lsHeader);
				if($lsGroup > 0)$pdf->Cell(0, $lineHeight/2, '', 0, 1, 'C');
				$pdf->Cell(0, $lineHeight, $lsHeader, 0, 1, 'L');
				$pdf->Cell($headW, 1, '', 'T', 1, 'L');
				
			}

			if ($ist_child) 
			{
				$pdf->SetFont($pdfFont, '', $pdfFontSize*0.5);
				$lineHeight=$pdfFontSize/5;
				$pdf->Cell(5*$zoomF, $lineHeight, "", 0, 0, 'L');
			}
			$stueck_anzeige=$stueck_anzeige;
			$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)*$zoomF, $lineHeight, $stueck_anzeige, 0, 0, 'R');
				# 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);
			}
			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)*$zoomF
							|| $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);
				if ($ist_child) 
				{
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)*$zoomF, $lineHeight, "", 0, 1, 'R');
				}
				else
				{
					$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, $summe, 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');
				if ($ist_child) 
				{
					$pdf->Cell(preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)*$zoomF, $lineHeight, "", 0, 1, 'R');
				}
				else
				{
					$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, $summe, 0, 1, 'R');
				}
			}
			
			$lsGroup=$row_produkt['lieferschein_id'];
					
		}
		$pdf->SetFont($pdfFont, $fontWeight, $fontSize);
		$lineHeight=$pdfFontSize/2.5;
		# Product while ende
		$checkPrintName=false;			
		if(isset($printname))$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: ";
		}
					
		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');
				
		$sumFontSize=(preg_replace('/[^\d]/', '', RECHNUNGSSUMME_AUF_BON_SIZE)*.75)*$zoomF;		# grober umrechnungsfaktor von px auf pt
		$sumLineHeight=$sumFontSize/2.5;
		$zW=preg_replace('/[^\d]/', '', AUSDRUCK_BON_STK_CM)+preg_replace('/[^\d]/', '', AUSDRUCK_BON_NAME_CM);
		$zW*=$zoomF;
		if(strtolower(RECHNUNGSSUMME_AUF_BON_FETT) == 'ja') $pdf->SetFont($pdfFont,'B', $sumFontSize); 
		else $pdf->SetFont($pdfFont,'', $sumFontSize); 
		
		$pdf->Cell($zW, $sumLineHeight, $rechnungssummeTxt, 0, 0, 'L',0);		
		$pdf->Cell((preg_replace('/[^\d]/', '', AUSDRUCK_BON_SUMME_CM)+preg_replace('/[^\d]/', '', AUSDRUCK_BON_EINZELPREIS_CM))*$zoomF, $sumLineHeight, $gesamtsumme_brutto, 0, 1, 'R',0);
		$pdf->Cell(0, 1, "", '', 1, 'C'); 	#  seperator mit Trennlinie
		$pdf->SetFont($pdfFont, '', $pdfFontSize); 
		
		if($monatsAbschlBeleg==false){
			$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_SATZ)*$zoomF, $lineHeight, "Steuersatz", 0, 0, 'R');
			$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_NETTO)*$zoomF, $lineHeight, "Netto", 0, 0, 'R');
			$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_STEUER)*$zoomF, $lineHeight, "Steuer", 0, 0, 'R');
			$pdf->Cell( preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_BRUTTO)*$zoomF, $lineHeight, "Brutto", 0, 1, 'R');
			 

			$pdf=pdf_steuersaetze_ausgeben($bon_id, $pdf, $zoomF, $lineHeight);
			
			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');
			
			$sql_produkte = mysql_query("select Name, zahlbetrag_tatsaechlich from abgeschlossener_bon_zahlung WHERE bon_id='".$bon_id."'");
			if (! $sql_produkte) {
				echo "<script>console.log('Datenbank Fehler: '".mysql_error().")</script>";		
				exit(1);
			}
			$summe_zahlbetrag=0;
			$uFotList="";
			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,",",".");
				
				$zahlTxtWidth=((preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_SATZ)+preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_NETTO))*$zoomF);
				
				if($pdf->getstringwidth(iconv('UTF-8', 'windows-1252', $name)) > $zahlTxtWidth*$zoomF){
					$posY=$pdf->GetY();					
					$posX=$zahlTxtWidth+$marginLR;
					
					$pdf->MultiCell( $zahlTxtWidth, $lineHeight, iconv('UTF-8', 'windows-1252', $name) , 0, 'R', 0);
					$posY_2=$pdf->GetY();
					$pdf->SetXY($posX, $posY);
					$pdf->Cell( (preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_STEUER)*$zoomF)+5, $lineHeight, $zahlbetrag, 0, 1, 'R');
					$pdf->SetY($posY_2);
				}
				else {				
					$pdf->Cell( $zahlTxtWidth, $lineHeight, iconv('UTF-8', 'windows-1252', $name), 0, 0, 'R');
					$pdf->Cell( (preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_STEUER)*$zoomF)+5, $lineHeight, $zahlbetrag, 0, 1, 'R');
				}
				
				$uFotList.="'".$name."',";

			}
			
				$uFotList=preg_replace('/,$/', '', $uFotList);
			
			if ($retourgeld>0) {
				$retourgeld=number_format($retourgeld,2,",",".");
				$pdf->Cell( $zahlTxtWidth, $lineHeight, "Retourgeld", 0, 0, 'R');
				$pdf->Cell( (preg_replace('/[^\d]/', '', AUSDRUCK_BON_STEUER_STEUER)*$zoomF)+5, $lineHeight, $retourgeld, 0, 1, 'R');

			}
			
			$pdf->Cell(0, 6, "", 0, 1, 'C'); 	#  seperator ohne Trennlinie / vor vielen Dank für ....
					
			if(defined('KUNDEN_UNTERSCHRIFT_FOOTER') && strtolower(KUNDEN_UNTERSCHRIFT_FOOTER) == 'ja' ){

				$fotxQl=mysql_query("SELECT * FROM zahlungsart WHERE Name IN(".$uFotList.") ");
				$enableUnterschrFooter=false;
				while($fotxRow=mysql_fetch_assoc($fotxQl)){
					if($fotxRow['zahlartFooter'] != "" && $fotxRow['zahlartFooter'] != "NULL"){
						$enableUnterschrFooter=true;
						$unterschrTx=$fotxRow['zahlartFooter'];	
					}
				}
				
				if($enableUnterschrFooter==true){
					$unterschrTx=explode(";", $unterschrTx);
					if(sizeof($unterschrTx) == 1){
						 $pdf->Cell(0, $lineHeight, iconv('UTF-8', 'windows-1252', $unterschrTx[0]."***"), 0, 1, 'L');
						 $pdf->Cell(0, $lineHeight, "", "B", 1, 'L');
					}
					else{
						for($i=0; $i < sizeof($unterschrTx); $i++){
							 $pdf->Cell(0, $lineHeight, iconv('UTF-8', 'windows-1252', $unterschrTx[$i]), 0, 1, 'L');
						}
						if(defined('DISABLE_BON_SEPERATORLINES') && strtolower(DISABLE_BON_SEPERATORLINES) == 'ja'){ $pdf->Cell(0, 1, "", 0, 1, 'L');	}
						else $pdf->Cell(0, 1, "", "T", 1, 'L');
					}
				}
			
			}
			
			$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($marginLR+($bonWidth-($marginLR*2)), $lineHeight, iconv('UTF-8', 'windows-1252', strip_tags($fotterArray[$i])), 0, 1, 'C'); 
			
			}
			
			$footerExtragTxt=$fotterSumArray[1];
			
			if($footerExtragTxt != ""){
				$pdf->Cell(0, 4, "", 0, 1, 'C'); 	#   distanz schaffen
				$pdf->MultiCell( 0, $lineHeight, iconv('UTF-8', 'windows-1252', $footerExtragTxt), 0, 'C', 0);			
			}
		
		} 		# if monats beleg wird bis daher nicht gedruckt steuer, zahlung, retourgeld, fusszeile, ...
		
			# Default Werte
		$qrImgMarginTop=10;
		$qrImgMarginBottom=5;
		$qrImgSize=$bonWidth/1.5;
		if(defined('QR_CODE_GROESSE') && QR_CODE_GROESSE >= 15 ){
			$qrImgSize=QR_CODE_GROESSE;											
				if($qrImgSize >= 15 && $qrImgSize < 20){
					$qrImgMarginTop=3;
					$qrImgMarginBottom=2;
				}
				else if($qrImgSize >= 20 && $qrImgSize < 35){
					$qrImgMarginTop=6;
					$qrImgMarginBottom=3;
				}
		}

		$qrImgPosL=(($bonWidth-$qrImgSize)/2)+($marginLR/2);
		
		$imgY=$pdf->GetY()+$qrImgMarginTop;

		
		
		if(strlen($qr_string) > 55){
			
			$qrX=explode("_", $qr_string);
			$lastIndex=count($qrX)-1;
			$sigData=base64_decode($qrX[$lastIndex]);
			if(strtolower($sigData) == 'sicherheitseinrichtung ausgefallen' ){
				$pdf->Cell($bonWidth, $lineHeight*2, "", 0, 1, "C");
				$sigData=str_replace("_", " ", $sigData);
				$pdf->SetFont($pdfFont, 'B', $pdfFontSize);
				$pdf->Cell($bonWidth, $lineHeight, $sigData, 0, 1, "C");			
			}			
			else{
				global $errorCorrectionLevel;
				global $matrixPointSize;
				global $qrMargin;
				global $qrImg_temp_dir;
				global $qrData_store_dir;
				
				if(strtolower($qrDataStore)=='store'){
					$qrFilename=$qrData_store_dir."qrImg_".$bon_id.".png";
					$qrStringFileName=$qrData_store_dir."qrString_".$bon_id.".txt";
					file_put_contents($qrStringFileName, $qr_string);
					$matrixPointSize=4;
					QRcode::png($qr_string, $qrFilename, $errorCorrectionLevel, $matrixPointSize, $qrMargin); 
					$pdf->Image($qrFilename, $qrImgPosL, $imgY, $qrImgSize, 'PNG');
				
				}
				else {
					$qrFilename=$qrImg_temp_dir.$bon_id.".png";
					QRcode::png($qr_string, $qrFilename, $errorCorrectionLevel, $matrixPointSize, $qrMargin); 
					$pdf->Image($qrFilename, $qrImgPosL, $imgY, $qrImgSize, 'PNG');
					unlink($qrFilename);
				}
				
				$pdf->SetY($imgY+$qrImgSize+$qrImgMarginBottom);
			
			}
			
		}
		
		
			if($requestFunktion == 'bonReprint' || $printRequest == 'bonjournalInvoicePrint' || $callFrom == 'changeZahlung'){
				$bonjournalP="";
				if($printRequest == 'bonjournalInvoicePrint')$bonjournalP="Bonjournal ";
				$pdf->Cell(0, $lineHeight, "", 0, 1, 'C');
				if($callFrom == 'changeZahlung')$pdf->Cell(0, $lineHeight, iconv('UTF-8', 'windows-1252', 'Zahlung geändert '), 0, 1, 'C');
				$pdf->Cell(0, $lineHeight, $bonjournalP."Belegduplikat ", 0, 1, 'C');
			}
			
		// ****************************************
		// 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);
		}
		
		$erlaubte_seiten=1;
		// ****************************************
		// EC Händlerbeleg drucken (Unterschrift)
		if ( !empty($ceVendorBon))
		{
			$pos=strpos($ceVendorBon, '<PRINT_BELEG></PRINT_BELEG>');
			if ( $pos !== false)
			{
				$ceVendorBon=substr($ceVendorBon, $pos+27);
				$pdf->AddPage();
				$erlaubte_seiten=2;
				$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);
				}
			}
		}

		$checkLicensing=check_base_licensing();
		if($checkLicensing[0] == false || $checkLicensing[1] == false || $checkLicensing[2] == false) {
			$pdf->SetFont($pdfFont, 'B', 14); 
			$pdf->Cell($bonWidth-($marginLR/2), $lineHeight+6, "UNLIZENZIERT", 0, 1, 'C');
			$pdf->SetFont($pdfFont, '', $pdfFontSize);
			$pdf->Cell($bonWidth-($marginLR/2), $lineHeight, "www.sitpos.at", 0, 1, 'C');
			#$pdf->Cell($bonWidth-($marginLR/2), $lineHeight, "www.sitpos.de", 0, 1, 'C');
		} 
		
		
		// nochmal ausführen, wenn die Seitenanzahl überschritten wird.
		if($pdf->PageNo() > $erlaubte_seiten ){
			bon_ausdrucken_pdf($bon_id, $bonHeight*$pdf->PageNo(), $callFrom, $bedienerName, $targetPrinter, $qrDataStore);
			return false; 
		}
		// ********** End EC Händlerbeleg
					
		$outputTarget=__DIR__ ."\docs\sIT_bon_".$bon_id."_".date('d_m_H_i_s').".pdf";
		$command="C:\sitpos\pdfxchange\App\PDFV_Portable\PDFXCview.exe /print:printer=\"$drucker\" \"$outputTarget\" ";
				
		$pdf->Output($outputTarget, "F");
		
		if(defined('ANZAHL_BON_PRINTS') && ANZAHL_BON_PRINTS > 1 && strtolower($requestFunktion) != 'bonreprint' && 
				strtolower($printRequest) != 'bonjournalinvoiceprint'){	
			for($i=0; $i < ANZAHL_BON_PRINTS; $i++){
				exec($command, $output, $error_code);
			}
		}
		else exec($command, $output, $error_code);
			
		if($callFrom == 'xmlSchnittstelle'){
			if($error_code > 0) echo "Fehler beim verarbeiten von Bon Nr.: ".$bon_id." aufgetreten.";
			else echo "Bon Nr.: ".$bon_id." ausgeführt.";
		}
		
		else if($callFrom == 'monatsbelegErstellen'){
			if($error_code > 0) echo "Fehler beim drucken von Monatsbeleg Bon Nr.: ".$bon_id." aufgetreten.";
			else echo "success Monatsbeleg mit der Bon Nr. ".$bon_id." erstellt.";
		}
		
		else if($callFrom == 'lieferscheineVerrechnung'){
			# hier funktionier leider kein return value, weil dieser beim page > 1 schon ausgeführt und somit verloren geht
			return false;
		}
				
		else echo json_encode(array($bon_id, $error_code));

	}
	
	function kopfzeile_ausdrucken($kopfzeilenParam=false, $callSource=false)
	{
	//	echo "<script>alert('ajaxfunction zeile 399 kopfzeile_ausdrucken')</script>";
		// Adresse etc. ausdrucken
		$sql="select name, wert from konfiguration WHERE name LIKE 'AUSRUCK_KOPFZEILE_%' ORDER BY name";
		$sql_produkte = mysql_query($sql);
		if (! $sql_produkte)
		{
			if( $callSource != 'printPdf') echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		if( $callSource != 'printPdf'){
			echo "<div id='bonKopfzeile'>
						<center>";
		}
		$pdfHeadData=array();
		while ($row_produkt=mysql_fetch_array($sql_produkte)){	
			if($row_produkt["name"] == "AUSRUCK_KOPFZEILE_IBAN" && $kopfzeilenParam != "PrintBankdata"){
				continue;
			}
			$wert=$row_produkt["wert"];
			if ($wert && $wert!==''){	
				if( $callSource != 'printPdf') echo $wert . "<br />";
				array_push($pdfHeadData, $wert);
			}
			//echo "Summe: $gesamtsumme_brutto Zeit: $timestamp";
		}
		if( $callSource != 'printPdf'){
			echo "<hr /></center>
					</div>";
		}
		return $pdfHeadData;
	}
	
	
	function fusszeile_ausdrucken($invoiceSum=false, $callSource=false, $qr_data=false, $requestFunktion=false){
		
		$sql="select name, wert from konfiguration WHERE name LIKE 'AUSRUCK_FUSSZEILE_%' ORDER BY name";
		$sql_produkte = mysql_query($sql);
		if (! $sql_produkte)
		{
			echo "SQL Fehler: " . mysql_error();
			exit(1);
		}
		$pdfFooterData=array();
		if( $callSource != 'printPdf')  {
			echo "<br>";
			echo "<div id='bonFusszeile'>
				<center>";
		}
		while ($row_produkt=mysql_fetch_assoc($sql_produkte))
		{
			$wert=$row_produkt["wert"];
			if ($wert && $wert!=='')
			{
				if( $callSource != 'printPdf') echo $wert . "<br>";
			}
			array_push($pdfFooterData, $wert);
			//echo "Summe: $gesamtsumme_brutto Zeit: $timestamp";
		}
		
	#	$extraFussTxtData=unserialize(AUSRUCK_EXTRA_FUSSZEILEN_FREIGEBEN);
		if(AUSRUCK_EXTRA_FUSSZEILEN_FREIGEBEN == 'ja' && $invoiceSum > 0){
			$pdfFooterExtraData="";
			$calcVal=AUSRUCK_EXTRA_FUSSZEILEN_WERT;
			$calcVal= ($calcVal*$invoiceSum/100);

			$calcValTxt="EUR ".number_format($calcVal, 2, ',', '.');
			$formNo=number_format($calcVal, 2, ',', '.');

			$fotterTx=AUSRUCK_EXTRA_FUSSZEILEN;
			if (preg_match("/x%/i", $fotterTx)) { $pattern = '/x%/'; $replaceInExtraTxt=true;		}
			else if (preg_match("/EUR\s[0-9]/i", $fotterTx)) {$pattern = '/EUR\s[0-9.]+/';  $replaceInExtraTxt=true;	 }
			else {$replaceInExtraTxt=false; }
			$replacement = $calcValTxt;
			if($replaceInExtraTxt==true)$fotterTx=preg_replace($pattern, $replacement, $fotterTx);
			$pdfFooterExtraData.=$fotterTx;
			$fotterTx=preg_replace('/\n/', '<br />', $fotterTx);
			$extraFooter="<div><p>".$fotterTx."</p></div>";
		}
		else{
			$extraFooter="";
			$pdfFooterExtraData="";
		}
		
		$printerM=mysql_fetch_array(mysql_query("SELECT win_drucker_name, drucker_margin_html  FROM drucker WHERE LOWER(ist_rechnungsdrucker) = 'ja' "));
		$marginB=explode(",", $printerM[1]);
		$marginBottom=$marginB[2];
		
		if( $callSource != 'printPdf'){
			$qrImg=false;
			
			if(strlen($qr_data[1]) > 55 && strtolower(AUSDRUCK_RECHNUNGSBON_PDF) != 'ja'){
				$bon_id=$qr_data[0];
				$qr_string=$qr_data[1];
				
				$qrX=explode("_", $qr_string);
				$lastIndex=count($qrX)-1;
				$sigData=base64_decode($qrX[$lastIndex]);
				if(strtolower($sigData) == 'sicherheitseinrichtung ausgefallen' ){
					$sigData=str_replace("_", " ", $sigData);
					$qrImg= "<div class='ausdruck_bon_gesamt_breite' style='font-weight:bold; margin-top:15px;' >
								".$sigData."
							</div>";		
				}			
				else {
					global $errorCorrectionLevel; global $matrixPointSize; global $qrMargin; global $qrImg_temp_dir;
								
					$qrFilename="include/qr_lib/temp/".$bon_id.".png";
					
					QRcode::png($qr_string, $qrFilename, $errorCorrectionLevel, $matrixPointSize, $qrMargin);
						
					if(defined('QR_CODE_GROESSE') && QR_CODE_GROESSE >= 15 ){
						$bonWidth=preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE);
						$qrSize=(QR_CODE_GROESSE/$bonWidth)*100; # errechnen den % wert aus zwei mm werten, ungenau aber ca
						$qrWidth=$qrSize."%";
					}
					else $qrWidth='66%';

					$qrImg= "<div class='ausdruck_bon_gesamt_breite' >
							<img src='".$qrFilename."' style=' display:block; width:".$qrWidth."; height:auto; margin:10px auto; ' />
							</div>";
				}

			}
			
			if($requestFunktion == 'bonReprint' || $requestFunktion == 'bonjournalPrint'){
				$bonjournalP="";
				if($requestFunktion == 'bonjournalPrint')$bonjournalP="Bonjournal ";
				$qrImg.="<div class='ausdruck_bon_gesamt_breite'  >".$bonjournalP."Belegduplikat</div>";
			}
			if($marginBottom == 0 || $marginBottom == false) $marginBottom=5;
			echo $extraFooter.$qrImg.
					"</center>
					<div style='position:relative; float:left; width:".((preg_replace('/[^\d]/', '', AUSDRUCK_GESAMTE_BREITE)/2) -2) ."mm; height:".$marginBottom."mm;'>
						&nbsp;</div>
						<div style='position:relative; float:left; width:5mm; height:".$marginBottom."mm; border-bottom:1px solid #888; ' ></div>
						<div class='cclear'></div>
					</div>";
			
		}
		
		$pdfFooterSumData=array($pdfFooterData, $pdfFooterExtraData);		
				
		return $pdfFooterSumData;
	}
	
	function getLastDepData($currentBon, $cCount=0){

		$getLastData=false;
		while ($getLastData == false && $cCount < 5){
			$getLastData=mysql_fetch_array(mysql_query("SELECT umsatz_zaehler, zertif_nr, signjws, beleg_nr FROM dep WHERE beleg_nr = ".($currentBon-1) ." "));
			if(!$getLastData) sleep(1);	
			$cCount++;
		}
		
		return $getLastData;
		
	
	}
	
	function dep_table_schreiben($bon_id, $callFrom=false){
		#	$time_start = microtime(true);
				
		$depError=false;
		$errorContentArray=array();
		$revenueBefore=0;		# wird für startbeleg bzw wenn letzter dep eintrag nicht gefunden wird genommen.
		$lastBonSig="";  // V2.03 -30.03.2018 - RFR weil sonst fehler beim aktivieren der Signatur einheit kommt - keine Ahnung ob sonst eine Auswirkung hat
		
		if($callFrom == 'startbeleg'){						
			$kId=mysql_fetch_array(mysql_query("SELECT wert FROM konfiguration_sitpos WHERE name='KASSA_ID' "));
			$lastSignJwsData=$kId['wert'];		
		}

		else {
			//umsatz_zaehler, zertif_nr, signjws, beleg_nr
			$callDepData= getLastDepData($bon_id);
			
			// Letzer DEP eintrag konnte nicht gefunden werden
			if($callDepData == false){			
				$depError=true;
				$lastDepRevenue=mysql_fetch_array(mysql_query("SELECT umsatz_zaehler FROM `dep` ORDER BY dep_id DESC LIMIT 1"));
				$revenueBefore=$lastDepRevenue['umsatz_zaehler'];
				$lastSignJwsData="Letzter Dep Eintrag konnte nicht gefunden werden.";
				array_push($errorContentArray, 'Letzter DEP Eintrag konnte nicht gefunden werden.');
				
			}
			// ansonsten wurde ein DEP eintrag gefunden - oder die Signatureinheit ist nicht aktiviert
			else {
				$revenueBefore= $callDepData[0];
				// signjws eintrag hier - aber wenn die Signatureinheit nicht aktiviert ist, dann gibt es auch keinen Punkt!
				$lastSignJwsData=$callDepData[2];
				$sigStr=explode(".", $callDepData[2]);
				if (count($sigStr)>1)
				{
					$checkSig=base64_decode($sigStr[2]);
				}
				else $checkSig="";
				if(strtolower($checkSig) == 'sicherheitseinrichtung ausgefallen'){
					$lastBonSig='unsig';
				}
				else {
					$lastBonSig='sig';
				}
			}
		}

			$bonData=mysql_query("SELECT abgeschlossener_bon.bon_id AS bonId, abgeschlossener_bon_steuern.bon_id AS bon_id,
								abgeschlossener_bon_steuern.tax_rate AS tax_rate, abgeschlossener_bon_steuern.gesamt_betrag, bon_erstellt_datum 
								FROM abgeschlossener_bon_steuern 
								LEFT JOIN abgeschlossener_bon ON abgeschlossener_bon_steuern.bon_id = abgeschlossener_bon.bon_id
								WHERE abgeschlossener_bon_steuern.bon_id = ".$bon_id."");
										
		if(!$bonData){
			$depError=true;	
			array_push($errorContentArray, 'Steuersätze für Bon Nr. '.$bon_id.' konnten nicht gelesen werden.');
		}
												
		$taxN=0;
		$tax1=0;
		$tax2=0;
		$taxNull=0;
		$taxB=0;
		while($getTax=mysql_fetch_assoc($bonData)){
			if($getTax['tax_rate']==0.2) $taxN=$getTax['gesamt_betrag']*(1+$getTax['tax_rate']);
			else if($getTax['tax_rate']==0.1) $tax1=$getTax['gesamt_betrag']*(1+$getTax['tax_rate']);
			else if($getTax['tax_rate']==0.13) $tax2=$getTax['gesamt_betrag']*(1+$getTax['tax_rate']);
			else if($getTax['tax_rate']==0.0) $taxNull+=$getTax['gesamt_betrag'];
			else if($getTax['tax_rate']==0.19) $taxB=$getTax['gesamt_betrag']*(1+$getTax['tax_rate']);
			else $taxNull+=$getTax['gesamt_betrag']*(1+$getTax['tax_rate']); // Steuersatz 5 Prozent nach Corona Krise! - Auffangregel alles was nicht bekannt ist geht in den NULL Satz
			
			
			$bonDate=$getTax['bon_erstellt_datum'];		
		}
			#	writeLog(basename( __FILE__)." ". __LINE__ . "bon date: ".$bonDate." bon Nr: ".$bon_id."\n");
		$bonUmsatz=$taxN+$tax1+$tax2+$taxNull+$taxB;
		$umsatzZaehler=number_format($revenueBefore+($bonUmsatz*100), 0, "", "");

		$taxN=number_format($taxN, 2, ",", "");
		$tax1=number_format($tax1, 2, ",", "");
		$tax2=number_format($tax2, 2, ",", "");
		$taxNull=number_format($taxNull, 2, ",", "");
		$taxB=number_format($taxB, 2, ",", "");
		
		$preFix="_R1-";
		
		$xDate = strtotime($bonDate);
		$bDate=date('Y-m-d', $xDate);
		$bTime=date('H:i:s', $xDate);
		$sigDate=$bDate."T".$bTime;
		
		if(defined('ZERTIFIKATS_NR') && ZERTIFIKATS_NR > 1000 && $callFrom != 'startbeleg') $zertif_nrHex=dechex(ZERTIFIKATS_NR);
		else if($callFrom=='startbeleg'){
			$zertNo=mysql_fetch_array(mysql_query("SELECT wert FROM konfiguration_sitpos WHERE name='ZERTIFIKATS_NR' "));
			$zertif_nrHex=dechex($zertNo['wert']);
		}	
		else $zertif_nrHex = false;
		
		# Reihenfolge entpsr dokument Detailfragen RKSV V1.1 Seite 11/12
		#	Prefix da nicht erw., Kassen-ID, Beleg Nr, Beleg Datum-Zeit, Beträge: normal-erm1-erm2-null-besonders, Umsatz-Zaehler-AES256-ICM, 
		#		Zertifikat-Seriennummer (Hex Codiert ?), Sig-Voriger-Beleg (bei startbeleg aus kassen-id bilden), 	

		# kommt von der Funktion getLastDepData() array Index 2
			
		$signatureError=false;	
			# beginn signatureinheit aktiviert
		if($zertif_nrHex != false){		
			if($callFrom=='startbeleg'){
				$aesK=mysql_fetch_array(mysql_query("SELECT wert FROM konfiguration_sitpos WHERE name='AES_KEY' "));
				$aesKey=$aesK['wert'];
				$kId=mysql_fetch_array(mysql_query("SELECT wert FROM konfiguration_sitpos WHERE name='KASSA_ID' "));
				$kassaId=$kId['wert'];
				$zId=mysql_fetch_array(mysql_query("SELECT wert FROM konfiguration_sitpos WHERE name='ZDA_ID' "));
				$zdaId=$zId['wert'];
			}
			else{
				$aesKey=AES_KEY;
				$kassaId=KASSA_ID;
				$zdaId=ZDA_ID;
			}
			
			if(defined('SIGNATUR_MODUS') && strtolower(SIGNATUR_MODUS) == 'com'){
				if(defined('INIT_SIG_UNIT_DEFAULT') && strtolower(INIT_SIG_UNIT_DEFAULT) == 'ja'){
					$sigcardData = new COM('ATrustRegistrierkasseCom.Registrierkasse');
					$fFin=$sigcardData->Finalize;

					if($fFin != 0){
						$iInit=$sigcardData->Initialize;
						$fFin=$sigcardData->Finalize;;
					}
				}
				
				try {
					$aesEncrypt = new COM('ATrustRegistrierkasseCom.AesIcm');
				}
				catch (Exception $e)
				{
					echo "Objekt konnte nicht erstllt werden; error = {$e->getMessage()}\n";
				}
				$revenueCoded="";
				$retVal = $aesEncrypt->Encrypt($aesKey, $umsatzZaehler, $kassaId, $bon_id, $revenueCoded);
	
			}
			
						
			if($callFrom == 'storniereBon') $revenueCodeToSign=base64_encode('STO'); #  aus RKSV Detailfragen Seite 24,  U1RP anstelle des Umsatzzählers.
			else $revenueCodeToSign=$revenueCoded;

			if(defined('SIGNATUR_MODUS') && strtolower(SIGNATUR_MODUS) == 'com'){	 
				$shaClass = new COM('ATrustRegistrierkasseCom.Sha256');
				$sigVorigerBeleg="";
				$retVal=$shaClass->HashSigVorigerBeleg($lastSignJwsData, 8, $sigVorigerBeleg);
				
				if(strlen($sigVorigerBeleg) > 5 ) $error_code_sigVorig = 0;
				else $error_code_sigVorig = false;
						 
				 $strToSign=$preFix.$zdaId."_".$kassaId."_".$bon_id."_".$sigDate."_".$taxN."_".$tax1."_".$tax2."_".$taxNull."_".$taxB."_".$revenueCodeToSign."_".$zertif_nrHex."_".$sigVorigerBeleg;
				 $karte = new COM('ATrustRegistrierkasseCom.Registrierkasse');
				 $retVal=$karte->Initialize;
				 
				 
				 $signature="";
                 $retVal=$karte->SignJWS($strToSign, $signature);
				 if($retVal != 0)$error_code_sign = 1; 				# das wird dann weiter unten verarbeitet !!!!
				 else $error_code_sign = 0;
				 $signString=$signature;			 								 
			}

			if($sigVorigerBeleg == false || $error_code_sigVorig !== 0){
				$signatureError=true;
				array_push($errorContentArray, 'Signatur Voriger Beleg konnte nicht aufgelöst oder gefunden werden.');			
			}
			
	
			if($error_code_sign !== 0){		# entspricht signatureinheit ausgefallen
				$signatureError=true;
				if(defined('SIGNATUR_ERROR_BON_ROLLBACK') && strtolower(SIGNATUR_ERROR_BON_ROLLBACK) == 'ja'){
					array_push($errorContentArray, 'Signatur Fehlgeschlagen.');
				}
				else array_push($errorContentArray, 'Signatur Fehlgeschlagen. Der Bon wird mit Sicherheitseinrichtung ausgefallen signiert. ');
				
				# header base 64 Url codieren
					#$commandBase64UrlCodierenHeader='C:\sitpos\_rkExe\ATrustRegistrierkasseExe.exe --base64url_encode {"alg":"ES256"}';
					#exec($commandBase64UrlCodierenHeader, $outputCodingH, $error_code);
					#$jwsHeader=$outputCodingH[0];
				$jwsHeader=base64_encode('{"alg":"ES256"}');
				# payload base 64 Url codieren
				
				if(defined('SIGNATUR_MODUS') && strtolower(SIGNATUR_MODUS) == 'com'){
					
					$base64Cl= new COM("ATrustRegistrierkasseCom.Base64");
		
					$jwsPayLoad="";
					$jwsSigAusgef="";
					$retVal=$base64Cl->EncodeUrl($strToSign, 0, $jwsPayLoad);
					$retVal2=$base64Cl->EncodeUrl("Sicherheitseinrichtung ausgefallen", 0, $jwsSigAusgef);
					
				}
				
				$rRetour=base64_decode($jwsSigAusgef);
				
					#	das wäre base64 aber nicht base64 url    möglicher php ansatz -> strtr(base64_encode($strToSign), '+/=', '-_,');
					#	$jwsHeader=base64_encode('{"alg":"ES256"}');
					#	$jwsPayLoad=base64_encode($strToSign);
					#	$jwsSigAusgef=base64_encode('Sicherheitseinrichtung ausgefallen');
				
				$signString=$jwsHeader.".".$jwsPayLoad.".".$jwsSigAusgef;
			
			}
			else if($error_code_sign === 0 && (defined('DISPLAY_DEP_SIGN_ERROR') && strtolower(DISPLAY_DEP_SIGN_ERROR) == 'nein')){
				mysql_query("UPDATE konfiguration SET wert = 'ja' WHERE name = 'DISPLAY_DEP_SIGN_ERROR'");
			
			}
						
			$getQrData=explode(".", $signString);
				# $qrString=base64_decode($getQrData[1]);
				
			if(defined('SIGNATUR_MODUS') && strtolower(SIGNATUR_MODUS) == 'com'){
				$base64Class= new COM("ATrustRegistrierkasseCom.Base64");
					# für QR-Code wird der signaturteil aus dem gesamten signaturstring (3. teil) von Base64 Url auf Base64 umcodiert. 
				$qr_3="";
				$retVal=$base64Class->ReencodeUrlToNormal($getQrData[2], $qr_3);
				
					# aus dem zweiten Teil des Signaturstrings wir ein Klartxt gemacht
				$qr_2="";			
				$retVal1=$base64Class->DecodeUrl($getQrData[1], $qr_2);
				
				$qrString=$qr_2."_".$qr_3;
				
			}
			
		}			# ende signatureinheit aktiviert
		
		else {
			# signiereinheit nicht aktiviert im konfiguration_sitpos szeht keine signatur ser nr
			$sigVorigerBeleg = "unsigniert";
			$signString="unsigniert";
			$revenueCoded = "";
			#$zertif_nrHex = 0;
			$lastZertifizierungsdata=$callDepData[1];
			$testZert=substr($lastZertifizierungsdata ,-20).md5(date("Y-m-d H:i"));
			$zertif_nrHex=$testZert;
			$qrString="";
			$decryptCheckFail = false;
			$kassaId=KASSA_ID;
			
		}
		

		if($depError == false){
			$insQl=mysql_query("INSERT INTO dep SET kassen_id='".$kassaId."', beleg_nr = ".$bon_id.",  datum_zeit='".$bonDate."', betr_satz_norm = '".$taxN."',
						betr_satz_erm_1 = '".$tax1."', betr_satz_erm_2 = '".$tax2."', betr_satz_null = '".$taxNull."', betr_satz_besonder = '".$taxB."', 
						umsatz_zaehler_aes = '".$revenueCoded."', umsatz_zaehler = ".$umsatzZaehler.", zertif_nr = '".$zertif_nrHex."', 
						qr_string = '".$qrString."', signatur_vorigerbeleg = '".$sigVorigerBeleg."', signjws = '".$signString."'	");

			if(!$insQl){
				$signatureError=true;
				array_push($errorContentArray, 'Datenbank Error beim DEP schreiben. '.mysql_error());
			}
		}
			
		if($signatureError != false || $depError != false){
			$errorCont="";
			if($depError == true && $signatureError == false) $errorCode='dep';
			else if($depError == false && $signatureError == true) $errorCode='sig';
			else if($depError == true && $signatureError == true) $errorCode='dep_sig';
			else  $errorCode='undefined';
			for($i=0; $i < sizeof($errorContentArray); $i++){
				$errorCont.=$errorContentArray[$i]."<br />";
			}
			
			return array(false, $errorCont, $errorCode);
		}

		else{
			#	$time_end = microtime(true);
			#	$execution_time = ($time_end - $time_start)/60;
		
			return array(true, '', false, $lastBonSig);
		}
	}
				

	function selectPrinter(){
		$kp_contW=99-(int)str_replace("%","",ZIFFERN_CONTAINER_BREITE)."%";
		
		
		echo "<div class='bon kassaOeffnenDiv' style='width:".$kp_contW."' >";
		
		
		echo"</div>";
	
	}
	

	
	function importFromCsv($filename, $importType, $delimiter=';', $option=false, $bruttoSwitch=false) {
		$startT = date('h:i:s');
		
		if($importType=="productsImport") {
			if(!file_exists($filename) || !is_readable($filename)){
				return "Fehler beim lesen der Import Datei !!!<br />";
			}
			else {
				$header = null;
				$data = array();

				$returnMsg="";
				$kpSqlString=" ";
				if (($handle = fopen($filename, 'r')) !== false){
					$countUp=0;
					$countIns=0;
					$countInsCat=0;
					$countContinue=0;
					$kpMsg="";
					
					$rowCount=0;
					$sStrgRes="";
					$sStrg="";
					$addMsg="";
					mysql_query("BEGIN");
															
					while (($row = fgetcsv($handle, 1000, $delimiter)) !== false){											
						$varPrice=false;
						$negPrice=false;
						if(!is_numeric($row[3]) && !is_numeric($row[4]) && !is_numeric($row[8]) && !is_numeric($row[10]) && !is_numeric($row[11]))   continue; //   ist dann der Header

						$row[2] = preg_replace('!\s+!', ' ', $row[2]);
						$row[5] = preg_replace('!\s+!', ' ', $row[5]);
						$row[7] = preg_replace('!\s+!', ' ', $row[7]);
						$row[9] = preg_replace('!\s+!', ' ', $row[9]);
						
						global $pattern, $replace;   //   stored in connect.php
						
						$row[2]=preg_replace($pattern,$replace, $row[2]);
						$row[5]=preg_replace($pattern,$replace, $row[5]);
						$row[7]=preg_replace($pattern,$replace, $row[7]);
						$row[9]=preg_replace($pattern,$replace, $row[9]);
						
						$row[2]=mb_ereg_replace("[à`á]","a ",$row[2]);		# dieser hat beim saatgut import probleme gemacht deswegen wird das hier extra replaced
						
						$encodingCat =  mb_detect_encoding($row[5]);
						if($encodingCat != 'UTF-8')$row[5] = mb_convert_encoding($row[5], 'UTF-8', $encodingCat);
						else $row[5]= iconv('UTF-8', 'UTF-8//IGNORE', $row[5]);
						
						
						$catId=mysql_fetch_array(mysql_query("SELECT ID, NAME FROM categories WHERE LOWER(NAME) = LOWER('$row[5]') "));
						if(isset($catId[0]) && $catId[0] > 0) { (int)$categorieId=$catId[0];	$kpMsg.="Cat Id = ".$categorieId; }
						
						else {	
								$InsCatQl=mysql_query("INSERT INTO categories SET NAME = '$row[5]', IMAGE = '[BLOB - 0 B]', COLOR = '#f7ff0a', text_color = '#000000', anzeige_reihenfolge = '0' ");	
								(int)$categorieId=mysql_insert_id();
								if(!$InsCatQl) $kpMsg.= "Error, Kategorie Insert.".mysql_error();
								$countInsCat++;
						}
						
							# einkauspreis
						if($row[3] == ''){
							$row[3]=0;						
						}
						else if (preg_match("/^[-]?\d{1,3}(\.\d{3})+(,\d+)?$/", $row[3])) {
								# tausender zahl
							$row[3]=str_replace(',', '.', str_replace('.', '', $row[3]));
						}
						
						else if(preg_match("/^[-]?[0-9]*[,]{1}[0-9]{1,}$/", $row[3])){
								# kommazahl (1x ",")
							$row[3]=str_replace(',', '.', $row[3]);
						}
						
								# verkauspreis
						if($row[4] == ''){
							$row[4]=0;						
						}
						else if (preg_match("/^[-]?\d{1,3}(\.\d{3})+(,\d+)?$/", $row[4])) {
								# tausender zahl
							$row[4]=str_replace(',', '.', str_replace('.', '', $row[4]));
						}
						else if(preg_match("/^[-]?[0-9]*[,]{1}[0-9]{1,}$/", $row[4])){
								# kommazahl (1x ",")
							$row[4]=str_replace(',', '.', $row[4]);
						}
							# Zeitpreise netto
						if(isset($row[13]) && $row[13] == '' || !isset($row[13])){
							$row[13] = 0;
						}
						else if (isset($row[13]) && preg_match("/^[-]?\d{1,3}(\.\d{3})+(,\d+)?$/", $row[13])) {
								# tausender zahl
							$row[13]=str_replace(',', '.', str_replace('.', '', $row[13]));
						}
						else if(preg_match("/^[-]?[0-9]*[,]{1}[0-9]{1,}$/", $row[13])){
								# kommazahl (1x ",")
							$row[13]=str_replace(',', '.', $row[13]);
						}
							# Zeitpreise brutto
						if(isset($row[14]) && $row[14] == '' || !isset($row[14])){
							$row[14] = 0;
						}
						else if (isset($row[14]) && preg_match("/^[-]?\d{1,3}(\.\d{3})+(,\d+)?$/", $row[14])) {
								# tausender zahl
							$row[14]=str_replace(',', '.', str_replace('.', '', $row[14]));
						}
						else if(preg_match("/^[-]?[0-9]*[,]{1}[0-9]{1,}$/", $row[14])){
								# kommazahl (1x ",")
							$row[14]=str_replace(',', '.', $row[14]);
						}
						
						
						
							# taxrate
						if(preg_match("/^[-]?[0-9]*[,]{1}[0-9]{1,}$/", $row[6])){
							$row[6]=str_replace(',', '.', $row[6]);
						}
						
						if(isset($row[14]) && $row[14] !=0 && ($row[13] == 0 || !is_numeric($row[13])	)){
							$row[13] = $row[14]/(1+$row[6]);
						}
							
						if(!is_numeric($row[3]) || !is_numeric($row[4])  || !is_numeric($row[6])){
							$returnMsg.= "Zahlenformat Fehler in Spalte EK, VK od Tax Rate  - ".$row[2]."\n";
							$countContinue++;
							continue;
						}
						if((isset($row[13]) && !is_numeric($row[13])) || (isset($row[14]) && !is_numeric($row[14]))){
							$returnMsg.= "Zahlenformat Fehler in Spalten Zeitpreise  - ".$row[2]."\n";
							$countContinue++;
							continue;
						}
						
						if($row[8] === 0 || $row[8] === 1 || $row[8] == '0' || $row[8] == '1'){
							if($row[8]=='z')$returnMsg.=" des is a z \n";
							$varPrice=$row[8];
						}
						else {
							if($row[4] > 0)$varPrice=0;
							else $varPrice=1;							
								
						}
						if($row[10] === 0 || $row[10] === 1 || $row[10] == '0' || $row[10] == '1'){
							$negPrice=$row[10];
						}
						else{
							$negPrice=0;
						}
						if($row[11] === 0 || $row[11] === 1 || $row[11] == '0' || $row[11] == '1'){
							$prodOrder=$row[11];
						}
						else{
							$prodOrder=99;
						}
						if($row[12] === 0 || (int)$row[12] === 1 || $row[12] == '0' || $row[12] == '1'){
							$sichtbar=$row[12];
						}
						else{
							$sichtbar=1;
						}
						
						if($bruttoSwitch == true){
							$priceSell=number_format($row[4]/(1 + $row[6]), 8, '.', '');
							$priceBuy=number_format($row[3]/(1 + $row[6]), 8, '.', '');
						}
						else{
							$priceSell=number_format($row[4], 8, '.', '');
							$priceBuy=number_format($row[3], 8, '.', '');
						}
						
						$zeitPreisNetto=number_format($row[13], 8, ".", '');
						$zeitPreisBrutto=number_format($row[14], 8, ".", '');
						
						$taxC=mysql_fetch_array(mysql_query("SELECT ID FROM taxes WHERE RATE = '$row[6]' "));
						if(!$taxC[0]) $taxCat=1;
						(int)$taxCat=$taxC[0];
						
						if($row[7] == '') $row[7]=NULL;
						
						$encodingName =  mb_detect_encoding($row[2]);
						if($encodingName != 'UTF-8')$row[2] = mb_convert_encoding($row[2], 'UTF-8', $encodingName);
						else $row[2]= iconv('UTF-8', 'UTF-8//IGNORE', $row[2]);
						
						$encodingPrName =  mb_detect_encoding($row[9]);
						if($encodingPrName != 'UTF-8')$row[9] = mb_convert_encoding($row[9], 'UTF-8', $encodingPrName);
						else $row[9]= iconv('UTF-8', 'UTF-8//IGNORE', $row[9]);

						if($option==true && strtolower($option) == 'reference' && strlen($row[0]) > 0){
							# hauptsächlich für commandline import ausgelegt
							$prRef=mysql_fetch_array(mysql_query("SELECT ID, NAME FROM products WHERE REFERENCE = '".$row[0]."' LIMIT 1"));
																		
							if($row[7] == '') $row[7]=NULL;
							if($prRef[0] > 0){
								$queryStr="UPDATE products SET CODE='".$row[1]."', NAME='".$row[2]."', PRICEBUY=".$priceBuy.", PRICESELL=".$priceSell.",
													CATEGORY=".$categorieId.", TAXCAT=".$taxCat.", DISPLAY='".$row[7]."', VARPRICE=".$varPrice.", PRINTNAME='".$row[9]."', 
													NEGATIVEPRICE=".$negPrice.", PRODUKTORDER=".$prodOrder.", SICHTBAR=".$sichtbar.",
													zeitpreis_netto=".$zeitPreisNetto.", zeitpreis_brutto=".$zeitPreisBrutto."
													WHERE ID=".$prRef[0]." ";
								$upSq=mysql_query($queryStr);
								if(!$upSq) $returnMsg.= "Produkt(".$row[2].") update Error:\n".mysql_error()."\n".$queryStr."\n";
								else $countUp++;							
							}
							else{
								$queryStr="INSERT INTO products SET REFERENCE='".$row[0]."', CODE='".$row[1]."', NAME='".$row[2]."', PRICEBUY=".$priceBuy.", 
													PRICESELL=".$priceSell.", CATEGORY=".$categorieId.", TAXCAT=".$taxCat.", DISPLAY='".$row[7]."', VARPRICE=".$varPrice.", 
													PRINTNAME='".$row[9]."', NEGATIVEPRICE=".$negPrice.", PRODUKTORDER=".$prodOrder.", SICHTBAR=".$sichtbar.",
													zeitpreis_netto=".$zeitPreisNetto.", zeitpreis_brutto=".$zeitPreisBrutto." ";
								$insSq=mysql_query($queryStr);										
								if(!$insSq) $returnMsg .= "Produkt(".$row[2].") insert Error:\n".mysql_error()."\n".$queryStr."\n";
								else $countIns++;
							}
						}
						else{
							$prN=mysql_fetch_array(mysql_query("SELECT ID, NAME FROM products WHERE LOWER(NAME) = LOWER('$row[2]') 
																		AND LOWER(CODE) = LOWER('$row[1]') AND LOWER(REFERENCE) = LOWER('$row[0]') LIMIT 1"));
																		
							if($row[7] == '') $row[7]=NULL;
							if($prN[1] == true){
								
								$upSq=mysql_query("UPDATE products SET REFERENCE='$row[0]', CODE='$row[1]', NAME='$row[2]', PRICEBUY=$priceBuy, PRICESELL=$priceSell,
													CATEGORY=$categorieId, TAXCAT=$taxCat, DISPLAY='$row[7]', VARPRICE=$varPrice, PRINTNAME='$row[9]', 
													NEGATIVEPRICE=$negPrice, PRODUKTORDER=$prodOrder, SICHTBAR=$sichtbar,
													zeitpreis_netto=".$zeitPreisNetto.", zeitpreis_brutto=".$zeitPreisBrutto."
													WHERE ID=".$prN[0]." ");	
							
								if(!$upSq) $returnMsg.= "Error up ".mysql_error();
								else $countUp++;
										
							}
							else {
								$insSq=mysql_query("INSERT INTO products SET REFERENCE='$row[0]', CODE='$row[1]', NAME='$row[2]', PRICEBUY=$priceBuy, 
													PRICESELL=$priceSell, CATEGORY=$categorieId, TAXCAT=$taxCat, DISPLAY='$row[7]', VARPRICE=$varPrice, 
													PRINTNAME='$row[9]', NEGATIVEPRICE=$negPrice, PRODUKTORDER=$prodOrder, SICHTBAR=$sichtbar, 
													zeitpreis_netto=".$zeitPreisNetto.", zeitpreis_brutto=".$zeitPreisBrutto." ");
							
								if(!$insSq) $returnMsg .= "Error ins ".mysql_error();
								else $countIns++;
							
								
							}
						}
						$rowCount++;
						
					}
					
					mysql_query("COMMIT");
					fclose($handle);


				}
					
					if($countContinue > 0){ if($countContinue == 1)$x="Datensatz"; else $x="Datensätze"; $continueResultTxt=", ".$countContinue." Produkt ".$x." übersprungen";	}
					else $continueResultTxt ="";
					if($countInsCat > 0){ if($countInsCat == 1)$z="Datensatz"; else $z="Datensätze"; $categorieResultTxt=", ".$countInsCat." Warengruppen ".$z." eingefügt";			}
					else $categorieResultTxt="";
					if($countIns == 1)$y="Datensatz"; else $y="Datensätze";
					if($countUp == 1)$w="Datensatz"; else $w="Datensätze";
					$returnMsg.=$countUp." Produkt ".$w." updated, ".$countIns." Produkt ".$y." eingefügt ".$categorieResultTxt.$continueResultTxt.".\n";
					
					$checkQl=mysql_query("SELECT REFERENCE, NAME FROM products group by REFERENCE having count(*) >= 2");
					if(mysql_num_rows($checkQl))$returnMsg.="\n\n";
					while($checkR=mysql_fetch_array($checkQl)){
						$returnMsg.="Mehrfach Eintrag in Spalte Reference gefunden: ".$checkR['NAME']." ".$checkR['REFERENCE']."\n";
					
					}
					
				$endT = date('h:i:s');
				$runT = strtotime($endT) - strtotime($startT);
				return $returnMsg."<br />Execution time: ".$runT;
				
			}
		}
		
	}
	
	function importTimeoutError() {
		$a=error_get_last();
		if($a !== null){ 
			if($a['message'] == true && preg_match('/^maximum execution time/i', $a['message']) === 1 ){
				echo "<p style='text-align:center; font-size:1em;'>".$a['message']."<p>
					<button style=' width:200px; height:auto; min-height:28px; background:orange; margin:5px auto; border:1px solid silver; 
							color:#fff; font-weight:bold; font-size:1em; border-radius:3px; display:block; cursor:pointer;' 
						class='button_gross' onClick=\"document.location.href='daten_import.php'\">Zurück zu Daten importieren</button>";
				
				 set_error_handler('count', 0);
			}
		}

	}
	
	function getReportDateWhere($tableCol, $callSource=false){
			#  callSource noch nicht genützt !!!!
		$startTime = '00:00'; $endTime='23:59:59';
		if(isset($_POST['startTime']) && $_POST['startTime'] != "00:00")	{			
			$startTx=$_POST['startTime'];
			if(preg_match('/^(([0-1][0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?)$/', $startTx)) $startTime=$startTx;
			else $startTime='00:00:00';
			
		}
		if(isset($_POST['endTime']))	{
			$endTx=$_POST['endTime'];
			if($endTx == '23:59' ) $endTx = '23:59:59';
			if(preg_match('/^(([0-1][0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?)$/', $endTx)) $endTime=$endTx;
			else $endTime='23:59:59';
			
		}
		if(isset($_POST['startDate']) && $_POST['startDate'] != "")	{
			$startDate=$_POST['startDate'];	
			$startDatePost=true;
			
					#    scheint zwingend   " checkdate ( int $month , int $day , int $year ) "  in dieser reihenfolge zu sein !!!
			if(checkdate(date('m', strtotime($startDate)),date('d', strtotime($startDate)),date('Y', strtotime($startDate)))==true) $checkStartDate=true;
			else  	$checkStartDate=false;
		}
		else { $startDate=false; $checkStartDate=false;	}
		
		
		
		if(isset($_POST['endDate']) && $_POST['endDate'] != "")	{
			$endDate=$_POST['endDate'];
			$endDatePost=true;
			if(checkdate(date('m', strtotime($endDate)),date('d', strtotime($endDate)),date('Y', strtotime($endDate)))==true) $checkEndDate=true;
			else 	$checkEndDate=false;
		}
		else { $endDate=false; $checkEndDate=false;	}
		
		// weder start noch enddate gesetzt
		if($checkStartDate==false && $checkEndDate==false){
			$dateWhere="";
			if($callSource=='GDPdU_export')$dateWhere = array(false, false);
			$whereInfo="<span >Kein Datum gesetzt</span >";
		}
		//  start datum gesetzt end datum nicht -> select das Start datum als einen tag
		else if($checkStartDate==true && $checkEndDate==false){
			$dateWhere="WHERE ".$tableCol." >= '".$startDate." ".$startTime."' AND  ".$tableCol." < '".$startDate." ".$endTime."'";
			if($callSource=='GDPdU_export')$dateWhere = array($startDate." ".$startTime, $startDate." ".$endTime);
			$dDate = strtotime( $startDate." ".$startTime );
			$infoD = date( 'j.n.Y H:i', $dDate );
			$whereInfo="<span >Vom: <b>".$infoD."</span>";
		}
		//  start und end datum gestzt -> select between start und end datum 
		else if($checkStartDate==true && $checkEndDate==true){
			$dateWhere = "WHERE ".$tableCol." >= '".$startDate." ".$startTime."' AND ".$tableCol." < '".$endDate." ".$endTime."'";
			if($callSource=='GDPdU_export')$dateWhere = array($startDate." ".$startTime, $endDate." ".$endTime);
			$dDateSt = strtotime( $startDate." ".$startTime  );
			$infoDst = date( 'j.n.Y H:i', $dDateSt );
			$dDateEnd = strtotime( $endDate." ".$endTime  );
			$infoDend = date( 'j.n.Y H:i', $dDateEnd );
			$whereInfo="<span >Von: <b>".$infoDst."</b> bis: <b>".$infoDend."</b></span>";
		}
		//  start nicht gesetzt end datum schon gestzt -> kein datums select, output ohne datums einschränkung
		else if($checkStartDate==false && $checkEndDate==true){
			$dateWhere="";
			if($callSource=='GDPdU_export')$dateWhere = array(false, false);
			$whereInfo="<span >Kein Datum gesetzt</span >";
		}
		#writeLog(basename( __FILE__)." ". __LINE__ . "report date Where -> ".$dateWhere." -->>>> ".$startTime." / ".$endTime);
		
		$resultArray=array($dateWhere, $whereInfo);
		
		return $resultArray;
	}
	
	
	function sitPosEncrypt($string, $key) {
		$result = '';
		  for($i=0; $i<strlen ($string); $i++) {
			$char = substr($string, $i, 1);
			$keychar = substr($key, ($i % strlen($key))-1, 1);
			$char = chr(ord($char)+ord($keychar));
			$result.=$char;
		  }

		return base64_encode($result);
	}
	
	function sitPosDecrypt($string, $key) {
		  $result = '';
		  $string = base64_decode($string);

		  for($i=0; $i<strlen($string); $i++) {
			$char = substr($string, $i, 1);
			$keychar = substr($key, ($i % strlen($key))-1, 1);
			$char = chr(ord($char)-ord($keychar));
			$result.=$char;
		  }

		  return $result;
	}
	
	function getMacAddresses(){
		ob_start(); // Turn on output buffering
		system('getmac /fo csv'); //Execute external program to display output
		$mycom=ob_get_contents(); // Capture the output into a variable
		ob_clean(); // Clean (erase) the output buffer

		$myCom=explode(PHP_EOL, $mycom);
		$macAddrArray=array();
			
		for($i=0; $i < count($myCom); $i++){
			$elem =explode(",", $myCom[$i]); # erstes element vor dem "," sollte die mac Adresse sein oder die header bzw letzte zeile
			$elem=str_replace(array('-', '"', "'"), "", $elem[0]);
			if (ctype_xdigit($elem))array_push($macAddrArray, $elem);
			
		}
		
		return $macAddrArray;	
	}
	
	function updateUserActive(){
		$updateUserAct=mysql_query("UPDATE benutzer_aktiv SET last_active=NOW() WHERE session_id = '".session_id()."' ");
		if(!$updateUserAct) file_put_contents('kpcheckit.txt', "\n".basename( __FILE__)." / ". __LINE__ ." update benutzer aktiv DB: ".mysql_error()." \n", FILE_APPEND);
			
	}
	
	function checkCurrentActiveUser(){
			# Abfrage logik: zählt aktive ip's also wie viel Geräte (hardware) ist/bzw war im Zeitfenster (USER_ACTIVE_LIMIT) und hat sich nicht abgemeldet -> session id.
			# ZUsätzlich wird abgefragt wie jung/alt der letzte violation Eintrag ist, ist dieser innerhalb vom USER_ACTIVE_LIMIT wird kein weiterer Eintrag in den
			# violation Table gemacht, Verletzung ist schon eingetragen

		$activeUsers=mysql_fetch_array(mysql_query("SELECT COUNT(DISTINCT(user_ip)) AS anzIp 										
							FROM benutzer_aktiv
							WHERE ROUND(time_to_sec((TIMEDIFF(NOW(), last_active)))/60) < ".USER_ACTIVE_LIMIT."
							AND LENGTH(session_id) > 10"));
							
		if(!$activeUsers) writeSitposLog(basename( __FILE__)." ". __LINE__ . "Query Anzahl aktive Benutzer Fehler: ".mysql_error());
										
		$checkLastVio=mysql_fetch_array(mysql_query("SELECT MIN(ROUND(time_to_sec((TIMEDIFF(NOW(), license_violation.dtime)))/60)) AS vioTimeDif
													FROM license_violation"));
		if(!$checkLastVio) writeSitposLog(basename( __FILE__)." ". __LINE__ . "Query Violation Eintrag im Zeitfenster Fehler: ".mysql_error());

		$checkInstDate=mysql_num_rows(mysql_query("SELECT bon_id FROM abgeschlossener_bon 
							WHERE  DATE(bon_erstellt_datum) < DATE(NOW() - INTERVAL ".LICENSE_GRACE_PERIOD." DAY) LIMIT 1"));
		
		if(!$checkInstDate) writeSitposLog(basename( __FILE__)." ". __LINE__ . "Query Installation älter als Grace Time Fehler: ".mysql_error());

		$insertVio="";
				
		if((!defined('BASIS_LIZENZ_VORHANDEN') || (defined('BASIS_LIZENZ_VORHANDEN') && strtolower(BASIS_LIZENZ_VORHANDEN) != 'ja')) 
							&& $checkInstDate['bon_id'] > 0  && ($checkLastVio['vioTimeDif'] > USER_ACTIVE_LIMIT  || $checkLastVio['vioTimeDif'] == false)){
			$insQl=mysql_query("INSERT INTO license_violation SET type = 'BASIS_LIZENZ', dtime = NOW(), detail= 'Basis Lizenz Fehlt'");
			if(!$insQl) writeSitposLog(basename( __FILE__)." ". __LINE__ . "License Violation Basis Insert Fehler: ".mysql_error());
		}
		
		if((!defined('ANZAHL_USER_LIZENZEN') || (defined('ANZAHL_USER_LIZENZEN') && ANZAHL_USER_LIZENZEN < $activeUsers['anzIp']))
				&& $checkInstDate['bon_id'] > 0  && ($checkLastVio['vioTimeDif'] > USER_ACTIVE_LIMIT || $checkLastVio['vioTimeDif'] == false)){
			$insQl=mysql_query("INSERT INTO license_violation SET type = 'USERS_LIZENZ', dtime = NOW(), detail= 'Users Lizenz überschritten'");
			if(!$insQl) writeSitposLog(basename( __FILE__)." ". __LINE__ . "License Violation User Insert Fehler: ".mysql_error());
		}

		return $activeUsers['anzIp'];
	}

	function checkLicenseViolations($calFrom=false, $printMode=false, $kassaAbschlId=false){
				
				#vergleich von lizenzkeys und lizenzeinträgen in konfiguration_sitpos. die funktion liest die werte
				#aus  Structurelicense_encrypted und macht ein update mit diesen werten auf konfiguration_sitpos
				
				$updateLicVal=check_license_on_kassenabschl();
				#writeLog(basename( __FILE__)." ". __LINE__ . "Function -> check_license_on_kassenabschl: ".$updateLicVal);

				if($updateLicVal =='Basislizenz Fehler') $basisLicEncrypt = 'fehlt';
				else $basisLicEncrypt = '';
				
				$abschlRunTime=mysql_fetch_array(mysql_query("SELECT datum_start, datum_ende FROM kassa_abschluesse 
							WHERE id = (SELECT MAX(id) FROM kassa_abschluesse)"));
							
				if(!$abschlRunTime) file_put_contents('kpcheckit.txt', "\n".date('Y-m-d H:i')." - ".basename( __FILE__)." / ". __LINE__ ." Query Laufzeit Kassenabschl. Fehler: ".mysql_error()."\n", FILE_APPEND);
				
				if (strtotime($abschlRunTime['datum_ende']) == 0) $endeDateTime=date('Y-m-d H:i:s');
				else $endeDateTime=$abschlRunTime['datum_ende'];
						
				$checkLic=mysql_query("SELECT type, dtime, detail FROM license_violation 
											WHERE dtime > '".$abschlRunTime['datum_start']."' AND  dtime < '".$endeDateTime."' ");
											
				if(!$checkLic) file_put_contents('kpcheckit.txt', "\n".date('Y-m-d H:i')." - ".basename( __FILE__)." / ". __LINE__ ." Query Verletzungen während letzten Kassenabschl. Fehler: ".mysql_error()."\n", FILE_APPEND);

				$baseVio=0;
				$userVio=0;
				while($checkLicRow=mysql_fetch_array($checkLic)){
					if(strtolower($checkLicRow['type']) == 'basis_lizenz'){
						$baseVio++;
					}
					else if(strtolower($checkLicRow['type']) == 'users_lizenz'){
						$userVio++;
					}
				}

				if($baseVio > 0 || $userVio > VIOLATION_TOLERANCE || $basisLicEncrypt == 'fehlt' ){
					if($baseVio > 0 || $basisLicEncrypt == 'fehlt'){
							$openLicenseViolationDialog=true;
							if($calFrom == 'kassenabschluss' && $printMode == 'pdfPrint') $licenseViolationDialogTxt="Prüfung der Lizenzierung fehlgeschlagen.\n\nBasis Lizenzierung ausständig.";
							else if($calFrom == 'kassenabschluss' && $printMode == 'htmlPrint') $licenseViolationDialogTxt="<p class=\'licenseDialogP\' >Prüfung der Lizenzierung fehlgeschlagen.</p><p class=\'licenseDialogP\' >Basis Lizenzierung ausständig.</p>";
							
							else $licenseViolationDialogTxt="Basis Lizenzierung für dieses System ausständig.";
							
					}
					
					else if($userVio > VIOLATION_TOLERANCE ){
							$openLicenseViolationDialog=true;
							if($calFrom == 'kassenabschluss' && $printMode == 'pdfPrint')
								$licenseViolationDialogTxt="Prüfung der Lizenzierung fehlgeschlagen.\n\nAnzahl Benutzer Lizenzen wurde mehrmals überschritten.";
							else if($calFrom == 'kassenabschluss' && $printMode == 'htmlPrint')
								$licenseViolationDialogTxt="<p class=\'licenseDialogP\' >Prüfung der Lizenzierung fehlgeschlagen.</p><p class=\'licenseDialogP\' >Anzahl Benutzer Lizenzen wurde mehrmals überschritten.</p>";
							else $licenseViolationDialogTxt="Anzahl Benutzer Lizenzen wurde mehrmals überschritten.";
						
					}

				}
				else {
						$openLicenseViolationDialog=false;
						$licenseViolationDialogTxt=false;
					
				}
				
				return array($openLicenseViolationDialog, $licenseViolationDialogTxt);
		

	}
	
	function abschlussNullBelegErstellen($callFrom="", $targetMonth=false ){	
		
		//print_r($_REQUEST);
		$functionTarget=false;			# das hier gilt wenn der aufruf von der funktion reactivateSignatureSammelbelegErstellen kommt, könnte auch von monatsbeleg erstellen kommen
		
		$bKennung=false;
		if(isset($_POST['functionTarget']) && strlen($_POST['functionTarget']) > 1) $functionTarget=$_POST['functionTarget'];
		$bonListe=false;
		if(isset($_POST['bonListe']) && strlen($_POST['bonListe']) > 3 ){			
			$bonListe=json_decode($_POST['bonListe']);
			$letzterEintrag=end($bonListe);
			$productName="Sammelbeleg von Bon Nr: ".$bonListe[0][0]." bis Bon Nr.: ".$letzterEintrag[0]." ";
			$productPrintname=$productName;
		}
		
		$formMonth=date('Y-m-d');
		$printTarget=false;
		if($functionTarget == true && $functionTarget == 'reactivateSammelbelegErstellen'){
			$printTarget='reactivatSammelBelegErstellen';
			$bKennung='Sammelbeleg zu Reaktivierung Signatur';
		}
		
		$callFrom=false;
		if ($callFrom=="") if(isset($_REQUEST['callFrom']) && strlen($_REQUEST['callFrom']) > 2) $callFrom = $_REQUEST['callFrom'];
		
		//echo "Monats Nullbeleg erstellen";
		if($targetMonth!=false || (isset($_REQUEST['abschlussMonat']) && strlen($_REQUEST['abschlussMonat']) > 1 && $callFrom != 'nullBelegManuell')){
			
			if($targetMonth==false) $targetMonth=$_REQUEST['abschlussMonat'];
			$productName="Monats Abschluss Beleg ".$targetMonth;
			$productPrintname=$productName;
			$printTarget='monatsbelegErstellen';
				# für den eintrag in den table abschluss Belege
			$bKennung="monats_beleg_".$targetMonth;
			$formMonth=$targetMonth."-01";
		}
		else if($callFrom == 'nullBelegManuell' ){
			if(isset($_POST['manuellBelegTxt']) && strlen($_POST['manuellBelegTxt']) > 2) $productName = $_POST['manuellBelegTxt'];
			else $productName="Manueller Null Beleg";
			$productPrintname=$productName;
			$printTarget='manuellerNullBeleg';
			# für den eintrag in den tabel abschluss Belege
			$bKennung="manueller_nullbeleg";
			$formMonth=date('Y-m-d');
		}
	
		$ignoreDepError=false;
		if(isset($_POST['ignoreError']) && strlen($_POST['ignoreError']) == 'ignoreDeppError') $ignoreDepError=true;
				
		$lastKassenabschl=mysql_fetch_array(mysql_query("SELECT MAX(id) AS LastKassenAbschl FROM kassa_abschluesse"));
		if(!$lastKassenabschl){
			echo "Letzter Kassenabschluss konnte nicht gefunden werden. ".mysql_error();
			return false;
		}
		$kassa_abschluss_id=$lastKassenabschl['LastKassenAbschl'];
		$user=$_SESSION['userId'];
		
		mysql_query("ALTER TABLE abgeschlossener_bon AUTO_INCREMENT = 1");
		mysql_query("ALTER TABLE dep AUTO_INCREMENT = 1");
		mysql_query("START TRANSACTION");
		$abschlBelegError=false;
		$abschlBelegErrorMsg="";

		$insQl=mysql_query("INSERT INTO abgeschlossener_bon SET gesamt_summe=0, verkaufer_id=".$user.", kassa_abschluss_id=".$kassa_abschluss_id.", 
											bon_erstellt_datum = NOW(), dep_nullbeleg = 1 ");
			if(!$insQl){
				#echo "Datenbank Error, schreiben abgeschlossener Bon. ".mysql_error()."\n";
				#echo "Vorgang unvollständig oder gar nicht erfolgt."."\n";
				#return false;
				$abschlBelegError=true;
				$abschlBelegErrorMsg.="Datenbank Error, schreiben abgeschlossener Bon. ".mysql_error()."\n";
			}
			else {
				$inserted_bon_id=mysql_insert_id();
				
				$insBonStQl=mysql_query("INSERT INTO abgeschlossener_bon_steuern SET bon_id = ".$inserted_bon_id.", tax_rate = 0.00, gesamt_betrag = 0.00 ");
				if(!$insBonStQl){
					#echo "<h4>Datenbank Error, schreiben abgeschlossener Bon Steuern. ".mysql_error();
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon  WHERE bon_id = ".$inserted_bon_id." ");
					#return false;
					$abschlBelegError=true;
					$abschlBelegErrorMsg.="Datenbank Error, schreiben abgeschlossener Bon Steuern. ".mysql_error()."\n";
				}
				$taxId=mysql_fetch_array(mysql_query("SELECT ID FROM taxes WHERE RATE = 0.0000"));
				if($taxId['ID'] == false || $taxId['ID'] <= 0) $tax_id=1;
				else  $tax_id = $taxId['ID'];
				
				if($printTarget=='monatsbelegErstellen' || $printTarget=='manuellerNullBeleg' || $printTarget=='nullBelegNachKarteNeu'){
					$insBonPrQl=mysql_query("INSERT INTO abgeschlossener_bon_produkte SET bon_id = ".$inserted_bon_id.", produkt_id = 0, PRICESELL = 0.00,
									PRICESELL_brutto=0, PRICESELL_brutto_gesamt=0, tax=0, tax_gesamt=0,
									NAME = '".$productName."', CATEGORY = 9999, TAXCAT = ".$tax_id.", 
									PRINTNAME = '".$productPrintname."', tax_rate = 0.00 ");
					if(!$insBonPrQl){
						#echo "<h4>Datenbank Error, schreiben abgeschlossener Bon Produkte. ".mysql_error();
						#$delQl=mysql_query("DELETE FROM abgeschlossener_bon  WHERE bon_id = ".$inserted_bon_id." ");
						#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_steuern  WHERE bon_id = ".$inserted_bon_id." ");
						#return false;
						$abschlBelegError=true;
						$abschlBelegErrorMsg.="Datenbank Error, schreiben abgeschlossener Bon Produkte. ".mysql_error()."\n";
					}
				}
				else if($printTarget=='reactivatSammelBelegErstellen'){
					if(is_array($bonListe) && count($bonListe) > 0){
						$insertError=false;
						for($i=0; $i < sizeof($bonListe); $i++){
							$insBonPrQl=mysql_query("INSERT INTO abgeschlossener_bon_produkte SET bon_id = ".$inserted_bon_id.", produkt_id = 0, 
									PRICESELL = '".$bonListe[$i][1]."',
									PRICESELL_brutto=0, PRICESELL_brutto_gesamt=0, tax=0, tax_gesamt=0,
									NAME = 'Bon Nr. ".$bonListe[$i][0]."', CATEGORY = 9999, TAXCAT = ".$tax_id.", 
									PRINTNAME = 'Bon Nr. ".$bonListe[$i][0]."', tax_rate = 0.00 ");
							if(!$insBonPrQl)$insertError=true;
						}
						if($insertError==true){
							#echo "<h4>Datenbank Error, schreiben abgeschlossener Bon Produkte. ".mysql_error();
							#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_produkte  WHERE bon_id = ".$inserted_bon_id." ");
							#$delQl=mysql_query("DELETE FROM abgeschlossener_bon  WHERE bon_id = ".$inserted_bon_id." ");
							#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_steuern  WHERE bon_id = ".$inserted_bon_id." ");
							#return false;
							$abschlBelegError=true;
							$abschlBelegErrorMsg.="Datenbank Error, schreiben abgeschlossener Bon Produkte. ".mysql_error()."\n";
						}
					
					}
					else {
							#echo "<h4>Error, Erstellung vom Nullbeleg fehlgeschlagen, es konnten keine Bondaten für den Sammelbeleg ausgelesen werden. ";
							#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_produkte  WHERE bon_id = ".$inserted_bon_id." ");
							#$delQl=mysql_query("DELETE FROM abgeschlossener_bon  WHERE bon_id = ".$inserted_bon_id." ");
							#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_steuern  WHERE bon_id = ".$inserted_bon_id." ");
							#return false;
							$abschlBelegError=true;
							$abschlBelegErrorMsg.="Error, Erstellung vom Nullbeleg fehlgeschlagen, es konnten keine Bondaten für den Sammelbeleg ausgelesen werden.\n";
					}
				}
				
				$za=mysql_query("SELECT Name FROM zahlungsart WHERE standard = 1 ORDER BY reihenfolge DESC");
				while($zaR=mysql_fetch_array($za)){
					$zahlung=$zaR['Name'];
				}
				if(!isset($zahlung)) $zahlung = 'undefined';
				
				$insAbschlBelZa=mysql_query("INSERT INTO abgeschlossener_bon_zahlung SET bon_id = ".$inserted_bon_id.", Name = '".$zahlung."', 
									zahlbetrag = 0.00, zahlbetrag_tatsaechlich = 0.00 ");
				if(!$insAbschlBelZa){
					#echo "<h4>Datenbank Error, schreiben abgeschlossener Bon Zahlung. ".mysql_error();
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon  WHERE bon_id = ".$inserted_bon_id." ");
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_steuern  WHERE bon_id = ".$inserted_bon_id." ");
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_produkte  WHERE bon_id = ".$inserted_bon_id." ");
					#return false;
					$abschlBelegError=true;
					$abschlBelegErrorMsg.="Datenbank Error, schreiben abgeschlossener Bon Zahlung. ".mysql_error()."\n";
				}
				
					# die if -> welche Belege art und der entsprechenden Werte (monat und beleg kennung) wird oben gesetzt
				$insAbschlBel=mysql_query("INSERT INTO abschluss_belege SET bon_id = ".$inserted_bon_id.", beleg_kennung = '".$bKennung."', 
											abschluss_monat = '".$formMonth."' ");
				if(!$insAbschlBel){
					#echo "<h4>Datenbank Error, schreiben abschluss Belege. ".mysql_error();
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon  WHERE bon_id = ".$inserted_bon_id." ");
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_steuern  WHERE bon_id = ".$inserted_bon_id." ");
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_produkte  WHERE bon_id = ".$inserted_bon_id." ");
					#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_zahlung  WHERE bon_id = ".$inserted_bon_id." ");
					#return false;
					$abschlBelegError=true;
					$abschlBelegErrorMsg.="Datenbank Error, schreiben abschluss Belege. ".mysql_error()."\n";
				}
				
				$dep_table_write_result=dep_table_schreiben($inserted_bon_id, false);
				
				if($dep_table_write_result[0] == false && $ignoreDepError == true){						
						#$delQl=mysql_query("DELETE FROM abgeschlossener_bon  WHERE bon_id = ".$inserted_bon_id." ");
						#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_steuern  WHERE bon_id = ".$inserted_bon_id." ");
						#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_produkte  WHERE bon_id = ".$inserted_bon_id." ");
						#$delQl=mysql_query("DELETE FROM abgeschlossener_bon_zahlung  WHERE bon_id = ".$inserted_bon_id." ");
						#$delQl=mysql_query("DELETE FROM abschluss_belege  WHERE bon_id = ".$inserted_bon_id." ");
						#$delQl=mysql_query("DELETE FROM dep  WHERE beleg_nr = ".$inserted_bon_id." ");						
						#echo "Dep Error: ".$dep_table_write_result[1];
						#return false;
						$abschlBelegError=true;
						if (preg_match("/signatur fehlgeschlagen/i", $dep_table_write_result[1])) {
							$abschlBelegErrorMsg="Dep Error: Signatur Einheit konnte nicht gelesen werden.<br /><br />Null Beleg nicht erstellt.<br /><br />Prüfen Sie ob die Signatur Karte angesteckt ist, prüfen Sie die Signatureinheit durch \"Signatureinheit re-aktivieren\".<br /><br />Im Bedarfsfall Sammelbeleg erstellen !!!<br /><br />Wenn die Signatureinheit erfolgreich ausgelesen wurde, versuchen Sie erneut den Nullbeleg zu erstellen.";
						}
						else {
							$abschlBelegErrorMsg.="Dep Error: Datenerfassungs Protokoll Error. ".$dep_table_write_result[1]."\nNull Beleg nicht erstellt\n";
						}	
				}
				
				if(strtolower(AUSDRUCK_RECHNUNGSBON_PDF) != 'ja'){
					# beim html print werden die qr-images nicht gleich gelöscht, älter als 1 Monat werden hier ausradiert !!!
					global $qrImg_temp_dir;
					$refDate = date("Y-m-d", strtotime("-1 months"));
	
					$xFiles = scandir($qrImg_temp_dir); 
						foreach($xFiles as $dFile){
						  $delFile=$qrImg_temp_dir.$dFile;
						  $fileDate=date ("Y-m-d H:i:s.", filemtime($delFile));
						  if(is_file($delFile) && $fileDate <= $refDate){
								unlink($delFile); // delete file
						  }

						}
				}
	
			}
			
			if($abschlBelegError==false){				
				mysql_query("COMMIT");
				bon_ausdrucken_pdf($inserted_bon_id, $bonHeight=false, $printTarget, $bedienerName=false);	
				
				if($printTarget=='monatsbelegErstellen') echo "success <p></p>";		# keine ausgabe der success Txt kommt aus dem bon drucken !!!
				else if($printTarget=='reactivatSammelBelegErstellen') echo "success <p>Sammelbeleg, Dep Nullbeleg erstellt.</p>";
				else if($printTarget=='manuellerNullBeleg') echo "success <p>Manueller Nullbeleg erstellt.</p>";
				else echo "success <p>Null Beleg erstellt</p>";
					# die success msg wird in bon_ausdrucken_pdf geschrieben konnte hier keinen return abfangen.
			}
			else{
				mysql_query("ROLLBACK");
				mysql_query("ALTER TABLE abgeschlossener_bon auto_increment = 1");
				mysql_query("ALTER TABLE dep auto_increment = 1");
				echo "<p>".$abschlBelegErrorMsg."</p>";
			}
			mysql_query("set autocommit=1");
	}
	
	function monatsAbschlussStatus(){
		if(defined('ZERTIFIKATS_NR') && ZERTIFIKATS_NR > 1000){
			$returnVal= "sig einheit enabled<br /> ";
			# heißt signatureinheit ist aktiv
				#$abschlLetztesMonat = date("Y-m", mktime(0, 0, 0, date("m")-1, date("d"),   date("Y")))."-01";   #funktioniert zb am 31.3.YYYY NICHT
				$abschlLetztesMonat=date('Y-m-01', strtotime(date('Ym01').' -1 months'));		# rechnen immer mit dem 1 tag im monat, so stehts auch in der DB
			#$getMonatsBeleg=mysql_fetch_array(mysql_query("SELECT * FROM abschluss_belege WHERE LOWER(beleg_kennung) LIKE '%monats_beleg%' ORDER BY abschluss_monat DESC LIMIT 1"));
			$getMonatsBeleg=mysql_fetch_array(mysql_query("SELECT * FROM abschluss_belege WHERE LOWER(beleg_kennung) LIKE 'monats_beleg%'
																AND abschluss_monat = '".$abschlLetztesMonat."' "));	
			
			if($getMonatsBeleg['abschluss_monat'] != $abschlLetztesMonat)
			{
				//echo "In Schleife, wo es keinen Monatsbeleg gibt";
				# exist kein abschlussbeleg des letzten monats ausnahme könnte sein, im dep tabel  steht der startbeleg in diesem monats
				# es kann noch keinen abschluss aus dem vorigen monat geben, signatur einheit erst diesen monat aktiviert.
				
				// RFR: auskommentiert, weil nicht der erste des Monats angeschaut wurde, sondern aktueller Tag -1 Monat
				//$getStartBeleg=mysql_query("SELECT * FROM abschluss_belege 
				//				WHERE beleg_kennung = 'signatur_start_beleg' AND abschluss_monat < date_add(now(), interval -1 month)");
				
				// RFR: Wenn der Abschluss beleg VOR dem ERSTEN dieses Monat erstellt wurde, dann wird der Monatsbeleg gemacht
				//      Ansonsten wird angenommen, dass der Startbeleg im aktuellen Monat gemacht wurde
				//      Ist zwar ein bisschen verkehrte Logik, aber sollte trotzdem passen.
				$getStartBeleg=mysql_query("SELECT * FROM abschluss_belege 
								WHERE beleg_kennung = 'signatur_start_beleg' AND abschluss_monat < date_add(date_add(LAST_DAY(NOW()),interval 1 DAY),interval -1 MONTH)");
		
		
				if(mysql_num_rows($getStartBeleg) > 0)
				{		
					if (defined('NULLBELEG_AUTOMATISCH_ERSTELLEN') AND NULLBELEG_AUTOMATISCH_ERSTELLEN=='ja')
					{
						// bei $abschLetztesMonat ist hinten ein Tag angehängt 2018-04-01 - also die letzten 3 wegschneiden
						// Monats Null Beleg automatisch erstellen
						$monat_schliessen=substr($abschlLetztesMonat, 0, -3);
						abschlussNullBelegErstellen("abschlussBeleg", $monat_schliessen);
						return "Nullbeleg (Monatsabschluss) wurde automatisch erstellt !<br />";
					}
					else return "Kein Nullbeleg (Monatsabschluss) aus dem letzten Monat gefunden !<br />";
				}
				else
				{
					//echo "Kein Startbeleg im letzten Monat gefunden";
					return false;
				}			
			}
		}	
		else return false;	
	}


	function check_license_on_kassenabschl(){

		$checkLic=mysql_query("SELECT license FROM license_encrypted");
		$countUser=0;
		$checkBais=false;
		$countCe=0;
		while($checkLicR=mysql_fetch_array($checkLic)){

			$nNat=explode("-", sitPosDecrypt($checkLicR['license'], SITPOS_CRYPT));

			if(strtolower($nNat[0]) == 'basis' || strtolower($nNat[0]) == 'basis light'){
				$checkBais=true;
				$countUser+=$nNat[2];
				$licVersion=$nNat[1];
			}
			else if(strtolower($nNat[0]) == 'user'){
				$countUser+=$nNat[2];
			}
			else if(strtolower($nNat[0]) == 'cekarte'){
				$macArray=getMacAddresses();
				array_map('strtoupper', $macArray);
					# wenn die richtige host Id im lic Key steht, Anzahl dazuzählen
				if(in_array(strtoupper($nNat[4]), $macArray))$countCe+=$nNat[2];
				else{
					# wenn die Host Id nicht stimmt löschen wir den ganzen lizenzeintrag raus
					$licKey=$checkLicR['license'];
					$delLic=mysql_query("DELETE FROM license_encrypted WHERE license = '".$licKey."' ");
								
			writeLog(basename( __FILE__)." ". __LINE__ . "lizenz CE löschen: ".$licKey." -> ".mysql_error());
				}
				
				
			}

		}
		
		$getCeLic=mysql_fetch_array(mysql_query("SELECT wert FROM konfiguration_sitpos WHERE name ='CEKARTE_LIZENZ' LIMIT 1"));
		
		if($getCeLic['wert'] && $countCe != $getCeLic['wert']){
			$updLic=mysql_query("UPDATE konfiguration_sitpos SET wert = '".$countCe."' WHERE name = 'CEKARTE_LIZENZ'");

		}
		
		if($checkBais==true){
			$updUser=mysql_query("UPDATE konfiguration_sitpos SET wert = ".$countUser." WHERE name = 'ANZAHL_USER_LIZENZEN' ");
			$updVer=mysql_query("UPDATE konfiguration_sitpos SET wert = '".$licVersion."' WHERE name = 'LIZENZ_VERSION' ");
			if($updUser && $updVer) return "Lizenzkey Check true";
		}
		else {
			$updUser=mysql_query("DELETE FROM konfiguration_sitpos WHERE name = 'BASIS_LIZENZ_VORHANDEN' OR name = 'BASIS_LIGHT_LIZENZ_VORHANDEN' ");
			return "Basislizenz Fehler";
		}
	}
	
	function log_to_file($string, $logfile=false, $tee=false)
	{
		if ($tee) echo $string.PHP_EOL;
		
		if (!$logfile) 
		{
			$logfile = "log/logfile.log";
			if (!file_exists("log")) mkdir ("log");
		}	
		$zeit=date("Y-m-d H:m:s");
		$myfile = file_put_contents($logfile, $zeit."\t".$string.PHP_EOL , FILE_APPEND | LOCK_EX);
	}
		
	function writeLog($xPos=false, $logStr=false){	
		if(basename( __DIR__)== '' ) $pPath='../';
		else $pPath='';
		file_put_contents($pPath.'kpcheckit.txt',$xPos." ".date('Y-m-d H:i')."---   ".basename( __DIR__) ."\n".$logStr."\n", FILE_APPEND);
					
	}
	
	function writeSitposLog($xPos=false, $logStr=false){	
		if(basename( __DIR__)== '' ) $pPath='../';
		else $pPath='';
		if(defined('BASIS_LIZENZ_VORHANDEN') && strtolower(BASIS_LIZENZ_VORHANDEN) == 'ja') $basisLizenz=BASIS_LIZENZ_VORHANDEN;	
		else if(defined('BASIS_LIGHT_LIZENZ_VORHANDEN') && strtolower(BASIS_LIGHT_LIZENZ_VORHANDEN) == 'ja') $basisLizenz="(light) ".BASIS_LIGHT_LIZENZ_VORHANDEN;
		else $basisLizenz = "nicht gefunden";
		file_put_contents($pPath.'sitposLog.txt', $xPos." ".date('Y-m-d H:i:s')." ".KASSA_ID." Basis Lizenz: ".$basisLizenz."\n".$logStr."\n", FILE_APPEND);
					
	}
	
	function calculateCasbook($kassenabschlStartId, $kassenabschlEndeId, $opTarget=false){
		$cashbookResultArray=array();
			$dbError=false;
			$dbErrorMsg="";
			$sumUst=0;
			$sumVorst=0;
			//define('KASSABUCH_DETAIL_TAGESLOSUNG', 'tageslosung');
			//define('KASSABUCH_DETAIL_TAGESLOSUNG', 'kategorien');
			//define('KASSABUCH_DETAIL_TAGESLOSUNG', 'steuern');
			if (KASSABUCH_DETAIL_TAGESLOSUNG==='tageslosung')
			{
				$losungQl=mysql_query("SELECT abgeschlossener_bon.bon_id AS bonId, sum(zahlbetrag) as zahlung, 
				SUM(zahlbetrag - (SELECT SUM(gesamt_betrag) FROM abgeschlossener_bon_steuern WHERE bon_id = bonId )) AS taxBetr, 
				DATE_FORMAT(bon_erstellt_datum, '%Y-%m-%d') AS zahlungDay, bon_erstellt_datum,
				abgeschlossener_bon_zahlung.Name AS zahlungsArt, kassabuch_wirksam, kassa_abschluss_id
				FROM abgeschlossener_bon
				left join abgeschlossener_bon_zahlung ON abgeschlossener_bon_zahlung.bon_id = abgeschlossener_bon.bon_id
				LEFT JOIN zahlungsart ON zahlungsart.Name = abgeschlossener_bon_zahlung.Name
				WHERE kassa_abschluss_id >= ".$kassenabschlStartId." AND kassa_abschluss_id <= ".$kassenabschlEndeId."  AND kassabuch_wirksam = 1
				GROUP BY zahlungDay, zahlungsArt");
				
				if(!$losungQl){
					$dbError = true;
					$dbErrorMsg.=mysql_error();
				}
				else{
					while($losungRes=mysql_fetch_array($losungQl)){
						$sumUst+=$losungRes['taxBetr'];
						$xDate=$losungRes['zahlungDay'];
						$summeBetrag=$losungRes['zahlung'];
						$tmpArray=array('datum' => $xDate, 'betrag' => $summeBetrag, 'ust' => $losungRes['taxBetr'], 
										'vorst' => 0, 'zahlart' => $losungRes['zahlungsArt'], 
										'titel' => "Tageslosung", 'bemerkung' => "");
						array_push($cashbookResultArray, $tmpArray);
						$tmpArray=array();
					}
					
				}
			}
			else
			{
				if (KASSABUCH_DETAIL_TAGESLOSUNG==='kategorien')
				{
					$sqlQ2="SELECT id, datum_start, datum_ende
								FROM kassa_abschluesse
								WHERE id >= ".$kassenabschlStartId." AND 
								id <= ".$kassenabschlEndeId." ";
					//echo $sqlQ2;
					$Q2=mysql_query($sqlQ2);
				
					if(!$Q2){
						$dbError = true;
						$dbErrorMsg.=mysql_error();
					}
				
					while ($row=mysql_fetch_assoc($Q2))
					{
						$output=report_categorie(false, true, $row['id']);
						foreach ($output['body'] as $line)
						{
							$xDate=$row['datum_start'];
							$kassa_abschluss_id=$row['id'];
							$brutto=$line[3];
							$netto=$line[2];
							$kategorie=$line[0];
							$zahlart="";
							$bemerkung="aus Tageslosung";
							$steuer=$brutto-$netto;
							
							$tmpArray=array('datum' => $xDate, 'betrag' => $brutto, 'ust' => $steuer, 
											'vorst' => 0, 'zahlart' => $zahlart, 
											'titel' => $kategorie, 'bemerkung' => $bemerkung);
							array_push($cashbookResultArray, $tmpArray);
						}
					}
				}
				else
				if (KASSABUCH_DETAIL_TAGESLOSUNG==='steuern')
				{
					$sqlQ2="SELECT id, datum_start, datum_ende
								FROM kassa_abschluesse
								WHERE id >= ".$kassenabschlStartId." AND 
								id <= ".$kassenabschlEndeId." ";
					//echo $sqlQ2;
					$Q2=mysql_query($sqlQ2);
				
					if(!$Q2){
						$dbError = true;
						$dbErrorMsg.=mysql_error();
					}
				
					while ($row=mysql_fetch_assoc($Q2))
					{
						// Steuern mit Zahlungsart kassabuch_wirksam
						$output=report_steuer(false, true, $row['id']);
						foreach ($output['body'] as $line)
						{
							$xDate=$row['datum_start'];
							$kassa_abschluss_id=$row['id'];
							$brutto=$line[3];
							$netto=$line[2];
							$kategorie=$line[0];
							$zahlart="";
							$bemerkung="aus Tageslosung";
							$steuer=$brutto-$netto;
							
							$tmpArray=array('datum' => $xDate, 'betrag' => $brutto, 'ust' => $steuer, 
											'vorst' => 0, 'zahlart' => $zahlart, 
											'titel' => $kategorie, 'bemerkung' => $bemerkung);
							array_push($cashbookResultArray, $tmpArray);
						}
					}
				}
			}
			
			$eaZahlungQl=mysql_query("SELECT gesamt_betrag AS zahlung, enthalt_steuer_betrag AS steuer, Bemerkung,
					DAYOFYEAR(zahlung_erfolgt_datum) AS periode, 
					DATE_FORMAT(zahlung_erfolgt_datum,'%Y-%m-%d') AS zahlungDay, zahlung_erfolgt_datum, typ
					FROM ein_aus_zahlungen
					WHERE kassa_abschluss_id >= ".$kassenabschlStartId." AND kassa_abschluss_id <= ".$kassenabschlEndeId."
					ORDER BY zahlungDay, typ");
			if(!$eaZahlungQl){
				$dbError = true;
				$dbErrorMsg.=mysql_error();
			}
			else{
				while($eaZahlungRes=mysql_fetch_array($eaZahlungQl)){
					$ust=0;
					$vorst=0;
					
					if(strtolower($eaZahlungRes['typ']) == 'ein'){
						$ust=$eaZahlungRes['steuer'];
						$eaType="Einzahlung";
						$sumUst+=$ust;
					}
					else if(strtolower($eaZahlungRes['typ']) == 'aus'){
						$vorst=$eaZahlungRes['steuer'];
						$eaType="Auszahlung";
						$sumVorst+=$vorst;
					}
					
					$xDate=$eaZahlungRes['zahlungDay'];
					$summeBetrag=$eaZahlungRes['zahlung'];
					
					# wenn für Excel ..			iconv('UTF-8', 'windows-1252', $pdfContentData[$i][5])
					if($opTarget == 'exportExcelCSV'){
						$bemTxt=iconv('UTF-8', 'windows-1252', $eaZahlungRes['Bemerkung']);
					}
					else{
						$bemTxt=$eaZahlungRes['Bemerkung'];
					}
					
					$tmpArray=array('datum' => $xDate, 'betrag' => $summeBetrag, 'ust' => $ust, 
									'vorst' => $vorst,  'zahlart' => "", 'titel' => $eaType, 'bemerkung' => $bemTxt);
					array_push($cashbookResultArray, $tmpArray);
					$tmpArray=array();
				
				}
				
				$metaArray=array('elemA' => 'metaArray', 'ust' => $sumUst, 'vorst' =>$sumVorst);
				array_unshift($cashbookResultArray, $metaArray);
			
			
			}
			
			$gutscheinAusstellenQl=mysql_query("SELECT SUM(betrag_geladen) AS zahlung, zahlungsart.Name AS zahlungsArt, sum(gs_ausstellen_tax) AS gsAustellenSteuer,
					DATE_FORMAT(datum_buchung,'%Y-%m-%d') AS zahlungDay
					FROM gutschein_buchungen
					LEFT JOIN zahlungsart ON zahlungsart.Name = gutschein_buchungen.zahlungsart_name
					WHERE kassa_abschluss_id >= ".$kassenabschlStartId." AND kassa_abschluss_id <= ".$kassenabschlEndeId." 
						AND verkaufsart = 'gsVerkauf' AND kassabuch_wirksam <> 0
					GROUP BY zahlungDay, zahlungsArt
					ORDER BY zahlungDay, Name");
			
			if(!$gutscheinAusstellenQl){
				$dbError = true;
				$dbErrorMsg.=mysql_error();
			}
			
			else{
				while($gutschRes=mysql_fetch_array($gutscheinAusstellenQl)){
					$ust=$gutschRes['gsAustellenSteuer'];
					$vorst=0;
					$xDate=$gutschRes['zahlungDay'];
					$summeBetrag=$gutschRes['zahlung'];
					$tmpArray=array('datum' => $xDate, 'betrag' => $summeBetrag, 'ust' => $ust, 
								'vorst' => $vorst, 'zahlart' => $gutschRes['zahlungsArt'], 
									'titel' => "Gutschein Ausgabe", 'bemerkung' => "");					
					array_push($cashbookResultArray, $tmpArray);
					$tmpArray=array();
				
				}
			
			}
			if($dbError == false){
				if(count($cashbookResultArray) == 0){
					$cashbookResultArray[0] = array('datum' => date('Y-m-d H:i'), 'betrag' => 0, 'ust' => 0, 'vorst' => 0, 'zahlart' => '', 
										'titel' => "Keine Buchung im Zeitraum", 'bemerkung' => "");
				}
				return $cashbookResultArray;
			}
			else{
				return array("Error", $dbErrorMsg);
			}
	
	}
	
		/*		zahlungs Terminal ID's									
	---------------------------------	*/
	// RFR: Meiner Meinung nach ist das falsch
	// Wenn es zwei Terminals gibt, aber meine IP nicht eingetragen ist, dann wird undefinded zurückgegeben
	// ausgetuascht durch Funktion get_my_bankomat_terminal_id
	// CLEANUP !!!!!
	
	/*
	function getZahlungsTermId(){
		$myIp=getUserIp();
		$zahlTerminalId='undefined';
		$zahlTerminalType='undefined';
		$zahlungsTermId=mysql_query("SELECT terminal_id, ip_adresse, terminal_type FROM zahlungsterminal");
		$numRows=mysql_num_rows($zahlungsTermId);
		if($numRows == 1){
				# gibt nur einen Eintrag, auch wenn hier mehrere IP's stehen würden, nur 1 terminal Id
			$termId=mysql_fetch_array($zahlungsTermId);
			$zahlTerminalId=preg_replace('/\s/', '', $termId['terminal_id']);
			$zahlTerminalType=$termId['terminal_type'];
				# gibt nur einen Eintrag mit mehreren IP's, somit nur 1 terminal Id

		}
		else if($numRows > 1){
			
			while($termId=mysql_fetch_array($zahlungsTermId)){
				$ipStrg=preg_replace('/\s/', '', $termId['ip_adresse']);
				if(strlen($ipStrg) > 2 && $myIp == $ipStrg && strpos($ipStrg, ';') === false){
						# gibt mehr als einen Eintrag in diesen steht nur eine IP, wenn diese übereinstimmt ->  terminal Id
					if($zahlTerminalId == 'undefined'){
						$zahlTerminalId=$termId['terminal_id'];
						$zahlTerminalType=$termId['terminal_type'];
					}

				}
				else if (strpos($ipStrg, ';') !== false) {
					$termIdArray=explode(";", $ipStrg);
					if (in_array($myIp , $termIdArray)) {
							# wird über array ermittelt, mehrere IP's müssen mit ";" getrennt sein
						if($zahlTerminalId == 'undefined'){
							$zahlTerminalId=$termId['terminal_id'];
							$zahlTerminalType=$termId['terminal_type'];
						}
					}
				}				
			}
		}
			# return Value is string, wird in js verwendet (kassieren.php ca 1300) und dort gesplittet
		return $zahlTerminalId.";".$zahlTerminalType;
	}
	*/
	
	// RFR:
	// sucht Anhand der IP Adresse des Clients das passende Terminal heraus
	// wenn kein Terminal anhang der IP Adresse gefunden wid, dann wird das erste Terminal zurückgegeben
	// hier gehört noch ein Default Terminal in der DB Angelegt
	// Parameter: javascript: wenn true, dann werden wie werte mit ; getrennt zurückgegeben, ansonsten für php als array
	function get_my_bankomat_terminal_id($javascript=false)
	{
		$myIp=getUserIp();
		$zahlTerminalId='undefined';
		$zahlTerminalType='undefined';
		$sql="SELECT terminal_id, ip_adresse, terminal_type FROM zahlungsterminal WHERE ip_adresse LIKE '%".$myIp."%' LIMIT 1";
		$zahlungsTermId=mysql_query($sql);
		$numRows=mysql_num_rows($zahlungsTermId);
		if($numRows == 0)
		{
			$sql="SELECT terminal_id, ip_adresse, terminal_type FROM zahlungsterminal LIMIT 1";
			$zahlungsTermId=mysql_query($sql);
			if (! $zahlungsTermId) echo "SQL Fehler: ". $mysql_error();
			$numRows=mysql_num_rows($zahlungsTermId);
			if($numRows == 0)
			{
				echo "FEHLER: keine Zahlungsterminals definiert";
				echo "Fehler: $sql $numRows" . mysql_error();
				return (false);
			}
			else
			{
				$termId=mysql_fetch_array($zahlungsTermId);
				$zahlTerminalId=preg_replace('/\s/', '', $termId['terminal_id']);
				$zahlTerminalType=$termId['terminal_type'];
			}
		}
		else
		{
			// Der Eintrag von der IP Adresse wurde gefunden
			$termId=mysql_fetch_array($zahlungsTermId);
			$zahlTerminalId=preg_replace('/\s/', '', $termId['terminal_id']);
			$zahlTerminalType=$termId['terminal_type'];
		}
		if ($javascript) return $zahlTerminalId.";".$zahlTerminalType;
		else return (array($zahlTerminalId, $zahlTerminalType));
		
	}
	
	//RFR:
	//Funktion gibt Anhand des Terminal Types den command line zurück
	function get_command_line_for_ce_terminal($terminalType, $zahlTerminalId=false)
	{
		if(strtolower($terminalType) == 'six')
		{
			$command_line="six_zahlen.exe";
		}
		if(strtolower($terminalType) == 'zvt')
		{
			$command_line="zvt_zahlen.exe";
		}
		if(strtolower($terminalType) == 'hobex')
		{
			$command_line=$zahlTerminalId."\\hobex_zahlen.exe";
		}
		return $command_line;
	}
	
	function write_audit_log($string)
	{
		$insQl=mysql_query("INSERT INTO auditing SET benutzer = '".$_SESSION["userName"]."', konfigtitel = '".$string."',
										funktion = '".$string."', datumzeit = NOW()     ");
	}
	
	/*    Datum Wochentag Array */
	$tage = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
	$wd=$tage[date('w')];
	

	
?>
