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