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) {
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";
89 $rc=$db->query(sprintf($sql,$maingroup,$name,$pos,$mwst,$id));
90 return ($rc)?$id:false;
95 function getCategory($name) {
97 if (empty($name)) $name="Default";
98 preg_match("/^(\[(.*)\])?([^!]+)!?(.*)/",$name,$ref);
107 } else if ($ref[3]<>"" and $ref[3]<>$ref[0]) {
118 if (substr($name,0,1)=="[") {
125 // suche die Hauptgruppe
126 $sql="select * from kategorien where Name like '".$main."' and Unterkategorie_von is Null";
127 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
128 if ($rs[0]["Kategorie_ID"]) { // gefunden
129 $maingroup=$rs[0]["Kategorie_ID"];
130 } else { // nicht gefunden, anlegen
131 $maingroup=createCategory($main,"Null","$tab");
133 echo $maingroup.":".$main." ";
134 if ($sub && $maingroup) {
135 // suche Unterkategorie wenn eine gegeben
136 $sql="select * from kategorien where Name like '$sub' and Unterkategorie_von = '$main'";
137 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
138 if ($rs[0]["Kategorie_ID"]) { // gefunden
139 $maingroup=$rs[0]["Kategorie_ID"];
140 } else { // nicht gefunden, anlegen
141 $maingroup=createCategory($sub,"'$main'","");
147 function bilder($width,$height,$dest) {
148 if (!function_exists("imagick_readimage")) { echo "Imagick-Extention nicht installiert"; return false; };
149 $handle=imagick_readimage("./tmp/tmp.file_org");
151 $reason = imagick_failedreason( $handle ) ;
152 print "Lesen: $reason<BR>\n" ; flush();
155 if (!imagick_resize( $handle, $width, $height, IMAGICK_FILTER_UNKNOWN, 0)) {
156 $reason = imagick_failedreason( $handle ) ;
157 print "Resize: $reason<BR>\n" ; flush();
160 if (!imagick_writeimage( $handle,"./tmp/tmp.file_$dest")) {
161 $reason = imagick_failedreason( $handle ) ;
162 print "Schreiben: $reason<BR>\n" ; flush();
167 function uploadImage($image,$ArtNr) {
168 global $db,$ERPftphost,$ERPftpuser,$ERPftppwd,$ERPimgdir,
169 $SHOPftphost,$SHOPftpuser,$SHOPftppwd,$SHOPimgdir,$iconsize;
170 if ($ERPftphost=="localhost") {
171 exec("cp $ERPimgdir/$image ./tmp/tmp.file_org",$aus,$rc2);
172 if ($rc2>0) { echo "[Downloadfehler: $image]<br>"; return false; };
174 $conn_id = ftp_connect($ERPftphost);
175 ftp_login($conn_id,$ERPftpuser,$ERPftppwd);
176 $src=$ERPimgdir."/".$image;
177 $upload=ftp_get($conn_id,"tmp/tmp.file_org","$src",FTP_BINARY);
178 if (!$upload) { echo "[Ftp Downloadfehler! $image]<br>"; return false;};
181 bilder($iconsize,$iconsize,"smal");
182 $rc=preg_match("#(.+/)?([^\.]+)\.(.+)$#",$image,$treffer);
183 $gr=$treffer[2]."_gr.".$treffer[3];
184 $kl=$treffer[2]."_kl.".$treffer[3];
185 if ($SHOPftphost=="localhost") {
186 $dst=$SHOPimgdir."/".$gr;
187 exec("cp ./tmp/tmp.file_org $dst",$aus,$rc2);
188 if ($rc2>0) { echo "[Uploadfehler: $dst]<br>"; return false; };
189 $dst=$SHOPimgdir."/".$kl;
190 exec("cp ./tmp/tmp.file_smal $dst",$aus,$rc2);
191 if ($rc2>0) { echo "[Uploadfehler: $dst]<br>"; return false; };
193 $conn_id = ftp_connect($SHOPftphost);
194 ftp_login($conn_id,$SHOPftpuser,$SHOPftppwd);
195 ftp_chdir($conn_id,$SHOPimgdir);
196 $upload=ftp_put($conn_id,$SHOPimgdir."/$gr","tmp/tmp.file_org",FTP_BINARY);
197 if (!$upload) { echo "[Ftp Uploadfehler! $gr]<br>"; return false; };
198 $upload=ftp_put($conn_id,$SHOPimgdir."/$kl","tmp/tmp.file_smal",FTP_BINARY);
199 if (!$upload) { echo "[Ftp Uploadfehler! $kl]<br>"; return false; };
202 $sql="update artikel set Bild_gross='$gr', Bild_klein='$kl' where Artikel_ID=$ArtNr";
203 $rc=$db->query($sql);
205 function insartikel($data) {
207 $newID=uniqid(rand());
208 $sql="insert into artikel (Artikel_Nr,Name) values ('".$data["partnumber"]."','$newID')";
209 $rc=$db->query($sql);
210 $sql="select * from artikel where Name='$newID'";
211 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
213 $sql="insert into artikel_kategorie (FK_Artikel_ID,FK_Kategorie_ID) values (".$rs[0]["Artikel_ID"].",".$data["categories_id"].")";
214 $rc=$db->query($sql);
216 updartikel($data,$rs[0]["Artikel_ID"]);
217 } else { return false; }
219 function updartikel($data,$id) {
220 global $db,$bugru,$mwst;
221 $sql ="update artikel set Preis=%01.2f,Gewicht=%0.2f,MwSt_Satz=%0.2f,letzteAenderung=now(),";
222 $sql.="Name='%s',Beschreibung='%s',Lagerbestand=%d where Artikel_ID=%d";
223 $preis=($data["sellprice"]>0)?$data["sellprice"]:$data["stdprice"];
224 if ($mwst) $preis+=$preis/100*$bugru[$data["bugru"]];
225 $sql=sprintf($sql,$preis,$data["weight"],$bugru[$data["bugru"]],$data["description"],$data["notes"],$data["onhand"],$id);
226 $rc=$db->query($sql);
227 $sql="update artikel_kategorie set FK_Kategorie_ID=".$data["categories_id"]." where FK_Artikel_ID=$id";
228 $rc=$db->query($sql);
231 function chkartikel($data) {
232 global $db,$shop2erp,$mwst;
233 if ($data["partnumber"]=="") { echo "Artikelnummer fehlt!<br>"; return false;};
234 $sql="select * from artikel A left join artikel_kategorie K on A.Artikel_id=K.FK_Artikel_ID where Artikel_Nr like '".$data["partnumber"]."'";
235 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
236 echo "(".$data["partnumber"]."->".$rs[0]["Artikel_ID"].":".$data["description"].")";
238 if ($data["image"]) {
239 $rc=preg_match("#(.+/)?([^\.]+)\.(.+)$#",$data["image"],$treffer);
240 if ($treffer) { $data["picname"]=$treffer[2]."_gr.".$treffer[3]; }
241 else { $data["picname"]=""; };
243 $preis=($data["sellprice"]>0)?$data["sellprice"]:$data["stdprice"];
244 if ($mwst) $preis+=$preis/100*$bugru[$data["bugru"]];
245 if ($rs[0]["Preis"]<>$preis) { updartikel($data,$rs[0]["Artikel_ID"]); }
246 else if ($rs[0]["Gewicht"]<>$data["weight"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
247 else if ($rs[0]["Name"]<>$data["description"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
248 else if ($rs[0]["Beschreibung"]<>$data["notes"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
249 else if ($rs[0]["MwSt_Satz"]<>$tax[sprintf("%1.4f",$data["rate"])]) { updartikel($data,$rs[0]["Artikel_ID"]); }
250 else if ($rs[0]["FK_Kategorie_ID"]<>$data["$categories_id"]) { updartikel($data,$rs[0]["Artikel_ID"]); }
251 else if ($rs[0]["Lagerbestand"]<>$data["onhand"]) { updartikel($data,$rs[0]["Lagerbestand"]); }
252 else { echo "...<br>"; };
253 if ($rs[0]["Bild_gross"]<>$data["picname"] and $data["picname"]) { uploadImage($data["image"],$rs[0]["Artikel_ID"]); }
254 else if ($rs[0]["Bild_gross"] and !$data["picname"]) {
255 $sql="update artikel set Bild_gross='', Bild_klein='' where Artikel_ID=".$rs[0]["Artikel_ID"];
256 $rc=$db->query($sql);
259 $Artikel_ID=insartikel($data);
260 if ($data["image"]) uploadImage($data["image"],$Artikel_ID);
264 $artikel=shopartikel();
265 echo "Artikelexport ERP -> PHPepper :".count($artikel)." Artikel markiert.<br>";
268 $sql="select Thumbnail_Breite from shop_settings";
269 $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
271 $iconsize=$rs[0]["Thumbnail_Breite"];
275 foreach ($artikel as $data) {
276 $data["categories_id"]=getCategory($data["partsgroup"]);
277 $x=chkartikel($data);
279 require ("diff.php");