Lx-Office heißt nun kivitendo
[kivitendo-erp.git] / oscom / shopimport_db.php
1 <?php
2 /***************************************************************
3 *Author: Holger Lindemann
4 *Copyright: (c) 2004 Lx-System
5 *License: non free
6 *eMail: info@lx-system.de
7 *Version: 1.6.0
8 *Shop: osCommerce 2.2
9 *ERP: kivitendo ERP 3.0.0
10 ***************************************************************/
11 require_once "shoplib.php";
12 $LAND=array("Germany"=>"D");
13 $nun=date("d.m.y H:i:s");
14
15 // Ab hier Artikelexport aus ERP
16 function shopartikel() {
17 global $pricegroup;
18         if ($pricegroup>0) {
19                 $sql="SELECT P.partnumber,P.description,G.price as sellprice,P.sellprice as stdprice, ";
20                 $sql.="PG.partsgroup,P.notes,P.image,P.onhand,G.pricegroup_id,P.buchungsgruppen_id as bugru FROM ";
21                 $sql.="parts P left join partsgroup PG on ";
22                 $sql.="PG.id=P.partsgroup_id left join prices G on G.parts_id=P.id ";
23                 $sql.="where P.shop='t' and ";
24                 $sql.="(G.pricegroup_id=$pricegroup or G.pricegroup_id is null) ";
25                 $sql.="order by P.partnumber";
26         } else {
27                 $sql="SELECT P.partnumber,P.description,P.weight,P.sellprice,PG.partsgroup,";
28                 $sql.="P.notes,P.image,P.onhand,P.buchungsgruppen_id as bugru ";
29                 $sql.="FROM parts P left join partsgroup PG on PG.id=P.partsgroup_id ";
30                 $sql.="left join buchungsgruppen B on P.buchungsgruppen_id = B.id ";
31                 $sql.="WHERE P.shop='t'";
32         }
33         $rs=getAll("erp",$sql,"shopartikel");
34         return $rs;
35 }
36
37 // Ab hier Import der Daten in den Shop
38 function createCategory($name,$maingroup) {
39 global $defLang;
40         $newID=uniqid(rand());
41         $sql="insert into categories (categories_image,parent_id,date_added) values ('$newID',$maingroup,now())";
42         $rc=query("shop",$sql,"createCategory");
43         $sql="select * from categories where categories_image = '$newID'";
44         $rs=getAll("shop",$sql,"createCategory");
45         $id=$rs[0]["categories_id"];
46         $sql="update categories set categories_image = 'pixel_trans.gif' where categories_id=$id";
47         $rc=query("shop",$sql,"createCategory");
48         echo "($name) ";
49         $sql="insert into categories_description (categories_id,language_id,categories_name) values ($id,$defLang,'$name')";
50         $rc=query("shop",$sql,"createCategory");
51         return ($rc)?$id:false;
52 }
53 function getCategory($name) {
54         if (empty($name)) $name="Default";
55         $tmp=split("!",$name);
56         $maingroup=0;
57         $found=true;
58         $i=0;
59         do {
60                 $sql="select D.*,C.parent_id from categories C left join categories_description D on C.categories_id=D.categories_id ";
61                 $sql.="where categories_name like '".$tmp[$i]."' and C.parent_id=$maingroup";
62                 $rs=getAll("shop",$sql,"getCategory");
63                 if ($rs[0]["categories_id"]) {
64                         $maingroup=$rs[0]["categories_id"];
65                         $i++;
66                 } else {
67                         $found=false;
68                 }
69         } while ($rs and $found and $i<count($tmp));
70         for (;$i<count($tmp); $i++) {
71                 $maingroup=createCategory($tmp[$i],$maingroup);
72         }
73         return $maingroup;
74 }
75 function bilder($width,$height,$dest) {
76         if (!function_exists("imagick_readimage")) { echo "Imagick-Extention nicht installiert"; return false; };
77         $handle=imagick_readimage("./tmp/tmp.file_org");
78         if (!$handle) {
79                 $reason      = imagick_failedreason( $handle ) ;
80                 print "Lesen: $reason<BR>\n" ; flush();
81                 return false;
82         }
83         if (!imagick_resize( $handle, $width, $height, IMAGICK_FILTER_UNKNOWN, 0)) {
84                 $reason      = imagick_failedreason( $handle ) ;
85                 print "Resize: $reason<BR>\n" ; flush();
86                 return false;
87         }
88         if (!imagick_writeimage( $handle,"./tmp/tmp.file_$dest")) {
89                 $reason      = imagick_failedreason( $handle ) ;
90                 print "Schreiben: $reason<BR>\n" ;      flush();
91                 return false;
92         }
93         return true;
94 }
95 function uploadImage($image,$id) {
96 global $ERPftphost,$ERPftpuser,$ERPftppwd,$ERPimgdir,$maxSize,$SHOPftphost,$SHOPftpuser,$SHOPftppwd,$SHOPimgdir;
97         $tmp=split("/",$image);
98         $cnt=count($tmp)-1;
99         $name=(strrpos($image,"/")>0)?substr($image,strrpos($image,"/")+1):$image;
100         $ok=true;
101         if ($ERPftphost==$SHOPftphost and $ERPftphost=="localhost") {
102                 $destdir=$SHOPimgdir."/".substr($image,0,strrpos($image,"/"));
103                 $ret=exec("mkdir -p $destdir/".$tmp[$i],$out,$rc);
104                 $rc=exec("cp $ERPimgdir/$image $SHOPimgdir/$image",$o2,$rc2);
105                 if ($rc2>0) { $ok=false; echo "Kopieren nicht erfolgreich $image<br>"; }
106         } else if ($ERPftphost=="localhost")    {
107                 $rc3=exec("cp $ERPimgdir/$image ./tmp/tmp.file",$o2,$rc2);
108                 if ($rc2>0) {
109                         echo "Kopieren nicht erfolgreich. ";
110                 } else {
111                         $conn_id = ftp_connect($SHOPftphost);
112                         ftp_login($conn_id,$SHOPftpuser,$SHOPftppwd);
113                         ftp_chdir($conn_id,$SHOPimgdir);
114                         for ($i=0; $i<$cnt; $i++) {
115                                 @ftp_mkdir($conn_id,$tmp[$i]);
116                                 @ftp_chdir($conn_id,$tmp[$i]);
117                         }
118                         $src=$SHOPimgdir."/".$image;
119                         $upload=ftp_put($conn_id,"$src","tmp/tmp.file",FTP_BINARY);
120                         if (!$upload) { $ok=false; echo "Ftp upload war fehlerhaft!";};
121                         ftp_quit($conn_id);
122                 }
123         } else if ($SHOPftphost=="localhost") {
124                 $conn_id = ftp_connect($ERPftphost);
125                 ftp_login($conn_id,$ERPftpuser,$ERPftppwd);
126                 $src=$ERPimgdir."/".$image;
127                 $upload=ftp_get($conn_id,"tmp/tmp.file","$src",FTP_BINARY);
128                 if (!$upload) { $ok=false; echo "Ftp download war fehlerhaft!";};
129                 ftp_quit($conn_id);
130                 exec("cp tmp/tmp.file $SHOPimgdir/$image",$o2,$rc2);
131                 if ($rc2) { $ok=false; echo "Kopieren nicht erfolgreich"; }
132         } else {
133                 $conn_id = ftp_connect($ERPftphost);
134                 ftp_login($conn_id,$ERPftpuser,$ERPftppwd);
135                 $src=$ERPimgdir."/".$image;
136                 $upload=ftp_get($conn_id,"tmp/tmp.file","$src",FTP_BINARY);
137                 if (!$upload) { $ok=false; echo "Ftp download war fehlerhaft!";};
138                 ftp_quit($conn_id);
139                 $conn_id = ftp_connect($SHOPftphost);
140                 ftp_login($conn_id,$SHOPftpuser,$SHOPftppwd);
141                 ftp_chdir($conn_id,$SHOPimgdir);
142                 for ($i=0; $i<$cnt; $i++) {
143                         @ftp_mkdir($conn_id,$tmp[$i]);
144                         @ftp_chdir($conn_id,$tmp[$i]);
145                 }
146                 $src=$SHOPimgdir."/".$image;
147                 $upload=ftp_put($conn_id,"$src","tmp/tmp.file",FTP_BINARY);
148                 if (!$upload) { $ok=false; echo "Ftp upload war fehlerhaft!";};
149                 ftp_quit($conn_id);
150         }
151         if ($ok) {
152                 $sql="update products set products_image='%s',products_last_modified=now() where products_id=%d";
153                 $sql=sprintf($sql,$image,$id);
154                 $rc=query("shop",$sql,"uploadImage");
155         }
156 }
157 function insartikel($data) {
158 global $header,$defLang;
159         echo " insert ";
160         $newID=uniqid(rand());
161         $sql="insert into products (products_model,products_image) values ('".$data["partnumber"]."','$newID')";
162         $rc=query("shop",$sql,"insartikel");
163         if ($rc === -99) { echo "Fehler.<br>"; return false; };
164         $sql="select * from products where products_image='$newID'";
165         $rs=getAll("shop",$sql,"insartikel");
166         $sql="update products set products_image='pixel_trans.gif' where products_id=".$rs[0]["products_id"];
167         $rc=query("shop",$sql,"insartikel");
168         if ($rc === -99) { echo "Fehler.<br>"; return false; };
169         $sql="insert into products_description (products_id,language_id,products_name) values (".$rs[0]["products_id"].",$defLang,' ')";
170         $rc=query("shop",$sql,"insartikel");
171         if ($rc === -99) { echo "Fehler.<br>"; return false; };
172         $sql="insert into products_to_categories (products_id,categories_id) values (".$rs[0]["products_id"].",".$data["categories_id"].")";
173         $rc=query("shop",$sql,"insartikel");
174         if ($rc === -99) { echo "Fehler.<br>"; return false; };
175         if (updartikel($data,$rs[0]["products_id"])) {
176                 return $rs[0]["products_id"];
177         } else {
178                 return false;
179         }
180 }
181 function updartikel($data,$id) {
182 global $header,$defLang,$tax;
183         $sql="update products set products_status=1,products_price=%01.2f,products_weight=%01.2f,products_tax_class_id=%d,";
184         $sql.="products_last_modified=now(),products_quantity=%d where products_id=%d";
185         $sql=sprintf($sql,$data["preis"],$data["weight"],$tax[sprintf("%1.4f",$data["rate"])],$data["onhand"],$id);
186         $rc=query("shop",$sql,"updartikel");
187         if ($rc === -99) { echo "Fehler <br>"; return false; };
188         $sql="update products_description set products_name='%s',products_description='%s' where products_id=%d and language_id=$defLang";
189         $sql=sprintf($sql,$data["description"],$data["notes"],$id);
190         $rc=query("shop",$sql,"updartikel");
191         if ($rc === -99) { echo "Fehler <br>"; return false; };
192         $sql="update products_to_categories set categories_id=".$data["categories_id"]." where products_id=$id";
193         $rc=query("shop",$sql,"updartikel");
194         if ($rc === -99) { echo "Fehler <br>"; return false; };
195         echo "+++<br>";
196         return true;
197 }
198 function chkartikel($data) {
199 global $header,$shop2erp,$erptax,$defLang;
200         if ($data["partnumber"]=="") { echo "Artikelnummer fehlt!<br>"; return;};
201         $sql="select * from products P left join products_description D on P.products_id=D.products_id left join products_to_categories C on ";
202         $sql.="P.products_id=C.products_id where  products_model like '".$data["partnumber"]."' and language_id=$defLang";
203         echo "(".$data["partnumber"]."->".$rs[0]["products_id"].":".$data["description"].")";
204     if ($data["image"]) {
205             $data["picname"]=(strrpos($data["image"],"/")>0)?substr($data["image"],strrpos($data["image"],"/")+1):$data["image"];
206     } else if ($nopic) {
207             $data["picname"]=(strrpos($nopic,"/")>0)?substr($nopic,strrpos($nopic,"/")+1):$nopic;
208             $data["image"]=$nopic;
209     }
210         $data["onhand"]=floor($data["onhand"]);
211         $data["rate"]=$erptax[$data["bugru"]]["rate"];
212         $data["preis"]=($data["sellprice"]>0)?$data["sellprice"]:$data["stdprice"];
213         $rs=getAll("shop",$sql,"chkartikel");
214         if ($rs) {
215                 $rc=updartikel($data,$rs[0]["products_id"]);
216                 if ($rs[0]["products_image"]<>$data["image"] and $data["picname"] and $rc) uploadImage($data["image"],$rs[0]["products_id"]);
217         } else {
218                 $id=insartikel($data);
219                 if ($data["image"] and $id) uploadImage($data["image"],$id);
220         }
221 }
222 if ($SHOPlang>0) {
223         $defLang=$SHOPlang;
224 } else {
225         $sql="select * from languages L left join configuration C on L.code=C.configuration_value where  configuration_key = 'DEFAULT_LANGUAGE'";
226         $rs=getAll("shop",$sql,"SHOPlang");
227         if ($rs) {
228                 $defLang=$rs[0]["languages_id"];
229         } else {
230                 $defLang=1;
231         }
232 }
233
234 $sql="select * from tax_rates";
235 $rs=getAll("shop",$sql,"tax_rates");
236 if ($rs) {
237         foreach ($rs as $zeile) {
238                 $tax[$zeile["tax_rate"]]=$zeile["tax_class_id"];
239         }
240 } else {
241         $tax[0]="";
242 }
243
244
245 /*******************************************
246 * Steuern
247 *******************************************/
248 //Steuertabelle ERP
249 $sql ="select  BG.id as bugru,T.rate,TK.startdate from buchungsgruppen BG left join chart C ";
250 $sql.="on BG.income_accno_id_0=C.id left join taxkeys TK on TK.chart_id=C.id left join tax T ";
251 $sql.="on T.id=TK.tax_id where TK.startdate <= now()";
252 $rs=getAll("erp",$sql,"Tax ERP");
253 $erptax=array();
254 foreach ($rs as $row) {
255         if ($erptax[$row["bugru"]]["startdate"]<$row["startdate"]) {
256                 $erptax[$row["bugru"]]["startdate"]=$row["startdate"];
257                 $erptax[$row["bugru"]]["rate"]=$row["rate"]*100;
258         }
259 }
260
261
262 $artikel=shopartikel();
263 echo "Artikelexport ERP -&gt; osCommerce :".count($artikel)." Artikel markiert.<br>";
264 if ($artikel) {
265         foreach ($artikel as $data) {
266                 $data["categories_id"]=getCategory($data["partsgroup"]);
267                 chkartikel($data);
268         }
269         require ("diff.php");
270 }
271
272 ?>