* @version 1.1 */ class HTMLConvert{ var $filename = "temp.html"; var $HTMLTEXTxml; var $HTMLTEXausgabe; var $HTMLTEXstatus=array(); var $HTMLTEXstatus_name=""; /** * Konvertiert HTMLText zu Text * * @param string html * @return string text */ function HTML2Text($HTML){ $HTML = strip_tags($HTML); $HTML = html_entity_decode($HTML); $HTML = trim(str_replace("€","",$HTML)); return $HTML; } /** * Konvertiert einen Text zum HTML Zeichen * @param string $text * @return string $HTML */ function Text2HTML($text){ $text = str_replace("","ä",$text); $text = str_replace("","ü",$text); $text = str_replace("","ö",$text); $text = str_replace("","Ä",$text); $text = str_replace("","Ü",$text); $text = str_replace("","Ö",$text); $text = str_replace("","ß",$text); return $text; } /** * Entfernt HTML Tags * * @param String html * @param String tag * @return String bereingtes HTML */ function DeleteTag($html,$tag){ $Status=0; $TempHTML=""; if ($tag == "*"){ /* $html = preg_replace("/\<(.*?)\>/si", "", $html); $html = preg_replace("/\<\/(.*?)\>/si", "", $html); */ $TempHTML=strip_tags($html); }else{ $html = preg_replace("/<$tag(.*?)>/si", "", $html); $html = preg_replace("/<\/$tag(.*?)>/si", "", $html); $TempHTML=$html; /* for ($i=0 ; $i<=strlen($html); $i++){ if (strtolower(substr($html,$i,strlen($tag) + 1)) == "<" . strtolower($tag)){$Status=1;$i=$i+strlen($tag) + 1;} if (strtolower(substr($html,$i,strlen($tag) + 2)) == ""){$Status=0;} } } */ } return $TempHTML; } /** * Liefert den Inhalt eines Tags * * TODO: Muss noch besser ausgebaut werden */ function getHTMLTag($html, $tag){ $Inhalt=""; for ($i = 0 ; $i <= strlen($html) ; $i++){ if (strtolower(substr($html,$i,(strlen($tag)+2) )) == "<" . strtolower($tag) . ">"){$status=1;$i=$i+strlen($tag)+2;} if (strtolower(substr($html,$i,(strlen($tag)+3) )) == ""){$status=0;break;} if ($status==1){$Inhalt .= substr($html,$i,1);} } return $Inhalt; } /** * Konvertiert Text zu HTML Konformen Text * * @param String wert * @return String html **/ function HTMLencode($wert){ $Sonderzeichen = get_html_translation_table(HTML_ENTITIES); $Sonderzeichen["<"]="<"; $Sonderzeichen[">"]=">"; return strtr($wert,$Sonderzeichen); } /** * Konvertiert HTML zu Text * * @param String wert * @return String text **/ function HTMLdecode($wert){ $Sonderzeichen = get_html_translation_table(HTML_ENTITIES); $Sonderzeichen["<"]="<"; $Sonderzeichen[">"]=">"; foreach ($Sonderzeichen as $id => $value){ $SonderzeichenAnders[$value]=$id; } return strtr($wert,$SonderzeichenAnders); } function FlashHTMLencode($wert){ $Sonderzeichen["\""]="""; $$Sonderzeichen["/"]="/"; $Sonderzeichen[";"]=";"; $Sonderzeichen["<"]="<"; $Sonderzeichen[">"]=">"; $Sonderzeichen[";"]=";"; $Sonderzeichen["="]="="; $Sonderzeichen["#"]="#"; $Sonderzeichen["&"]="&"; $Sonderzeichen["!"]="!"; $Sonderzeichen["$"]="$"; $Sonderzeichen["%"]="%"; $Sonderzeichen["'"]="'"; $Sonderzeichen["("]="("; $Sonderzeichen[")"]=")"; $Sonderzeichen["*"]="*"; $Sonderzeichen["+"]="+"; $Sonderzeichen[","]=","; $Sonderzeichen["-"]="-"; $Sonderzeichen["."]="."; $Sonderzeichen[":"]=":"; $Sonderzeichen["?"]="?"; $Sonderzeichen["@"]="@"; $Sonderzeichen["["]="["; $Sonderzeichen["\\"]="\"; $Sonderzeichen["]"]="]"; $Sonderzeichen["^"]="^"; $Sonderzeichen["_"]="_"; $Sonderzeichen["`"]="`"; $Sonderzeichen[""]="€"; $Sonderzeichen["-"]="­"; $Sonderzeichen["'"]="´"; $Sonderzeichen[","]="¸"; $temp = $wert; foreach ($Sonderzeichen as $id => $value){ $temp = str_replace($id,$value,$temp); } return $temp; } function FlashHTMLdecode($wert){ $Sonderzeichen["\""]="""; $$Sonderzeichen["/"]="/"; $Sonderzeichen[";"]=";"; $Sonderzeichen["<"]="<"; $Sonderzeichen[">"]=">"; $Sonderzeichen[";"]=";"; $Sonderzeichen["="]="="; $Sonderzeichen["#"]="#"; $Sonderzeichen["&"]="&"; $Sonderzeichen["!"]="!"; $Sonderzeichen["$"]="$"; $Sonderzeichen["%"]="%"; $Sonderzeichen["'"]="'"; $Sonderzeichen["("]="("; $Sonderzeichen[")"]=")"; $Sonderzeichen["*"]="*"; $Sonderzeichen["+"]="+"; $Sonderzeichen[","]=","; $Sonderzeichen["-"]="-"; $Sonderzeichen["."]="."; $Sonderzeichen[":"]=":"; $Sonderzeichen["?"]="?"; $Sonderzeichen["@"]="@"; $Sonderzeichen["["]="["; $Sonderzeichen["\\"]="\"; $Sonderzeichen["]"]="]"; $Sonderzeichen["^"]="^"; $Sonderzeichen["_"]="_"; $Sonderzeichen["`"]="`"; $Sonderzeichen[""]="€"; $Sonderzeichen["|"]="¦"; $Sonderzeichen["-"]="­"; $Sonderzeichen["'"]="´"; $Sonderzeichen[","]="¸"; $temp = $wert; foreach ($Sonderzeichen as $id => $value){ $temp = str_replace($value,$id,$temp); } return $temp; } } ?> * @version 1.1 */ class HTMLObjekte{ var $db; /** * Konstruktor */ function __construct(){$this->HTMLObjekte();} function HTMLObjekte(){ $c = new Connection(); $this->db=$c->get(); $this->db->SetFetchMode(ADODB_FETCH_BOTH); } /** * getSelectBySQL */ function getSelectBySQL($name,$sql,$selected,$size=1,$addData=array()){ $HTML=""; if ($sql){ $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $HTML=""; } } return $HTML; } function getSelectByArray($name,$daten=array(),$selected,$size=1){ $html=""; return $html; } /** * Liefert einen Wert aus der Datenbank zurueck */ function getWert($sql){ $wert=""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $wert = $rs->fields(0); } return $wert; } /** * Liefert eine STab View zurueck * * @param $elemente * @return string $html */ function getSTab($elemente){ } /** * Erzeugt eine Tabelle, die farbliche Zeilen hat * @return unknown_type */ function getTable($header=array(),$daten=array(),$optionen=array()){ // Header $HTML=""; foreach ($header as $id => $value){ $HTML.=""; } $HTML.=""; // Daten $Zaehler=0; $HTML.=""; foreach ($daten as $id => $value){ foreach ($value as $id1 => $value1){ $HTML.=""; if ($Zaehler >= 1){$Zaehler=0;} } } $HTML.=""; } } ?> * @version 1.1 */ class HTMLTemplate{ /** * Konstruktor */ function HTMLTemplate(){ } /** * get - Liefert ein geparstes Template */ function get($filename,$austauschen=array()){ $HTML=""; if (file_exists($filename)){ $F=new Filesystem(); $HTML=$F->fread($filename); if (is_array($austauschen)){ foreach ($austauschen as $id => $value){ $HTML=str_replace("{\$".$id."}",$value,$HTML); $HTML=str_replace($id,$value,$HTML); } } } return $HTML; } } ?>widths=$w; } function SetAligns($a){ //Set the array of column alignments $this->aligns=$a; } function Header($line=0){ global $MyXStarConf; // Nettorechnung?? if ($this->Netto){ $TempFilename = DIR_FS_CATALOG . "includes/modules/XStar/images/rechnung_bg_netto.jpg"; if (file_exists($TempFilename)){ $this->Image($TempFilename,-5,50); } } if ($this->Leer==true){ }else{ // Header Logo setzten if ($this->Grafik){ $TempFilename = DIR_FS_CATALOG . "templates/" . CURRENT_TEMPLATE . "/img/fpdf_head.jpg"; if (file_exists($TempFilename)){ $this->image($TempFilename,-5,0,220); } if ($this->page == 1){ $this->SetFont($MyXStarConf["xstar_pdfrechnung_fontfamiliy_absender"],'U',$MyXStarConf["xstar_pdfrechnung_fontsize_absender"]); $this->text(25,53,$this->Absender); //$this->text(25,40,$this->Absender); NEU TODO: NACH ISO if ($MyXStarConf["xstar_pdfrechnung_anrede_in_anschriftbox"] == 1){ $this->SetFont($MyXStarConf["xstar_pdfrechnung_fontfamiliy_absender"],'',$MyXStarConf["xstar_pdfrechnung_fontsize_absender"]); $this->text(25,57,"Herr / Frau / Firma"); //$this->text(25,44,"Herr / Frau / Firma"); NEU TODO: NACH ISO } } } // Anschrift Platzieren $this->SetFont($MyXStarConf["xstar_pdfrechnung_fontfamiliy_anschrift"],'',$MyXStarConf["xstar_pdfrechnung_fontsize_anschrift"]); if ($line >= 1){ $this->Ln($line); }else{ if ($this->page == 1){ //$this->Ln(37); NEU TODO: NACH ISO $this->Ln(50); $this->MultiCell(100,5,$this->Empfaenger); //$this->Ln(10); NEU TODO: NACH ISO }else{ $this->Ln(30); } } // Falzmarken setzten $this->SetDrawColor(0); $this->Line(3,95,0,95); $this->Line(5,150,0,150); } } function Footer($line=0){ global $MyXStarConf; // Sonstige FooterInformationen setzten if ($this->Grafik){ $TempFilename = DIR_FS_CATALOG . "templates/" . CURRENT_TEMPLATE . "/img/fpdf_foot.jpg"; if (file_exists($TempFilename)){ $this->image($TempFilename,-5,260,220); } $Elemente=0; if ($MyXStarConf["xstar_pdfrechnung_fuss_1_1"]){$Elemente++;} if ($MyXStarConf["xstar_pdfrechnung_fuss_2_1"]){$Elemente++;} if ($MyXStarConf["xstar_pdfrechnung_fuss_3_1"]){$Elemente++;} if ($MyXStarConf["xstar_pdfrechnung_fuss_4_1"]){$Elemente++;} //print $Elemente;exit(); switch ($Elemente){ case 1: $Left1=10; break; case 2: $Left1=10; $Left2=$Left1+110; break; case 3: $Left1=10; $Left2=$Left1+50; $Left3=$Left2+50; break; case 4: $Left1=10; $Left2=$Left1+50; $Left3=$Left2+50; $Left4=$Left3+50; break; } $Top=278; if ($MyXStarConf["xstar_pdfrechnung_fuss_top"]>0){$Top=$MyXStarConf["xstar_pdfrechnung_fuss_top"];} if ($MyXStarConf["xstar_pdfrechnung_fuss_1_1"]){ $this->SetFont($MyXStarConf["xstar_pdfrechnung_fontfamiliy_fusszeile"],'',$MyXStarConf["xstar_pdfrechnung_fontsize_fusszeile"]); $this->text ($Left1,$Top,$MyXStarConf["xstar_pdfrechnung_fuss_1_1"]); $this->text ($Left1,$Top+3,$MyXStarConf["xstar_pdfrechnung_fuss_1_2"]); $this->text ($Left1,$Top+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_1_3"]); $this->text ($Left1,$Top+3+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_1_4"]); } if ($MyXStarConf["xstar_pdfrechnung_fuss_2_1"]){ $this->SetFont($MyXStarConf["xstar_pdfrechnung_fontfamiliy_fusszeile"],'',$MyXStarConf["xstar_pdfrechnung_fontsize_fusszeile"]); $this->text ($Left2,$Top,$MyXStarConf["xstar_pdfrechnung_fuss_2_1"]); $this->text ($Left2,$Top+3,$MyXStarConf["xstar_pdfrechnung_fuss_2_2"]); $this->text ($Left2,$Top+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_2_3"]); $this->text ($Left2,$Top+3+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_2_4"]); } if ($MyXStarConf["xstar_pdfrechnung_fuss_3_1"]){ $this->SetFont($MyXStarConf["xstar_pdfrechnung_fontfamiliy_fusszeile"],'',$MyXStarConf["xstar_pdfrechnung_fontsize_fusszeile"]); $this->text ($Left3,$Top,$MyXStarConf["xstar_pdfrechnung_fuss_3_1"]); $this->text ($Left3,$Top+3,$MyXStarConf["xstar_pdfrechnung_fuss_3_2"]); $this->text ($Left3,$Top+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_3_3"]); $this->text ($Left3,$Top+3+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_3_4"]); } if ($MyXStarConf["xstar_pdfrechnung_fuss_4_1"]){ $this->SetFont($MyXStarConf["xstar_pdfrechnung_fontfamiliy_fusszeile"],'',$MyXStarConf["xstar_pdfrechnung_fontsize_fusszeile"]); $this->text ($Left4,$Top,$MyXStarConf["xstar_pdfrechnung_fuss_4_1"]); $this->text ($Left4,$Top+3,$MyXStarConf["xstar_pdfrechnung_fuss_4_2"]); $this->text ($Left4,$Top+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_4_3"]); $this->text ($Left4,$Top+3+3+3,$MyXStarConf["xstar_pdfrechnung_fuss_4_4"]); } } // Seitenummer setzten if ($line){ }else{ if(!$this->footerset[$this->page]) { $this->SetY(-25); $this->Ln(7); //$this->Cell(175,5,$this->page,0,0,C); } } } function Row($data){ //Calculate the height of the row $nb=0; for($i=0;$iNbLines($this->widths[$i], $data[$i])); $h=(4*$nb); if (isset($this->Config->Conf["descriptioninorder"])){ if ($this->Config->Conf["descriptioninorder"] == "true"){ //$h=(2.5*$nb); $h=(4*$nb); }else{ $h=(5*$nb); } } $h=(5*$nb); //Issue a page break first if needed $this->CheckPageBreak($h); //Draw the cells of the row // Hintergrund $this->SetFillColor(227, 227, 227); for($i=0;$iwidths[$i]; $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L'; //Save the current position $x=$this->GetX(); $y=$this->GetY(); //Draw the border if($this->TabellenRahmen == 1){ $this->Rect($x, $y, $w, $h); } //Print the text $this->MultiCell($w, 5, $data[$i], 0, $a, 0); //Put the position to the right of the cell $this->SetXY($x+$w, $y); } if ($this->StatusZeileFarbe==true){ $this->StatusZeileFarbe=false; }else{ $this->StatusZeileFarbe=true; } //Go to the next line $this->Ln($h); } function CheckPageBreak($h){ //If the height h would cause an overflow, add a new page immediately if($this->GetY()+$h>$this->PageBreakTrigger) $this->AddPage($this->CurOrientation); } function NbLines($w, $txt){ //Computes the number of lines a MultiCell of width w will take $cw=&$this->CurrentFont['cw']; if($w==0) $w=$this->w-$this->rMargin-$this->x; $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; $s=str_replace("\r", '', $txt); $nb=strlen($s); if($nb>0 and $s[$nb-1]=="\n") $nb--; $sep=-1; $i=0; $j=0; $l=0; $nl=1; while($i<$nb) { $c=$s[$i]; if($c=="\n") { $i++; $sep=-1; $j=$i; $l=0; $nl++; continue; } if($c==' ') $sep=$i; $l+=$cw[$c]; if($l>$wmax) { if($sep==-1) { if($i==$j) $i++; } else $i=$sep+1; $sep=-1; $j=$i; $l=0; $nl++; } else $i++; } return $nl; } var $B=0; var $I=0; var $U=0; var $HREF=''; var $ALIGN=''; function WriteHTML($html){ //HTML parser $html=str_replace("\n", ' ', $html); $a=preg_split('/<(.*)>/U', $html, -1, PREG_SPLIT_DELIM_CAPTURE); foreach($a as $i=>$e) { if($i%2==0) { //Text if($this->HREF) $this->PutLink($this->HREF, $e); elseif($this->ALIGN == 'center') $this->Cell(0, 5, $e, 0, 1, 'C'); else $this->Write(5, $e); } else { //Tag if($e{0}=='/') $this->CloseTag(strtoupper(substr($e, 1))); else { //Extract properties $a2=split(' ', $e); $tag=strtoupper(array_shift($a2)); $prop=array(); foreach($a2 as $v) if(ereg('^([^=]*)=["\']?([^"\']*)["\']?$', $v, $a3)) $prop[strtoupper($a3[1])]=$a3[2]; $this->OpenTag($tag, $prop); } } } } function OpenTag($tag, $prop){ //Opening tag if($tag=='STRONG'){ $this->SetStyle('B', true); } if($tag=='B' or $tag=='I' or $tag=='U') $this->SetStyle($tag, true); if($tag=='A') $this->HREF=$prop['HREF']; if($tag=='BR') $this->Ln(5); if($tag=='P') $this->Ln(5); $this->ALIGN=$prop['ALIGN']; if($tag=='HR') { if( $prop['WIDTH'] != '' ) $Width = $prop['WIDTH']; else $Width = $this->w - $this->lMargin-$this->rMargin; $this->Ln(2); $x = $this->GetX(); $y = $this->GetY(); $this->SetLineWidth(0.4); $this->Line($x, $y, $x+$Width, $y); $this->SetLineWidth(0.2); $this->Ln(2); } } function CloseTag($tag){ //Closing tag if($tag=='STRONG'){ $this->SetStyle('B', false); } if($tag=='B' or $tag=='I' or $tag=='U') $this->SetStyle($tag, false); if($tag=='A') $this->HREF=''; if($tag=='P') $this->ALIGN=''; } function SetStyle($tag, $enable){ //Modify style and select corresponding font $this->$tag+=($enable ? 1 : -1); $style=''; foreach(array('B', 'I', 'U') as $s) if($this->$s>0) $style.=$s; $this->SetFont('', $style); } function PutLink($URL, $txt){ //Put a hyperlink $this->SetTextColor(0, 0, 255); $this->SetStyle('U', true); $this->Write(5, $txt, $URL); $this->SetStyle('U', false); $this->SetTextColor(0); } } ?> * @version 1.5 * * Anpassungen SQL: * * Die categorie_id und parent_id muss von int auf bigint in den Tabellen (categories, categories_description und products_to_categories) angepasst werden * * Version 1.4 * - Bilder werden auf veraenderung geprueft und nicht grundsaetzlich neu erzeugt * - Nach einem Import werden restliche Bilder geloescht * - loeschen.xml - ALLESLOESCHEN wird beruecksichtigt * * Version 1.5 * - komplette Startmethode wurde angepasst (Parameter: START, TODO, INFO) * * Version 1.5.1 * - Preismenge wird im XTC angelegt und auch befuellt. Beim Datenexport wird die Preismenge mit exportiert. * * Version 1.5.2 * - Produktfilter im __construct angepasst, so dass nicht immer alles komplett aktualisiert wird * - cleanDatabase hinzugef�gt **/ /* error_reporting(E_ALL & ~E_NOTICE); ini_set("display_errors", 1); */ class SyncMercator{ var $Programmname="Synchronisationsmodul Mercator - XTCommerce v 1.5.3"; var $TODID=0; var $Counts=array(); var $Debug=false; var $db; var $fs; var $Meldungen=array(); var $PathImport=""; var $PathExport=""; var $Status_PRODUCTS_TO_CATEGORIES=false; var $TimeFileOrder=""; var $TimeFileCron=""; var $ArtikelKinder=array(); var $DeleteFiles=false; var $Config; var $SendStatusEmail=false; var $StdKundengruppe=0; var $ModulMindesbestellmenge=false; var $CSSFileLink; function __construct($leise=false, $cron=false){$this->SyncMercator($leise,$cron);} function __destruct(){ if ($this->Debug){$this->setStatus(date("r",time()));} } function SyncMercator($leise=false, $cron=false){ if (isset($_GET["DEBUG"])){$this->Debug=true;} if ($this->Debug){$this->setStatus(date("r",time()));} // Datenbankverbindung $temp = new Connection(); $this->db = $temp->get(); //$this->db->debug=true; $this->createTables(); // erstmal einiges definieren $this->fs = new Filesystem(); $this->Config = new Config(); // Optimierungen durchfuerhen, wenn noch nicht geschehen $TempSyncOpt=$this->Config->get("xstar_sync_mercator_opt"); if ($TempSyncOpt<1){ $sql = "CREATE INDEX syncwawi_idx USING BTREE ON syncwawi (sort , erledigt, in_bearbeitung);"; $this->db->Execute($sql); $sql = "CREATE INDEX products_idx USING BTREE ON products (products_model);"; $this->db->Execute($sql); $sql = "CREATE INDEX products_vpe_idx USING BTREE ON products_vpe (products_vpe_id, products_vpe_name);"; $this->db->Execute($sql); $sql = "CREATE INDEX products_options_values_idx USING BTREE ON products_options_values (products_options_values_name);"; $this->db->Execute($sql); $sql = "CREATE INDEX products_options_idx USING BTREE ON products_options (products_options_name);"; $this->db->Execute($sql); $sql = "CREATE INDEX products_options_values_to_products_options_idx USING BTREE ON products_options_values_to_products_options (products_options_id, products_options_values_id);"; $this->db->Execute($sql); $sql = "CREATE INDEX temp_xtc_warnhinweise_idx USING BTREE ON temp_xtc_warnhinweise (products_id);"; $this->db->Execute($sql); for ($i=0; $i<=15; $i++){ $sql = "CREATE INDEX personal_offers_by_customers_status_" . $i . "_idx USING BTREE ON personal_offers_by_customers_status_" . $i . " ( products_id , quantity);"; $this->db->Execute($sql); } $sql = "CREATE INDEX products_images_idx USING BTREE ON products_images (products_id);"; $this->db->Execute($sql); $this->Config->set("xstar_sync_mercator_opt",1); } // Stylen $this->CSSFileLink=DIR_WS_DOCUMENT_ROOT_XSTAR."/style/SyncMercator.css"; // Verzeichnisse definieren if ($_SERVER["HTTP_HOST"] == "mobabau.de" || $_SERVER["HTTP_HOST"] == "www.mobabau.de" || $_SERVER["HTTP_HOST"] == "www.mobabau.com" || $_SERVER["HTTP_HOST"] == "mobabau.com" || $_SERVER["HTTP_HOST"] == "www.hmw-teich.de" || $_SERVER["HTTP_HOST"] == "hmw-teich.de"){ $this->PathImport=DIR_FS_DOCUMENT_ROOT."/mercator/import/"; $this->PathExport=DIR_FS_DOCUMENT_ROOT."/mercator/export/"; $this->TimeFileOrder=DIR_FS_DOCUMENT_ROOT_XSTAR."/includes/modules/sync_mercator_ordertime.txt"; $this->TimeFileCron=DIR_FS_DOCUMENT_ROOT."/mercator/import/status.txt"; }else{ $this->PathImport=DIR_FS_DOCUMENT_ROOT."/import/mercator/"; $this->PathExport=DIR_FS_DOCUMENT_ROOT."/export/mercator/"; $this->TimeFileOrder=DIR_FS_DOCUMENT_ROOT_XSTAR."/includes/modules/sync_mercator_ordertime.txt"; $this->TimeFileCron=DIR_FS_DOCUMENT_ROOT."/import/mercator/status.txt"; } // Sind alle Verzeichnisse vorhanden if (!is_dir($this->PathImport)){mkdir($this->PathImport,0777);} if (!is_dir($this->PathImport."/daten/")){mkdir($this->PathImport."/daten/",0777);} if (!is_dir($this->PathImport."/bilder/")){mkdir($this->PathImport."/bilder/",0777);} if (!is_dir($this->PathExport)){mkdir($this->PathExport,0777);} if (!is_dir($this->PathExport."/daten/")){mkdir($this->PathExport."/daten/",0777);} if (!is_dir($this->PathExport."/logs/")){mkdir($this->PathExport."/logs/",0777);} // HTML Startkopf $HTMLStartkopf=$this->getCSS(); $HTMLStartkopf.="

