Beim Umwandeln von Angeboten/Preisanfragen in Aufträge die IDs in record_links speich...
[kivitendo-erp.git] / pepper / pepperexport.php
1 <?
2 /***************************************************************
3 * $Id: pepperexport.php,v 2.0 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.3.0
9 *Shop: PHPeppershop 2.0
10 *ERP: Lx-Office ERP >= 2.2.0
11 ***************************************************************/
12 ?>
13 <html>
14         <head><title>Lx-ERP Export der Shopartikel</title>
15         <link type="text/css" REL="stylesheet" HREF="css/main.css"></link>
16 <body>
17
18 <?php
19 require_once "DB.php";
20 require_once "conf.php";
21 $db=DB::connect($SHOPdns);
22 if (!$db) dbFehler("",$db->getDebugInfo());
23 if (DB::isError($db)) {
24         dbFehler("",$db->getDebugInfo());
25         die ($db->getDebugInfo());
26 };
27 $db2=DB::connect($ERPdns);
28 if (!$db2) dbFehler("",$db2->getDebugInfo());
29 if (DB::isError($db2)) {
30         dbFehler("",$db2->getDebugInfo());
31         die ($db2->getDebugInfo());
32 };
33 /****************************************************
34 * dbFehler
35 * in: sql,err = string
36 * out:
37 * Fehlermeldungen ausgeben
38 *****************************************************/
39 function dbFehler($sql,$err) {
40 global $showErr;
41         if ($showErr)
42                 echo "</td></tr></table><font color='red'>$sql : $err</font><br>";
43 }
44 function checkBestellung($status) {
45 global $db;
46         if ($status=="B") { $where="";}  // B = alle Bestellungeb, N = neue, Y = alte
47         else { $where="where Bestellung_bezahlt = '$status'";}
48         $sql="select * from bestellung $where and Datum is not null  and Bestellung_abgeschlossen = 'Y' order by Datum";
49         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
50         return (count($rs)>0)?count($rs):false;
51 }
52 function getBestellKunde($BID) {
53 global $db;
54         $sql="select * from kunde left join bestellung_kunde on Kunden_ID=FK_Kunden_ID where  FK_Bestellungs_ID=$BID";
55         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
56         return $rs[0]["Kunden_Nr"];
57 }
58 function sonderkosten($transID,$data,$id,$f) {
59 global $db2,$versand,$nachn,$minder,$treuh,$paypal;
60         $sql="insert into orderitems (trans_id, parts_id, description, qty, sellprice, unit, ship, discount) values (";
61         $sql.=$transID.",".${$id}["ID"].",'".${$id}["TXT"]."',1,".$data.",'mal',0,0)";
62         fputs($f,"$transID,".${$id}["ID"].",'".${$id}["TXT"]."',1,$data\n");
63         if (!$db2->query($sql)) { return false; }
64         else { return true; };
65 }
66 function insBestArtikel($zeile,$transID) {
67 global $db,$db2,$div07,$div16,$f,
68         $versandID,$nachnID,$minderID,$treuhID,$paypalID;
69         $BID=$zeile["Bestellungs_ID"];
70         $sql ="select * from artikel left join artikel_bestellung on Artikel_ID=FK_Artikel_ID ";
71         $sql.="left join bestellung on Bestellungs_ID=FK_Bestellungs_ID where Bestellungs_ID=$BID";
72         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
73         $ok=true;
74         foreach ($rs as $zeile) {
75                 $sql="select * from parts where partnumber='".$zeile["Artikel_Nr"]."'";
76                 $rs2=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
77                 if ( $rs2[0]["id"]) {$artID=$rs2[0]["id"]; }
78                 else { $artID=($zeile["MwSt_Satz"]=="7")?$div07["ID"]:$div16["ID"]; };
79                 //$preis=round($zeile["Preis"]/($zeile["MwSt_Satz"]+100)*100,2);
80                 $preis=$zeile["Preis"];
81                 $notes=$zeile["Artikelname"];
82                 $vari=split(chr(254),$zeile["Variation"]);
83                 if ($vari) { for($cnt=0; $cnt<count($vari); $cnt++) {
84                                 $notes.="\n".$vari[$cnt];
85                                 $cnt++;
86                                 $preis+=trim($vari[$cnt]) * $zeile["Anzahl"];
87                         }
88                 };
89                 $opts=split(chr(254),$zeile["Optionen"]);
90                 if ($opts) { for($cnt=0; $cnt<count($opts); $cnt++) {
91                                 $notes.="\n".$opts[$cnt];
92                                 $cnt++;
93                                 $preis+=trim($opts[$cnt]) * $zeile["Anzahl"];
94                         }
95                 }
96                 if ($zeile["Zusatztexte"]) {
97                         $zusatz=strtr($zeile["Zusatztexte"],"þ","\n");
98                         $notes.="\n".$zusatz;
99                 }
100                 $sql="insert into orderitems (trans_id, parts_id, description, qty, sellprice, unit, ship, discount) values (";
101                 $sql.=$transID.",".$artID.",'".$notes."',".$zeile["Anzahl"].",".$preis.",'Stck',0,0)";
102                 $rc=$db2->query($sql);
103                 if (!$rc) { $ok=false; break; };
104                 fputs($f,$transID.",".$artID.",'".$zeile["Artikelname"]."',".$zeile["Anzahl"].",".$preis."\n");
105                 echo " - Artikel:[ BuNr.:$artID ArtNr:<b> ".$zeile["Anzahl"]." x ".$zeile["Artikel_Nr"]."</b> :".$zeile["Artikelname"]." ]<br>";
106         }
107         if ($zeile["Versandkosten"] && $ok) {
108                 $ok=sonderkosten($transID,$zeile["Versandkosten"],"versand",$f);
109         }
110         if ($zeile["Nachnamebetrag"] && $ok) {
111                 $ok=sonderkosten($transID,$zeile["Nachnamebetrag"],"nachn",$f);
112         }
113         if ($zeile["Mindermengenzuschlag"] && $ok) {
114                 $ok=sonderkosten($transID,$zeile["Mindermengenzuschlag"],"minder",$f);
115         }
116         if ($zeile["Treuhandkosten"] && $ok) {
117                 $ok=sonderkosten($transID,$zeile["Treuhandkosten"],"treuh",$f);
118         }
119         if ($zeile["Paypalkosten"] && $ok) {
120                 $ok=sonderkosten($transID,$zeile["Paypalkosten"],"paypal",$f);
121         }
122         if ($ok) {
123                 $sql="update bestellung set Bestellung_bezahlt='Y' WHERE Bestellungs_ID =$BID";
124                 $rc=$db->query($sql);
125                 fputs($f,"ok\n");
126                 return true;
127         } else {
128                 $sql="delete from orderitems where trans_id=$transID";
129                 $rc=$db->query($sql);
130                 $sql="delete from oe where id=$transID";
131                 $rc=$db->query($sql);
132                 fputs($f,"Fehler (insBestArtikel)!!!!\n");
133                 return false;
134         }
135 }
136 function getNextAnr() {
137 global $db2;
138         $sql="select * from defaults";
139         $sql1="update defaults set sonumber=";
140         $rc=$db2->query("BEGIN");
141         $rs2=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
142         $auftrag=$rs2[0]["sonumber"]+1;
143         $rc=$db2->query($sql1.$auftrag);
144         $rc=$db2->query("COMMIT");
145         return $auftrag;
146 }
147 function getNextKnr() {
148 global $db2;
149         $sql="select * from defaults";
150         $sql1="update defaults set customernumber='";
151         $rc=$db2->query("BEGIN");
152         $rs2=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
153         $kdnr=$rs2[0]["customernumber"]+1;
154         $rc=$db2->query($sql1.$kdnr."'");
155         $rc=$db2->query("COMMIT");
156         return $kdnr;
157 }
158 function getBestellung() {
159 global $db,$db2,$ERPusr,$f,$preA,$auftrnr;
160         $sql="select * from bestellung where Bestellung_bezahlt='N' order by Bestellungs_ID";
161         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
162         $ok=true;
163         foreach ($rs as $zeile) {
164                 $kdnr=getBestellKunde($zeile["Bestellungs_ID"]);
165                 echo "Kunde:[ Buchungsnummer:$kdnr ] ";
166                 $newID=uniqid (rand());
167                 if (ereg("&r=([0-9]+)",$zeile["Bestellung_string"],$refnr)) {
168                         $refnr=$refnr[1];
169                 } else {
170                         $refnr=$zeile["Bestellungs_ID"];
171                 }
172                 if ($auftrnr) {
173                         $anr=$preA.getNextAnr();
174                 } else {
175                         $anr=$preA.$refnr;
176                 }
177                 $sql="insert into oe (notes,ordnumber,cusordnumber) values ('$newID','$anr','$refnr')";
178                 $rc=$db2->query($sql);
179                 $sql="select * from oe where notes = '$newID'";
180                 $rs2=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
181                 $Bezahlung=$zeile["Bezahlungsart"];
182                 if ($Bezahlung=="Lastschrift") {
183                         $sql="select * from kunde where Kunden_Nr=$kdnr";
184                         $kd=$db->getAll($sql,DB_FETCHMODE_ASSOC);
185                         $Bezahlung.="\nKontoinhaber: ".$kd[0]["kontoinhaber"]."\n";
186                         $Bezahlung.="Bankname: ".$kd[0]["bankname"]."\n";
187                         $Bezahlung.="Blz: ".$kd[0]["blz"]."\n";
188                         $Bezahlung.="KontoNr: ".$kd[0]["kontonummer"];
189                 }
190                 $sql ="update oe set transdate='".$zeile["Datum"]."', intnotes='".$zeile["Anmerkung"];
191                 $sql.="', customer_id=$kdnr, amount=".$zeile["Rechnungsbetrag"].", netamount=".($zeile["Rechnungsbetrag"]-$zeile["MwSt"]);
192                 $sql.=", reqdate='".$zeile["Datum"]."', notes='$Bezahlung', taxincluded='f', curr='EUR',employee_id=".$ERPusr["ID"].", vendor_id=0 ";
193                 $sql.="where id=".$rs2[0]["id"];
194                 $rc=$db2->query($sql);
195                 fputs($f,"ordnumber=".$zeile["Bestellungs_ID"].", transdate='".$zeile["Datum"]."', customer_id=$kdnr, amount=".($zeile["Rechnungsbetrag"]+$zeile["MwSt"]).", notes=".$zeile["Bezahlungsart"]."\n");
196                 echo "Auftrag:[ Buchungsnummer:".$rs2[0]["id"]." AuftrNr:<b>".$anr."</b> ]<br>";
197                 if (!insBestArtikel($zeile,$rs2[0]["id"])) { $ok=false; echo " Fehler<br>"; break; } else { echo " ok<br>"; };
198         }
199         return $ok;
200 }
201 function chkKdData($data) {
202 global $db2;
203         $sql="select * from customer where id = ".$data["Kunden_Nr"];
204         $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
205         if ($rs[0]["zipcode"]<>$data["PLZ"]) $set.="zipcode='".$data["PLZ"]."',";
206         if ($rs[0]["city"]<>$data["Ort"]) $set.="city='".$data["Ort"]."',";
207         if ($rs[0]["country"]<>$data["Land"]) $set.="country='".$data["Land"]."',";
208         if ($rs[0]["phone"]<>$data["Tel"])$set.="phone='".$data["Tel"]."',";
209         if ($rs[0]["fax"]<>$data["Fax"])  $set.="fax='".$data["Fax"]."',";
210         if ($rs[0]["email"]<>$data["Email"])$set.="email='".$data["Email"]."',";
211         if ($rs[0]["notes"]<>$data["Beschreibung"])$set.="notes='".$data["Beschreibung"]."',";
212         if ($data["Firma"]) {
213                 if ($rs[0]["name"]<>$data["Firma"]) $set.="set name='".$data["Firma"]."',";
214                 if ($rs[0]["contact"]<>$data["Vorname"]." ".$data["Nachname"]) $set.="contact='".$data["Vorname"]." ".$data["Nachname"]."',";
215         } else {
216                 if ($rs[0]["name"]<>$data["Nachname"].", ".$data["Vorname"]) $set.="set name='".$data["Nachname"].", ".$data["Vorname"]."',";
217         }
218         if ($data["Strasse"]) {
219                 if ($rs[0]["street"]<>$data["Strasse"]) $set.="street='".$data["Strasse"]."',";
220         } else if ($data["Postfach"]) {
221                 if ($rs[0]["street"]<>$data["Postfach"]) $set.="street='".$data["Postfach"]."',";
222         };
223         if ($set) {
224                 $sql="update customer set ".substr($set,0,-1)." where id=".$rs[0]["id"];
225                 $rc=$db2->query($sql);
226         }
227 }
228 function insKdData($data) {
229 global $db2,$preK,$kdnum;
230         $newID=$data["Kunden_ID"];
231         if ($kdnum==1) {
232                 $kdnr=$preK.getNextKnr();
233         } else {
234                 $kdnr=$preK.$data["customers_id"];
235         }
236         $sql="insert into customer (name,customernumber) values ('$newID','$kdnr')";
237         $rc=$db2->query($sql);
238         $sql="select * from customer where name = '$newID'";
239         $rs=$db2->getAll($sql,DB_FETCHMODE_ASSOC);
240         if ($data["Firma"]) { $set.="set name='".$data["Firma"]."',contact='".$data["Vorname"]." ".$data["Nachname"]."',"; }
241         else { $set.="set name='".$data["Nachname"].", ".$data["Vorname"]."',"; }
242         if ($data["Strasse"]) { $set.="street='".$data["Strasse"]."',"; }
243         else if ($data["Postfach"]) { $set.="street='".$data["Postfach"]."',"; };
244         $set.="zipcode='".$data["PLZ"]."',";
245         $set.="city='".$data["Ort"]."',";
246         $set.="country='".$data["Land"]."',";
247         $set.="phone='".$data["Tel"]."',";
248         $set.="fax='".$data["Fax"]."',";
249         $set.="email='".$data["Email"]."',";
250         $set.="notes='".$data["Beschreibung"]."',";
251         $set.="taxincluded='f' ";
252         $sql="update customer ".$set;
253         $sql.="where id=".$rs[0]["id"];
254         $rc=$db2->query($sql);
255         return $rs[0]["id"];
256 }
257 function checkKunde() {
258 global $db,$f;
259         $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'";
260         $rs=$db->getAll($sql,DB_FETCHMODE_ASSOC);
261         $ok=true;
262         $anzahl=count($rs);
263         $neu=0; $old=0;
264         foreach ($rs as $zeile) {
265                 if ($zeile["Kunden_Nr"]>0) {
266                         chkKdData($zeile);
267                         $old++;
268                 } else {
269                         $zeile["Kunden_Nr"]=insKdData($zeile);
270                         if ($zeile["Kunden_Nr"]>0) {
271                                 $sql="update kunde set Kunden_Nr='".$zeile["Kunden_Nr"]."' where k_ID=".$zeile["k_ID"];
272                                 $rc=$db->query($sql);
273                         } else {
274                                 $ok=false; break;
275                         }
276                         $neu++;
277                 }
278                 fputs($f,$zeile["Nachname"]." ".$zeile["Firma"]."\n");
279                 fputs($f,"\n----------------------------------------\n\n");
280         }
281         return ($ok)?array($anzahl,$neu,$old):false;
282 }
283
284 function savedata($str) {
285 global $f;
286         foreach ($str as $val) {
287                 $str.=$val.",";
288         }
289         fputs($f,substr($str,0,-1)."\n");
290 }
291
292 $f=fopen("tmp/".date("y-m-dH:i").".shop","w");
293 $ok=checkBestellung("N");
294 if ($ok) {
295         echo "Es liegen $ok Bestellungen vor. <br>";
296         fputs($f,"Es liegen $ok Bestellungen vor. \n");
297         $ok=checkKunde();
298         if ($ok) {
299                 echo $ok[0]." Kunden, davon ".$ok[1]." neue(r) Kunde(n).<br>";
300                 fputs($f,$ok[0]." Kunden, davon ".$ok[1]." neue(r) Kunde(n).\n");
301                 $ok=getBestellung();
302                 if ($ok) { echo "Daten transferiert!";  fputs($f,"Daten transferiert!\n");}
303                 else { echo "Fehler (Bestellungen)! ! ! ";   fputs($f,"Fehler (Bestellungen)! ! !\n");};
304         } else {
305                  echo "Fehler (Kunden)! ! ! ";   fputs($f,"Fehler (Kunden)! ! !\n");
306         }
307 } else { echo "Keine Bestellungen!<br>";  fputs($f,"keine Bestellungen\n");};
308
309 fclose($f);
310
311 ?>
312 <!--br><a href="trans.php">zur&uuml;ck</a-->
313 </body>
314 </html>