2 /***************************************************************
3 * $Id: shopimport_db.php,v 1.5 2006/02/06 13:49:11 hli Exp $
4 *Author: Holger Lindemann
5 *Copyright: (c) 2004 Lx-System
7 *eMail: info@lx-system.de
9 *Shop: PHPeppershop 2.0
11 ***************************************************************/
12 $login=($_GET["login"])?$_GET["login"]:$_POST["login"];
13 if (file_exists ("conf$login.php")) {
14 require "conf$login.php";
18 require_once "DB.php";
20 $db=DB::connect($SHOPdns);
21 if (!$db) dbFehler("",$db->getDebugInfo());
22 if (DB::isError($db)) {
23 dbFehler("",$db->getDebugInfo());
24 die ($db->getDebugInfo());
26 $db2=DB::connect($ERPdns);
27 if (!$db2) dbFehler("",$db2->getDebugInfo());
28 if (DB::isError($db2)) {
29 dbFehler("",$db2->getDebugInfo());
30 die ($db2->getDebugInfo());
32 /****************************************************
34 * in: sql,err = string
36 * Fehlermeldungen ausgeben
37 *****************************************************/
38 function dbFehler($sql,$err) {
41 echo "</td></tr></table><font color='red'>$sql : $err</font><br>";
46 $sql ="select BG.id as bugru,(T.rate * 100) as rate,TK.startdate from buchungsgruppen BG ";
47 $sql.="left join chart C on BG.income_accno_id_0=C.id left join taxkeys TK ";
48 $sql.="on TK.chart_id=C.id left join tax T on T.id=TK.tax_id where ";
49 $sql.="TK.startdate <= now() order by BG.id, TK.startdate";
50 $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
51 if ($rs) foreach ($rs as $row) {
52 $bugru[$row["bugru"]]=$row["rate"];
56 // Ab hier Artikelexport aus ERP
57 function shopartikel() {
58 global $db2,$pricegroup;
60 $sql="SELECT P.partnumber,P.description,P.weight,buchungsgruppen_id as bugru,G.price as sellprice,P.sellprice as stdprice, ";
61 $sql.="PG.partsgroup,P.notes,P.image,P.onhand FROM ";
62 $sql.="parts P left join partsgroup PG on PG.id=P.partsgroup_id left join prices G on G.parts_id=P.id ";
63 $sql.="where P.shop='t' and (G.pricegroup_id=$pricegroup or G.pricegroup_id is null)";
65 $sql="SELECT P.partnumber,P.description,P.weight,buchungsgruppen_id as bugru,P.sellprice,PG.partsgroup,P.notes,P.image,P.onhand FROM ";
66 $sql.="parts P left join partsgroup PG on ";
67 $sql.="PG.id=P.partsgroup_id where P.shop='t'";
69 $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
73 // Ab hier Import der Daten in den Shop
74 function createCategory($name,$maingroup,$tab,$PID) {
76 $newID=uniqid(rand());
77 $sql="insert into kategorien (Bild_gross,Bild_last_modified) values ('$newID',now())";
79 $sql="select * from kategorien where Bild_gross = '$newID'";
80 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
82 $id=$rs[0]["Kategorie_ID"];
83 $u=($maingroup=="Null")?"is Null":"=$maingroup";
84 $sql="select max(Positions_Nr) as Max from kategorien where Unterkategorie_von $u";
85 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
87 //$sql="update kategorien set Unterkategorie_von=%s, Name='%s', Positions_Nr=%d,MwSt_Satz=%0.2f, Details_anzeigen='N', Bild_gross = Null where kategorie_ID=%d";
88 $sql="update kategorien set Unterkategorie_von=%s, Name='%s', Tab_text='%s', ist_sichtbar='Y',";
89 $sql.="Positions_Nr=%d,MwSt_Satz=%0.2f, Details_anzeigen='N', Bild_gross = Null, Parent_ID=%d where kategorie_ID=%d";
91 //$rc=$db->query(sprintf($sql,$maingroup,$name,$pos,$mwst,$id));
92 $rc=$db->query(sprintf($sql,$maingroup,$name,$tab,$pos,$mwst,$PID,$id));
93 return ($rc)?$id:false;
98 function getCategory($name) {
100 if (empty($name)) $name="Default";
101 $name = utf8_decode($name);
102 preg_match("/^(\[(.*)\])?([^!]+)!?(.*)/",$name,$ref);
111 } else if ($ref[3]<>"" and $ref[3]<>$ref[0]) {
122 if (substr($name,0,1)=="[") {
129 // suche die Hauptgruppe
130 $sql="select * from kategorien where Name like '".$main."' and Unterkategorie_von is Null";
131 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
132 if ($rs[0]["Kategorie_ID"]) { // gefunden
133 $maingroup=$rs[0]["Kategorie_ID"];
134 } else { // nicht gefunden, anlegen
135 $maingroup=createCategory($main,"Null","$tab",0);
137 echo $maingroup.":".$main." ";
138 if ($sub && $maingroup) {
139 // suche Unterkategorie wenn eine gegeben
140 $sql="select * from kategorien where Name like '$sub' and Unterkategorie_von = '$main'";
141 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
142 if ($rs[0]["Kategorie_ID"]) { // gefunden
143 $maingroup=$rs[0]["Kategorie_ID"];
144 } else { // nicht gefunden, anlegen
145 $maingroup=createCategory($sub,"'$main'","",$maingroup);
151 function bilder($width,$height,$dest) {
152 if (!class_exists("Imagick")) { echo "Imagick-Extention nicht installiert"; return false; };
153 $handle= new Imagick();
154 if (!$handle->readImage("./tmp/tmp.file_org")) return false;
155 $d = $handle->getImageGeometry();
156 if ($d["width"]<$d["height"]) {
157 $f = $d["width"]/$d["height"];
158 $w = floor($width*$f);
161 $f = $d["height"]/$d["width"];
163 $h = floor($height*$f);
165 $handle->thumbnailImage( $w, $h);
166 return $handle->writeImage( "./tmp/tmp.file_$dest");
168 function uploadImage($image,$ArtNr) {
169 global $db,$ERPftphost,$ERPftpuser,$ERPftppwd,$ERPimgdir,
170 $SHOPftphost,$SHOPftpuser,$SHOPftppwd,$SHOPimgdir,$iconsize;
171 if ($ERPftphost=="localhost") {
172 echo exec("cp $ERPimgdir/$image ./tmp/tmp.file_org",$aus,$rc2);
173 if ($rc2>0) { echo "[Downloadfehler: $image]<br>"; return false; };
175 $conn_id = ftp_connect($ERPftphost);
176 ftp_login($conn_id,$ERPftpuser,$ERPftppwd);
177 $src=$ERPimgdir."/".$image;
178 $upload=ftp_get($conn_id,"tmp/tmp.file_org","$src",FTP_BINARY);
179 if (!$upload) { echo "[Ftp Downloadfehler! $image]<br>"; return false;};
182 bilder($iconsize,$iconsize,"smal");
183 bilder(550,550,"big");
184 $rc=preg_match("#(.+/)?([^\.]+)\.(.+)$#",$image,$treffer);
185 $gr=$treffer[2]."_gr.".$treffer[3];
186 $kl=$treffer[2]."_kl.".$treffer[3];
187 if ($SHOPftphost=="localhost") {
188 $dst=$SHOPimgdir."/".$gr;
189 exec("cp ./tmp/tmp.file_big $dst",$aus,$rc2);
190 if ($rc2>0) { echo "[Uploadfehler: $dst]<br>"; return false; };
191 $dst=$SHOPimgdir."/".$kl;
192 exec("cp ./tmp/tmp.file_smal $dst",$aus,$rc2);
193 if ($rc2>0) { echo "[Uploadfehler: $dst]<br>"; return false; };
195 $conn_id = ftp_connect($SHOPftphost);
196 ftp_login($conn_id,$SHOPftpuser,$SHOPftppwd);
197 ftp_chdir($conn_id,$SHOPimgdir);
198 $upload=ftp_put($conn_id,$SHOPimgdir."/$gr","tmp/tmp.file_big",FTP_BINARY);
199 if (!$upload) { echo "[Ftp Uploadfehler! $gr]<br>"; return false; };
200 $upload=ftp_put($conn_id,$SHOPimgdir."/$kl","tmp/tmp.file_smal",FTP_BINARY);
201 if (!$upload) { echo "[Ftp Uploadfehler! $kl]<br>"; return false; };
204 $sql="update artikel set Bild_gross='$gr', Bild_klein='$kl' where Artikel_ID=$ArtNr";
205 $rc=$db->query($sql);
207 function insartikel($data) {
209 $newID=uniqid(rand());
210 $sql="insert into artikel (Artikel_Nr,Name) values ('".$data["partnumber"]."','$newID')";
211 $rc=$db->query($sql);
212 $sql="select * from artikel where Name='$newID'";
213 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
215 $sql="insert into artikel_kategorie (FK_Artikel_ID,FK_Kategorie_ID) values (".$rs[0]["Artikel_ID"].",".$data["categories_id"].")";
216 $rc=$db->query($sql);
218 updartikel($data,$rs[0]["Artikel_ID"]);
219 } else { return false; }
221 function updartikel($data,$id) {
222 global $db,$bugru,$mwst;
223 $sql ="update artikel set Preis=%01.2f,Gewicht=%0.2f,MwSt_Satz=%0.2f,letzteAenderung=now(),";
224 $sql.="Name='%s',Beschreibung='%s',Lagerbestand=%d where Artikel_ID=%d";
225 $preis=($data["sellprice"]>0)?$data["sellprice"]:$data["stdprice"];
226 if ($mwst) $preis+=$preis/100*$bugru[$data["bugru"]];
227 $sql=sprintf($sql,$preis,$data["weight"],$bugru[$data["bugru"]],utf8_decode($data["description"]),utf8_decode($data["notes"]),$data["onhand"],$id);
228 $rc=$db->query($sql);
229 $sql="update artikel_kategorie set FK_Kategorie_ID=".$data["categories_id"]." where FK_Artikel_ID=$id";
230 $rc=$db->query($sql);
233 function chkartikel($data) {
234 global $db,$shop2erp,$mwst;
235 if ($data["partnumber"]=="") { echo "Artikelnummer fehlt!<br>"; return false;};
236 $sql="select * from artikel A left join artikel_kategorie K on A.Artikel_id=K.FK_Artikel_ID where Artikel_Nr like '".$data["partnumber"]."'";
237 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
238 echo "(".$data["partnumber"]."->".$rs[0]["Artikel_ID"].":".$data["description"].")";
240 if ($data["image"]) {
241 $rc=preg_match("#(.+/)?([^\.]+)\.(.+)$#",$data["image"],$treffer);
242 if ($treffer) { $data["picname"]=$treffer[2]."_gr.".$treffer[3]; }
243 else { $data["picname"]=""; };
245 $preis=($data["sellprice"]>0)?$data["sellprice"]:$data["stdprice"];
246 if ($mwst) $preis+=$preis/100*$bugru[$data["bugru"]];
247 if ($rs[0]["Preis"]<>$preis) { updartikel($data,$rs[0]["Artikel_ID"]); }
248 else if ($rs[0]["Gewicht"]<>$data["weight"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
249 else if ($rs[0]["Name"]<>$data["description"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
250 else if ($rs[0]["Beschreibung"]<>$data["notes"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
251 else if ($rs[0]["MwSt_Satz"]<>$tax[sprintf("%1.4f",$data["rate"])]) { updartikel($data,$rs[0]["Artikel_ID"]); }
252 else if ($rs[0]["FK_Kategorie_ID"]<>$data["$categories_id"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
253 else if ($rs[0]["Lagerbestand"]<>$data["onhand"]) { updartikel($data,$rs[0]["Lagerbestand"]); }
254 else { echo "...<br>"; };
255 if ($rs[0]["Bild_gross"]<>$data["picname"] and $data["picname"]) { uploadImage($data["image"],$rs[0]["Artikel_ID"]); }
256 else if ($rs[0]["Bild_gross"] and !$data["picname"]) {
257 $sql="update artikel set Bild_gross='', Bild_klein='' where Artikel_ID=".$rs[0]["Artikel_ID"];
258 $rc=$db->query($sql);
261 $Artikel_ID=insartikel($data);
262 if ($data["image"]) uploadImage($data["image"],$Artikel_ID);
266 $artikel=shopartikel();
267 echo "Artikelexport ERP -> PHPepper :".count($artikel)." Artikel markiert.<br>";
271 $sql="select Thumbnail_Breite from shop_settings";
272 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
274 $iconsize=$rs[0]["Thumbnail_Breite"];
278 foreach ($artikel as $data) {
279 $data["categories_id"]=getCategory($data["partsgroup"]);
280 $x=chkartikel($data);
282 require ("diff.php");