" . $this->Programmname . "
copyright by WEBDESIGN-RÜSTMANN 2009 - " . date("Y",time()) . "

"; // Los geht es - Neustart? if (isset($_GET["START"])){ $this->TODOID=time(); print $HTMLStartkopf; $this->setStatus("Sync wurde gestartet"); // Datenbank bereinigen $sql = "DELETE FROM syncwawi"; $this->db->Execute($sql); $this->addTODO("ID",$this->TODOID,0); // Was ist zu tun - Dateien lesen $PathInhalt=$this->fs->readDir($this->PathImport."/daten/"); if (count($PathInhalt) > 0){ // Neu sortieren $CountArtikelDatei=0; $CountLoeschDatei=0; $CountHerstellerDatei=0; $CountKundenDatei=0; $CountKategorienDatei=0; $TempPathInhalt=array(); foreach ($PathInhalt as $id => $value){ $TempZahl=explode("_",$value["name"]); $TempPathInhalt[$TempZahl[0].str_pad($TempZahl[1], 10 ,'0', STR_PAD_LEFT)]=$value; } ksort ($TempPathInhalt); $PathInhalt=$TempPathInhalt; // existiert eine komplett Loeschdatei und Dateien durchzählen foreach ($PathInhalt as $id => $value){ if (substr($value["name"],0,8)=="loeschen"){ $CountLoeschDatei++; $filename=$this->PathImport."daten/" . $value["name"]; if (file_exists($filename)){ $temp=$this->readXML($filename); if ($temp->ALLE_LOESCHEN == 1){ $this->setStatus("!!! ALLE ARTIKEL WERDEN GELÖSCHT","Fehler"); $this->addTODO("DELETEALL",1,-1); } } } // Hersteller if (substr($value["name"],0,14) == "temphersteller" || substr($value["name"],0,10) == "hersteller"){ $CountHerstellerDatei++; $this->addTODO("FILE",$value["name"],30); } // Lieferanten if (preg_match("/lieferanten/",$value["name"])){ $CountHerstellerDatei++; $this->addTODO("FILE",$value["name"],30); } // Katgeorien if (preg_match("/kategorien/",$value["name"])){ $this->addTODO("FILE",$value["name"],40); $CountKategorienDatei++; } // Artikel if (preg_match("/artikel/",$value["name"])){ $this->addTODO("FILE",$value["name"],10); $CountArtikelDatei++; } // Auftragstati if (preg_match("/auftraege/",$value["name"])){ $this->addTODO("FILE",$value["name"],10); $CountAuftragstatuDatei++; } // Kunden if (preg_match("/kunden/",$value["name"])){ $this->addTODO("FILE",$value["name"],20); $CountKundenDatei++; } // Loeschen if (preg_match("/loeschen/",$value["name"])){ $this->addTODO("FILE",$value["name"],-1); $CountLoeschDatei++; } } $this->setStatus("Anzahl Herstellerdateien: " . $CountHerstellerDatei); $this->setStatus("Anzahl Artikeldateien: " . $CountArtikelDatei); $this->setStatus("Anzahl Kundendateien: " . $CountKundenDatei); $this->setStatus("Anzahl Kategoriendateien: " . $CountKategorienDatei); $this->setStatus("Anzahl Loeschdateien: " . $CountKategorienDatei); $this->setStatus("Anzahl Auftragstati: " . $CountAuftragstatuDatei); } // Weitere TODOS erstellen if ($this->Config->get("xstar_syncmercator_bestellexport_separat") != 1){$this->addTODO("ORDER_EXPORT", "1",1);} $this->addTODO("ADDON", "addVarianten",900); $this->addTODO("ADDON", "sortVarianten",901); $this->addTODO("ADDON", "checkKategorien",902); $this->addTODO("ADDON", "sortKategorien",903); $this->addTODO("ADDON", "checkKundengruppen",904); $this->addTODO("ADDON", "deleteBildVerzeichnisse",905); $this->addTODO("ADDON", "checkImages",906); $this->addTODO("ADDON", "checkImagesDuplikate",907); $this->addTODO("ADDON", "clearDatabase",908); // Statusmeldung, dass CRON uebernimmt print ""; exit(); } // Infos zeigen if (isset($_GET["INFO"])){ print $HTMLStartkopf; $sql = "SELECT * FROM syncwawi WHERE erledigt = 0 AND art <> 'ID' ORDER BY sort, wert"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ print "

 

"; print "

Folgende Aufgaben müssen noch durchgeführt werden.

"; print ""; }else{ print "

Keine Aufgaben vorhanden. Laden Sie mit Hilfe Ihrer Warenwirtschaft Dateien hoch und führen den Start Befehl aus.

"; } exit(); } // Protokoll anzeigen if (isset($_GET["PROTOKOLL"])){ print $HTMLStartkopf; $sql = "SELECT sync_id FROM syncwawi_log ORDER BY sync_id DESC LIMIT 1"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = "SELECT * FROM syncwawi_log WHERE sync_id = '" . $rs->fields("sync_id") . "' ORDER BY datumuhrzeit"; print "

 

"; print "

Folgende Aufgaben wurden durchgeführt.

"; print ""; }else{ print "

Keine Aufgaben vorhanden.

"; print "

Laden Sie mit Hilfe Ihrer Warenwirtschaft Dateien auf Ihren Webserver führen den Start Befehl aus ([domain]/admin/sync_mercatro.php?START).

