Lx-Office heißt nun kivitendo
[kivitendo-erp.git] / pepper / export_to_erp / export_to_erp.php
1 <?
2 /***************************************************************
3 *Author: Holger Lindemann
4 *Copyright: (c) 2004 Lx-System
5 *License: non free
6 *eMail: info@lx-system.de
7 *Version: 1.0.1
8 *Shop: PHPeppershop 1.5
9 *ERP: kivitendo ERP
10 ***************************************************************/
11 // -----------------------------------------------------------------------
12 // Damit jedes andere Modul ueberpruefen kann ob dieses hier schon "included" ist
13 // wird folgende Vairable auf true gesetzt (Name = Ext. Modulname + Dateiname ohne .php)
14 $erp_export_erp_export = true;
15
16 ?>
17 <html>
18         <head><title>Lx-ERP Export der Shopartikel</title>
19         <link type="text/css" REL="stylesheet" HREF="css/main.css"></link>
20         <script language="JavaScript">
21         <!--
22                 function pepper() {
23                 }
24         //-->
25         </script>
26 <body>
27
28 <?php
29 $inip=get_cfg_var("include_path");
30 ini_set("include_path",$inip.":/usr/share/pear/:.");
31
32 require_once "DB.php";
33 require_once "conf.php";
34
35 $db=DB::connect($SHOPdns);
36 if (!$db) dbFehler("",$db->getDebugInfo());
37 if (DB::isError($db)) {
38         dbFehler("",$db->getDebugInfo());
39         die ($db->getDebugInfo());
40 };
41 $db2=DB::connect($ERPdns);
42 if (!$db2) dbFehler("",$db2->getDebugInfo());
43 if (DB::isError($db2)) {
44         dbFehler("",$db2->getDebugInfo());
45         die ($db2->getDebugInfo());
46 };
47 /****************************************************
48 * dbFehler
49 * in: sql,err = string
50 * out:
51 * Fehlermeldungen ausgeben
52 *****************************************************/
53 function dbFehler($sql,$err) {
54 global $showErr;
55         if ($showErr)
56                 echo "</td></tr></table><font color='red'>$sql : $err</font><br>";
57 }
58 function checkBestellung($status) {
59 global $db;
60         if ($status=="B") { $where="";}  // B = alle Bestellungeb, N = neue, Y = alte
61         else { $where="where Bestellung_bezahlt = '$status'";}
62         $sql="select * from bestellung $where order by Datum";
63         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
64         return (count($rs)>0)?count($rs):false;
65 }
66 function getBestellKunde($BID) {
67 global $db;
68         $sql="select * from kunde left join bestellung_kunde on Kunden_ID=FK_Kunden_ID where  FK_Bestellungs_ID=$BID";
69         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
70         return $rs[0]["Kunden_Nr"];
71 }
72 function sonderkosten($transID,$data,$id,$f) {
73 global $db2,$versand,$nachn,$minder,$treuh,$paypal;
74         $sql="insert into orderitems (trans_id, parts_id, description, qty, sellprice, unit, ship, discount) values (";
75         $sql.=$transID.",".${$id}["ID"].",'".${$id}["TXT"]."',1,".$data.",'mal',0,0)";
76         fputs($f,"$transID,".${$id}["ID"].",'".${$id}["TXT"]."',1,$data\n");
77         if (!$db2->query($sql)) { return false; }
78         else { return true; };
79 }
80 function insBestArtikel($zeile,$transID) {
81 global $db,$db2,$div07,$div16,$f,
82         $versandID,$nachnID,$minderID,$treuhID,$paypalID;
83         $BID=$zeile["Bestellungs_ID"];
84         $sql ="select * from artikel left join artikel_bestellung on Artikel_ID=FK_Artikel_ID ";
85         $sql.="left join bestellung on Bestellungs_ID=FK_Bestellungs_ID where Bestellungs_ID=$BID";
86         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
87         $ok=true;
88         foreach ($rs as $zeile) {
89                 $sql="select * from parts where partnumber='".$zeile["Artikel_Nr"]."'";
90                 $rs2=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
91                 if ( $rs2[0]["id"]) {$artID=$rs2[0]["id"]; }
92                 else { $artID=($zeile["MwSt_Satz"]=="7")?$div07["ID"]:$div16["ID"]; };
93                 //$preis=round($zeile["Preis"]/($zeile["MwSt_Satz"]+100)*100,2);
94                 $preis=$zeile["Preis"];
95                 $notes=$zeile["Artikelname"];
96                 $vari=split(chr(254),$zeile["Variation"]);
97                 if ($vari) { for($cnt=0; $cnt<count($vari); $cnt++) {
98                                 $notes.="\n".$vari[$cnt];
99                                 $cnt++;
100                                 $preis+=trim($vari[$cnt]) * $zeile["Anzahl"];
101                         }
102                 };
103                 $opts=split(chr(254),$zeile["Optionen"]);
104                 if ($opts) { for($cnt=0; $cnt<count($opts); $cnt++) {
105                                 $notes.="\n".$opts[$cnt];
106                                 $cnt++;
107                                 $preis+=trim($opts[$cnt]) * $zeile["Anzahl"];
108                         }
109                 }               
110                 $sql="insert into orderitems (trans_id, parts_id, description, qty, sellprice, unit, ship, discount) values (";
111                 $sql.=$transID.",".$artID.",'".$notes."',".$zeile["Anzahl"].",".$preis.",'Stck',0,0)";
112                 if (!$db2->query($sql)) { $ok=false; break; };
113                 fputs($f,$transID.",".$artID.",'".$zeile["Artikelname"]."',".$zeile["Anzahl"].",".$preis."\n");
114                 echo "-".$artID." ".$zeile["Anzahl"]." x ".$preis." ".$zeile["Artikelname"]."<br>";
115         }
116         if ($zeile["Versandkosten"]) {
117                 $rc=sonderkosten($transID,$zeile["Versandkosten"],"versand",$f);
118         }
119         if ($zeile["Nachnamebetrag"]) {
120                 $rc=sonderkosten($transID,$zeile["Nachnamebetrag"],"nachn",$f);
121         }       
122         if ($zeile["Mindermengenzuschlag"]) {
123                 $rc=sonderkosten($transID,$zeile["Mindermengenzuschlag"],"minder",$f);
124         }       
125         if ($zeile["Treuhandkosten"]) {
126                 $rc=sonderkosten($transID,$zeile["Treuhandkosten"],"treuh",$f);
127         }       
128         if ($zeile["Paypalkosten"]) {
129                 $rc=sonderkosten($transID,$zeile["Paypalkosten"],"paypal",$f);
130         }       
131         if ($ok) {
132                 $sql="update bestellung set Bestellung_bezahlt='Y' WHERE Bestellungs_ID =$BID";
133                 $rc=$db->query($sql);
134                 fputs($f,"ok\n");
135                 return true;
136         } else {
137                 $sql="delete from orderitems where trans_id=$transID";
138                 $rc=$db->query($sql);
139                 $sql="delete from oe where id=$transID";
140                 $rc=$db->query($sql);
141                 fputs($f,"Fehler (insBestArtikel)!!!!\n");
142                 return false;
143         }
144 }
145 function getBestellung_() {
146 global $db,$db2,$ERPusr,$f;
147         $sql="select * from bestellung where Bestellung_bezahlt='N' order by Bestellungs_ID";
148         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
149         $ok=true;
150         foreach ($rs as $zeile) {
151                 $kdnr=getBestellKunde($zeile["Bestellungs_ID"]);
152                 $newID=uniqid (rand());
153                 $sql="insert into oe (notes) values ('$newID')";
154                 $rc=$db2->query($sql);
155                 $sql="select * from oe where notes = '$newID'";
156                 $rs2=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
157                 $Bezahlung=$zeile["Bezahlungsart"];
158                 if ($Bezahlung=="Lastschrift") {
159                         $sql="select * from kunde where Kunden_Nr=$kdnr";
160                         $kd=$db->getAll($sql,DB_FETCHMODE_ASSOC);
161                         $Bezahlung.="\nKontoinhaber: ".$kd[0]["kontoinhaber"]."\n";
162                         $Bezahlung.="Bankname: ".$kd[0]["bankname"]."\n";
163                         $Bezahlung.="Blz: ".$kd[0]["blz"]."\n";
164                         $Bezahlung.="KontoNr: ".$kd[0]["kontonummer"];
165                 }
166                 $sql ="update oe set ordnumber=".$zeile["Bestellungs_ID"].", transdate='".$zeile["Datum"]."', intnotes='".$zeile["Anmerkung"];
167                 $sql.="', customer_id=$kdnr, amount=".($zeile["Rechnungsbetrag"]+$zeile["MwSt"]).", netamount=".$zeile["Rechnungsbetrag"];
168                 $sql.=", reqdate='".$zeile["Datum"]."', notes='$Bezahlung', taxincluded='f', curr='EUR',employee_id=".$ERPusr["ID"].", vendor_id=0 ";
169                 $sql.="where id=".$rs2[0]["id"];
170                 $rc=$db2->query($sql);
171                 fputs($f,"ordnumber=".$zeile["Bestellungs_ID"].", transdate='".$zeile["Datum"]."', customer_id=$kdnr, amount=".($zeile["Rechnungsbetrag"]+$zeile["MwSt"]).", notes=".$zeile["Bezahlungsart"]."\n");
172                 echo $rs2[0]["id"]."<br>";
173                 if (!insBestArtikel($zeile,$rs2[0]["id"])) { $ok=false; break; };
174         }
175         return $ok;
176 }
177 function chkKdData($data) {
178 global $db2;
179         $sql="select * from customer where id = ".$data["Kunden_Nr"];
180         $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
181         if ($rs[0]["zipcode"]<>$data["Plz"]) $set.="zipcode='".$data["Plz"]."',";
182         if ($rs[0]["city"]<>$data["Ort"]) $set.="city='".$data["Ort"]."',";
183         if ($rs[0]["land"]<>$data["Land"]) $set.="land='".$data["Land"]."',";
184         if ($rs[0]["phone"]<>$data["Tel"])$set.="phone='".$data["Tel"]."',";
185         if ($rs[0]["fax"]<>$data["Fax"])  $set.="fax='".$data["Fax"]."',";
186         if ($rs[0]["email"]<>$data["Email"])$set.="email='".$data["Email"]."',";
187         if ($rs[0]["notes"]<>$data["Beschreibung"])$set.="notes='".$data["Beschreibung"]."',";
188         if ($data["Firma"]) {
189                 if ($rs[0]["name"]<>$data["Firma"]) $set.="set name='".$data["Firma"]."',";
190                 if ($rs[0]["name2"]<>$data["Anrede"]." ".$data["Vorname"]." ".$data["Nachname"]) $set.="name2='".$data["Anrede"]." ".$data["Vorname"]." ".$data["Nachname"]."',";
191         } else {
192                 if ($rs[0]["name"]<>$data["Nachname"].", ".$data["Vorname"]) $set.="set name='".$data["Nachname"].", ".$data["Vorname"]."',";
193         }
194         if ($data["Strasse"]) {
195                 if ($rs[0]["street"]<>$data["Strasse"]) $set.="street='".$data["Strasse"]."',";
196         } else if ($data["Postfach"]) {
197                 if ($rs[0]["street"]<>$data["Postfach"]) $set.="street='".$data["Postfach"]."',";
198         };
199         if ($set) {
200                 $sql="update customer set ".substr($set,0,-1)." where id=".$rs[0]["id"];
201                 $rc=$db2->query($sql);
202         }
203 }
204 function insKdData($data) {
205 global $db2;
206         $newID=$data["Kunden_ID"];
207         $sql="insert into customer (name) values ('$newID')";
208         $rc=$db2->query($sql);
209         $sql="select * from customer where name = '$newID'";
210         $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
211         if ($data["Firma"]) { $set.="set name='".$data["Firma"]."',name2='".$data["Anrede"]." ".$data["Vorname"]." ".$data["Nachname"]."',"; }
212         else { $set.="set name='".$data["Nachname"].", ".$data["Vorname"]."',"; }
213         if ($data["Strasse"]) { $set.="street='".$data["Strasse"]."',"; }
214         else if ($data["Postfach"]) { $set.="street='".$data["Postfach"]."',"; };
215         $set.="zipcode='".$data["Plz"]."',";
216         $set.="city='".$data["Ort"]."',";
217         $set.="land='".$data["Land"]."',";
218         $set.="phone='".$data["Tel"]."',";
219         $set.="fax='".$data["Fax"]."',";
220         $set.="email='".$data["Email"]."',";
221         $set.="notes='".$data["Beschreibung"]."',";
222         $set.="taxincluded='f' ";
223         $sql="update customer ".$set;
224         $sql.="where id=".$rs[0]["id"];
225         $rc=$db2->query($sql);
226         return $rs[0]["id"];
227 }
228 function checkKunde() {
229 global $db,$f;
230         $sql="select * from kunde left join bestellung_kunde on FK_Kunden_ID=Kunden_ID left join bestellung on Bestellungs_ID=FK_Bestellungs_ID where Bestellung_bezahlt='N'";
231         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
232         $ok=true;
233         $anzahl=count($rs);
234         $neu=0; $old=0;
235         foreach ($rs as $zeile) {
236                 if ($zeile["Kunden_Nr"]>0) {
237                         chkKdData($zeile);
238                         $old++;
239                 } else {
240                         $zeile["Kunden_Nr"]=insKdData($zeile);
241                         if ($zeile["Kunden_Nr"]>0) {
242                                 $sql="update kunde set Kunden_Nr='".$zeile["Kunden_Nr"]."' where k_ID=".$zeile["k_ID"];
243                                 $rc=$db->query($sql);
244                         } else {
245                                 $ok=false; break;
246                         }
247                         $neu++;
248                 }
249                 fputs($f,$zeile["Nachname"]." ".$zeile["Firma"]."\n");
250                 fputs($f,"\n----------------------------------------\n\n");
251         }
252         return ($ok)?array($anzahl,$neu,$old):false;
253 }
254
255 function savedata($str) {
256 global $f;
257         foreach ($str as $val) {
258                 $str.=$val.",";
259         }
260         fputs($f,substr($str,0,-1)."\n");
261 }
262
263 $f=fopen("./module/export_to_erp/tmp/".date("y-m-dH:i").".shop","w");
264 $ok=checkBestellung("N");
265 if ($ok) {
266         echo "Es liegen $ok Bestellungen vor. <br>";
267         fputs($f,"Es liegen $ok Bestellungen vor. \n");
268         $ok=checkKunde();
269         if ($ok) {
270                 echo $ok[0]." Kunden, davon ".$ok[1]." neue(r) Kunde(n).<br>";
271                 fputs($f,$ok[0]." Kunden, davon ".$ok[1]." neue(r) Kunde(n).\n");
272                 $ok=getBestellung_();
273                 if ($ok) { echo "Daten transferiert!";  fputs($f,"Daten transferiert!\n");}
274                 else { echo "Fehler (Bestellungen)! ! ! ";   fputs($f,"Fehler (Bestellungen)! ! !\n");};
275         } else {
276                  echo "Fehler (Kunden)! ! ! ";   fputs($f,"Fehler (Kunden)! ! !\n");
277         }
278 } else { echo "Keine Bestellungen!<br>";  fputs($f,"keine Bestellungen\n");};
279
280 fclose($f);
281
282 if ($backlink == 6) {
283     echo "<button type='button' onClick='self.location.href=\"./module_admin_aufruf.php?darstellen=6\"'>Zur&uuml;ck zur Moduladministration</button>";
284 }
285 else {
286     echo "<button type='button' onClick='self.location.href=\"./module_admin_aufruf.php?darstellen=1&".urlencode($window_source)."=".urlencode($previous_selected_module)."\"'>Zur&uuml;ck zur Modulverwaltung</button>";
287 }
288
289 ?>
290 </body>
291 </html>