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 require_once "conf.php";
13 require_once "DB.php";
15 $db=DB::connect($SHOPdns);
16 if (!$db) dbFehler("",$db->getDebugInfo());
17 if (DB::isError($db)) {
18 dbFehler("",$db->getDebugInfo());
19 die ($db->getDebugInfo());
21 $db2=DB::connect($ERPdns);
22 if (!$db2) dbFehler("",$db2->getDebugInfo());
23 if (DB::isError($db2)) {
24 dbFehler("",$db2->getDebugInfo());
25 die ($db2->getDebugInfo());
27 /****************************************************
29 * in: sql,err = string
31 * Fehlermeldungen ausgeben
32 *****************************************************/
33 function dbFehler($sql,$err) {
36 echo "</td></tr></table><font color='red'>$sql : $err</font><br>";
39 // Ab hier Artikelexport aus ERP
40 function shopartikel() {
41 global $db2,$pricegroup;
43 $sql="SELECT P.partnumber,P.description,P.weight,(t.rate * 100) as rate,G.price as sellprice,P.sellprice as stdprice, ";
44 $sql.="PG.partsgroup,P.notes,P.image,P.onhand FROM ";
45 $sql.="chart c left join tax t on c.taxkey_id=t.taxkey, parts P left join partsgroup PG on PG.id=P.partsgroup_id left join prices G on G.parts_id=P.id ";
46 $sql.="where P.shop='t' and c.id=p.income_accno_id and (G.pricegroup_id=$pricegroup or G.pricegroup_id is null)";
48 $sql="SELECT P.partnumber,P.description,P.weight,(t.rate * 100) as rate,P.sellprice,PG.partsgroup,P.notes,P.image,P.onhand FROM ";
49 $sql.="chart c left join tax t on c.taxkey_id=t.taxkey, parts P left join partsgroup PG on ";
50 $sql.="PG.id=P.partsgroup_id where P.shop='t' and c.id=p.income_accno_id";
52 $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
56 // Ab hier Import der Daten in den Shop
57 function createCategory($name,$maingroup,$tab) {
59 $newID=uniqid(rand());
60 $sql="insert into kategorien (Bild_gross,Bild_last_modified) values ('$newID',now())";
62 $sql="select * from kategorien where Bild_gross = '$newID'";
63 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
65 $id=$rs[0]["Kategorie_ID"];
66 $u=($maingroup=="Null")?"is Null":"=$maingroup";
67 $sql="select max(Positions_Nr) as Max from kategorien where Unterkategorie_von $u";
68 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
70 $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";
72 $rc=$db->query(sprintf($sql,$maingroup,$name,$pos,$mwst,$id));
73 return ($rc)?$id:false;
78 function getCategory($name) {
80 if (empty($name)) $name="Default";
81 preg_match("/^(\[(.*)\])?([^!]+)!?(.*)/",$name,$ref);
90 } else if ($ref[3]<>"" and $ref[3]<>$ref[0]) {
101 if (substr($name,0,1)=="[") {
108 // suche die Hauptgruppe
109 $sql="select * from kategorien where Name like '".$main."' and Unterkategorie_von is Null";
110 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
111 if ($rs[0]["Kategorie_ID"]) { // gefunden
112 $maingroup=$rs[0]["Kategorie_ID"];
113 } else { // nicht gefunden, anlegen
114 $maingroup=createCategory($main,"Null","$tab");
116 echo $maingroup.":".$main." ";
117 if ($sub && $maingroup) {
118 // suche Unterkategorie wenn eine gegeben
119 $sql="select * from kategorien where Name like '$sub' and Unterkategorie_von = '$main'";
120 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
121 if ($rs[0]["Kategorie_ID"]) { // gefunden
122 $maingroup=$rs[0]["Kategorie_ID"];
123 } else { // nicht gefunden, anlegen
124 $maingroup=createCategory($sub,"'$main'","");
130 function bilder($width,$height,$dest) {
131 if (!function_exists("imagick_readimage")) { echo "Imagick-Extention nicht installiert"; return false; };
132 $handle=imagick_readimage("./tmp/tmp.file_org");
134 $reason = imagick_failedreason( $handle ) ;
135 print "Lesen: $reason<BR>\n" ; flush();
138 if (!imagick_resize( $handle, $width, $height, IMAGICK_FILTER_UNKNOWN, 0)) {
139 $reason = imagick_failedreason( $handle ) ;
140 print "Resize: $reason<BR>\n" ; flush();
143 if (!imagick_writeimage( $handle,"./tmp/tmp.file_$dest")) {
144 $reason = imagick_failedreason( $handle ) ;
145 print "Schreiben: $reason<BR>\n" ; flush();
150 function uploadImage($image,$ArtNr) {
151 global $db,$ERPftphost,$ERPftpuser,$ERPftppwd,$ERPimgdir,
152 $SHOPftphost,$SHOPftpuser,$SHOPftppwd,$SHOPimgdir,$iconsize;
153 if ($ERPftphost=="localhost") {
154 exec("cp $ERPimgdir/$image ./tmp/tmp.file_org",$aus,$rc2);
155 if ($rc2>0) { echo "[Downloadfehler: $image]<br>"; return false; };
157 $conn_id = ftp_connect($ERPftphost);
158 ftp_login($conn_id,$ERPftpuser,$ERPftppwd);
159 $src=$ERPimgdir."/".$image;
160 $upload=ftp_get($conn_id,"tmp/tmp.file_org","$src",FTP_BINARY);
161 if (!$upload) { echo "[Ftp Downloadfehler! $image]<br>"; return false;};
164 bilder($iconsize,$iconsize,"smal");
165 $rc=preg_match("#(.+/)?([^\.]+)\.(.+)$#",$image,$treffer);
166 $gr=$treffer[2]."_gr.".$treffer[3];
167 $kl=$treffer[2]."_kl.".$treffer[3];
168 if ($SHOPftphost=="localhost") {
169 $dst=$SHOPimgdir."/".$gr;
170 exec("cp ./tmp/tmp.file_org $dst",$aus,$rc2);
171 if ($rc2>0) { echo "[Uploadfehler: $dst]<br>"; return false; };
172 $dst=$SHOPimgdir."/".$kl;
173 exec("cp ./tmp/tmp.file_smal $dst",$aus,$rc2);
174 if ($rc2>0) { echo "[Uploadfehler: $dst]<br>"; return false; };
176 $conn_id = ftp_connect($SHOPftphost);
177 ftp_login($conn_id,$SHOPftpuser,$SHOPftppwd);
178 ftp_chdir($conn_id,$SHOPimgdir);
179 $upload=ftp_put($conn_id,$SHOPimgdir."/$gr","tmp/tmp.file_org",FTP_BINARY);
180 if (!$upload) { echo "[Ftp Uploadfehler! $gr]<br>"; return false; };
181 $upload=ftp_put($conn_id,$SHOPimgdir."/$kl","tmp/tmp.file_smal",FTP_BINARY);
182 if (!$upload) { echo "[Ftp Uploadfehler! $kl]<br>"; return false; };
185 $sql="update artikel set Bild_gross='$gr', Bild_klein='$kl' where Artikel_ID=$ArtNr";
186 $rc=$db->query($sql);
188 function insartikel($data) {
190 $newID=uniqid(rand());
191 $sql="insert into artikel (Artikel_Nr,Name) values ('".$data["partnumber"]."','$newID')";
192 $rc=$db->query($sql);
193 $sql="select * from artikel where Name='$newID'";
194 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
196 $sql="insert into artikel_kategorie (FK_Artikel_ID,FK_Kategorie_ID) values (".$rs[0]["Artikel_ID"].",".$data["categories_id"].")";
197 $rc=$db->query($sql);
199 updartikel($data,$rs[0]["Artikel_ID"]);
200 } else { return false; }
202 function updartikel($data,$id) {
204 $sql ="update artikel set Preis=%01.2f,Gewicht=%0.2f,MwSt_Satz=%0.2f,letzteAenderung=now(),";
205 $sql.="Name='%s',Beschreibung='%s',Lagerbestand=%d where Artikel_ID=%d";
206 $preis=($data["sellprice"]>0)?$data["sellprice"]:$data["stdprice"];
207 $sql=sprintf($sql,$preis,$data["weight"],$tax[sprintf("%1.4f",$data["rate"])],$data["description"],$data["notes"],$data["onhand"],$id);
208 $rc=$db->query($sql);
209 $sql="update artikel_kategorie set FK_Kategorie_ID=".$data["categories_id"]." where FK_Artikel_ID=$id";
210 $rc=$db->query($sql);
213 function chkartikel($data) {
214 global $db,$shop2erp;
215 if ($data["partnumber"]=="") { echo "Artikelnummer fehlt!<br>"; return false;};
216 $sql="select * from artikel A left join artikel_kategorie K on A.Artikel_id=K.FK_Artikel_ID where Artikel_Nr like '".$data["partnumber"]."'";
217 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
218 echo "(".$data["partnumber"]."->".$rs[0]["Artikel_ID"].":".$data["description"].")";
220 if ($data["image"]) {
221 $rc=preg_match("#(.+/)?([^\.]+)\.(.+)$#",$data["image"],$treffer);
222 if ($treffer) { $data["picname"]=$treffer[2]."_gr.".$treffer[3]; }
223 else { $data["picname"]=""; };
225 $preis=($data["sellprice"]>0)?$data["sellprice"]:$data["stdprice"];
226 if ($rs[0]["Preis"]<>$preis) { updartikel($data,$rs[0]["Artikel_ID"]); }
227 else if ($rs[0]["Gewicht"]<>$data["weight"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
228 else if ($rs[0]["Name"]<>$data["description"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
229 else if ($rs[0]["Beschreibung"]<>$data["notes"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
230 else if ($rs[0]["MwSt_Satz"]<>$tax[sprintf("%1.4f",$data["rate"])]) { updartikel($data,$rs[0]["Artikel_ID"]); }
231 else if ($rs[0]["FK_Kategorie_ID"]<>$data["$categories_id"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
232 else if ($rs[0]["Lagerbestand"]<>$data["onhand"]) { updartikel($data,$rs[0]["Lagerbestand"]); }
233 else { echo "...<br>"; };
234 if ($rs[0]["Bild_gross"]<>$data["picname"] and $data["picname"]) { uploadImage($data["image"],$rs[0]["Artikel_ID"]); }
235 else if ($rs[0]["Bild_gross"] and !$data["picname"]) {
236 $sql="update artikel set Bild_gross='', Bild_klein='' where Artikel_ID=".$rs[0]["Artikel_ID"];
237 $rc=$db->query($sql);
240 $Artikel_ID=insartikel($data);
241 if ($data["image"]) uploadImage($data["image"],$Artikel_ID);
245 $artikel=shopartikel();
246 echo "Artikelexport ERP -> PHPepper :".count($artikel)." Artikel markiert.<br>";
248 $sql="select Thumbnail_Breite from shop_settings";
249 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
251 $iconsize=$rs[0]["Thumbnail_Breite"];
255 foreach ($artikel as $data) {
256 $data["categories_id"]=getCategory($data["partsgroup"]);
257 $x=chkartikel($data);
259 require ("diff.php");