"; } exit(); } // Orderexport if (isset($_GET["ORDEREXPORT"])){ $this->OrderExport(); } // Test starten if (isset($_GET["TEST"])){ $filename=$this->PathImport."daten/artikel_178.xml"; $this->addArtikel($this->readXML($filename));$Status=true; $filename=$this->PathImport."daten/kategorien_1.xml"; $this->addKategorien($this->readXML($filename));$Status=true; //$this->OrderExport(1117); exit(); } // Aufgaben abarbeiten if (isset($_GET["TODO"])){ // Limit pruefen if ($this->Config->get("xstar_syncmercator_limit_gleichzeitige_verbindungen")>0){$limit=$this->Config->get("xstar_syncmercator_limit_gleichzeitige_verbindungen");}else{$limit=2;} $sql = "SELECT COUNT(*) AS anzahl FROM syncwawi WHERE in_bearbeitung=1"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ if ($rs->fields("anzahl")>=$limit){exit();} } // Daten verarbeiten $sql = "SELECT id, art, wert FROM syncwawi WHERE erledigt=0 AND in_bearbeitung=0 AND art<>'ID' ORDER BY sort, id"; if (!isset($_GET["NOBREAK"])){$sql.=" LIMIT 1";} $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ while (!$rs->EOF){ $Status=false; require_once ('includes/classes/'.FILENAME_IMAGEMANIPULATOR); require_once (DIR_FS_INC.'xtc_get_products_mo_images.inc.php'); // Bearbeitungszustand setzten if (strtoupper($rs->fields("art")) != "ADDON"){ $sql = "UPDATE syncwawi SET in_bearbeitung=1 WHERE id = " . $rs->fields("id"); $this->db->Execute($sql); } // Los geht es switch (strtoupper($rs->fields("art"))){ case "ORDER_EXPORT": $this->OrderExport(); $Status=true; break; case "DELETEALL": $this->delArtikelAll(); $Status=true; break; case "FILE": $TempWert=strtolower($rs->fields("wert")); $filename=$this->PathImport."daten/".$rs->fields("wert"); // Artikel if (preg_match("/artikel/",$TempWert)){ $this->addArtikel($this->readXML($filename));$Status=true; } // Auftrag if (preg_match("/auftraege/",$TempWert)){ $this->setAuftragStatus($this->readXML($filename));$Status=true; } // Kategorien if (preg_match("/kategorien/",$TempWert)){ $this->addKategorien($this->readXML($filename));$Status=true; } // Hersteller if (preg_match("/hersteller/",$TempWert)){ $this->addHersteller($this->readXML($filename));$Status=true; } // Lieferanten if (preg_match("/lieferanten/",$TempWert)){ $this->addHersteller($this->readXML($filename));$Status=true; } // Kunden if (preg_match("/kunden/",$TempWert)){ $this->addKunden($this->readXML($filename));$Status=true; } // Loeschen if (preg_match("/loeschen/",$TempWert)){ $this->delArtikel($this->readXML($filename));$Status=true; } $this->deleteXML($filename); break; case "ADDON": $sql = "SELECT COUNT(*) AS anzahl FROM syncwawi WHERE art IN ('ORDER_EXPORT','FILE') AND erledigt = 0"; $rsspeicher = $this->db->Execute($sql); if (!$rsspeicher->EOF && $rsspeicher){ if ($rsspeicher->fields("anzahl")>0){exit();} } // Bearbeitungszustand setzten $sql = "UPDATE syncwawi SET in_bearbeitung=1 WHERE id = " . $rs->fields("id"); $this->db->Execute($sql); // Daten verarbeiten if ($rs->fields("wert") == "addVarianten"){$this->addVarianten();$Status=true;} if ($rs->fields("wert") == "sortVarianten"){$this->sortVarianten();$Status=true;} if ($rs->fields("wert") == "checkKategorien"){$this->checkKategorien();$Status=true;} if ($rs->fields("wert") == "sortKategorien"){$this->sortKategorien();$Status=true;} if ($rs->fields("wert") == "checkKundengruppen"){$this->checkKundengruppen();$Status=true;} if ($rs->fields("wert") == "deleteBildVerzeichnisse"){$this->deleteImportImages();$Status=true;} if ($rs->fields("wert") == "checkImages"){$this->checkImages();$Status=true;} if ($rs->fields("wert") == "checkImagesDuplikate"){$this->checkImagesDuplikate();$Status=true;} if ($rs->fields("wert") == "clearDatabase"){$this->clearDatabase();$Status=true;} break; } if ($Status == true){ $sql = "UPDATE syncwawi SET erledigt=1, in_bearbeitung=0 WHERE id = " . $rs->fields("id"); $this->db->Execute($sql); } $rs->MoveNext(); } }else{ $sql = "SELECT COUNT(*) AS anzahl FROM `syncwawi` WHERE erledigt = 0 AND art <> 'ID'"; $rs = $this->db->Execute($sql); if ($rs->fields("anzahl")==0){ $sql = "SELECT COUNT(*) AS anzahl FROM syncwawi WHERE art='ID'"; $rs = $this->db->Execute($sql); if ($rs->fields("anzahl")>0){ // Nicht mehr zu tun - Email versenden if ($this->Config->get("xstar_syncmercator_bestaetigungsemail") == 1){$this->sendMail();} // Sync ToDo leeren $sql = "DELETE FROM syncwawi"; $this->db->Execute($sql); } } } } } /** * Exportiert die benoetigten XML Dateien fuer Mercator **/ function OrderExport($orderid=0){ $this->setStatus("Bestellungen werden exportiert.","SubHeader"); // Existiert schon abfragefeld $sql = "SELECT sync_date FROM orders LIMIT 1"; $rs = $this->db->Execute($sql); if (!$rs){ $sql = "ALTER TABLE `orders` ADD `sync_date` DATETIME NULL DEFAULT NULL"; $this->db->Execute($sql); } // Steuersatz ermitteln $sql = "SELECT * FROM " . TABLE_TAX_RATES. " WHERE tax_rates_id = 1"; $rsspeichertax = $this->db->Execute($sql); $TAX=1.19; $TAXText="19,00"; if (!$rsspeichertax->EOF && $rsspeichertax){ $TAX=("1.".str_replace(".0000","",$rsspeichertax->fields("tax_rate"))); $TAXText=number_format ($rsspeichertax->fields("tax_rate"), 2 , "." , ""); } // Letzten Export ermitteln $TempTime = $this->fs->fread($this->TimeFileOrder); $ExportDatum = time(); $sql = "SELECT " . TABLE_ORDERS . ".*, " . TABLE_CUSTOMERS . ".customers_gender, " . TABLE_CUSTOMERS . ".customers_newsletter, " . TABLE_CUSTOMERS . ".customers_dob FROM " . TABLE_ORDERS . " INNER JOIN " . TABLE_CUSTOMERS . " ON " . TABLE_CUSTOMERS . ".customers_id = " . TABLE_ORDERS . ".customers_id "; if ($orderid > 0){ $sql .= "WHERE orders_id = " . $orderid . ""; }else{ $sql .= "WHERE sync_date IS NULL"; } // Zaehler ermitteln $temp=$this->fs->readDir($this->PathExport."/daten/"); if (count($temp)>0){ $TempZaehler=array(); foreach ($temp as $id => $value){ array_push($TempZaehler,str_replace(".xml","",str_replace("bestellungen_","",$id))); } sort($TempZaehler); $Zaehler=$TempZaehler[count($TempZaehler)-1]+1; }else{ $Zaehler=1; } $rs=$this->db->Execute($sql); if (!$rs->EOF && $rs){ while (!$rs->EOF){ $XML =""; $XML.="\n"; $XML.="\n"; $XML.="\t1\n"; $XML.="\t\n"; $XML.="\t\t\n"; if (trim($rs->fields("orders_cid"))){ $XML.=$this->getXMLNode(2,"NUMMER",$rs->fields("orders_cid")); }else{ $XML.=$this->getXMLNode(2,"NUMMER",$rs->fields("orders_id")); } $XML.=$this->getXMLNode(2,"DATUM",date("d.m.Y",strtotime($rs->fields("date_purchased")))); $XML.="\t\t\t\n"; $XML.=$this->getXMLNode(3,"KD_NR",$rs->fields("customers_id")); // Kundengruppen ausgeben $TempKundengruppe=$this->getKundengruppenNameSchnittstelle($rs->fields("customers_status")); /* $XML.=$this->getXMLNode(3,"PGR",$TempKundengruppe); $XML.=$this->getXMLNode(3,"KUNDENGRUPPE",$TempKundengruppe); * * 07.03.2011: In Schnittstelle Version 1.6 nicht mehr vorhanden */ switch ($rs->fields("customers_gender")){ case "m": $XML.=$this->getXMLNode(3,"ANREDE","Herr"); break; case "w": $XML.=$this->getXMLNode(3,"ANREDE","Frau"); break; default: $XML.=$this->getXMLNode(3,"ANREDE","Herr"); break; } $XML.=$this->getXMLNode(3,"VORNAME",$rs->fields("customers_firstname")); $XML.=$this->getXMLNode(3,"NAME1",$rs->fields("customers_lastname")); $XML.=$this->getXMLNode(3,"NAME2",$rs->fields("customers_company")); $XML.=$this->getXMLNode(3,"STRASSE",$rs->fields("customers_street_address")); if ($rs->fields("delivery_country_iso_code_2")){ $XML.=$this->getXMLNode(3,"LKZ",$rs->fields("delivery_country_iso_code_2")); }else{ $XML.=$this->getXMLNode(3,"LKZ","DE"); } $XML.=$this->getXMLNode(3,"PLZ",$rs->fields("customers_postcode")); $XML.=$this->getXMLNode(3,"ORT",$rs->fields("customers_city")); $XML.=$this->getXMLNode(3,"TEL1",$rs->fields("customers_telephone")); $XML.=$this->getXMLNode(3,"TEL2",""); $XML.=$this->getXMLNode(3,"FAX",""); $XML.=$this->getXMLNode(3,"EMAIL",$rs->fields("customers_email_address")); $XML.=$this->getXMLNode(3,"KTO_INHABER",""); $XML.=$this->getXMLNode(3,"KTO_KONTO",""); $XML.=$this->getXMLNode(3,"KTO_BLZ",""); $XML.=$this->getXMLNode(3,"KTO_BANK",""); $XML.=$this->getXMLNode(3,"UST_ID",$rs->fields("customers_vat_id")); if ($rs->fields("customers_dob")){ $TempDatum=date("d.m.Y",strtotime($rs->fields("customers_dob"))); $TempDatumArray=explode(".",$TempDatum); if (isset($TempDatumArray[2])){ if ($TempDatumArray[2]>1900){ $XML.=$this->getXMLNode(3,"GEB_TAG",$TempDatum); }else{ $XML.=$this->getXMLNode(3,"GEB_TAG",""); } }else{ $XML.=$this->getXMLNode(3,"GEB_TAG",""); } }else{ $XML.=$this->getXMLNode(3,"GEB_TAG",""); } // Newsletter if ($rs->fields("customers_newsletter") == 1){ $XML.=$this->getXMLNode(3,"NEWSLETTER",1); }else{ $XML.=$this->getXMLNode(3,"NEWSLETTER",0); } $XML.=$this->getXMLNode(3,"BONITAET",""); $XML.="\t\t\t\n"; $XML.="\t\t\t\n"; // Lieferanschift nur ausgeben wenn unterschiedlich if ($rs->fields("customers_firstname") != $rs->fields("delivery_firstname") || $rs->fields("customers_lastname") != $rs->fields("delivery_lastname") || $rs->fields("customers_company") != $rs->fields("delivery_company") || $rs->fields("customers_street_address") != $rs->fields("delivery_street_address") || $rs->fields("customers_state") != $rs->fields("delivery_state") || $rs->fields("customers_postcode") != $rs->fields("delivery_postcode") || $rs->fields("customers_city") != $rs->fields("delivery_city") ){ switch ($rs->fields("customers_gender")){ case "m": $XML.=$this->getXMLNode(3,"LI_ANREDE","Herr"); break; case "w": $XML.=$this->getXMLNode(3,"LI_ANREDE","Frau"); break; default: $XML.=$this->getXMLNode(3,"LI_ANREDE","Herr"); break; } $XML.=$this->getXMLNode(3,"LI_VORNAME",$rs->fields("delivery_firstname")); $XML.=$this->getXMLNode(3,"LI_NAME1",$rs->fields("delivery_lastname")); $XML.=$this->getXMLNode(3,"LI_NAME2",$rs->fields("delivery_company")); $XML.=$this->getXMLNode(3,"LI_STRASSE",$rs->fields("delivery_street_address")); // Land ermitteln $sql = "SELECT countries_iso_code_2 FROM " . TABLE_COUNTRIES . " WHERE countries_name = '" . $rs->fields("delivery_state") . "'"; $rsspeicher = $this->db->Execute($sql); if (!$rsspeicher->EOF && $rsspeicher){ $XML.=$this->getXMLNode(3,"LI_LKZ",$rsspeicher->fields("countries_iso_code_2")); }else{ $XML.=$this->getXMLNode(3,"LI_LKZ","DE"); } $XML.=$this->getXMLNode(3,"LI_PLZ",$rs->fields("delivery_postcode")); $XML.=$this->getXMLNode(3,"LI_ORT",$rs->fields("delivery_city")); $XML.="\t\t\t\n"; }else{ $XML.=$this->getXMLNode(3,"LI_ANREDE",""); $XML.=$this->getXMLNode(3,"LI_VORNAME",""); $XML.=$this->getXMLNode(3,"LI_NAME1",""); $XML.=$this->getXMLNode(3,"LI_NAME2",""); $XML.=$this->getXMLNode(3,"LI_STRASSE",""); $XML.=$this->getXMLNode(3,"LI_LKZ",""); $XML.=$this->getXMLNode(3,"LI_PLZ",""); $XML.=$this->getXMLNode(3,"LI_ORT",""); $XML.="\t\t\t\n"; } $XML.=$this->getXMLNode(2,"MWST_KZ",1); // NETTO Preise $XML.=$this->getXMLNode(2,"VERSANDART",$rs->fields("shipping_method")); $XML.=$this->getXMLNode(2,"ZAHLART",$rs->fields("payment_method")); $XML.=$this->getXMLNode(2,"PGR",$TempKundengruppe); // 07.03.2011: Laut Schnittstelle 1.6 von oben verschoben $XML.=$this->getXMLNode(2,"MITTEILUNG",$rs->fields("comments")); $sql = "SELECT * FROM " . TABLE_ORDERS_TOTAL . " WHERE orders_id = " . $rs->fields("orders_id") . " AND class = 'ot_shipping'"; $rsspeicher = $this->db->Execute($sql); if (!$rsspeicher->EOF && $rsspeicher){ $sql = "SELECT * FROM " . TABLE_TAX_RATES. " WHERE tax_class_id = 1"; $rsspeichertax = $this->db->Execute($sql); $TempPreis=$rsspeicher->fields("value"); if ($rs->fields("payment_method") == "cod"){ // Nachnahme $sql = "SELECT * FROM " . TABLE_ORDERS_TOTAL . " WHERE orders_id = " . $rs->fields("orders_id") . " AND class = 'ot_cod_fee'"; $rsspeicher = $this->db->Execute($sql); if (!$rsspeicher->EOF && $rsspeicher){ $TempPreis=$TempPreis + $rsspeicher->fields("value"); } } $XML.=$this->getXMLNode(2,"VERSAND_N",number_format (($TempPreis/$TAX), 2 , "," , "")); $XML.=$this->getXMLNode(2,"VERSAND_B",number_format ($TempPreis, 2 , "," , "")); }else{ $XML.=$this->getXMLNode(2,"VERSAND_N","0,00"); $XML.=$this->getXMLNode(2,"VERSAND_B","0,00"); } $XML.=$this->getXMLNode(2,"RABATT","0"); $XML.="\t\t\n"; $sql = "SELECT * FROM " . TABLE_ORDERS_PRODUCTS . " LEFT JOIN " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " ON (" . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ".orders_products_id = " . TABLE_ORDERS_PRODUCTS . ".orders_products_id AND " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ".orders_id = " . TABLE_ORDERS_PRODUCTS . ".orders_id) WHERE " . TABLE_ORDERS_PRODUCTS . ".orders_id = " . $rs->fields("orders_id") . ""; $rsspeicher = $this->db->Execute($sql); if (!$rsspeicher->EOF && $rsspeicher){ while (!$rsspeicher->EOF){ $XML.="\t\t\n"; // Wurde ein Kindartikel ausgewaehlt? $sql = "SELECT " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . ".products_options_values_id, " . TABLE_PRODUCTS_OPTIONS . ".products_options_id " . "FROM " . TABLE_PRODUCTS_OPTIONS . " " . "INNER JOIN " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " ON " . TABLE_PRODUCTS_OPTIONS . ".products_options_id = products_options.products_options_id " . "INNER JOIN " . TABLE_PRODUCTS_OPTIONS_VALUES . " ON " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . ".products_options_values_id = products_options_values.products_options_values_id " . "WHERE products_options_name = '" . $rsspeicher->fields("products_options") . "' AND products_options_values_name = '" . $rsspeicher->fields("products_options_values") . "'"; $rsattr = $this->db->Execute($sql); if(!$rsattr->EOF && $rsattr){ $sql = "SELECT * FROM products_attributes WHERE options_id = " . $rsattr->fields("products_options_id") . " AND options_values_id = " . $rsattr->fields("products_options_values_id") . " AND products_id = " . $rsspeicher->fields("products_id") . " "; $rsattr = $this->db->Execute($sql); if(!$rsattr->EOF && $rsattr){ $XML.=$this->getXMLNode(2,"ARTCODE",$rsattr->fields("attributes_model")); // Kindtext holen $sql = "SELECT products_name FROM " . TABLE_PRODUCTS . " INNER JOIN " . TABLE_PRODUCTS_DESCRIPTION . " ON " . TABLE_PRODUCTS . ".products_id = " . TABLE_PRODUCTS_DESCRIPTION . ".products_id WHERE products_model = '" . $rsattr->fields("attributes_model") . "'"; $rsattr = $this->db->Execute($sql); if(!$rsattr->EOF && $rsattr){ $XML.=$this->getXMLNode(2,"TEXT",$rsattr->fields("products_name")); }else{ $XML.=$this->getXMLNode(2,"TEXT",$rsspeicher->fields("products_name")); } }else{ $XML.=$this->getXMLNode(2,"ARTCODE",$rsspeicher->fields("products_model")); $XML.=$this->getXMLNode(2,"TEXT",$rsspeicher->fields("products_name")); } }else{ $XML.=$this->getXMLNode(2,"ARTCODE",$rsspeicher->fields("products_model")); $XML.=$this->getXMLNode(2,"TEXT",$rsspeicher->fields("products_name")); } $XML.=$this->getXMLNode(2,"LANGTEXT",""); $XML.=$this->getXMLNode(2,"MENGE",$rsspeicher->fields("products_quantity")); // Einheit ermitteln $sql = "SELECT products_vpe_name FROM " . TABLE_PRODUCTS_VPE . " INNER JOIN " . TABLE_PRODUCTS . " ON " . TABLE_PRODUCTS_VPE . ".products_vpe_id = " . TABLE_PRODUCTS . ".products_vpe WHERE products_id = " . $rsspeicher->fields("products_id") . " AND products_vpe_name > '' "; $rseinheit = $this->db->Execute($sql); if (!$rseinheit->EOF && $rseinheit){ $XML.=$this->getXMLNode(2,"EINHEIT",$rseinheit->fields("products_vpe_name")); }else{ $XML.=$this->getXMLNode(2,"EINHEIT",utf8_decode("Stück")); } // Preismenge ermitteln $sql = "SELECT * FROM " . TABLE_PRODUCTS . " WHERE products_id = " . $rsspeicher->fields("products_id"); $rspe = $this->db->Execute($sql); if (!$rspe->EOF && $rspe){ $XML.=$this->getXMLNode(2,"PREISMENGE",$rspe->fields("products_price_quantity")); }else{ $XML.=$this->getXMLNode(2,"PREISMENGE",1); } $XML.=$this->getXMLNode(2,"MWST_PROZ",str_replace(".",",",$TAXText)); $XML.=$this->getXMLNode(2,"EP_NETTO",number_format (($rsspeicher->fields("products_price")/$TAX), 2 , "," , "")); $XML.=$this->getXMLNode(2,"EP_BRUTTO",number_format (($rsspeicher->fields("products_price")), 2 , "," , "")); $XML.=$this->getXMLNode(2,"POS_RABATT","0"); $XML.=$this->getXMLNode(2,"GP_NETTO",number_format (($rsspeicher->fields("final_price")/$TAX), 2 , "," , "")); $XML.=$this->getXMLNode(2,"GP_BRUTTO",number_format (($rsspeicher->fields("final_price")), 2 , "," , "")); $XML.="\t\t\n"; $rsspeicher->MoveNext(); } } $XML.="\t\n"; $XML.=''; $filename=$this->PathExport."/daten/bestellungen_" . $Zaehler . ".xml"; $this->fs->fwrite($filename,$XML); $Zaehler++; // Bestellung aktualisieren $sql = "UPDATE orders SET sync_date = now() WHERE " . $rs->fields("orders_id"); $this->db->Execute($sql); $rs->MoveNext(); } // Exporttime schreiben $this->fs->fwrite($this->TimeFileOrder,$ExportDatum); $this->setStatus("Bestellungen koennen nun per FTP heruntergeladen werden."); $this->SendStatusEmail=true; }else{ $this->setStatus("Keine Bestellungen zum exportieren."); } } /** * Fuegt einen Artikel hinzu bzw. modifiziert diesen * * @param String xml **/ function addArtikel($xml){ $CrossID=0; $this->Counts["Artikel"]=0; if (count($xml->ARTIKEL) > 0){ //Crossselling Gruppe anlegen, wenn nicht schon erledigt $sql = "SELECT * FROM " . TABLE_PRODUCTS_XSELL_GROUPS . " WHERE groupname = 'Mercator'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $CrossID=$rs->fields("products_xsell_grp_name_id"); }else{ $Mapping=array(); //Mapping["products_xsell_grp_name_id"]= $Mapping["xsell_sort_order"]=0; $Mapping["language_id"]=$this->getSprachenID("d"); $Mapping["groupname"]="Mercator"; $sql = $this->db->GetInsertSQL($rs,$Mapping); $this->db->Execute($sql); // Nummer ermitteln $sql = "SELECT * FROM " . TABLE_PRODUCTS_XSELL_GROUPS . " WHERE groupname = 'Mercator'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $CrossID=$rs->fields("products_xsell_grp_name_id"); } } // Artikel anlegen $this->setStatus("Artikel werden angelegt bzw. modifiziert."); foreach ($xml->ARTIKEL as $id => $value){ $this->Counts["Artikel"]++; // MWST $Temp=explode(",",$value->MWST); if(strlen($Temp[0]) == 1){ $TAX = "1.0" . $Temp[0]; }else{ $TAX = "1." . $Temp[0]; } // Mapping erzeugen $Mapping=array(); //$Mapping["products_id"]=(string)$value->ARTCODE; --> Wird automatisch vergeben $Mapping["products_ean"]=(string)$value->EAN; $Mapping["products_quantity"]=(string)$value->BESTAND; $Mapping["products_shippingtime"]=""; $Mapping["products_model"]=(string)$value->ARTCODE; $Mapping["group_permission_0"]=0; $Mapping["group_permission_1"]=0; $Mapping["group_permission_2"]=0; $Mapping["group_permission_3"]=0; $Mapping["products_sort"]=0; //$Mapping["products_image"]=""; --> Wird unten nochmal gesetzt $Mapping["products_price"]=(str_replace(",",".",(string)$value->PREIS) / $TAX); //$Mapping["products_price"]=(str_replace(",",".",(string)$value->PREIS)); // Laut Schnittstelle wird entsprechend geliefert als Netto $Mapping["products_discount_allowed"]=""; $Mapping["products_date_added"]=date("d.m.Y",time()); $Mapping["products_last_modified"]=date("d.m.Y",time()); $Mapping["products_date_available"]=""; $Mapping["products_weight"]=(string)$value->GEWICHT; if ($value->AKTIV == 1){ $Mapping["products_status"]=1; // Artikel wird angezeigt; }else{ $Mapping["products_status"]=0; // Artikel wird nicht angezeigt; } $Mapping["products_tax_class_id"]=$this->getMWSTID((string)$value->MWST); $Mapping["product_template"]="default"; $Mapping["options_template"]="product_options_dropdown.html"; $Mapping["manufacturers_id"]=$this->getHerstellerID($value->HERSTELLER); $Mapping["products_ordered"]=(string)$value->BESTAND; $Mapping["products_fsk18"]=0; $Mapping["products_price_quantity"]=(string)$value->PREISMENGE; // VPE anlegen $sql = "SELECT products_vpe_id FROM " . TABLE_PRODUCTS_VPE . " WHERE products_vpe_name = '" . $this->ConvertText2DB((string)$value->SPRACHDATEN->EINHEIT) . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){}else{ $sql = "SELECT MAX(products_vpe_id) anzahl FROM " . TABLE_PRODUCTS_VPE . ""; $rs = $this->db->Execute($sql); if ($rs->fields("anzahl") > 0){$TempAnzahl=$rs->fields("anzahl")+1;}else{$TempAnzahl=1;} $sql = "INSERT INTO " . TABLE_PRODUCTS_VPE . " (products_vpe_id , language_id, products_vpe_name) VALUES (" . $TempAnzahl . "," . $this->getSprachenID("d") . ",'" . $this->ConvertText2DB((string)$value->SPRACHDATEN->EINHEIT) . "')"; $this->db->Execute($sql); $sql = "SELECT products_vpe_id FROM " . TABLE_PRODUCTS_VPE . " WHERE products_vpe_name = '" . $this->ConvertText2DB((string)$value->SPRACHDATEN->EINHEIT) . "'"; $rs = $this->db->Execute($sql); } $Mapping["products_vpe"]=$rs->fields("products_vpe_id"); $Mapping["products_vpe_status"]=1; // Modul Mindestbestellmengen installiert? if ($this->ModulMindesbestellmenge == true){ $Mapping["products_vpe_value"]=0; $Mapping["products_min_quantity"]=(string)$value->SPEZIAL->VPE_MENGE; $Mapping["products_min_quantity_value"]=$rs->fields("products_vpe_id"); }else{ $Mapping["products_vpe_value"]=(string)$value->SPEZIAL->VPE_MENGE; } // Artikel auf Auslauf?? if ($value->AUSLAUF == 1){ $Mapping["products_vpe"]=-1; } $Mapping["products_startpage"]=0; $Mapping["products_startpage_sort"]=0; $Mapping["products_valid_from"]=NULL; $Mapping["products_valid_to"]=NULL; $sql = "SELECT * FROM " . TABLE_PRODUCTS . " WHERE products_model = '" . $Mapping["products_model"] . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} // Kindartikel if ((string)$value->VARIANTEN->VAR_VATER){ // Normale Speicherung $this->ArtikelKind[(string)$value->ARTCODE]["vater"]=(string)$value->VARIANTEN->VAR_VATER; $this->ArtikelKind[(string)$value->ARTCODE]["text"]=(string)$value->VARIANTEN->VAR_TEXT; // Spezielle Speicherung in Session $_SESSION["ArtikelKind"][(string)$value->ARTCODE]["vater"]=(string)$value->VARIANTEN->VAR_VATER; $_SESSION["ArtikelKind"][(string)$value->ARTCODE]["text"]=(string)$value->VARIANTEN->VAR_TEXT; } // XTC Artikelnummern ermitteln $sql = "SELECT products_id FROM " . TABLE_PRODUCTS . " WHERE products_model = '" . $Mapping["products_model"] . "'"; $rs = $this->db->Execute($sql); $Artikelnummer=0; if (!$rs->EOF && $rs){ $Artikelnummer=$rs->fields("products_id"); } // weitere Attribute foreach ($value->SPRACHDATEN->ATTRIBUT as $sprachkey => $sprachvalue){ $TempBezeichnung=(string)$sprachvalue->NAME; $TempWert=(string)$sprachvalue->INHALT; $TempSort=(string)$sprachvalue->POS; // Attribut gegeben falls anlegen $sql = "SELECT products_options_id FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_name = '" . $TempBezeichnung . "'"; $rs = $this->db->Execute($sql); if ($rs->EOF){ $sql = "SELECT max(products_options_id) as id FROM " . TABLE_PRODUCTS_OPTIONS . ""; $rs = $this->db->Execute($sql); $sql = "INSERT INTO " . TABLE_PRODUCTS_OPTIONS . " (products_options_id, products_options_name, language_id) VALUES (" . ($rs->fields("id")+1) . ",'" . $TempBezeichnung . "',2)"; $this->db->Execute($sql); $sql = "SELECT products_options_id FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_name = '" . $TempBezeichnung . "'"; $rs = $this->db->Execute($sql); $TempPO_ID=$rs->fields("products_options_id"); }else{ $TempPO_ID=$rs->fields("products_options_id"); } // Wert anlegen, wenn noch nicht vorhanden $sql = "SELECT products_options_values_id FROM " . TABLE_PRODUCTS_OPTIONS_VALUES . " WHERE products_options_values_name = '" . $TempWert . "'"; $rs = $this->db->Execute($sql); if ($rs->EOF){ $sql = "SELECT max(products_options_values_id) as id FROM " . TABLE_PRODUCTS_OPTIONS_VALUES . ""; $rs = $this->db->Execute($sql); $sql = "INSERT INTO " . TABLE_PRODUCTS_OPTIONS_VALUES . " (products_options_values_id, products_options_values_name, language_id) VALUES (" . ($rs->fields("id")+1) . ",'" . $TempWert . "',2)"; $this->db->Execute($sql); $sql = "SELECT products_options_values_id FROM " . TABLE_PRODUCTS_OPTIONS_VALUES . " WHERE products_options_values_name = '" . $TempWert . "'"; $rs = $this->db->Execute($sql); $TempPOV_ID=$rs->fields("products_options_values_id"); }else{ $TempPOV_ID=$rs->fields("products_options_values_id"); } // Attributszuweisung durchfuehren $sql = "SELECT * FROM products_options_values_to_products_options WHERE products_options_id = " . $TempPO_ID . " AND products_options_values_id = " . $TempPOV_ID . ""; $rs = $this->db->Execute($sql); if ($rs->EOF){ $sql = "INSERT INTO products_options_values_to_products_options (products_options_id,products_options_values_id) VALUES (" . $TempPO_ID . "," . $TempPOV_ID . ")"; $this->db->Execute($sql); } // Artikelzuweisung $sql = "INSERT INTO products_attributes ( products_id, options_id, options_values_id, options_values_price, price_prefix, attributes_model, attributes_stock, options_values_weight, weight_prefix, sortorder, products_shippingtime) VALUES (" . $Artikelnummer . ", " . $TempPO_ID . ", " . $TempPOV_ID . ", 0, '+', '', 0, 0, '+', " . $TempSort . ", 0)"; $this->db->Execute($sql); } // Kinderschutzinfo / Warnhinweise if (isset($value->SPRACHDATEN->DOKTITEL1) || isset($value->SPRACHDATEN->DOKTITEL2) || isset($value->SPRACHDATEN->DOKTITEL3)){ // Tabelle erstellen, wenn noch nicht vorhanden $sql = "CREATE TABLE IF NOT EXISTS temp_xtc_warnhinweise ( products_id int(11) NOT NULL, doktitel1 varchar(255) NOT NULL, doktitel2 varchar(255) NOT NULL, doktitel3 varchar(255) NOT NULL )"; $this->db->Execute($sql); // Daten speichern $TempDaten=array(); $TempDaten["products_id"]=$Artikelnummer; $TempDaten["doktitel1"]=utf8_decode($value->SPRACHDATEN->DOKTITEL1); $TempDaten["doktitel2"]=utf8_decode($value->SPRACHDATEN->DOKTITEL2); $TempDaten["doktitel3"]=utf8_decode($value->SPRACHDATEN->DOKTITEL3); $sql = "SELECT * FROM temp_xtc_warnhinweise WHERE products_id = " . $Artikelnummer; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$TempDaten); }else{ $sql = $this->db->GetInsertSQL($rs,$TempDaten); } if ($sql){$this->db->Execute($sql);} } // Cross Selling Product if (isset($value->CROSS_SELLER->CS)){ foreach ($value->CROSS_SELLER->CS as $crosskey => $crossvalue){ $sql = "SELECT products_id FROM " . TABLE_PRODUCTS . " WHERE products_model = '" . $crossvalue . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $CrossArtikelnummer=$rs->fields("products_id"); $sql = "SELECT * FROM " . TABLE_PRODUCTS_XSELL . " WHERE products_id = " .$CrossArtikelnummer . " AND xsell_id = " . $Artikelnummer . " AND products_xsell_grp_name_id = " . $CrossID . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ // OK - schon vorhanden }else{ $Mapping=array(); $Mapping["products_id"]=$CrossArtikelnummer; $Mapping["products_xsell_grp_name_id"]=$CrossID; $Mapping["xsell_id"]=$Artikelnummer; $Mapping["sort_order"]=0; $sql = "SELECT * FROM " . TABLE_PRODUCTS_XSELL . " "; $rs = $this->db->Execute($sql); $sql = $this->db->GetInsertSQL($rs,$Mapping); if ($sql){$this->db->Execute($sql);} } } } } // Preisgruppen abbilden $PreisgruppenMapping=array(); for ($i=0 ; $i<=8 ; $i++){$PreisgruppenMapping["VK".$i]="";} for ($i=0 ; $i<=8 ; $i++){ if ($this->Config->get("xstar_syncmercator_pgr_kundengruppe_vk" . $i) > 0){ $PreisgruppenMapping["VK".$i]=$this->Config->get("xstar_syncmercator_pgr_kundengruppe_vk" . $i); } } foreach (get_object_vars($value->SPEZIAL) as $Preisgruppe => $Preis){ if ($Preis){ $TempGruppenID=$PreisgruppenMapping[$Preisgruppe]; if ($TempGruppenID > 0){ // Preisgruppe und Staffelpreise fuer Artikel leeren $sql = "DELETE FROM personal_offers_by_customers_status_" . $TempGruppenID . " WHERE products_id = " . $Artikelnummer; $rs = $this->db->Execute($sql); // Preisgruppe anlegen $Mapping=array(); $Mapping["products_id"]=$Artikelnummer; $Mapping["quantity"]=1; $Mapping["personal_offer"]=str_replace(",",".",$Preis); $sql = "SELECT * FROM personal_offers_by_customers_status_" . $TempGruppenID . " WHERE products_id = " . $Artikelnummer; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} } } } // Staffelpreise bei Preisgruppen abbilden if (count($value->SPEZIAL->STAFFELPREIS)>0){ foreach ($value->SPEZIAL->STAFFELPREIS as $staffelpreis => $feld_staffelpreis){ $TempDaten=get_object_vars($feld_staffelpreis); if ($PreisgruppenMapping["VK" . $TempDaten["PGR"]]){ $TempGruppenID=$PreisgruppenMapping["VK".$TempDaten["PGR"]]; if ($TempGruppenID > 0){ $Mapping=array(); $Mapping["products_id"]=$Artikelnummer; $Mapping["quantity"]=$TempDaten["M_AB"]; $StatusStaffelpreis=false; if ($TempDaten["PREIS"] > 0){ $Mapping["personal_offer"]=str_replace(",",".",$TempDaten["PREIS"]); $StatusStaffelpreis=true; } if ($TempDaten["RABATT"] > 0){ $sql = "SELECT * FROM personal_offers_by_customers_status_" . $TempGruppenID . " WHERE products_id = " . $Artikelnummer . " AND quantity = 1"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $TempPreis=str_replace(",",".",$rs->fields("personal_offer")); $TempPreis=(100-($TempDaten["RABATT"]))*$TempPreis/100; $Mapping["personal_offer"]=$TempPreis; $StatusStaffelpreis=true; } } // Preis oder Rabatt vorhanden vorhanden, dann anlegen if ($StatusStaffelpreis){ $sql = "SELECT * FROM personal_offers_by_customers_status_" . $TempGruppenID . " WHERE products_id = " . $Artikelnummer . " AND quantity = " . $Mapping["quantity"]; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} } } } } } // Product zur Kategorie zuordnen if (count($value->KATEGORIE) > 0){ foreach ($value->KATEGORIE as $id1 => $value1){ $Mapping=array(); $Mapping["products_id"]=$Artikelnummer; if ((string)$value->VARIANTEN->VAR_VATER){ $Mapping["categories_id"]=-1; }else{ $Mapping["categories_id"]=$this->changeKategorienID((string)$value1->KAT_ID); } $sql = "SELECT * FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE products_id = " . $Artikelnummer . " AND categories_id = " . $Mapping["categories_id"]; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = "SELECT count(*) AS anzahl FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE products_id = " . $Artikelnummer . ""; $rsspeicher = $this->db->Execute($sql); if ($rsspeicher->fields("anzahl") == 1){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); } }else{ $sql = "SELECT * FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE products_id = " . $Artikelnummer . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = "SELECT count(*) AS anzahl FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE products_id = " . $Artikelnummer . ""; $rsspeicher = $this->db->Execute($sql); if ($rsspeicher->fields("anzahl") == 1){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); } }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } } if ($sql){$this->db->Execute($sql);} } }else{ $Mapping=array(); $Mapping["products_id"]=$Artikelnummer; if ((string)$value->VARIANTEN->VAR_VATER){ $Mapping["categories_id"]=-1; }else{ $Mapping["categories_id"]=1; } $sql = "SELECT * FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE products_id = " . $Artikelnummer . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} } // Langtexte vorhanden? if (count($value->SPRACHDATEN) > 0){ foreach ($value->SPRACHDATEN as $id1 => $value1){ if($this->getSprachenID($value1->SPRACH_KZ)>0){ $Mapping=array(); $Mapping["products_id"]=$Artikelnummer; $Mapping["language_id"]=$this->getSprachenID($value1->SPRACH_KZ); $Mapping["products_name"]=$this->ConvertText2DB((string)$value1->TEXT . " (" . (string)$value->HERSTELLER->ART_NR . ")"); $Mapping["products_description"]=$this->ConvertText2DB((string)$value1->LANGTEXT); if ((string)$value1->LANGTEXT_2){ if ($this->Config->get("xstar_syncmercator_langtext2_leerzeile_langtext1") == 1){ $Mapping["products_description"].="

".$this->ConvertText2DB((string)$value1->LANGTEXT_2); }else{ $Mapping["products_description"].="
".$this->ConvertText2DB((string)$value1->LANGTEXT_2); } $Mapping["products_short_description"]=$this->ConvertText2DB((string)$value1->LANGTEXT_2 . (string)$value1->ZUSATZ . (string)$value1->ZUSATZ_OPT); }else{ $Mapping["products_short_description"]=$this->ConvertText2DB((string)$value1->ZUSATZ . (string)$value1->ZUSATZ_OPT); } $Mapping["products_keywords"]=(string)$value->ARTCODE . " " . (string)$value1->SUCHBEGRIFFE; //SEO vorhanden? if (count($value->SEO)){ $Mapping["products_meta_title"]=(string)$value->SEO->TITLE; $Mapping["products_meta_description"]=(string)$value->SEO->DESCR; $Mapping["products_meta_keywords"]=(string)$value->SEO->KEYW; $Mapping["products_url"]=""; $Mapping["products_viewed"]=0; } $sql = "SELECT * FROM " . TABLE_PRODUCTS_DESCRIPTION . " WHERE products_id = " . $Artikelnummer . " AND language_id = " . $this->getSprachenID($value1->SPRACH_KZ); $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} } } }else{ // Leeren Langtext anlegen $Mapping=array(); $Mapping["products_id"]=$Artikelnummer; $Mapping["language_id"]=$this->getSprachenID("D"); $Mapping["products_name"]=(string)$value->ARTCODE; $Mapping["products_description"]=""; $Mapping["products_short_description"]=""; $Mapping["products_keywords"]=(string)$value->ARTCODE; $sql = "SELECT * FROM " . TABLE_PRODUCTS_DESCRIPTION . " WHERE products_id = " . $Artikelnummer; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} } // Attriute vorhanden? if ((string)$value->SPRACHDATEN->ATTRIBUT){ foreach ($value->SPRACHDATEN->ATTRIBUT as $attribute => $werte){ $TempOption=trim((string)$werte->NAME); $TempOptionValue=trim((string)$werte->INHALT); $TempOptionSort=trim((string)$werte->POS); // existiert Option? $sql = "SELECT products_options_id, products_options_name FROM products_options WHERE products_options_name = '" . $TempOption . "' AND language_id = 2"; $rsspeicher = $this->db->Execute($sql); if ($rsspeicher->EOF){ $sql = "SELECT MAX(products_options_id)+1 AS anzahl FROM products_options"; $rsspeicher = $this->db->Execute($sql); $TempOptionsID = $rsspeicher->fields("anzahl"); // Option anlegen if ($TempOptionsID > 0){ $sql = "INSERT INTO products_options (products_options_id, language_id, products_options_name) VALUES (" . $TempOptionsID . ",2,'" . $TempOption . "')"; $this->db->Execute($sql); } }else{ $TempOptionsID = $rsspeicher->fields("products_options_id"); } // existiert Options Value? $sql = "SELECT pv.products_options_values_id FROM products_options_values pv INNER JOIN products_options_values_to_products_options pvo ON pv.products_options_values_id = pvo.products_options_values_id WHERE products_options_id = " . $TempOptionsID . " AND products_options_values_name = '" . $TempOptionValue . "'"; $rsspeicher = $this->db->Execute($sql); if ($rsspeicher->EOF){ $sql = "SELECT MAX(products_options_values_id)+1 AS anzahl FROM products_options_values"; $rsspeicher = $this->db->Execute($sql); $TempOptionsID = $rsspeicher->fields("anzahl"); if ($TempOptionsID > 0){ // Option Value anlegen $sql = "INSERT INTO products_options_values (products_options_values, language_id, products_options_values_name) VALUES (" . $TempOptionsValueID . ",2,'" . $TempOptionValue . "')"; $this->db->Execute($sql); // Beziehung herstellen $sql = "INSERT INTO products_options_values_to_products_options (products_options_id, products_options_values_id) VALUES (" . $TempOptionsID . "," . $TempOptionValueID . ")"; $this->db->Execute($sql); } }else{ $TempOptionValueID=$rsspeicher->fields("products_options_values_id"); } // Attribut anlegen if ($TempOptionsID > 0 && $TempOptionValueID > 0){ $sql = "INSERT INTO products_attributes (products_id, options_id, options_values_id, sortorder) VALUES ('" . $Artikelnummer . "', '" . $TempOptionsID . "', '" . $TempOptionValueID . "', '" . $TempOptionSort . "')"; $this->db->Execute($sql); } } } // Produktfilter erzeugen $PF = new ProduktFilter($Artikelnummer); $PF->setBezeichnungKurz($Artikelnummer); // Bilder vorhanden? $BildVerzeichnisse=array("original_images","info_images","popup_images","thumbnail_images"); if ((string)$value->BILD_01){ $filename=$this->PathImport."bilder/" . (string)$value->BILD_01; if (file_exists($filename)){ foreach ($BildVerzeichnisse as $id1 => $bildpath){ $filename_neu=DIR_FS_DOCUMENT_ROOT."/images/product_images/" . $bildpath . "/" . $Artikelnummer . "_0.jpg"; $products_image_name = $Artikelnummer . "_0.jpg"; // Pruefen ob Datei unterschiedlich bzw. existiert if (!file_exists($filename_neu)){ copy ($filename, $filename_neu); if ($bildpath != "original_images"){ require (DIR_WS_INCLUDES.'product_' . $bildpath . '.php'); $sql = "UPDATE " . TABLE_PRODUCTS . " SET products_image = '" . $products_image_name . "' WHERE products_id = " . $Artikelnummer; $this->db->Execute($sql); } }else{ $MD5_1=hash_file('md5', $filename); $MD5_2=hash_file('md5', $filename_neu); if ($MD5_1 != $MD5_2){ copy ($filename, $filename_neu); if ($bildpath != "original_images"){ require (DIR_WS_INCLUDES.'product_' . $bildpath . '.php'); $sql = "UPDATE " . TABLE_PRODUCTS . " SET products_image = '" . $products_image_name . "' WHERE products_id = " . $Artikelnummer; $this->db->Execute($sql); } } } } // Bild loeschen, wenn alles erledigt if ($this->Config->get("xstar_syncmercator_importbilder_loeschen")!=1){ unlink($filename); } } } // Weitere Bilder hinterlegt? foreach (get_object_vars($value) as $feld => $wert){ if (substr($feld,0,4) == "BILD"){ $filename=$this->PathImport."bilder/" . $wert; if (file_exists($filename)){ $BildID=str_replace("BILD_","",$feld)-1; if ($BildID > 0){ foreach ($BildVerzeichnisse as $id1 => $bildpath){ $filename_neu=DIR_FS_DOCUMENT_ROOT."/images/product_images/" . $bildpath . "/" . $Artikelnummer . "_" . $BildID. ".jpg"; $products_image_name = $Artikelnummer . "_" . $BildID . ".jpg"; // Pruefen ob Datei unterschiedlich if (!file_exists($filename_neu)){ copy ($filename, $filename_neu); if ($bildpath != "original_images"){ require (DIR_WS_INCLUDES.'product_' . $bildpath . '.php'); } }else{ $MD5_1=hash_file('md5', $filename); $MD5_2=hash_file('md5', $filename_neu); if ($MD5_1 != $MD5_2){ copy ($filename, $filename_neu); if ($bildpath != "original_images"){ require (DIR_WS_INCLUDES.'product_' . $bildpath . '.php'); } } } // Bild zum Artikel speichern $Mapping=array(); $Mapping["products_id"]=$Artikelnummer; $Mapping["image_nr"]=$BildID; $Mapping["image_name"]=$products_image_name; $sql = "SELECT * FROM " . TABLE_PRODUCTS_IMAGES . " WHERE products_id = " . $Artikelnummer . " AND image_nr = " . $BildID; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping,true); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} } // Bild loeschen, wenn alles erledigt if ($this->Config->get("xstar_syncmercator_importbilder_loeschen")!=1){ unlink($filename); } } } } } // Bildduplikate entfernen $this->checkImagesDuplikate($Artikelnummer); } }else{ $this->showMeldung(0,3); } } /** * Loescht einen Artikel aus dem Artikelstamm * * @param String xml **/ function delArtikel($xml){ if (count($xml->LOESCHEN) > 0){ $this->setStatus("Artikel werden gelöscht."); foreach ($xml->LOESCHEN as $id => $value){ // Artikelnummer ermitteln $sql = "SELECT products_id, products_model FROM " . TABLE_PRODUCTS . " WHERE products_model = '" . $value . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $Artikelnummer=$rs->fields("products_id"); $sql = "DELETE FROM " . TABLE_PRODUCTS_DESCRIPTION . " WHERE products_id = " . $Artikelnummer; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS_ATTRIBUTES . " WHERE products_id = " . $Artikelnummer; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE products_id = " . $Artikelnummer; $this->db->Execute($sql); $sql = "DELETE FROM products_kurzebezeichnungen WHERE products_id NOT IN (SELECT products_id FROM products)"; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS . " WHERE products_id = " . $Artikelnummer; $this->db->Execute($sql); } } } } /** * Loescht alle Artikel */ function delArtikelAll(){ $sql = "DELETE FROM " . TABLE_CATEGORIES_DESCRIPTION . ""; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_CATEGORIES . ""; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS_DESCRIPTION . ""; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS_ATTRIBUTES . ""; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS_TO_CATEGORIES . ""; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS . ""; $this->db->Execute($sql); } /** * Bereinigt die Datenbank */ function clearDatabase(){ $sql = "DELETE FROM " . TABLE_PRODUCTS_DESCRIPTION . " WHERE products_id NOT IN (SELECT products_id FROM " . TABLE_PRODUCTS . ")"; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS_ATTRIBUTES . " WHERE products_id NOT IN (SELECT products_id FROM " . TABLE_PRODUCTS . ")"; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_PRODUCTS_TO_CATEGORIES . " WHERE products_id NOT IN (SELECT products_id FROM " . TABLE_PRODUCTS . ")"; $this->db->Execute($sql); $sql = "DELETE FROM products_kurzebezeichnungen WHERE products_id NOT IN (SELECT products_id FROM products)"; $this->db->Execute($sql); } /** * Erzeugt basierend auf Kinderartikel Attribute */ function addVarianten(){ $this->setStatus("Varianten werden erzeugt."); // Pruefen, ob Variante Gruppe Allgemein vorhanden ist $sql = "SELECT * FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_name = 'Allgemein'"; $rs = $this->db->Execute($sql); if ($rs->EOF){ $sql = "INSERT INTO " . TABLE_PRODUCTS_OPTIONS . " (products_options_name, language_id ) VALUES ('Allgemein',2)"; $this->db->Execute($sql); $sql = "SELECT * FROM " . TABLE_PRODUCTS_OPTIONS . " WHERE products_options_name = 'Allgemein'"; $rs = $this->db->Execute($sql); } $GruppenID=$rs->fields("products_options_id"); $this->ArtikelKind=$_SESSION["ArtikelKind"]; // Attribute anlegen if (count($this->ArtikelKind) > 0){ foreach ($this->ArtikelKind as $id => $value){ $sql = "SELECT * FROM " . TABLE_PRODUCTS_OPTIONS_VALUES . " WHERE products_options_values_name = '" . $this->ConvertText2DB($value["text"]) . "'"; $rs = $this->db->Execute($sql); if ($rs->EOF){ $sql = "SELECT MAX(products_options_values_id) as products_options_values_id FROM " . TABLE_PRODUCTS_OPTIONS_VALUES; $rsspeicher = $this->db->Execute($sql); $products_options_values_id=$rsspeicher->fields("products_options_values_id")+1; $sql = "INSERT INTO " . TABLE_PRODUCTS_OPTIONS_VALUES . " (products_options_values_id, language_id, products_options_values_name ) VALUES (" . $products_options_values_id . ",2,'" . $this->ConvertText2DB($value["text"]) . "')"; $this->db->Execute($sql); $sql = "SELECT * FROM " . TABLE_PRODUCTS_OPTIONS_VALUES . " WHERE products_options_values_name = '" . $this->ConvertText2DB($value["text"]) . "'"; $rs = $this->db->Execute($sql); $VariantenID=$rs->fields("products_options_values_id"); $sql = "INSERT INTO " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " (products_options_id ,products_options_values_id) VALUES (" . $GruppenID . "," . $VariantenID . ")"; $this->db->Execute($sql); } } } // Vaterartikel um Attribute erweitern und Kinder ausblenden if (count($this->ArtikelKind) > 0){ $Vater=array(); $Kind=array(); $VariantenID=0; foreach ($this->ArtikelKind as $id => $value){ // Daten vom Vater holen $sql = "SELECT * FROM " . TABLE_PRODUCTS . " WHERE products_model = '" . $value["vater"] . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $Vater=$rs->fields; // Daten vom Kind holen $sql = "SELECT * FROM " . TABLE_PRODUCTS . " WHERE products_model = '" . $id . "'"; $rs = $this->db->Execute($sql); $Kind=$rs->fields; // Variantennummer holen $sql = "SELECT products_options_values_id FROM " . TABLE_PRODUCTS_OPTIONS_VALUES . " WHERE products_options_values_name = '" . $this->ConvertText2DB($value["text"]) . "'"; $rs = $this->db->Execute($sql); $VariantenID=$rs->fields("products_options_values_id"); // Attribut anlegen $Mapping=array(); //$Mapping["products_attributes_id"]=""; $Mapping["products_id"]=$Vater["products_id"]; $Mapping["options_id"]=$GruppenID; $Mapping["options_values_id"]=$VariantenID; if ($Vater["products_price"] > $Kind["products_price"]){ $Mapping["options_values_price"]=$Vater["products_price"] - $Kind["products_price"]; $Mapping["price_prefix"]="-"; }else{ $Mapping["options_values_price"]=$Kind["products_price"] - $Vater["products_price"]; $Mapping["price_prefix"]="+"; } $Mapping["attributes_model"]=$Kind["products_model"]; $Mapping["attributes_stock"]=0; $Mapping["options_values_weight"]=0.0000; $Mapping["weight_prefix"]="+"; $Mapping["sortorder"]=0; $sql = "SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES . " WHERE products_id = " . $Vater["products_id"] . " AND options_id = " . $GruppenID . " AND options_values_id = " . $VariantenID . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSql($rs,$Mapping); }else{ $sql = $this->db->GetInsertSql($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} // Kind Artikel unsichtbar machen $sql = "UPDATE " . TABLE_PRODUCTS . " SET products_status = 0 WHERE products_model = '" . $Kind["products_model"] . "'"; $this->db->Execute($sql); }else{ $this->setStatus("-- Vaterartikel '" . $value["vater"] . "' fuer Kindartikel '" . $id . "' existiert nicht.","Fehler"); } } } } /** * Sortiert die Varianten der Grsuppe Allgemein **/ function sortVarianten(){ $this->setStatus("Varianten werden sortiert."); $sql = "SELECT sortorder, products_options_values_name, products_id, products_attributes_id FROM products_attributes INNER JOIN products_options_values ON products_attributes.options_values_id = products_options_values.products_options_values_id WHERE products_attributes.options_id = 0 ORDER BY products_id, products_options_values_name"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $i=0; $tempArtikelnummer=$rs->fields("products_id"); while (!$rs->EOF){ if ($tempArtikelnummer != $rs->fields("products_id")){$tempArtikelnummer=$rs->fields("products_id");$i=0;} $sql = "UPDATE products_attributes SET sortorder = " . $i . " WHERE products_id = " . $rs->fields("products_id") . " AND products_attributes_id = " . $rs->fields("products_attributes_id") . ""; $this->db->Execute($sql); $i++; $rs->MoveNext(); } } } /** * legt Kunden an anhand von einer XML Datei * * @param String xml **/ function addKunden($xml){ if (count($xml->KUNDE) > 0){ $this->setStatus("Kunden werden angelegt bzw. modifiziert (" . time() . ")."); foreach ($xml->KUNDE as $id => $value){ if ($this->checkEmail((string)$value->EMAIL)){ $Mapping=array(); // Wird ausgelassen automatische hochzaehlen -- $Mapping["customers_id"]=""; $Mapping["customers_cid"]=(string)$value->NR; if ( (string)$value->UST_ID ){ $Mapping["customers_vat_id"]=(string)$value->UST_ID; $Mapping["customers_vat_id_status"]=1; }else{ $Mapping["customers_vat_id"]=NULL; $Mapping["customers_vat_id_status"]=0; } $Mapping["customers_warning"]=""; $Mapping["customers_status"]=$this->getKundengruppenID((string)$value->PGR); switch ((string)$value->ANREDE){ case "Herr": $Mapping["customers_gender"]="m"; break; case "Frau": $Mapping["customers_gender"]="w"; break; default: break; } $Mapping["customers_firstname"]=$this->ConvertText2DB((string)$value->VORNAME); $Mapping["customers_lastname"]=$this->ConvertText2DB((string)$value->NAME1); //$Mapping["customers_dob"]=""; $Mapping["customers_email_address"]=$this->ConvertText2DB((string)$value->EMAIL); $Mapping["customers_default_address_id"]=1; $Mapping["customers_telephone"]=$this->ConvertText2DB((string)$value->TEL1); $Mapping["customers_fax"]=$this->ConvertText2DB((string)$value->FAX); $Mapping["customers_password"]=md5("START".(string)$value->NR); $Mapping["customers_newsletter"]=""; $Mapping["customers_newsletter_mode"]=0; $Mapping["member_flag"]=0; $Mapping["delete_user"]=0; $Mapping["account_type"]=0; $Mapping["password_request_key"]=""; $Mapping["payment_unallowed"]=""; $Mapping["shipping_unallowed"]=""; $Mapping["refferers_id"]=0; $Mapping["customers_date_added"]=date("d.m.Y",time()); $Mapping["customers_last_modified"]=date("d.m.Y",time()); $sql = "SELECT * FROM " . TABLE_CUSTOMERS . " WHERE customers_cid = '" . (string)$value->NR . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} // XTC Adressen ID ermitteln $sql = "SELECT customers_id FROM " . TABLE_CUSTOMERS . " WHERE customers_cid = '" . (string)$value->NR . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $XTCKundennummer=$rs->fields("customers_id"); // Adresse $Mapping=array(); //$Mapping["address_book_id"]=""; $Mapping["customers_id"]=$XTCKundennummer; $Mapping["entry_gender"]=""; $Mapping["entry_company"]=$this->ConvertText2DB((string)$value->NAME2); $Mapping["entry_firstname"]=$this->ConvertText2DB((string)$value->VORNAME); $Mapping["entry_lastname"]=$this->ConvertText2DB((string)$value->NAME1); $Mapping["entry_street_address"]=$this->ConvertText2DB((string)$value->STRASSE); $Mapping["entry_suburb"]=""; $Mapping["entry_postcode"]=(string)$value->PLZ; $Mapping["entry_city"]=$this->ConvertText2DB((string)$value->ORT); $Mapping["entry_state"]=""; // Land ermitteln $sql = "SELECT countries_id FROM " . TABLE_COUNTRIES . " WHERE countries_iso_code_2 = '" . $this->ConvertText2DB((string)$value->LKZ) . "'"; $rsspeicher = $this->db->Execute($sql); if (!$rsspeicher->EOF && $rsspeicher){ $Mapping["entry_country_id"]=$rsspeicher->fields("countries_id"); }else{ $sql = "SELECT countries_id FROM " . TABLE_COUNTRIES . " WHERE countries_iso_code_2 = 'DE'"; $rsspeicher = $this->db->Execute($sql); $Mapping["entry_country_id"]=$rsspeicher->fields("countries_id");; } $Mapping["entry_zone_id"]=0; $Mapping["address_date_added"]=date("d.m.Y",time()); $Mapping["address_last_modified"]=date("d.m.Y",time()); $sql = "SELECT * FROM " . TABLE_ADDRESS_BOOK . " WHERE customers_id = " . $XTCKundennummer . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} // Adressbuch Nummer ermitteln, um Kundendatensatz zu aktualisieren $sql = "SELECT address_book_id FROM " . TABLE_ADDRESS_BOOK . " WHERE customers_id = " . $XTCKundennummer . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = "UPDATE ". TABLE_CUSTOMERS . " SET customers_default_address_id = " . $rs->fields("address_book_id") . " WHERE customers_id = " . $XTCKundennummer . ""; $this->db->Execute($sql); }else{ } // Zusatz Tabelle $sql = "SELECT * FROM " . TABLE_CUSTOMERS_INFO . " WHERE customers_info_id = " . $XTCKundennummer; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ // }else{ $sql = "INSERT INTO " . TABLE_CUSTOMERS_INFO . " (customers_info_id) VALUES (" . $XTCKundennummer . ")"; } if ($sql){$this->db->Execute($sql);} }else{ } }else{ //$this->Log("Adresse (" . (string)$value->NR . ") hat keine Gültige Email Adresse."); } } } } /** * Liest eine Auftragsdatei und hinterlegt einen entsprechenden Status und sendet * gegeben falls ein Status per Email * @param String $xml */ function setAuftragStatus($xml){ foreach ($xml as $id => $value){ $TempOrderID=$value->SHOP_NR; $StatusVersendet=3; $StatusEmailVersendet=0; // Bestellung vorhanden? $sql = "SELECT customers_name, customers_email_address, orders_status, date_purchased FROM ".TABLE_ORDERS." WHERE orders_id = '".xtc_db_input($TempOrderID)."'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $TempComments ="Versandatum: " . $value->VERSANDDATUM . "\n"; $TempComments.="Zahlungsdatum: " . $value->ZAHLUNGSDATUM . "\n"; $TempComments.="Paketnummer: " . trim($value->PAKETNUMMER) . ""; } // Email versenden if ($value->VERSANDMAIL == 1){ require_once (DIR_FS_CATALOG.DIR_WS_CLASSES.'class.phpmailer.php'); require_once (DIR_FS_INC.'xtc_php_mail.inc.php'); // Text erzeugen $smarty = new Smarty; $smarty->assign('language', $_SESSION['language']); $smarty->caching = false; $smarty->template_dir = DIR_FS_CATALOG.'templates'; $smarty->compile_dir = DIR_FS_CATALOG.'templates_c'; $smarty->config_dir = DIR_FS_CATALOG.'lang'; $smarty->assign('tpl_path', 'templates/'.CURRENT_TEMPLATE.'/'); $smarty->assign('logo_path', HTTP_SERVER.DIR_WS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/img/'); $smarty->assign('NAME', $check_status['customers_name']); $smarty->assign('ORDER_NR', $TempOrderID); $smarty->assign('ORDER_ID', $TempOrderID); $smarty->assign('ORDER_LINK', xtc_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id='.$TempOrderID, 'SSL')); $smarty->assign('ORDER_DATE', xtc_date_long($check_status['date_purchased'])); $smarty->assign('NOTIFY_COMMENTS', nl2br($TempComments)); // Tomcraft - 2009-10-10 - Fixed wordwrap in notify_comments $smarty->assign('ORDER_STATUS', $orders_status_array[$StatusVersendet]); $html_mail = $smarty->fetch(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/admin/mail/german/change_order_mail.html'); $txt_mail = $smarty->fetch(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/admin/mail/german/change_order_mail.txt'); xtc_php_mail(EMAIL_BILLING_ADDRESS, EMAIL_BILLING_NAME, $rs->fields("customers_email_address"), $rs->fields("customers_name"), '', EMAIL_BILLING_REPLY_ADDRESS, EMAIL_BILLING_REPLY_ADDRESS_NAME, $TempFilename, '', EMAIL_BILLING_SUBJECT, $html_mail, $txt_mail); $StatusEmailVersendet=1; } // Notiz speichern xtc_db_query("INSERT INTO ".TABLE_ORDERS_STATUS_HISTORY." (orders_id, orders_status_id, date_added, customer_notified, comments) values ('".xtc_db_input($TempOrderID)."', '".xtc_db_input($StatusVersendet)."', now(), '".$StatusEmailVersendet."', '".xtc_db_input($TempComments)."')"); } } /** * Liefert den MWST Schluessel * * @param String mwst * @return Integer id **/ function getMWSTID($mwst){ $sql = "SELECT tax_class_id FROM " . TABLE_TAX_RATES . " WHERE tax_rate = " . number_format(str_replace(",",".",$mwst),4,".","") . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ return $rs->fields("tax_class_id"); }else{ return 1; } } /** * Liefert die Sprachen ID * * @param String sprache * @return Integer id **/ function getSprachenID($sprache){ if (strlen($sprache) != 2){ switch (strtolower($sprache)){ case "d": $sprache="DE";break; case "e": $sprache="EN";break; case "f": $sprache="FR";break; case "i": $sprache="IT";break; case "n": $sprache="NO";break; case "s": $sprache="SE";break; } } $sql = "SELECT languages_id FROM " . TABLE_LANGUAGES . " WHERE LOWER(code) = '" . strtolower($sprache) . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ return $rs->fields("languages_id"); }else{ return 0; } } /** * Liefert die Kundengruppen ID zurueck * * @param Integer id * @return Integer KundengruppenID */ function getKundengruppenID($id){ $Kundengruppe=$this->StdKundengruppe; if ($id > 0){ /* $sql = "SELECT customers_status_id FROM " . TABLE_CUSTOMERS_STATUS . " WHERE customers_status_name = 'VK" . $id . "'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $Kundengruppe = $rs->fields("customers_status_id"); } */ if ($this->Config->get("xstar_syncmercator_pgr_kundengruppe_vk" . $id) > 0){ $Kundengruppe=$this->Config->get("xstar_syncmercator_pgr_kundengruppe_vk" . $id); } } return $Kundengruppe; } /** * Liefert den Namen der Kundengruppe * @param unknown_type $customers_status_id * @return unknown_type */ function getKundengruppenNameSchnittstelle($customers_status_id){ $Kundengruppenname="VK4"; for ($i=0 ; $i<=8 ; $i++){ if($this->Config->get("xstar_syncmercator_pgr_kundengruppe_vk" . $i) == $customers_status_id){ $Kundengruppenname="VK" . $i; } } return $Kundengruppenname; } /** * Prüft die bestehenden Kunden */ function checkKundengruppen(){ $this->setStatus("Kundengruppen werden geprueft."); $sql = "SELECT customers_id FROM `customers` LEFT JOIN customers_status ON customers.customers_status = customers_status.customers_status_id WHERE customers_status.customers_status_id IS NULL"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ while (!$rs->EOF){ $sql = "UPDATE " . TABLE_CUSTOMERS . " SET customers_status = " . $this->StdKundengruppe . " WHERE customers_id = " . $rs->fields("customers_id") . ""; $this->db->Execute(sql); $rs->MoveNext(); } } } /** * Aktualisiert die Herstellerliste * * @param String xml **/ function addHersteller($xml){ if (count($xml->HERSTELLER) > 0){ $this->setStatus("Hersteller werden angelegt bzw. modifiziert."); foreach ($xml->HERSTELLER as $id => $value){ $Maping=array(); if ((string)$value->NR > 0){ $Mapping["manufacturers_id"]=(string)$value->NR; $Mapping["manufacturers_name"]=$this->ConvertText2DB((string)$value->NAME1); $Mapping["manufacturers_image"]=""; $Mapping["date_added"]=date("d.m.Y",time()); $Mapping["last_modified"]=date("d.m.Y",time()); $sql = "SELECT * FROM " . TABLE_MANUFACTURERS . " WHERE manufacturers_id = " . $Mapping["manufacturers_id"] . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); //$this->Log("Hersteller '" . $Mapping["manufacturers_name"] . "' wird modifziert."); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); //$this->Log("Hersteller '" . $Mapping["manufacturers_name"] . "' wird angelegt."); } if ($sql){$this->db->Execute($sql);} } } } } /** * Liefert die Hersteller ID zurueck * * @param String herstellerxml * @return Integer herstellerid **/ function getHerstellerID($herstellerxml){ $Maping=array(); if ((string)$herstellerxml->NR > 0){ $Mapping["manufacturers_id"]=(string)$herstellerxml->NR; $Mapping["manufacturers_name"]=(string)$herstellerxml->NAME1; $Mapping["manufacturers_image"]=""; $Mapping["date_added"]=date("d.m.Y",time()); $Mapping["last_modified"]=date("d.m.Y",time()); $sql = "SELECT * FROM " . TABLE_MANUFACTURERS . " WHERE manufacturers_id = " . $Mapping["manufacturers_id"] . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ // Hersteller werden durch Herstellerliste angelegt //$sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} return $Mapping["manufacturers_id"]; }else{ return 0; } } /** * Erzeugt und aktualsiert die Kategorien * * @param String xml **/ function addKategorien($xml){ if (count($xml->KATEGORIE) > 0){ $this->setStatus("Kategorien werden angelegt (" . time() . ")."); // BESTEHENDE KATEGORIEN LOESCHEN $sql = "DELETE FROM " . TABLE_CATEGORIES . ";"; $this->db->Execute($sql); $sql = "DELETE FROM " . TABLE_CATEGORIES_DESCRIPTION . ";"; $this->db->Execute($sql); // Standardkategorie anlegen $Mapping=array(); $Mapping["categories_id"]=1; $Mapping["categories_image"]=""; $Mapping["parent_id"]=0; $Mapping["categories_status"]=0; $Mapping["categories_template"]="default"; $Mapping["group_permission_0"]=0; $Mapping["group_permission_1"]=0; $Mapping["group_permission_2"]=0; $Mapping["group_permission_3"]=0; $Mapping["listing_template"]="default"; $Mapping["sort_order"]=0; $Mapping["products_sorting"]="p.products_modell"; $Mapping["products_sorting2"]="ASC"; $Mapping["date_added"]=date("d.m.Y",time()); $Mapping["last_modified"]=date("d.m.Y",time()); $sql = "SELECT * FROM " . TABLE_CATEGORIES . " WHERE categories_id = " . $Mapping["categories_id"] . ""; $rs = $this->db->Execute($sql); $sql = $this->db->GetInsertSQL($rs,$Mapping); if ($sql){$this->db->Execute($sql);} // Varianten - Kategorien $Mapping=array(); $Mapping["categories_id"]=-1; $Mapping["categories_image"]=""; $Mapping["parent_id"]=0; $Mapping["categories_status"]=0; $Mapping["categories_template"]="default"; $Mapping["group_permission_0"]=0; $Mapping["group_permission_1"]=0; $Mapping["group_permission_2"]=0; $Mapping["group_permission_3"]=0; $Mapping["listing_template"]="default"; $Mapping["sort_order"]=0; $Mapping["products_sorting"]="p.products_modell"; $Mapping["products_sorting2"]="ASC"; $Mapping["date_added"]=date("d.m.Y",time()); $Mapping["last_modified"]=date("d.m.Y",time()); $sql = "SELECT * FROM " . TABLE_CATEGORIES . " WHERE categories_id = " . $Mapping["categories_id"] . ""; $rs = $this->db->Execute($sql); $sql = $this->db->GetInsertSQL($rs,$Mapping); if ($sql){$this->db->Execute($sql);} // STD - Kategorie Beschreibung $Mapping=array(); $Mapping["categories_id"]=1; $Mapping["language_id"]=2; $Mapping["categories_name"]="Nicht zuzordnen !!! (ERP Sync)"; $Mapping["categories_heading_title"]=""; $Mapping["categories_description"]=""; $Mapping["categories_meta_title"]=""; $Mapping["categories_meta_description"]=""; $Mapping["categories_meta_keywords"]=""; $sql = "SELECT * FROM " . TABLE_CATEGORIES_DESCRIPTION . " WHERE categories_id = " . $Mapping["categories_id"] . ""; $rs = $this->db->Execute($sql); $sql = $this->db->GetInsertSQL($rs,$Mapping); if ($sql){$this->db->Execute($sql);} // Varianten - Kategorie Beschreibung $Mapping=array(); $Mapping["categories_id"]=-1; $Mapping["language_id"]=2; $Mapping["categories_name"]="Varianten Artikel (ERP Sync)"; $Mapping["categories_heading_title"]=""; $Mapping["categories_description"]=""; $Mapping["categories_meta_title"]=""; $Mapping["categories_meta_description"]=""; $Mapping["categories_meta_keywords"]=""; $sql = "SELECT * FROM " . TABLE_CATEGORIES_DESCRIPTION . " WHERE categories_id = " . $Mapping["categories_id"] . ""; $rs = $this->db->Execute($sql); $sql = $this->db->GetInsertSQL($rs,$Mapping); if ($sql){$this->db->Execute($sql);} // Kategorien anlegen foreach ($xml->KATEGORIE as $id => $value){ $Mapping=array(); $Mapping["categories_id"]=$this->changeKategorienID($value->KAT_ID); if (is_numeric($Mapping["categories_id"])){ $Mapping["categories_image"]=""; $Mapping["parent_id"]=$this->changeKategorienID($value->VATER_ID); if ((string)$value->AKTIV == 1){ $Mapping["categories_status"]=1; }else{ $Mapping["categories_status"]=0; } $Mapping["categories_template"]="default"; $Mapping["group_permission_0"]=0; $Mapping["group_permission_1"]=0; $Mapping["group_permission_2"]=0; $Mapping["group_permission_3"]=0; $Mapping["listing_template"]="default"; $Mapping["sort_order"]=0; switch (strtoupper((string)$value->SORT_FELD)){ case"ARTIKELNUMMER": $Mapping["products_sorting"]="p.products_model"; break; case "EAN": $Mapping["products_sorting"]="p.products_ean"; break; case "PREIS": $Mapping["products_sorting"]="p.products_price"; break; case "ANGELEGT AM": $Mapping["products_sorting"]="p.products_date_added"; break; case "LETZE ÄNDERUNG": $Mapping["products_sorting"]="p.products_last_modified"; break; default: $Mapping["products_sorting"]="p.products_price"; break; } switch (strtoupper((string)$value->SORT_RICHTUNG)){ case "ASC": $Mapping["products_sorting2"]="ASC"; break; case "DESC": $Mapping["products_sorting2"]="DESC"; break; default: $Mapping["products_sorting2"]="ASC"; break; } $Mapping["date_added"]=date("d.m.Y",time()); $Mapping["last_modified"]=date("d.m.Y",time()); // Kategorien $sql = "SELECT * FROM " . TABLE_CATEGORIES . " WHERE categories_id = " . $Mapping["categories_id"] . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} // Kategorien Sprachen if (count($value->SPRACHE) > 0){ foreach ($value->SPRACHE as $id1 => $value1){ $Mapping=array(); $Mapping["categories_id"]=$this->changeKategorienID($value->KAT_ID); $Mapping["language_id"]=$this->getSprachenID($value1->SPRACH_KZ); $Mapping["categories_name"]=$this->ConvertText2DB((string)$value1->TEXT); $Mapping["categories_heading_title"]=$this->ConvertText2DB((string)$value1->KURZTEXT); $Mapping["categories_description"]=$this->ConvertText2DB((string)$value1->LANGTEXT); $Mapping["categories_meta_title"]=$this->ConvertText2DB((string)$value1->SEO->TITLE); $Mapping["categories_meta_description"]=$this->ConvertText2DB((string)$value1->SEO->DESCR); $Mapping["categories_meta_keywords"]=$this->ConvertText2DB((string)$value1->SEO->KEYW); $sql = "SELECT * FROM " . TABLE_CATEGORIES_DESCRIPTION . " WHERE categories_id = " . $Mapping["categories_id"] . " AND language_id = " . $Mapping["language_id"] . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $sql = $this->db->GetUpdateSQL($rs,$Mapping); }else{ $sql = $this->db->GetInsertSQL($rs,$Mapping); } if ($sql){$this->db->Execute($sql);} } } }else{ $this->setStatus("-- nicht numerische Kategorie ('" . $Mapping["categories_id"] . "') wird ignoriert.","Fehler"); } } } } /** * Erzeugt fuer XTC einen neue ID * * @param string id * @return integer id **/ function changeKategorienID($id){ if (trim($id)){return "1" . $id;}else{return 0;} } /** * Prueft alle Kategorien, ob diese auch Artikel beinhalten * */ function checkKategorien(){ $this->setStatus("Kategorien werden auf hinterlegte Artikel geprueft."); // Alle Kategorie auf leer setzten $sql = "UPDATE " . TABLE_CATEGORIES . " SET categories_status = 0"; $this->db->Execute($sql); $sql = "SELECT * FROM " . TABLE_PRODUCTS_TO_CATEGORIES . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ while (!$rs->EOF){ $sql = "UPDATE " . TABLE_CATEGORIES . " SET categories_status = 1 WHERE categories_id = " . $rs->fields("categories_id") . ""; $this->db->Execute($sql); $TempCategorie=$rs->fields("categories_id"); do{ $sql = "SELECT * FROM " . TABLE_CATEGORIES . " WHERE categories_id = " . $TempCategorie . ""; $rsspeicher = $this->db->Execute($sql); $TempID=$rsspeicher->fields("parent_id"); $TempCategorie=$rsspeicher->fields("parent_id"); if ($TempID > 0){ $sql = "UPDATE " . TABLE_CATEGORIES . " SET categories_status = 1 WHERE categories_id = " . $TempID . ""; $this->db->Execute($sql); } }while ($TempID>1); $rs->MoveNext(); } // "Nicht Zuzuordnen" wieder verstecken $sql = "UPDATE " . TABLE_CATEGORIES . " SET categories_status = 0 WHERE categories_id = 1"; $this->db->Execute($sql); // Varianten Artikel wieder verstecken $sql = "UPDATE " . TABLE_CATEGORIES . " SET categories_status = 0 WHERE categories_id = -1"; $this->db->Execute($sql); }else{ //$this->Log("keine Katagorien zum prüfen vorhanden."); } } /** * Alle Bildangaben im XTC mit den Dateien prüfen * @return unknown_type */ function checkImages(){ $this->setStatus("Bildverknuepfungen werden geprueft."); $sql = "SELECT * FROM " . TABLE_PRODUCTS_IMAGES . ""; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ while (!$rs->EOF){ $Status=true; // Original Bild $filename=DIR_FS_DOCUMENT_ROOT."/images/product_images/original_images/" . $rs->fields("image_name") . ""; if(!file_exists($filename)){ $Status=false; } // INFO Bild $filename=DIR_FS_DOCUMENT_ROOT."/images/product_images/info_images/" . $rs->fields("image_name") . ""; if(!file_exists($filename)){ $Status=false; } // POPUP Bild $filename=DIR_FS_DOCUMENT_ROOT."/images/product_images/popup_images/" . $rs->fields("image_name") . ""; if(!file_exists($filename)){ $Status=false; } // Thunbnail Bild $filename=DIR_FS_DOCUMENT_ROOT."/images/product_images/thumbnail_images/" . $rs->fields("image_name") . ""; if(!file_exists($filename)){ $Status=false; } // Datensatz aus Datenbank loeschen - Bild existiert nicht if (!$Status){ $sql = "DELETE FROM " . TABLE_PRODUCTS_IMAGES . " WHERE image_id = " . $rs->fields("image_id"); $this->db->Execute($sql); } $rs->MoveNext(); } } } /** * prueft alle Bilder auf Duplikate */ function checkImagesDuplikate($products_id=0){ if (!$products_id){$this->setStatus("Bildduplikate werden entfernt.");} $BildVerzeichnisse=array("original_images","info_images","popup_images","thumbnail_images"); $sql = "SELECT * FROM " . TABLE_PRODUCTS_IMAGES . " pi INNER JOIN " . TABLE_PRODUCTS . " p ON p.products_id = pi.products_id "; if ($products_id > 0){$sql .= " WHERE p.products_id = " .$products_id;} $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $Bilder=array(); $TempProductsId=0; while (!$rs->EOF){ // Erstes Bild if($TempProductsId != $rs->fields("products_id")){ $TempProductsId = $rs->fields("products_id"); $Bilder[$rs->fields("products_id")][0]["image_name"]=$rs->fields("products_image"); $filename=DIR_FS_DOCUMENT_ROOT."/images/product_images/original_images/".$rs->fields("products_image"); if (file_exists($filename)){ $Bilder[$rs->fields("products_id")][0]["md5"]=hash_file('md5', $filename); } } // Weitere Bilder $Bilder[$rs->fields("products_id")][$rs->fields("image_id")]["image_name"]=$rs->fields("image_name"); $filename=DIR_FS_DOCUMENT_ROOT."/images/product_images/original_images/".$rs->fields("image_name"); if (file_exists($filename)){ $Bilder[$rs->fields("products_id")][$rs->fields("image_id")]["md5"]=hash_file('md5', $filename); } $rs->MoveNext(); } } // doppelte Bilder entfernen if (count($Bilder)>0){ foreach ($Bilder as $id => $value){ $i=0; foreach ($value as $id_bild => $value_bild){ if ($i > 0){ if ($value_bild["md5"] == $value[0]["md5"]){ foreach ($BildVerzeichnisse as $key => $path){ $filename=DIR_FS_DOCUMENT_ROOT."/images/product_images/" . $path . "/".$value_bild["image_name"]; if (file_exists($filename)){unlink($filename);} } $sql = "DELETE FROM " . TABLE_PRODUCTS_IMAGES . " WHERE image_id = " . $id_bild; $this->db->Execute($sql); } } $i++; } } } } /** * Loescht die Bilder */ function deleteImportImages(){ if ($this->Config->get("xstar_syncmercator_importbilder_loeschen")!=1){ $this->setStatus("Nicht benoetigte Bilder werden geloescht."); $PathInhaltBilder=$this->fs->readDir($this->PathImport."bilder/"); if (count($PathInhaltBilder)>0){ $this->setStatus("restliche Bilder, deren Zurordnung fehlt, werden geloescht"); foreach ($PathInhaltBilder as $id => $value){ $filename=$this->PathImport."bilder/".$value["name"]; if (file_exists($filename)){unlink($filename);} } } } } /** * Sortierung der Kategorien */ function sortKategorien(){ $this->setStatus("Sortierung fuer Kategorien wird durchgefuehrt."); $sql = "SELECT LEFT(CONCAT(categories_id,'000000000000000'),15) AS categories_id_neu, categories_id FROM " . TABLE_CATEGORIES . " ORDER BY categories_id"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ $ids=array(); while (!$rs->EOF){ $ids[$rs->fields("categories_id_neu")]=$rs->fields("categories_id"); $rs->MoveNext(); } $Zaehler=0; foreach ($ids as $id => $value){ $sql = "UPDATE " . TABLE_CATEGORIES . " SET sort_order = " . $Zaehler . " WHERE categories_id = " . $value; $this->db->Execute($sql); $Zaehler++; } } } /** * Liesst eine vorgegebene XML Datei * * @param String filename **/ function readXML($filename){ if (file_exists($filename)){ $xml=simplexml_load_file($filename); return $xml; }else{ $this->showMeldung(0,2,array("%filename%"=>$filename)); return false; } } /** * Loescht den Dateinamen pysikalisch und aus dem Hilfsspeicher * @param $filename */ function deleteXML($filename){ if (file_exists($filename)){ if (!$this->Config->get("xstar_syncmercator_importdateien_loeschen")){ unlink($filename); } } } /** * Liefert ein XML String zurueck * * @param $Ebene * @param $Name * @param $Wert * @return $String */ function getXMLNode($Ebene=0,$Name,$Wert){ $XML=""; for($i=0 ; $i <= $Ebene ; $i++){ $XML.="\t"; } $Wert=str_replace("\n"," ",$Wert); if ($this->is_utf8($Wert)){ $Wert=utf8_decode($Wert); } $XML.="<" . $Name . ">" . $Wert . "\n"; return $XML; } /** * Gibt die Meldung aus * * @param String wert **/ function showMeldung($erfolgreich=0,$meldungid=0,$austauschen=array()){ $Ausgabe=""; $Meldungstext=$this->getMeldungsText($meldungid); // Austausch Parameter uebergeben if (count($austauschen)>0){ foreach ($austauschen as $id => $value){ $Meldungstext = str_replace($id,$value,$Meldungstext); } } $Ausgabe=$erfolgreich."~".$meldungid."~".$Meldungstext."~".$this->LogFileLink; if ($this->quiet!=true){print $Ausgabe;} } /** * Ausgabe auf dem Bildschirm * @param $wert */ function setStatus($wert,$art=""){ $wert=htmlentities(utf8_decode($wert)); $wert=str_replace("�","ä",$wert); $wert=str_replace("�","ü",$wert); $wert=str_replace("�","ö",$wert); $wert=str_replace("�","Ä",$wert); $wert=str_replace("�","Ö",$wert); $wert=str_replace("�","Ü",$wert); $wert=str_replace("<","<",$wert); $wert=str_replace(">",">",$wert); $Ausgabe=$wert; if ($this->Debug){print $wert;} // Datenbank Speicherung $Daten=array(); $Daten["sync_id"]=$this->getTODOID(); $Daten["datumuhrzeit"]=str_replace("'","",$this->db->DBTimeStamp(date("Y-m-d H:i:s",time()))); $Daten["beschreibung"]=$Ausgabe; $sql = "SELECT * FROM syncwawi_log"; $rs = $this->db->Execute($sql); $sql = $this->db->GetInsertSQL($rs,$Daten); $this->db->Execute($sql); } /** * Liefert einen Meldungstext zurueck * * @param Integer meldungid * @return String meldung **/ function getMeldungsText($meldungid){ $meldung=""; if ($this->Meldungen[$meldungid]){ return $this->Meldungen[$meldungid]; }else{ return "nicht definiert."; } } /** * Konvertiert Text zum Datenbankstandard * * @param String text * @return String text_konvertiert **/ function ConvertText2DB($text){ return utf8_decode($text); } /** * Prueft eine Email auf Guelitgkeit * * @param String mail * @param Boolean Status **/ function checkEmail($mail){ if(eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}$",$mail)){ return true; }else{ return false; } } /** * Versendet eine Bestaetigungsemail */ function sendMail(){ $my = new MyMail(); $my->subject="Syncmodul Mercator / XTC Status"; $body.="

" . $this->Programmname . "
copyright by WEBDESIGN-RÜSTMANN 2009 - " . date("Y",time()) . "

"; $body.="

 

"; $body.="

Ihre Daten wurden erfolgreich synchronisiert.

"; $body.="

Die einzeln Schritte können Sie im unten stehenden Log einsehen:

"; $body.="

 

"; $body.="

--- Log Anfang ---

"; // Log auslesen $sql = "SELECT * FROM syncwawi_log WHERE sync_id = " . $this->getTODOID(); $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ // Standard Log auslesen $TempTime1=strtotime($rs->fields("datumuhrzeit")); while (!$rs->EOF){ $body.="

" . $rs->fields("datumuhrzeit") . ": " . $rs->fields("beschreibung") . "

"; $rs->MoveNext(); } $TempTime2=strtotime($rs->fields("datumuhrzeit")); // Weiteres Log auslesen - was wurde verarbeitet $Dateien=array("Artikel","Hersteller","Kategorien"); $body.="

------------------------------------------------------

"; $body.="

nachfolgende Anzahl von Dateien wurden verarbeitet:

"; $body.=""; foreach ($Dateien as $id => $value){ $sql = "SELECT COUNT(*) AS anzahl FROM syncwawi WHERE wert LIKE '%" . strtolower($value) . "%' AND art = 'FILE' AND erledigt = 1"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ if ($rs->fields("anzahl")>0){ $body.="

Anzahl der Dateien '" . $value . "': " . $rs->fields("anzahl") . "

"; } } } $body.="

--- Log Ende ---

"; }else{ $body.="

Es gab nichts zu tun :-).

