Bei doppelten Kontonummern eine verständliche Fehlermeldung ausgeben.
[kivitendo-erp.git] / peppershop / erplib.php
index 28902e9..8b22d42 100644 (file)
@@ -13,6 +13,7 @@ class erp {
 
     var $db = false;
     var $error = false;
+    var $pricegroup = 0;
     var $TAX = false;
     var $mkPart = true;
     var $divStd = false;
@@ -20,14 +21,18 @@ class erp {
     var $doordnr = false;
     var $docustnr = false;
     var $lager = 1;
+    var $warehouse_id = 0;
+    var $transtype = 0;
     var $preordnr = '';
     var $precustnr = '';
     var $OEinsPart = false;
     var $INVnetto = true; //Rechnungen mit Nettopreisen
     var $SHOPincl = true; //Shoppreise sind Brutto
 
-    function erp($db,$error,$divStd,$divVerm,$doordnr,$docustnr,$preordnr,$precustnr,$INVnetto,$SHOPincl,$OEinsPart,$lager) {
+    function erp($db,$error,$divStd,$divVerm,$doordnr,$docustnr,$preordnr,$precustnr,$INVnetto,$SHOPincl,$OEinsPart,$lager,$pricegroup,$ERPusrID) {
         $this->db = $db;
+        $this->pricegroup = $pricegroup;
+        $this->employee_id = $ERPusrID;
         $this->error = $error;
         $this->divStd  = $divStd;
         $this->divVerm = $divVerm;
@@ -40,6 +45,18 @@ class erp {
         $this->OEinsPart = ($OEinsPart == 1)?true:false;
         $this->lager = ($lager)?$lager:1;
         $this->getTax();
+        if ( $lager > 1 ) {
+            $sql  = "SELECT warehouse_id from bin where id = ".$this->lager;
+            $rs = $this->db->getOne($sql);
+            if ( $rs['warehouse_id'] > 0 ) {
+                       $this->warehouse_id = $rs['warehouse_id'];
+                $sql = "SELECT id from transfer_type WHERE direction = 'in' and description = 'stock'";
+                $rs = $this->db->getOne($sql);
+                $this->transtype = $rs['id'];
+            } else {
+                $this->lager = 1;
+            }
+        }
     }
 
     function getTax() {
@@ -52,7 +69,7 @@ class erp {
         $rs = $this->db->getAll($sql);
         if ($rs) foreach ($rs as $row) {
             $nr = $row['bugru'];
-            if (!$this->TAX[$nr]) {
+            if ( !$this->TAX[$nr] || !array_key_exists($nr, $this->TAX) ) {
                 $data = array();
                 $data['startdate'] =     $row['startdate'];
                 $data['rate'] =     $row['rate'];
@@ -171,7 +188,7 @@ class erp {
             $this->db->rollback();
             return false;
         } else {
-            $this->err->out(" Auftrag: ".$data["ordnumber"]." ");
+            $this->error->out(" Auftrag: ".$data["ordnumber"]." ");
             return $rs['id'];
         }
     }
@@ -224,7 +241,7 @@ class erp {
         return true;
     }
     function insCustomer($data) {
-        $this->err->out('Insert:'.$data["name"].' ');
+        $this->error->out('Insert:'.$data["name"].' ');
         if ($this->docustnr == 1) {
             $data['customernumber'] = $this->getNewNr('customer');
         } else {
@@ -239,7 +256,7 @@ class erp {
                 $sql = "SELECT id FROM customer WHERE customernumber = '".$data['customernumber']."'";
                 $rs = $this->db->getOne($sql);
                 $rc = $rs['id'];
-                $this->err->out("Kd-Nr: ".$data['customernumber'].":".$rs['id']);
+                $this->error->out("Kd-Nr: ".$data['customernumber'].":".$rs['id']);
             } else {
                 $this->error->write('erplib','Kunde anlegen: '.$data["name"]);
                 $this->db->rollback();
@@ -252,7 +269,7 @@ class erp {
             $sql = "SELECT * FROM customer WHERE id = ".$data['customer_id'];
             $rs = $this->db->getOne($sql);
             if ($rs['id'] == $data['customer_id']) {
-                 $this->err->out('Update:'.$data['customer_id'].' ');
+                 $this->error->out('Update:'.$data['customer_id'].' ');
                  $sql  = "UPDATE customer SET greeting = :greeting,name = :name,street = :street,city = :city,country = :country,";
                  $sql .= "zipcode = :zipcode,contact = :contact,phone = :phone,email = :email WHERE id = :customer_id";
                  $rc =  $this->db->update($sql,$data);
@@ -295,7 +312,7 @@ class erp {
             $this->error->write('erplib','Auftrag anlegen');
             return -1;
         }
-        $this->err->out($data["customer"]["firma"]." ");
+        $this->error->out($data["customer"]["firma"]." ");
         $rc = $this->db->Commit();
         return $data["customer_id"];
     }
@@ -351,7 +368,7 @@ class erp {
            } else {
                return $rs['id'];
            }
-       } else if ($this->mkPart and $new) {
+       } else if ($new and $this->mkPart) {
            $data['id'] = $this->mkNewPart($data);
            if ($long) {
                return $data;
@@ -369,6 +386,7 @@ class erp {
        $data = array(partnumber,description,longdescription,weight,sellprice,taxrate,partsgroup,unit)
        Rückgabe parts.id
        */
+       $link = '<a href="../ic.pl?action=edit&id=%d" target="_blank">';
        if ($data['partnumber'] == '') {
            $this->error->write('erplib','Artikelnummer fehlt');
            return false;
@@ -408,10 +426,35 @@ class erp {
        $sql .= "VALUES (:partnumber,:description,:sellprice,:weight,:notes,:shop,:unit,:partsgroup_id,";
        $sql .= ":image,:buchungsgruppen_id,1,1,1)";
        $rc = $this->db->insert($sql,$data);
+       $data['parts_id'] = $this->chkPartnumber($data,false);
+       if ( $this->pricegroup > 0 ) {
+            $sql  = "INSERT INTO prices (parts_id,pricegroup_id,price) VALUES (:parts_id,:pricegroup,:shoppreis)";
+            $data['pricegroup'] = $this->pricegroup;
+            $rc = $this->db->insert($sql,$data);
+       };
+       if ( $data['onhand'] > 0 and $this->lager > 1) $this->insLager($data);
        $x =  $this->chkPartnumber($data,False);
-       $this->err->out('Neuer Artikel: '.$data['partnumber'],true);
-       $this->error->write('erplib','Artikel neu: '.$data['partnumber']);
+       $this->error->write('erplib',$data['description'].' '.$data['partnumber']);
+       $this->error->out(sprintf($link,$data['parts_id']).$data['description'].' '.$data['partnumber'].'</a>',true);
        return $x;
     }
+    function insLager($data) {
+        $rc = $this->db->Begin();
+        $sql = "SELECT nextval(('id'::text)::regclass) as id from id";
+        $rs = $this->db->getOne($sql);
+        $sql  = "INSERT INTO inventory (warehouse_id,parts_id,shippingdate,employee_id,bin_id,qty,trans_id,trans_type_id,comment) ";
+        $sql .= "VALUES (:wid,:parts_id,now(),:employee_id,:bid,:onhand,:next,:tt,'Shopübernahme')";
+        $data['next'] = $rs['id'];
+        $data['tt'] = $this->transtype;
+        $data['bid'] = $this->lager;
+        $data['wid'] = $this->warehouse_id;
+        $data['employee_id'] = $this->employee_id;
+        $rc = $this->db->insert($sql,$data);
+        if ( $rc ) {
+           $this->db->Commit();
+        } else {
+           $this->db->Rollback();
+        }
+    }
 }
 ?>