Anlegen von Waren und Dienstleistungen aus Vorgängen heraus: Beim eingegebenen Preis...
[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 require_once "conf.php";
13 require_once "DB.php";
14
15 $db=DB::connect($SHOPdns);
16 if (!$db) dbFehler("",$db->getDebugInfo());
17 if (DB::isError($db)) {
18         dbFehler("",$db->getDebugInfo());
19         die ($db->getDebugInfo());
20 };
21 $db2=DB::connect($ERPdns);
22 if (!$db2) dbFehler("",$db2->getDebugInfo());
23 if (DB::isError($db2)) {
24         dbFehler("",$db2->getDebugInfo());
25         die ($db2->getDebugInfo());
26 };
27 /****************************************************
28 * dbFehler
29 * in: sql,err = string
30 * out:
31 * Fehlermeldungen ausgeben
32 *****************************************************/
33 function dbFehler($sql,$err) {
34 global $showErr;
35     if ($showErr)
36            echo "</td></tr></table><font color='red'>$sql : $err</font><br>";
37 }
38
39 // Ab hier Artikelexport aus ERP
40 function shopartikel() {
41 global $db2,$pricegroup;
42         if ($pricegroup>0) {
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)";
47         } else {
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";
51         }
52         $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
53         return $rs;
54 }
55
56 // Ab hier Import der Daten in den Shop
57 function createCategory($name,$maingroup,$tab) {
58 global $db,$langs;
59         $newID=uniqid(rand());
60         $sql="insert into kategorien (Bild_gross,Bild_last_modified) values ('$newID',now())";
61         $rc=$db->query($sql);
62         $sql="select * from kategorien where Bild_gross = '$newID'";
63         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
64         if ($rs) {
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);
69                 $pos=$rs[0]["Max"]+1;
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";
71                 echo "($name) ";
72                 $rc=$db->query(sprintf($sql,$maingroup,$name,$pos,$mwst,$id));
73                 return ($rc)?$id:false;
74         } else {
75                 return false;
76         }
77 }
78 function getCategory($name) {
79 global $db;
80         if (empty($name)) $name="Default";
81         preg_match("/^(\[(.*)\])?([^!]+)!?(.*)/",$name,$ref);
82         if ($ref[1]<>""){
83                 $tab=$ref[2];
84                 $main=$ref[3];
85                 if ($ref[4]<>"") {
86                         $sub=$ref[4];
87                 } else {
88                         $sub=false;
89                 }
90         } else if ($ref[3]<>"" and $ref[3]<>$ref[0]) {
91                 $tab=false;
92                 $main=$ref[3];
93                 if ($ref[4]<>"") {
94                         $sub=$ref[4];
95                 } else {
96                         $sub=false;
97                 }
98         } else  {
99                 $tab=false;
100                 $sub=false;
101                 if (substr($name,0,1)=="[") {
102                         $main="Default";                        
103                 } else {
104                         $main=$name;
105                 }
106         }
107         $found=true;
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");
115         }
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'","");
125                 }
126         };
127         echo $sub." ";
128         return $maingroup;
129 }
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");
133         if (!$handle) {
134                 $reason      = imagick_failedreason( $handle ) ;
135                 print "Lesen: $reason<BR>\n" ; flush();
136                 return false;
137         }
138         if (!imagick_resize( $handle, $width, $height, IMAGICK_FILTER_UNKNOWN, 0)) {
139                 $reason      = imagick_failedreason( $handle ) ;
140                 print "Resize: $reason<BR>\n" ; flush();
141                 return false;
142         }
143         if (!imagick_writeimage( $handle,"./tmp/tmp.file_$dest")) {
144                 $reason      = imagick_failedreason( $handle ) ;
145                 print "Schreiben: $reason<BR>\n" ;      flush();
146                 return false;
147         }
148         return true;
149 }
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; };
156         } else {
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;};
162                 ftp_quit($conn_id);
163         };
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; };
175         } else {
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; };
183                 ftp_quit($conn_id);
184         }
185         $sql="update artikel set Bild_gross='$gr', Bild_klein='$kl' where Artikel_ID=$ArtNr";
186         $rc=$db->query($sql);
187 }
188 function insartikel($data) {
189 global $db;
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);
195         if ($rs) {
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);
198                 echo " insert ";
199                 updartikel($data,$rs[0]["Artikel_ID"]);
200         } else { return false; }
201 }
202 function updartikel($data,$id) {
203 global $db;
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);
211         echo "+++<br>";
212 }
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"].")";
219         if ($rs) {
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"]=""; };
224                 }
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);
238                 }
239         } else {
240                 $Artikel_ID=insartikel($data);
241                 if ($data["image"])     uploadImage($data["image"],$Artikel_ID); 
242         }
243 }
244
245 $artikel=shopartikel();
246 echo "Artikelexport ERP -&gt; PHPepper :".count($artikel)." Artikel markiert.<br>";
247 if ($artikel) {
248         $sql="select Thumbnail_Breite from shop_settings";
249         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
250         if ($rs) {
251                 $iconsize=$rs[0]["Thumbnail_Breite"];
252         } else {
253                 $iconsize=100;
254         }
255         foreach ($artikel as $data) {
256                 $data["categories_id"]=getCategory($data["partsgroup"]);
257                 $x=chkartikel($data);
258         }
259         require ("diff.php");
260 }
261
262 ?>