"; } $my->body=$body; $my->send(); } /** * Liefert den Mercator CSS Style */ function getCSS(){ $filename=DIR_FS_DOCUMENT_ROOT_XSTAR."/style/SyncMercator.css"; $Temp=""; return $Temp; } /** * Erzeugt eine Aufgabe in der Datenbank * @param $art * @param $wert * @param $sort * @param $erledigt */ function addTODO($art, $wert, $sort=0, $erledigt=0){ $sql = "INSERT INTO syncwawi ( art, wert, sort, erledigt) VALUES ('" . $art . "', '" . $wert . "', " . $sort . ", " . $erledigt . ")"; $this->db->Execute($sql); } /** * Liefert die aktuelle TODO ID */ function getTODOID(){ if ($this->TODOID > 0){ return $this->TODOID; }else{ $sql = "SELECT * FROM syncwawi WHERE art = 'ID'"; $rs = $this->db->Execute($sql); if (!$rs->EOF && $rs){ return $rs->fields("wert"); }else{ return 0; } } } /** * Erzeugt alle benoetigten Tabellen */ function createTables(){ $Daten=array(); $Daten["SELECT * FROM syncwawi"]="CREATE TABLE syncwawi (id integer NOT NULL AUTO_INCREMENT,art varchar(100),wert varchar(255),sort integer DEFAULT 0,erledigt integer DEFAULT 0,PRIMARY KEY (`id`))"; $Daten["SHOW INDEX FROM syncwawi WHERE Column_name IN ('id','sort','erledigt')"]="ALTER TABLE `syncwawi` ADD INDEX ( `id` , `sort` , `erledigt` );"; $Daten["SELECT * FROM syncwawi_log"]="CREATE TABLE syncwawi_log (log_id integer NOT NULL AUTO_INCREMENT,sync_id integer,datumuhrzeit TIMESTAMP,beschreibung text,PRIMARY KEY (`log_id`))"; $Daten["SHOW INDEX FROM syncwawi_log WHERE Column_name IN ('log_id','sync_id')"]="ALTER TABLE `syncwawi_log` ADD INDEX ( `log_id` , `sync_id` ) ;"; $Daten["SELECT products_price_quantity FROM " . TABLE_PRODUCTS]="ALTER TABLE `products` ADD `products_price_quantity` INT NOT NULL"; $Daten["SELECT in_bearbeitung FROM syncwawi"]="ALTER TABLE `syncwawi` ADD `in_bearbeitung` INT NOT NULL"; foreach ($Daten as $id => $value){ $rs = $this->db->Execute($id); if (!$rs){$this->db->Execute($value);} } } /** * Prueft, ob ein Wert UTF8 ist * @param $str */ function is_utf8($str){ $strlen = strlen($str); for($i=0; $i<$strlen; $i++){ $ord = ord($str[$i]); if($ord < 0x80) continue; // 0bbbbbbb elseif(($ord&0xE0)===0xC0 && $ord>0xC1) $n = 1; // 110bbbbb (exkl C0-C1) elseif(($ord&0xF0)===0xE0) $n = 2; // 1110bbbb elseif(($ord&0xF8)===0xF0 && $ord<0xF5) $n = 3; // 11110bbb (exkl F5-FF) else return false; // ung�ltiges UTF-8-Zeichen for($c=0; $c<$n; $c++) // $n Folgebytes? // 10bbbbbb if(++$i===$strlen || (ord($str[$i])&0xC0)!==0x80) return false; // ung�ltiges UTF-8-Zeichen } return true; // kein ung�ltiges UTF-8-Zeichen gefunden } } ?> Allgemeine Geschaeftsbedingungen, Allgemeine, Geschaeftsbedingungen - most-Haustechnik


