Fix für Bug 1136. Die Prüfung für not_discountable war zu früh. Zunächst muss form...
[kivitendo-erp.git] / xtcom / shoplib.php
1 <?php
2
3
4 $login=$_GET["login"];
5 $debug=false;
6 require_once "DB.php";
7 if (file_exists ("conf$login.php")) {
8         require "conf$login.php";
9 } else {
10         require "conf.php";
11 }
12
13 $landarray=array("DEUTSCHLAND"=>"D","STEREICH"=>"A","OESTEREICH"=>"A","SCHWEIZ"=>"CH");
14 $taxarray=array("D"=>0,"A"=>1,"CH"=>2);
15 $defaultland="D";
16 $taxid=0;
17 $log=false;
18 $erp=false;
19 $shop=false;
20
21 //$PGdns = "user='$ERPuser' password='$ERPpass' host='$ERPhost' dbname='$ERPdbname' port='$ERPport'";
22
23 $ERPdns= array('phptype'  => 'pgsql',
24                'username' => $ERPuser,
25                'password' => $ERPpass,
26                'hostspec' => $ERPhost,
27                'database' => $ERPdbname,
28                'port'     => $ERPport);
29
30 $SHOPdns=array('phptype'  => 'mysql',
31                'username' => $SHOPuser,
32                'password' => $SHOPpass,
33                'hostspec' => $SHOPhost,
34                'database' => $SHOPdbname,
35                'port'     => $SHOPport);
36
37 /****************************************************
38 * Debugmeldungen in File schreiben
39 ****************************************************/
40 if ($debug) { $log=fopen("tmp/shop.log","a"); } // zum Debuggen
41 else { $log=false; };
42
43
44
45 /****************************************************
46 * Shopverbindung aufbauen
47 ****************************************************/
48 $shop=DB::connect($SHOPdns);
49 if (!$shop) shopFehler("",$shop->getDebugInfo());
50 if (DB::isError($shop)) {
51         $nun=date("Y-m-d H:i:s");
52         if ($log) fputs($log,$nun.": Shop-Connect\n");
53         shopFehler("",$shop->getDebugInfo());
54         die ($shop->getDebugInfo());
55 };
56
57 /****************************************************
58 * ERPverbindung aufbauen
59 ****************************************************/
60 $erp=DB::connect($ERPdns);
61 if (!$erp) shopFehler("",$erp->getDebugInfo());
62 if (DB::isError($erp)) {
63         $nun=date("Y-m-d H:i:s");
64         if ($log) fputs($log,$nun.": ERP-Connect\n");
65         shopFehler("",$erp->getDebugInfo());
66         die ($erp->getDebugInfo());
67 } else {
68         $erp->autoCommit(true);
69 };
70
71
72 /****************************************************
73 * SQL-Befehle absetzen
74 ****************************************************/
75 function query($db,$sql,$function="--") {
76         $nun=date("d.m.y H:i:s");
77         //if ($db<>"shop") { echo "$sql!$db!<br>"; flush(); };
78         if ($GLOBALS["log"]) fputs($GLOBALS["log"],$nun.": ".$function."\n".$sql."\n");
79         $rc=$GLOBALS[$db]->query($sql);
80         if ($GLOBALS["log"]) fputs($GLOBALS["log"],print_r($rc,true)."\n");
81         if ($rc!==1) {
82             return -99;
83         } else {
84             return true;
85         }
86 }
87
88 /****************************************************
89 * Datenbank abfragen
90 ****************************************************/
91 function getAll($db,$sql,$function="--") {
92         $nun=date("d.m.y H:i:s");
93         if ($GLOBALS["log"]) fputs($GLOBALS["log"],$nun.": ".$function."\n".$sql."\n");
94         $rs=$GLOBALS[$db]->getAll($sql,DB_FETCHMODE_ASSOC);
95         if ($rs["message"]<>"") {
96                 if ($GLOBALS["log"]) fputs($GLOBALS["log"],print_r($rs,true)."\n");
97                 return false;
98         } else {
99                 return $rs;
100         }
101 }
102
103 /****************************************************
104 * shopFehler
105 * in: sql,err = string
106 * out:
107 * Fehlermeldungen ausgeben
108 *****************************************************/
109 function shopFehler($sql,$err) {
110 global $showErr;
111         if ($showErr)
112                 echo "</td></tr></table><font color='red'>$sql : $err</font><br>";
113 }
114
115 /****************************************************
116 * Nächste Auftragsnummer (ERP) holen
117 ****************************************************/
118 function getNextAnr() {
119         $sql="select * from defaults";
120         $sql1="update defaults set sonumber=";
121         $rs2=getAll("erp",$sql,"getNextAnr");
122         if ($rs2[0]["sonumber"]) {
123                 $auftrag=$rs2[0]["sonumber"]+1;
124                 $rc=query("erp",$sql1.$auftrag,"getNextAnr");
125                 if ($rc === -99) {
126                         echo "Kann keine Auftragsnummer erzeugen - Abbruch";
127                         exit();
128                 }
129                 return $auftrag;
130         } else {
131                 return false;
132         }
133 }
134
135 /****************************************************
136 * Nächste Kundennummer (ERP) holen
137 ****************************************************/
138 function getNextKnr() {
139         $sql="select * from defaults";
140         $sql1="update defaults set customernumber='";
141         $rs2=getAll("erp",$sql,"getNextKnr");
142         if ($rs2[0]["customernumber"]) {
143                 $kdnr=$rs2[0]["customernumber"]+1;
144                 $rc=query("erp",$sql1.$kdnr."'","getNextKnr");
145                 if ($rc === -99) {
146                         echo "Kann keine Kundennummer erzeugen - Abbruch";
147                         exit();
148                 }
149                 return $kdnr;
150         } else {
151                 return false;
152         }
153 }
154
155
156 //$shopdata=array("firma"=>"","abteilung"=>"","vorname"=>"","nachname"=>"","strasse"=>"","plz"=>"","ort"=>"","telefon"=>"","email"=>"","land"=>"","fax"=>"","notiz"=>"","postfach"=>"")
157 $shopdata=array(        "id"=>"customers_id","kdnr"=>"customers_cid","bid"=>"orders_id", "anrede"=>" customers_gender",
158                         "firma"=>"customers_company", "nachname"=>"customers_lastname", "vorname"=>"customers_firstname",
159                         "strasse"=>"customers_street_address","plz"=>"customers_postcode","ort"=>"customers_city","land"=>"customers_country",
160                         "telefon"=>"customers_phone","email"=>"customers_email_address","fax"=>"Fax","notiz"=>"comments",
161
162                         "netto"=>"ot_subtotal","steuer"=>"ot_tax","datum"=>" date_purchased","bemerkung"=>"comments",
163                         "artnr"=>"products_id","preis"=>"final_price","artikeltxt"=>" products_name","menge"=>" products_quantity");
164
165 $shopartikel=array(     "id"=>"Artikel_ID","artnr"=>"Artikel_Nr","arttxt"=>"Name","artbeschr"=>"Beschreibung","gruppe"=>"Kategorie_ID",
166                         "preis"=>"Preis","preis2"=>"Haendlerpreis","preis3"=>"Aktionspreis","gewicht"=>"Gewicht",
167                         "bild"=>"Bild_gross","bestand"=>"Lagerbestand","minbestand"=>"Mindestlagermenge","steuer"=>"MwSt_Satz");
168
169
170 /****************************************************
171 * Ab hier Artikelexport aus ERP
172 ****************************************************/
173 // Ab hier Artikelexport aus ERP nur eine Sprache
174 function shopartikellang($lang,$alle) {
175         $sql="SELECT P.partnumber,L.translation,P.description,L.longdescription,P.notes,PG.partsgroup ";
176         $sql.="FROM parts P left join translation L on L.parts_id=P.id left join partsgroup PG on PG.id=P.partsgroup_id ";
177         $sql.="WHERE P.shop='t' and (L.language_id = $lang";
178         if ($alle) {
179                 $sql.=" or L.language_id is Null)";
180         } else { $sql.=")"; };
181         $rs=getAll("erp",$sql,"shopartikellang");
182         $data=array();
183         if ($rs) foreach ($rs as $row) {
184                 if (!$data[$row["partnumber"]]) $data[$row["partnumber"]]=$row;
185         }
186         return $data;
187 }
188 // Ab hier alle Artikelexport aus ERP Defaultsprache
189 function shopartikel() {
190 global $stdprice,$altprice;
191         if ($stdprice>0) {
192                 $sql="SELECT P.partnumber,P.description,P.weight,(t.rate * 100) as rate,G.price as sellprice,P.sellprice as stdprice, ";
193                 $sql.="PG.partsgroup,P.notes,P.image,P.onhand,G.pricegroup_id,P.buchungsgruppen_id as bugru FROM ";
194                 $sql.="chart c left join tax t on c.taxkey_id=t.taxkey, parts P left join partsgroup PG on ";
195                 $sql.="PG.id=P.partsgroup_id left join prices G on G.parts_id=P.id ";
196                 $sql.="left join buchungsgruppen B  on P.buchungsgruppen_id = B.id ";
197                 $sql.="where P.shop='t' and c.id=B.income_accno_id_0  and ";
198                 $sql.="(G.pricegroup_id=$stdprice or G.pricegroup_id=$altprice or G.pricegroup_id is null) ";
199                 $sql.="order by P.partnumber";
200         } else {
201                 $sql="SELECT P.partnumber,P.description,P.weight,(t.rate * 100) as rate,P.sellprice,PG.partsgroup,";
202                 $sql.="P.notes,P.image,P.onhand,P.buchungsgruppen_id as bugru FROM ";
203                 $sql.="chart c left join tax t on c.taxkey_id=t.taxkey, parts P left join partsgroup PG on ";
204                 $sql.="PG.id=P.partsgroup_id left join buchungsgruppen B  on P.buchungsgruppen_id = B.id ";
205                 $sql.="WHERE P.shop='t'  and c.id=B.income_accno_id_0";
206         }
207         $rs=getAll("erp",$sql,"shopartikel");
208         $i=0;
209         $data=array();
210         if ($rs) foreach ($rs as $row) {
211                 if (!$data[$row["partnumber"]]) $data[$row["partnumber"]]=$row;
212                 if ($row["pricegroup_id"]==$altprice) {
213                         $data[$row["partnumber"]]["altprice"]=($row["sellprice"])?$row["sellprice"]:$row["stdprice"];
214                 } else {
215                         $data[$row["partnumber"]]["sellprice"]=($row["sellprice"])?$row["sellprice"]:$row["stdprice"];
216                 }
217                 $i++;
218         }
219         
220         return $data;
221 }
222
223 /****************************************************
224 * Artikelexport in ERP importieren
225 ****************************************************/
226 function insertArtikel($data) {
227 global $shopartikel;
228         foreach ($data as $row) {
229                 $pg=$GLOBALS["warengruppen"][$row[$shopartikel["gruppe"]]]["partsgroup"];
230                 $bg=$GLOBALS["buchungsgruppen"][sprintf("%0.2f",$row[$shopartikel["steuer"]])];
231                 $artnr=($row[$shopartikel["artnr"]])?$row[$shopartikel["artnr"]]:getArtnr();
232                 $sqltmp="insert into parts (partnumber,description,notes,weight,onhand,rop,image,sellprice,unit,partsgroup_id,buchungsgruppen_id) ";
233                 $sqltmp.="values ('%s','%s','%s',%0.5f,%0.5f,%0.5f,'%s',%0.5f,'%s',%d,%d)";
234                 $sql=sprintf($sqltmp,$artnr,$row[$shopartikel["arttxt"]],$row[$shopartikel["artbeschr"]],
235                                 $row[$shopartikel["gewicht"]],$row[$shopartikel["bestand"]],$row[$shopartikel["minbestand"]],
236                                 $row[$shopartikel["bild"]],$row[$shopartikel["preis"]],$row[$shopartikel["einheit"]],$pg,$bg);
237                 $rc=query("erp",$sql,"insertArtikel");
238                 if ($rc === -99) {
239                         echo $row[$shopartikel["id"]]." ".$row[$shopartikel["arttxt"]]." nicht importiert<br>";
240                 } else {
241                         echo "";
242                 }
243                 echo $sql."<br>";
244         }
245 }
246
247 /****************************************************
248 * Nächste Artikelnummer (ERP) holen
249 ****************************************************/
250 function getArtnr() {
251         $sql="select * from defaults";
252         $sql1="update defaults set articlenumber='";
253         if ($rc === -99) {
254                 echo "Kann keine Artikelnummer erzeugen - Abbruch";
255                 exit();
256         }
257         $rs2=getAll("erp",$sql,"getArtnr");
258         $artnr=$rs2[0]["articelnumber"]+1;
259         $rc=query("erp",$sql1.$artnr."'","getArtnr");
260         if ($rc === -99) {
261                 echo "Kann keine Artikelnummer erzeugen - Abbruch";
262                 $rc=query("erp","ROLLBACK","getArtnr");
263                 exit();
264         }
265         return $artnr;
266 }
267
268 $buchungsgruppen=array();
269 $warengruppen=array();
270
271 function getBugru() {
272         $sql ="select B.id,tax.rate from buchungsgruppen B left join chart on income_accno_id_0=chart.id left join taxkeys T on ";
273         $sql.="T.chart_id=income_accno_id_0 left join tax on tax.id=T.tax_id where T.startdate<=now()";
274         $rs=getAll("erp",$sql,"getBugru");
275         if ($rs) foreach ($rs as $row) {
276                 $steuer=sprintf("%0.2f",$row["rate"]*100);
277                 $GLOBALS["buchungsgruppen"][$steuer]=$row["id"];
278         }
279 }
280
281 $wg=1000;
282
283 function insPartgroup($kat) {
284         $sql="insert into partsgroup () value ()";
285         $GLOBALS["wg"]++;
286         //$rc=query("erp",$sql,"insPartgroup");
287         if ($rc === -99) { return false; }
288         else { return $GLOBALS["wg"]; }
289 }
290 getBugru();
291 ?>