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