" . $value . "
" . $value1 . "
Impressum | Versand | Kontakt  


Im Angebot
Whirlpoolsystem Capri 130
statt 999,99 nur 736,60 EUR
Zum Angebot
Zu Ihrem Warenkorb
Zur Kasse
Anmelden
Startseite » Katalog » Unsere AGB
Suche

Erweiterte Suche »

Allgemeine Geschaeftsbedingungen

Allgemeine Geschaeftsbedingungen

1. Geltungsbereich

1.1. Fuer alle Lieferungen an Verbraucher (§ 13 BGB) und Unternehmer (§ 14 BGB) gelten diese Allgemeinen Geschaeftsbedingungen. Die besonderen Regelungen fuer Unternehmer sind entsprechend gekennzeichnet.

1.2. Verbraucher ist jede natuerliche Person, die ein Rechtsgeschaeft zu einem Zwecke abschliesst, der weder ihrer gewerblichen noch ihrer selbstaendigen beruflichen Taetigkeit zugeordnet werden kann.

1.3. Unternehmer ist eine natuerliche Person oder juristische Person oder eine rechtsfaehige Personengesellschaft, die Abschluss eines Rechtsgeschaefts in Ausuebung ihrer gewerblichen oder selbstaendigen oder beruflichen Taetigkeit handelt.

