"artikel_nr","description"=>"name","notes"=>"beschreibung", "unit"=>"anzahl_einheit","weight"=>"gewicht","sellprice"=>"preis", "tax"=>"mwst_satz","image"=>"bild_gross","onhand"=>"lagerbestand"); var $tableshop = array("datum"=>"transdate","rechnungsbetrag"=>"amount","nettobetrag"=>"netamount","waehrung"=>"curr", "anmerkung"=>"notes","mwst"=>"mwst","bestellungs_id"=>"cusordnumber","bezahlungsart"=>"bezahlung", "kreditkarte"=>"kreditkarte","versandart"=>"shipvia"); var $custshop = array("kontakt"=>"contact","ort"=>"city","plz"=>"zipcode","land"=>"country","tel"=>"phone", "fax"=>"fax","email"=>"email","beschreibung"=>"notes","strasse"=>"street","firma"=>"name", "kunden_nr"=>"customer_id","anrede"=>"greeting","k_id"=>"shopid", "bankname"=>"bank","blz"=>"bank_code","kontonummer"=>"account_number", "iban"=>"iban","bic"=>"bic","attributwert1"=>"ustid"); var $ordershop = array("datum"=>"transdate","rechnungsbetrag"=>"amount","rechnungs_nr"=>"", "waehrung"=>"currency","beschreibung"=>"notes", "mwst"=>"mwst","versandart"=>"shipvia"); var $orderparts = array("artikelname"=>"description","name"=>"description","preis"=>"sellprice","anzahl"=>"qty","artikel_nr"=>"partnumber", "partsgroup"=>"partsgroup","beschreibung"=>"longdescription","gewicht"=>"weight","shoppreis"=>"shoppreis", "mwst_satz"=>"taxrate","bild_gross"=>"image","anzahl_einheit"=>"unit","lagerbestand"=>"onhand"); var $pic = false; function pepper($db,$error,$dbname, $divStd,$divVerm,$minder,$nachn,$versandS,$versandV,$paypal,$treuhand, $mwstLX,$mwstS,$variantnr,$pic=false,$nopic=false,$nopicerr=false,$nofiles=false, $erpcode='UTF-8',$shopcode='ISO-8859-1') { $this->db = $db; $this->error = $error; $this->divStd = $divStd ; $this->divVerm = $divVerm ; $this->minder = $minder ; $this->nachn = $nachn ; $this->versandS = $versandS ; $this->versandV = $versandV ; $this->paypal = $paypal ; $this->treuhand = $treuhand; $this->erpcode = $erpcode; $this->mwstLX = $mwstLX; $this->mwstS = $mwstS; $this->VariantNr = ($variantnr==1)?true:false; $this->pic = $pic; $this->nopic = ( $nopic != '' )?$nopic:false; $this->nopicerr = ( $nopicerr != '' )?true:false; $this->nofiles = $nofiles; if ($shopcode == 'AUTO') { $sql = "SELECT TABLE_COLLATION FROM information_schema.TABLES WHERE table_schema = '$dbname' AND table_name = 'kunde'"; $rs = $this->db->getOne($sql); if ($rs) { preg_match('/([^_]+)/',$rs['table_collation'],$hits); if (count($hits)>0) { $this->shopcode = $hits[1]; } else { $this->shopcode = 'ISO-8859-1'; } } } else { $this->shopcode = $shopcode; } } function _toERP($txt) { return mb_convert_encoding($txt,$this->erpcode,$this->shopcode); } function _toShop($txt) { return mb_convert_encoding($txt,$this->shopcode,$this->erpcode); } function translateTable($data,$table) { $newdata = array(); foreach ($data as $key=>$val) { if (array_key_exists($key, $this->{$table})) $newdata[$this->{$table}[$key]] = $val; } return $newdata; } function getCategoryID($name,$mwst) { if (empty($name)) { $name = "Default"; } else { $name = $this->_toShop($name); } //Kategorien werden durch die ERP mit "!" getrennt preg_match_all("/([^!]+)!?/",$name,$kat); if (count($kat)>0) { $kat = $kat[1]; } else { return false; }; $parent = 0; $sql = "select * from kategorien where name like '%s' and parent_id = %d"; if (count($kat)>0) foreach ($kat as $wg) { $sql_ = sprintf($sql,$wg,$parent); $rs=$this->db->getOne($sql_); if ($rs["kategorie_id"]) { // gefunden $parent=$rs["kategorie_id"]; $mwst=$rs["mwst_satz"]; } else { // nicht gefunden, anlegen $parent=$this->createCategory($wg,$mwst,$parent); } } return $parent; } function createCategory($name,$mwst,$parent) { $sql = "select max(positions_nr) as cnt from kategorien WHERE parent_id = ".$parent; $rs=$this->db->getOne($sql); $pos = $rs['cnt'] + 1; $sql = "INSERT INTO kategorien (positions_nr,name,mwst_satz,ist_sichtbar,parent_id) "; $sql .= "VALUES (".$pos.",'".$name."',".$mwst.",'Y',".$parent.")"; $rc = $this->db->query($sql); if ($rc) { $sql = "SELECT kategorie_id FROM kategorien where name = '".$name."' and parent_id = ".$parent; $rs = $this->db->getOne($sql); return $rs['kategorie_id']; } else { return false; } } function getLang($lang) { $sql = "SELECT * FROM locale WHERE iso_639_1_code like '$lang' and aktiviert = 'Y'"; $rs = $this->db->getOne($sql); return $rs['locale_id']; } function saveArtikel($data,$lang) { $langID = $this->getLang(strtolower($lang)); $values = $this->translateTable($data,"tableerp"); //$this->tableerp); if ($this->mwstLX and !$this->mwstS) { //ERP-Bruttopreis Shop-Nettopreis $values['preis'] = round($values['preis'] / (1 + $values["mwst_satz"]),2); } else if (!$this->mwstLX and $this->mwstS) { //ERP-Nettopreis Shop-Bruttopreis $values['preis'] = round($values['preis'] * (1 + $values["mwst_satz"]),2); } $values["name"] = $this->_toShop($values["name"]); $values["beschreibung"] = $this->_toShop($values["beschreibung"]); $values["mwst_satz"] = $values["mwst_satz"] * 100; $values["kategorie_id"] = $this->getCategoryID($data["partsgroup"],$values["mwst_satz"]); $values["artikel_id"] = $this->checkArtikelOK($values["artikel_nr"]); if ($values["artikel_id"]>0) { $rc = $this->updateArtikel($values); } else { $rc = $this->insertArtikel($values); }; return $rc; } function checkArtikelOK($nr) { $sql = "SELECT artikel_id,artikel_nr FROM artikel WHERE artikel_nr = '".$nr."'"; $rs = $this->db->getOne($sql); if ( $rs["artikel_nr"] == $nr ) { return $rs["artikel_id"]; } else { return false; } } function insertArtikel($data) { $newID = uniqid(rand()); $this->db->Begin(); $sql = "INSERT INTO artikel (artikel_nr,name) VALUES ('".$data["artikel_nr"]."','$newID')"; $rc = $this->db->query($sql); $sql = "SELECT * FROM artikel WHERE name='$newID'"; $rs = $this->db->getOne($sql); if ($rs['name'] == $newID) { $data["artikel_id"] = $rs["artikel_id"]; $statement = "INSERT INTO artikel_kategorie (fk_artikel_id,fk_kategorie_id) VALUES (?,?)"; $values = array($rs["artikel_id"],$data["kategorie_id"]); $rc = $this->db->insert($statement,$values); if (!$rc) { $this->error->out($data['artikel_nr'].' konnte nicht zur Gruppe '.$data['kategorie_id'].' zugefügt werden.'); $this->error->write('pepper',$data['artikel_nr'].' konnte nicht zur Gruppe '.$data['kategorie_id'].' zugefügt werden.'); $this->db->Rollback(); return false; } $this->db->Commit(); $this->error->out($data['artikel_nr']." insert ",true); $rc = $this->updateArtikel($data); } else { return false; } return $rc; } function updateArtikel($values) { $sql = "UPDATE artikel SET name = :name, beschreibung = :beschreibung, preis = :preis, gewicht = :gewicht, "; if ( !$this->nofiles ) { //vorhandene Bilder übertragen if ( $values['bild_gross'] != '' ) { preg_match("/(.+)\.(jpg|png|jpeg|gif)/i",$values['bild_gross'],$tmp); $sql .= "bild_gross = :bild_gross, bild_klein = :bild_klein, bildtyp = :bildtyp, "; if ( count($tmp) == 3 ) { if ( $this->pic && $this->pic->copyImage($values['artikel_id'],$values['bild_gross'],$tmp[2]) ) { $values['bild_gross'] = $values['artikel_id']."_gr.".$tmp[2]; $values['bild_klein'] = $values['artikel_id']."_kl.".$tmp[2]; $values['bildtyp'] = $tmp[2]; } else if ( $this->nopic ){ $sql .= "bild_gross = :bild_gross, bild_klein = :bild_klein, bildtyp = :bildtyp, "; $values['bild_gross'] = $this->nopic."_gr.jpg"; $values['bild_klein'] = $this->nopic."_kl.jpg"; $values['bildtyp'] = 'jpg'; } } } else if ( $this->nopic && !$this->nopicerr ){ $sql .= "bild_gross = :bild_gross, bild_klein = :bild_klein, bildtyp = :bildtyp, "; $values['bild_gross'] = $this->nopic."_gr.jpg"; $values['bild_klein'] = $this->nopic."_kl.jpg"; $values['bildtyp'] = 'jpg'; } } $sql .= "mwst_satz = :mwst_satz, anzahl_einheit = :anzahl_einheit "; //Kein Lagerbestand übergeben, also nichts ändern if ( $values['lagerbestand'] != '' ) $sql .= ",lagerbestand = :lagerbestand "; $sql .= "WHERE artikel_id = :artikel_id "; $rc = $this->db->update($sql,$values); if ($rc) { return $values["artikel_id"]; } else { return false; } } function getBestellung($employee_id) { $sql = "SELECT * FROM mehrwertsteuer WHERE beschreibung = 'Porto und Verpackung'"; $rs = $this->db->getOne($sql); $versandsteuer = $rs["mwst_satz"]; $sql = "SELECT * FROM bestellung WHERE bestellung_bezahlt='N' "; $sql .= "AND rechnungs_nr != '' AND session_id = '' "; $sql .= 'ORDER BY bestellungs_id'; $rs=$this->db->getAll($sql); if (!$rs) return array(); $data = false; foreach ($rs as $row) { $tmp = $this->getBestellArtikel($row["bestellungs_id"]); $artikel = $tmp['data']; if ($versandsteuer == -2) $versandsteuer = $tmp['mwst']; if ($row["versandkosten"]>0) { if ($versandsteuer == $this->versandV['TAX']) { $artikel[] = array("partnumber"=>$this->versandV['NR'],"description"=>$this->versandV['TXT'], "qty"=>1,"unit"=>$this->versandV['Unit'],"sellprice"=>$row["versandkosten"]); } else { $artikel[] = array("partnumber"=>$this->versandS['NR'],"description"=>$this->versandS['TXT'],"taxrate"=>$this->versandS['TAX'], "qty"=>1,"unit"=>$this->versandS['Unit'],"sellprice"=>$row["versandkosten"]); } } if ($row["nachnamebetrag"]>0) $artikel[] = array("partnumber"=>$this->nachn['NR'],"description"=>$this->nachn['TXT'],"taxrate"=>$this->nachn['TAX'], "qty"=>1,"unit"=>$this->nachn['Unit'],"sellprice"=>$row["nachnamebetrag"]); if ($row["paypalkosten"]>0) $artikel[] = array("partnumber"=>$this->paypal['NR'],"description"=>$this->paypal['TXT'],"taxrate"=>$this->paypal['TAX'], "qty"=>1,"unit"=>$this->paypal['Unit'],"sellprice"=>round($row["paypalkosten"],2)); if ($row["treuhandkosten"]>0) $artikel[] = array("partnumber"=>$this->treuhand['NR'],"description"=>$this->treuhand['TXT'],"taxrate"=>$this->treuhand['TAX'], "qty"=>1,"unit"=>$this->treuhand['Unit'],"sellprice"=>$row["treuhandkosten"]); if ($row["mindermengenzuschlag"]>0) $artikel[] = array("partnumber"=>$this->minder['NR'],"description"=>$this->minder['TXT'],"taxrate"=>$this->minder['TAX'], "qty"=>1,"unit"=>$this->minder['Unit'],"sellprice"=>$row["mindermengenzuschlag"]); if ($row["versandland_id"] == "DE") { $taxzone_id = 0; } else if (in_array($this->EU,$row["versandland_id"])) { if (preg_match('/^[^0-9]{2,3}[ 0-9]+$/',$row["customer"]['ustid'])) { $taxzone_id = 1; } else { $taxzone_id = 2; } } else { $taxzone_id = 3; } if ($row["kreditkarten_nummer"]) { $row["kreditkarte"] = $row['kreditkarten_hersteller']."\n"; $row["kreditkarte"] = $row['kreditkarten_nummer']." ID:".$row['kreditkarten_id']."\n"; $row["kreditkarte"] = $row['kreditkarten_ablaufdatum']."\n"; $row["kreditkarte"] = $row['kreditkarten_vorname']." ".$row['kreditkarten_nachname']."\n"; } $row["versandart"] = $this->_toERP($row["versandart"]); $row = $this->translateTable($row,"tableshop"); $row["taxzone_id"] = $taxzone_id; $row["notes"] = $this->_toERP($row["notes"]); $row["employee_id"] = $employee_id; $row["parts"] = $artikel; $row["mwst"] = round($row["mwst"],2); $row["amount"]= round($row["amount"],2); $row["netamount"] = $row["amount"] - $row["mwst"]; $row["customer"] = $this->getBestellungKunde($row["cusordnumber"]); $data[] = $row; } return $data; } function getBestellungKunde($bestellung) { $sql = "SELECT * FROM kunde LEFT JOIN bestellung_kunde ON Kunden_ID=FK_Kunden_ID "; $sql .= "WHERE FK_Bestellungs_ID=$bestellung"; $rs=$this->db->getOne($sql); if ($rs["firma"]) { $rs["kontakt"] = $this->_toERP($rs["vorname"]." ".$rs["nachname"]); $rs["firma"] = $this->_toERP($rs["firma"]); } else { $rs["kontakt"] = $this->_toERP($rs["vorname"]." ".$rs["nachname"]); $rs["firma"] = $this->_toERP($rs["nachname"].", ".$rs["vorname"]); } $rs["strasse"] = $this->_toERP($rs["strasse"])." ".$rs['hausnummer']; $rs["ort"] = $this->_toERP($rs["ort"]); $rs["bankname"] = $this->_toERP($rs["bankname"]); if ($rs) { return $this->translateTable($rs,"custshop"); } else { $this->error->write("pepper","Die Kunde der Bestellung $bestellung konnte nicht gelesen werden"); return false; } } function getBestellArtikel($bestellung) { if (!$this->kategorien) $this->getKategorien(); $sql = "SELECT B.*,P.artikel_nr,P.beschreibung,P.mwst_satz,P.anzahl_einheit,P.bild_gross,"; $sql .= "AK.fk_kategorie_id as partsgroup "; $sql .= "FROM artikel_bestellung B LEFT JOIN artikel P "; $sql .= "ON B.fk_artikel_id=P.artikel_id LEFT JOIN artikel_kategorie AK on AK.fk_artikel_id=P.artikel_id "; $sql .= "WHERE fk_bestellungs_id=".$bestellung; $rs=$this->db->getAll($sql); if (!$rs) { $this->error->write("pepper","Die Artikel der Bestellung $bestellung konnte nicht gelesen werden"); return false; } $a_b_ID = array(); foreach ($rs as $row) { if (in_array($row['a_b_id'],$a_b_ID)) continue; $row['artikelname'] = $this->_toERP($row['artikelname']); $row['beschreibung'] = $this->_toERP($row['beschreibung']); if ($row['variation'] != '') { $tmp = $this->splitVariant($row['variation'],$row['anzahl'],$row['fk_artikel_id']); $row['artikelname'] .= $this->_toERP($tmp['text']); $row['preis'] += $tmp['preis']; if ($tmp['nr']) $row['artikel_nr'] .= '-'.$tmp['nr']; } if ($row['optionen'] != '') { $tmp = $this->splitOption($row['optionen'],$row['anzahl']); $row['artikelname'] .= $this->_toERP($tmp['text']); $row['preis'] += $tmp['preis']; } $row['anzahl_einheit'] = $this->_toERP($row['anzahl_einheit']); $row['partsgroup'] = $this->_toERP($this->Kategorien[$row['partsgroup']]); $mwst[$row['mwst_satz']] = $row['preis'] * $row['anzahl'] / (100+$row['mwst_satz']) * 100; $data[] = $this->translateTable($row,"orderparts"); $a_b_ID[] = $row['a_b_id']; } arsort($mwst); $tmp = each($mwst); //MwSt-Satz mit grösstem Anteil return array('data'=>$data,'mwst'=>$tmp['key']); } function splitVariant($txt,$qty,$artnr) { $vari=split(chr(254),$txt); $text = ''; $preis = 0; if ($vari) { for($cnt=0; $cnt',$vari[$cnt]); if ($this->VariantNr) { //$nr = $this->_getVariantNr($tmp[0],$tmp[1],$artnr); $sql = 'SELECT variations_nr FROM artikel_variationen where fk_artikel_id = '.$artnr; $sql .= ' and variationstext = \''.$tmp[1].'\' and variations_grp = ('; $sql .= 'SELECT gruppen_nr FROM artikel_variationsgruppen WHERE fk_artikel_id = '.$artnr; $sql .= ' AND gruppentext = \''.$tmp[0].'\')'; $rs=$this->db->getOne($sql); $nr = $rs['variations_nr']; } //$text.="\n".$tmp[0].": ".$tmp[1]; $text.=", ".$tmp[0].": ".$tmp[1]; $cnt++; $preis+=trim($vari[$cnt]) * $qty; } }; return array("preis"=>$preis,"text"=>$text,"nr"=>$nr); } function splitOption($txt,$qty) { $vari=split(chr(254),$txt); $text = ''; $preis = 0; if ($vari) { for($cnt=0; $cnt',': ',$vari[$cnt]); $cnt++; $preis+=trim($vari[$cnt]) * $qty; } }; return array("preis"=>$preis,"text"=>$text); } function setAbgeholt($bestellung) { $sql = "UPDATE bestellung SET Bestellung_bezahlt='Y' WHERE Bestellungs_ID = $bestellung"; // in ($bestellungen)"; $rc = $this->db->query($sql); if (!$rc) { $this->error->write("pepper","Die Bestellung $bestellung konnten nicht als abgeholt markiert werden"); return false; } else { return true; } } function setKundenNr($id,$nr) { $sql = "UPDATE kunde SET kunden_nr = '$nr' WHERE k_id = $id"; $rc = $this->db->query($sql); if (!$rc) { $this->error->write("pepper","Die Kundennummer $nr konnte nicht dem Kunden $id zugeordnet werden"); return false; } else { return true; } } function getAllArtikel() { if (!$this->Kategorien) $this->getKategorien(); $sql = "SELECT a.*,k.fk_kategorie_id as katid FROM artikel a LEFT JOIN artikel_kategorie k on a.artikel_id = k.fk_artikel_id"; $rs = $this->db->getAll($sql); if ($rs) foreach ($rs as $row) { $row['partsgroup'] = $this->_toERP($this->Kategorien[$row['katid']]); $row['name'] = $this->_toERP($row['name']); $row['beschreibung'] = $this->_toERP($row['beschreibung']); $row['shoppreis'] = $row['preis']; if (!$this->mwstLX) $row['preis'] = round(($row['preis'] / (100 + $row['mwst_satz']) * 100),$this->dezimal); $data[] = $this->translateTable($row,"orderparts"); } return $data; } function getKategorien() { $sql = "SELECT kategorie_id,name,parent_id FROM kategorien WHERE parent_id >= 0 order by parent_id"; $rs = $this->db->getAll($sql); if ($rs) { foreach($rs as $row) { $this->katrs[$row['kategorie_id']] = $row;}; foreach($this->katrs as $row) { if ($row['parent_id'] == '0') { $name = $row['name']; } else { $name = $this->mkKategorien($row['kategorie_id'],''); } $this->Kategorien[$row['kategorie_id']] = $name; } } } function mkKategorien($id,$name) { if ($this->katrs[$id]['parent_id'] == '0') { if ($name) { return $this->katrs[$id]['name'].'!'.$name; } else { return $this->katrs[$id]['name']."#"; } } else { if (!$name) { $name = $this->katrs[$id]['name']; } else { $name = $this->katrs[$id]['name'].'!'.$name; } $name = $this->mkKategorien($this->katrs[$id]['parent_id'],$name); } return $name; } } ?>