Lx-Office heißt nun kivitendo
[kivitendo-erp.git] / pepper / shopimport_db.php
1 <?php
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
6 *License: non free
7 *eMail: info@lx-system.de
8 *Version: 1.0.0
9 *Shop: PHPeppershop 2.0
10 *ERP: kivitendo ERP 3.0.0
11 ***************************************************************/
12 $login=($_GET["login"])?$_GET["login"]:$_POST["login"];
13 if (file_exists ("conf$login.php")) {
14         require "conf$login.php";
15 } else {
16         require "conf.php";
17 }
18 require_once "DB.php";
19
20 $db=DB::connect($SHOPdns);
21 if (!$db) dbFehler("",$db->getDebugInfo());
22 if (DB::isError($db)) {
23         dbFehler("",$db->getDebugInfo());
24         die ($db->getDebugInfo());
25 };
26 $db2=DB::connect($ERPdns);
27 if (!$db2) dbFehler("",$db2->getDebugInfo());
28 if (DB::isError($db2)) {
29         dbFehler("",$db2->getDebugInfo());
30         die ($db2->getDebugInfo());
31 };
32 /****************************************************
33 * dbFehler
34 * in: sql,err = string
35 * out:
36 * Fehlermeldungen ausgeben
37 *****************************************************/
38 function dbFehler($sql,$err) {
39 global $showErr;
40     if ($showErr)
41            echo "</td></tr></table><font color='red'>$sql : $err</font><br>";
42 }
43 function getBugru() {
44 global $db2;
45         if (!$db2) return;
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"];
53         }
54         return $bugru;
55 }
56 // Ab hier Artikelexport aus ERP
57 function shopartikel() {
58 global $db2,$pricegroup;
59         if ($pricegroup>0) {
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)";
64         } else {
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'";
68         }
69         $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
70         return $rs;
71 }
72
73 // Ab hier Import der Daten in den Shop
74 function createCategory($name,$maingroup,$tab,$PID) {
75 global $db,$langs;
76         $newID=uniqid(rand());
77         $sql="insert into kategorien (Bild_gross,Bild_last_modified) values ('$newID',now())";
78         $rc=$db->query($sql);
79         $sql="select * from kategorien where Bild_gross = '$newID'";
80         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
81         if ($rs) {
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);
86                 $pos=$rs[0]["Max"]+1;
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";
90                 echo "($name) ";
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;
94         } else {
95                 return false;
96         }
97 }
98 function getCategory($name) {
99 global $db;
100         if (empty($name)) $name="Default";
101         $name = utf8_decode($name);
102         preg_match("/^(\[(.*)\])?([^!]+)!?(.*)/",$name,$ref);
103         if ($ref[1]<>""){
104                 $tab=$ref[2];
105                 $main=$ref[3];
106                 if ($ref[4]<>"") {
107                         $sub=$ref[4];
108                 } else {
109                         $sub=false;
110                 }
111         } else if ($ref[3]<>"" and $ref[3]<>$ref[0]) {
112                 $tab=false;
113                 $main=$ref[3];
114                 if ($ref[4]<>"") {
115                         $sub=$ref[4];
116                 } else {
117                         $sub=false;
118                 }
119         } else  {
120                 $tab=false;
121                 $sub=false;
122                 if (substr($name,0,1)=="[") {
123                         $main="Default";                        
124                 } else {
125                         $main=$name;
126                 }
127         }
128         $found=true;
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);
136         }
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);
146                 }
147         };
148         echo $sub." ";
149         return $maingroup;
150 }
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);
159         $h = $height;
160     } else {
161         $f = $d["height"]/$d["width"];
162         $w = $width;
163         $h = floor($height*$f);
164     }
165         $handle->thumbnailImage( $w, $h);
166         return $handle->writeImage( "./tmp/tmp.file_$dest");
167 }
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; };
174         } else {
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;};
180                 ftp_quit($conn_id);
181         };
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; };
194         } else {
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; };
202                 ftp_quit($conn_id);
203         }
204         $sql="update artikel set Bild_gross='$gr', Bild_klein='$kl' where Artikel_ID=$ArtNr";
205         $rc=$db->query($sql);
206 }
207 function insartikel($data) {
208 global $db;
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);
214         if ($rs) {
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);
217                 echo " insert ";
218                 updartikel($data,$rs[0]["Artikel_ID"]);
219         } else { return false; }
220 }
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);
231         echo "+++<br>";
232 }
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"].")";
239         if ($rs) {
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"]=""; };
244                 }
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);
259                 }
260         } else {
261                 $Artikel_ID=insartikel($data);
262                 if ($data["image"])     uploadImage($data["image"],$Artikel_ID); 
263         }
264 }
265
266 $artikel=shopartikel();
267 echo "Artikelexport ERP -&gt; PHPepper :".count($artikel)." Artikel markiert.<br>";
268 flush();
269 if ($artikel) {
270     $bugru=getBugru();
271         $sql="select Thumbnail_Breite from shop_settings";
272         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
273         if ($rs) {
274                 $iconsize=$rs[0]["Thumbnail_Breite"];
275         } else {
276                 $iconsize=100;
277         }
278         foreach ($artikel as $data) {
279                 $data["categories_id"]=getCategory($data["partsgroup"]);
280                 $x=chkartikel($data);
281         }
282         require ("diff.php");
283 }
284
285 ?>