1.4. Unsere Verkaufsbedingungen gelten auch fuer alle zukuenftigen Geschaefte mit dem Besteller.

2. Vertragspartner und Vertragsschluss, Bestellung und Kundenkonto

2.1. Bei Bestellungen in unserem Online-Shop kommt der Vertrag zustande mit:

most-Haustechnik

Sven Eschrich

Zur Bergbrauerei 13

D-98716 Geraberg

Tel: +49 (0) 36 77 - 79 19 29

Fax: +49 (0) 36 77 - 79 19 28

E-mail: s.eschrich@most-Haustechnik.de

Ust-ID-Nr.: DE 234950616

Zustaendiges Amtsgericht: Ilmenau

2.2. Bei der Bestellung haben Sie die Moeglichkeit, sich mit einem Kundenkonto anzumelden. Dadurch koennen Sie mit Ihrer E-Mail-Adresse und Ihrem persoenlichen Passwort einfach und bequem bestellen.

2.3. Die Bestellung in unserem Online-Shop umfasst drei Schritte.

2.3.1. Schritt 1: Geben Sie Ihre Kundendaten einschliesslich Rechnungsanschrift und, falls gewuenscht, eine abweichende Lieferanschrift ein. Verfuegen Sie bereits ueber ein Kundenkonto reicht die Eingabe Ihrer Email-Adresse und Ihres Passwortes. Sie koennen auch waehrend des Bestellvorgangs ein Kundenkonto fuer kuenftige Bestellungen anlegen.

