Multibox: Keine Variablen in den rows speichern
[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: Lx-Office ERP
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) {
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                 echo "($name) ";
89                 $rc=$db->query(sprintf($sql,$maingroup,$name,$pos,$mwst,$id));
90                 return ($rc)?$id:false;
91         } else {
92                 return false;
93         }
94 }
95 function getCategory($name) {
96 global $db;
97         if (empty($name)) $name="Default";
98         preg_match("/^(\[(.*)\])?([^!]+)!?(.*)/",$name,$ref);
99         if ($ref[1]<>""){
100                 $tab=$ref[2];
101                 $main=$ref[3];
102                 if ($ref[4]<>"") {
103                         $sub=$ref[4];
104                 } else {
105                         $sub=false;
106                 }
107         } else if ($ref[3]<>"" and $ref[3]<>$ref[0]) {
108                 $tab=false;
109                 $main=$ref[3];
110                 if ($ref[4]<>"") {
111                         $sub=$ref[4];
112                 } else {
113                         $sub=false;
114                 }
115         } else  {
116                 $tab=false;
117                 $sub=false;
118                 if (substr($name,0,1)=="[") {
119                         $main="Default";                        
120                 } else {
121                         $main=$name;
122                 }
123         }
124         $found=true;
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");
132         }
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'","");
142                 }
143         };
144         echo $sub." ";
145         return $maingroup;
146 }
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");
150         if (!$handle) {
151                 $reason      = imagick_failedreason( $handle ) ;
152                 print "Lesen: $reason<BR>\n" ; flush();
153                 return false;
154         }
155         if (!imagick_resize( $handle, $width, $height, IMAGICK_FILTER_UNKNOWN, 0)) {
156                 $reason      = imagick_failedreason( $handle ) ;
157                 print "Resize: $reason<BR>\n" ; flush();
158                 return false;
159         }
160         if (!imagick_writeimage( $handle,"./tmp/tmp.file_$dest")) {
161                 $reason      = imagick_failedreason( $handle ) ;
162                 print "Schreiben: $reason<BR>\n" ;      flush();
163                 return false;
164         }
165         return true;
166 }
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; };
173         } else {
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;};
179                 ftp_quit($conn_id);
180         };
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; };
192         } else {
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; };
200                 ftp_quit($conn_id);
201         }
202         $sql="update artikel set Bild_gross='$gr', Bild_klein='$kl' where Artikel_ID=$ArtNr";
203         $rc=$db->query($sql);
204 }
205 function insartikel($data) {
206 global $db;
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);
212         if ($rs) {
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);
215                 echo " insert ";
216                 updartikel($data,$rs[0]["Artikel_ID"]);
217         } else { return false; }
218 }
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);
229         echo "+++<br>";
230 }
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"].")";
237         if ($rs) {
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"]=""; };
242                 }
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);
257                 }
258         } else {
259                 $Artikel_ID=insartikel($data);
260                 if ($data["image"])     uploadImage($data["image"],$Artikel_ID); 
261         }
262 }
263
264 $artikel=shopartikel();
265 echo "Artikelexport ERP -&gt; PHPepper :".count($artikel)." Artikel markiert.<br>";
266 if ($artikel) {
267     $bugru=getBugru();
268         $sql="select Thumbnail_Breite from shop_settings";
269         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
270         if ($rs) {
271                 $iconsize=$rs[0]["Thumbnail_Breite"];
272         } else {
273                 $iconsize=100;
274         }
275         foreach ($artikel as $data) {
276                 $data["categories_id"]=getCategory($data["partsgroup"]);
277                 $x=chkartikel($data);
278         }
279         require ("diff.php");
280 }
281
282 ?>