2.3.2. Schritt 2: Waehlen Sie, mit welcher Zahlungsart Sie Ihre Bestellung bezahlen moechten.

2.3.3. Schritt 3: Unter "Bestaetigen" haben Sie die Moeglichkeit, saemtliche Angaben (zum Beispiel: Name, Anschrift, Zahlungsart) zu ueberpruefen und ggbf. zu aendern. Durch Anklicken des Buttons "Jetzt Kaufen" geben Sie eine verbindliche Bestellung ab.

2.4. Durch das Versenden der Auftragsbestaetigung per E-Mail, nehmen wir das Angebot (Ihre Bestellung) auf Vertragsschluss an. Wir koennen Ihr Angebot innerhalb von 24 Stunden nach Eingang Ihrer Bestellung mit der Zusendung einer Auftragsbestaetigung per E-Mail an Sie annehmen. Sie bekommen in der Regel zwei Bestaetigungen. Die erste Bestaetigung wird vom Shop-System an Sie versendet. Die Bestellung ist hiermit in der Datenbank gespeichert. Die zweite Bestaetigung wird aus unserem Warenwirtschaftssystem versendet und ist unsere Annahme Ihres Angebotes zum Vertragsabschluss (pdf-File, Auftragsbestaetigung, Rechnung (abhaengig von der gewaehlten Zahlungsweise)).

2.5. Sollte unsere Auftragsbestaetigung Schreib- und / oder Druckfehler enthalten oder sollten unserer Preisuebermittlung technisch bedingte Uebermittlungsfehler zugrunde liegen, so sind wir zur Anfechtung berechtigt, wobei wir Ihnen unseren Irrtum beweisen muessen. Bereits erfolgte Zahlungen werden Ihnen unverzueglich erstattet.

2.6. Bei der telefonischen Bestellung werden die Bestelldaten bei Ihnen muendlich abgefragt. Auch bei der telefonischen Bestellung kommt der Vertrag erst mit der Zusendung der Auftragsbestaetigung per E-Mail oder Fax an Sie durch uns zustande, die wir Ihnen innerhalb von 24 Stunden nach Eingang Ihrer Bestellung zusenden koennen.

3. Widerrufsrecht fuer Verbraucher

3.1. Verbraucher ist jede natuerliche Person, die ein Rechtsgeschaeft zu Zwecken abschliesst, die ueberwiegend weder ihrer gewerblichen noch Ihrer selbstaendigen beruflichen Taetigkeit zugerechnet werden koennen.

3.2. Die Widerrufsfrist betraegt 14 Tage ab dem Tag, an dem Sie oder ein von Ihnen benannter Dritter, der nicht der Befoerderer ist, die Ware in Besitz genommen haben bzw. hat.

3.3. Um Ihr Widerrufsrecht auszuueben, muessen Sie uns mittels einer eindeutigen Erklaerung (zum Beispiel ein mit der Post versandter Brief, Telefax oder E-Mail) ueber Ihren Entschluss, diesen Vertrag zu widerrufen, informieren.

3.4. Der Widerruf ist zu richten an:

most-Haustechnik

Sven Eschrich

Zur Bergbrauerei 13

D-98716 Geraberg

Fax: +49 (0) 36 77 - 79 19 28

E-mail: s.eschrich@most-Haustechnik.de

3.5. Sie koennen dazu das beigefuegte Muster-Widerrufsformular verwenden, das jedoch nicht vorgeschrieben ist.

3.6. Sie koennen das Muster-Widerrufsformular oder eine andere eindeutige Erklaerung auch auf unserer Website (www.most-Haustechnik.de) elektronisch ausfuellen und uebermitteln.

3.7. Machen Sie von dieser Moeglichkeit Gebrauch, so werden wir Ihnen unverzueglich (zum Beispiel per E-Mail) eine Bestaetigung ueber den Eingang eines solchen Widerrufs uebermitteln.

3.8. Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung ueber die Ausuebung des Widerrufsrechts vor Ablauf der Widerrufsfrist absenden.

Widerrufsfolgen

3.9. Wenn Sie diesen Vertrag widerrufen, haben wir Ihnen alle Zahlungen, die wir von Ihnen erhalten haben, einschliesslich der Lieferkosten (mit Ausnahme der zusaetzlichen Kosten, die sich daraus ergeben, dass Sie eine andere Art der Lieferung als die von uns angebotene, guenstige Standardlieferung gewaehlt haben), unverzueglich und spaetestens binnen 30 Tagen ab dem Tag zurueckzuzahlen, an dem die Mitteilung ueber Ihren Widerruf dieses Vertrags bei uns eingegangen ist.

3.10. Fuer diese Rueckzahlung verwenden wir dasselbe Zahlungsmittel, das Sie bei der urspruenglichen Transaktion eingesetzt haben, es sei denn, mit Ihnen wurde ausdruecklich etwas anderes vereinbart.

3.11. In keinem Fall werden Ihnen wegen dieser Rueckzahlung Entgelte berechnet.

3.12. Wir koennen die Rueckzahlung verweigern, bis wir die Ware wieder zurueckerhalten haben oder bis Sie den Nachweis erbracht haben, dass Sie die Waren zurueckgesandt haben, je nachdem, welches der fruehere Zeitpunkt ist.

3.13. Sie haben die Waren unverzueglich und in jedem Fall spaetestens binnen 30 Tagen ab dem Tag, an dem Sie uns ueber den Widerruf dieses Vertrages unterrichten, an uns zuruecksenden oder zu uebergeben.

3.14. Die Frist ist gewahrt, wenn Sie die Waren vor Ablauf der Frist von 30 Tagen absenden.

3.15. Sie tragen die unmittelbaren Kosten der Ruecksendung der Waren.

3.16. Sie muessen fuer einen etwaigen Wertverlust der Waren nur aufkommen, wenn dieser Wertverlust auf einen zur Pruefung der Beschaffenheit, Eigenschaften und Funktionsweise der Waren nicht notwendigen Umgang mit ihnen zurueckzufuehren ist.

Ende der Widerrufsbelehrung

3.17. Kein Widerrufsrecht besteht bei speziellen Waren. Diese werde im folgenden gelistet:

3.17.1. Das Widerrufsrecht besteht nicht bei Fernabsatzvertraegen zur Lieferung von Waren, die nach Kundenspezifikation angefertigt werden oder eindeutig auf die persoenlichen Beduerfnisse zugeschnitten sind oder die auf Grund ihrer Beschaffenheit nicht fuer eine Ruecksendung geeignet sind oder schnell verderben koennen oder deren Verfallsdatum ueberschritten wurde.

3.17.2. Das Widerrufsrecht besteht nicht bei Fernabsatzvertraegen zur Lieferung von Audio- oder Videoaufzeichnungen oder von Software, sofern die gelieferten Datentraeger vom Verbraucher entsiegelt worden sind.

3.17.3. Das Widerrufsrecht besteht nicht bei Fernabsatzvertraegen, die die Lieferung von Waren zum Gegenstand haben, deren Preis auf dem Finanzmarkt Schwankungen unterliegt, auf die der Unternehmer keinen Einfluss hat und die innerhalb der Widerrufsfrist auftreten koennen.

3.17.4. Das Widerrufsrecht besteht nicht bei Fernabsatzvertraegen zur Lieferung von Waren, die schnell verderben koennen oder deren Verfallsdatum schnell ueberschritten wuerde.

3.17.5. Das Widerrufsrecht besteht nicht bei Fernabsatzvertraegen zur Lieferung versiegelter Waren, die aus Gruenden des Gesundheitsschutzes oder der Hygiene nicht zur Rueckgabe geeignet sind, wenn ihre Versiegelung nach der Lieferung entfernt wurde.

3.17.6. Das Widerrufsrecht besteht nicht bei Fernabsatzvertraegen zur Lieferung von Waren, wenn diese nach der Lieferung auf Grund ihrer Beschaffenheit untrennbar mit anderen Guetern vermischt wurden.

3.17.7. Das Widerrufsrecht besteht nicht bei Fernabsatzvertraegen zur Lieferung von Zeitungen, Zeitschriften oder Illustrierten mit Ausnahme von Abonnement-Vertraegen.

3.18. Kein Widerrufsrecht fuer Unternehmer. Vorstehen finden Sie die Belehrung und Folgen ueber die Voraussetzungen des gesetzlichen Widerrufrechts bei Versandbestellungen. Eine ueber das Gesetz hinausgehende Einraeumung von Rechten ist damit nicht verbunden. Insbesondere steht das gesetzliche Widerrufsrecht nicht gewerblichen Wiederverkaeufern zu.

4. Frankierte Ruecksendung

4.1. Senden Sie die Ware bitte als frankiertes an uns zurueck und bewahren Sie den Einlieferungsbeleg auf.

4.2. Alternativ koennen Sie uns auch ueber eine gewuenschte Abholung der Ware informieren. Wir kuemmern uns dann um die Abholung der entsprechenden Ware. In diesem Fall werden Ihnen keine Portokosten erstattet, da wir diese tragen, sofern diese nicht von Ihnen selbst zu tragen sind.

5. Kostenvereinbahrung ueber die Ruecksendung bei Widerruf

5.1. Machen Sie von Ihrem Widerrufsrecht Gebrauch, haben Sie die regelmaessigen Kosten der Ruecksendung zu tragen, wenn die gelieferte Ware der bestellten entspricht.

6. Speicherung des Vertragstextes

6.1. Wir speichern den Vertragstext und senden Ihnen die Bestelldaten und unsere AGBs bei der Online-Bestellung und auch bei der telefonischen Bestellung per E-Mail an die angegebene E-Mail-Adresse oder per Fax an die angegebene Faxnummer zu. Die Online-Bestellung koennen Sie auch mit Eingabe Ihrer E-Mail-Adresse und des entsprechenden Passwortes in Ihrem Kundenkonto einsehen.

6.2. Die AGBs koennen Sie jederzeit in unserem Shop einsehen und Ausdrucken.

6. Eigentumsvorbehalt

6.1. Die gelieferte Ware bleibt bis zur vollstaendigen Bezahlung unser Eigentum. Vor Uebergang des Eigentums ist eine Verpfaendung, Sicherheitsuebereignung, Verarbeitung oder Umgestaltung ohne unsere Zustimmung nicht gestattet.

7. Preisauszeichnung

7.1. Die Preisauszeichnung in unserem Online-Shop erfolgt nach Kundengruppenzugehoerigkeit.

7.2. Gaesten (Besucher ohne Kundenaccount bzw. Besucher, die sich nicht mit Ihrem Kundenaccount am Shopsystem durch Eingabe Ihrer E-Mail-Adresse und des Passwortes angemeldet haben) wird der Preis inkl. der derzeit gueltigen MwSt. angezeigt.

7.3. Endverbrauchern (Besucher, die sich am Shopsystem mit E-Mail-Adresse und Passwort angemeldet haben und der Kundengruppe "Endkunden" zugeordnet sind) wird der Preis inkl. der derzeit gueltigen MwSt. angezeigt.

7.4. Geschaeftskunden (Besucher, die sich am Shopsystem mit E-Mail-Adresse und Passwort angemeldet haben und der Kundengruppe "B2B" zugeordnet sind) wird der Preis exkl. der derzeit gueltigen MwSt. angezeigt.

7.5. In unseren Rechnungen wir die Mehrsteuer separat ausgewiesen.

8. Lieferbedingungen

8.1 Teillieferungen

Sollten nicht alle bestellten Produkte vorraetig sein, sind wir zu Teillieferungen auf unsere Kosten berechtigt, sofern dies fuer Sie zumutbar ist.

8.2. Keine Zustellung moeglich

Sollte die Zustellung der Ware trotz dreimaligem Auslieferungsversuch scheitern, koennen wir vom Vertrag zuruecktreten. Ggbf. geleistete Zahlungen werden Ihnen schnellstmoeglich erstattet. Der Erstattungszeitraum ist jedoch nicht laenger als 30 Tage mit Beginn des Datums des Vertragruecktritts.

8.3. Selbstbelieferungsvorbehalt.

Wenn das bestellte Produkt nicht verfuegbar ist, weil wir mit diesem Produkt von unserem Lieferanten ohne eigenes Verschulden nicht beliefert werden, koennen wir vom Vertrag zuruecktreten. In diesem Fall werden wir Sie unverzueglich informieren und Ihnen ggbf. die Lieferung eines vergleichbaren Produktes vorschlagen. Wenn kein vergleichbares Produkt verfuegbar ist oder Sie keine Lieferung eines vergleichbaren Produktes wuenschen, werden wir Ihnen ggbf. bereits erbrachte Leistungen unverzueglich erstatten. Die Beweispflicht fuer eine fehlende Belieferung durch unseren Lieferanten obliegt dabei uns.

9. Gefahrenuebergang bei Versendung an Unternehmer

9.1. Wird die Ware auf Wunsch eines Unternehmers an diesen versandt, so geht mit der Absendung an den Besteller (Unternehmer), spaetestens mit dem Verlassen des Lagers die Gefahr des zufaelligen Untergangs oder der zufaelligen Verschlechterung der Ware auf den Besteller ueber. Dies gilt unabhaengig davon, ob die Versendung der Ware vom Erfuellungsort erfolgt oder wer die Frachtkosten traegt.

10. Zahlungsbedingungen

10.1. Zahlungsarten

Die aktuell verfuegbaren Zahlungsarten koennen Sie jederzeit bei uns anfragen. In jedem Fall werden die Ihnen zur Verfuegung stehenden Zahlungsarten vor jeder Bestellung zur Auswahl angezeigt.

10.1.1. Zahlungen mittels des Novalnet Paymentsystems

Aufgrund der Zahlungsabwicklung ueber die Novalnet AG, Gutenberg Str. 2 in 85735 Ismaning, Deutschland wird der in der Rechnung genannte Forderungsbetrag an diese abgetreten. Wir weisen Sie darauf hin, dass eine schuldbefreiende Leistung (Zahlung) nur an Novalnet AG moeglich ist.

10.1.2. Zahlungen mittels des Iclear Paymentsystems

Aufgrund der Zahlungsabwicklung ueber die Iclear GmbH, M2, 17 in 68161 Mannheim, Deutschland wird der in der Rechnung genannte Forderungsbetrag an diese abgetreten. Wir weisen Sie darauf hin, dass eine schuldbefreiende Leistung (Zahlung) nur an die Iclear GmbH moeglich ist.

10.2. Ausschluss einzelner Zahlungsarten

Wir behalten uns vor, einzelne Zahlungsarten auszuschliessen. Die verfuegbaren Zahlungsarten stehen dann als Option im Bestellvorgang zur Verfuegung. Bitte beachten Sie auch die Hinweise hierzu in unserer Datenschutzerklaerung.

10.3. Verweigerung einzelner Zahlungsarten

Wir sind berechtigt Kunden aus driftigem Grund (z.B. unbezahlte Rechnungen) bestimmte Zahlungsarten bzw. die Auslieferung einer Bestellung zu verweigern, bis alle driftigen Gruende seitens des Bestellers behoben sind.

10.4. Kosten bei Rueckbuchung

Bei Zahlung per Lastschrift haben Sie ggbf. jene Kosten zu tragen, die infolge einer Rueckbuchung der Zahlungstransaktion mangels Kontodeckung oder aufgrund von Ihnen falsch uebermittelter Daten der Bankverbindung entstehen.

10.5. Zahlungsziel

Besteller, die wir auf Rechnung beliefern haben ein Zahlungsziel von 30 Tagen (ab Rechnungsdatum). Sofern der Rechnungsbetrag innerhalb von 10 Tagen ueberwiesen wird, gewaehren wir 2%-Skonto. Der Rechnungsbetrag ist auf das Konto der Commerzbank Ilmenau-Weimar (Kontoinhaber: Sven Eschrich, Konto-Nr.: 0962556200, BLZ: 820 80000, IBAN: DE76 82080000 0962556200, SWIFT-BIC: DRES DE FF) zu ueberweisen. Mit Eintritt des Zahlungsverzugs ist der Kaufpreis waehrend des Verzuges in Hoehe von 5% ueber dem Basiszinssatz der EZB zu verzinsen. Wir behalten uns vor, einen hoeheren Verzugsschaden nachzuweisen und geltend zu machen. Bitte beachten Sie, dass wir bei Verzug nicht zu Abmahnungen verpflichtet sind.

11. Aufrechnung und Zurueckbehaltungsrecht

11.1. Ein Recht zur Aufrechnung steht Ihnen nur dann zu, wenn Ihre Gegenansprueche rechtskraeftig gerichtlich festgestellt oder unbestritten sind oder schriftlich durch uns anerkannt wurden. Sie koennen einen Zurueckbehaltungsrecht nur ausueben, soweit die Ansprueche aus dem gleichen Vertragsverhaeltnis resultieren.

12. Angebote auf anderen Verkaufplattformen

12.1. Unter Verkaufsplattformen verstehen wir alle unsere Angebote, welche nicht unter URL http://www.most-Haustechnik.de/ aufgerufen wurden (z.B. Rakuten, Ebay, Yatego).

12.2. Da Verkaufsplattformen unter anderem eine andere Kostenstruktur haben, koennen die Preise der Angebote auf unterschiedlichen Verkaufplattformen von den Preisen im Online-Shop abweichen. Fuer den Kaufpreis entscheidend ist, auf welcher Plattform der Aritkel gekauft wird / wurde.

12.3. Die Preisauszeichnung erfolgt auf Verkaufsplattformen mit den dort zugelassenen bzw. angebotenen Moeglichkeiten.

12.4. Unsere AGBs sind zusaetzlich zu den ABGs der entsprechenden Verkaufplattform gueltig, sofern unsere AGBs nicht Teile der AGBs der Verkaufplattform ausser Kraft setzen.

13. Telefongespraeche

13.1. Um Ihnen bestmoeglichen Service zu bieten und Mitarbeiter zu schulen, hoeren wir Telefongespraechen gelegentlich zu. Falls Sie dies nicht wollen, weisen Sie bitte Ihre/n Kundenbetreuer/in gleich zu Beginn des Gespraechs darauf hin. Danke!

Zurück

© RS-Filtertechnik.de        Umgesetzt von Liqui.net - Ideen für vernetzte Medien
www.jobdoo.de