VK-Preisupdate
authorHolger Lindemann <hli@lx-system.de>
Fri, 14 Sep 2007 12:04:35 +0000 (12:04 +0000)
committerHolger Lindemann <hli@lx-system.de>
Fri, 14 Sep 2007 12:04:35 +0000 (12:04 +0000)
Rundung des VK-Preises
VK-Preis Update von vorhandenen Artikeln
Zwei Artikelgruppenfelder auswerten für partsgroup

lxo-import/import_lib.php
lxo-import/partsB.php
lxo-import/parts_import.php

index 72f3ae3..63da204 100644 (file)
@@ -69,8 +69,8 @@ $parts = array(
        "weight" => "Gewicht in Benutzerdefinition",
        "onhand" => "Lagerbestand",
        "notes" => "Beschreibung",
-       "makemodel" => "Hersteller",
-       "model" => "Modellbezeichnung",
+       //"makemodel" => "Hersteller",
+       //"model" => "Modellbezeichnung",
        "bin" => "Lagerort",
        "image" => "Pfad/Dateiname",
        "drawing" => "Pfad/Dateiname",
@@ -88,6 +88,7 @@ $parts = array(
        "shop" => "Shopartikel (Y/N)",
        "assembly" => "Stückliste (Y/N); wird noch nicht unterstützt",
        "partsgroup" => "Warengruppenbezeichnung",
+       "partsgroup1" => "2.Warengruppenbezeichnung",
        //"income_accno_0" => "?Nummer? für Erlöse Inland",
        //"income_accno_1" => "?Nummer? für Erlöse EG",
        //"income_accno_3" => "?Nummer? für Erlöse Ausland",
@@ -287,6 +288,10 @@ class myDB extends DB {
  var $showErr = false;
  var $db = false;
  var $debug = false;
+ var $logsql = false;
+ var $errfile = false;
+ var $logfile = false;
+
 
 /****************************************************
 * uudecode
@@ -317,13 +322,17 @@ class myDB extends DB {
                        echo "$sql : $err\n";
        }
 
-       function showDebug($sql) {
+       function showDebug($sql) {      
                echo $sql."\n";
                if ($this->debug==2) {
                        print_r($this->rc);
                };
        }
 
+       function logSql($sql) {
+               if (!$this->logfile)  $this->logfile=fopen("import.sql","a");
+               fputs($this->logfile,$sql."\n");
+       }
        function myDB($usr) {
                // Datenbankparameter des ERP-Users benutzen.
                $tmp = file_get_contents("../users/$usr.conf");
@@ -357,6 +366,7 @@ class myDB extends DB {
 
        function query($sql) {
                $this->rc=@$this->db->query($sql);
+               if ($this->logsql) $this->logSql($sql);
                if ($this->debug) $this->showDebug($sql);
                if(DB::isError($this->rc)) {
                        $this->dbFehler($sql,$this->rc->getMessage());
@@ -367,6 +377,7 @@ class myDB extends DB {
        }
        function getAll($sql) {
                $this->rc=@$this->db->getAll($sql,DB_FETCHMODE_ASSOC);
+               if ($this->logsql) $this->logSql($sql);
                if ($this->debug) $this->showDebug($sql);
                if(DB::isError($this->rc)) {
                        $this->dbFehler($sql,$this->rc->getMessage());
index 2388fef..5cbcd33 100644 (file)
@@ -39,6 +39,10 @@ if ($_POST["ok"]=="Hilfe") {
        foreach($parts as $key=>$val) {
                echo "$key => $val<br>";
        }
+       echo "<br>Die erste Zeile enth&auml;lt die Feldnamen der Daten in ihrer richtigen Reihenfolge<br>";
+       echo "Geben Sie das Trennzeichen der Datenspalten ein. Steuerzeichen k&ouml;nnen mit ihrem Dezimalwert gef&uuml;hrt von einem &quot;#&quot; eingegebn werden (#11).<br><br>"; 
+       echo "Der &quot;sellprice&quot; kann um den eingegeben Wert  ge&auml;ndert werden.<br><br>";
+       echo "Bei vorhandenen Artikelnummern (in der db), kann entweder ein Update auf den Preis durchgef&uuml;hrt werden oder der Artikel mit anderer Artikelnummer eingef&uuml;gt werden.<br><br>";
        echo "Jeder Artikel mu&szlig; einer Buchungsgruppe zugeordnet werden. ";
        echo "Dazu mu&szlig; entweder in der Maske eine Standardbuchungsgruppe gew&auml;hlt werden <br>";
        echo "oder es wird ein g&uuml;ltiges Konto in 'income_accno_id' und 'expense_accno_id' eingegeben. ";
@@ -50,6 +54,10 @@ clearstatcache ();
 
 $test    = $_POST["test"];
 $trenner = ($_POST["trenner"])?$_POST["trenner"]:",";
+$trennzeichen = ($_POST["trennzeichen"])?$_POST["trennzeichen"]:"";
+$precision = $_POST["precision"];
+$quotation = $_POST["quotation"];
+$quottype = $_POST["quottype"];
 $file    = "parts";
 
 /* no data? */
@@ -81,7 +89,10 @@ if (!chkUsr($login))
 
 /* first check all elements */
 echo "Checking data:<br>";
-$err = import_parts($db, $file, $trenner, $parts, TRUE, FALSE, FALSE,$_POST);
+$_test=$_POST;
+$_test["precision"]=-1;
+$_test["quotation"]=0;
+$err = import_parts($db, $file, $trenner, $trennzeichen, $parts, TRUE, FALSE, FALSE,$_test);
 echo "$err Errors found\n";
 
 
@@ -89,7 +100,7 @@ if ($err!=0)
        exit(0);
 
 /* just print data or insert it, if test is false */
-import_parts($db, $file, $trenner, $parts, FALSE, !$test, TRUE,$_POST);
+import_parts($db, $file, $trenner, $trennzeichen, $parts, FALSE, !$test, TRUE,$_POST);
 
 } else {
        $bugrus=getAllBG($db);
@@ -102,7 +113,26 @@ import_parts($db, $file, $trenner, $parts, FALSE, !$test, TRUE,$_POST);
 <input type="hidden" name="login" value="<?= $login ?>">
 <table>
 <tr><td></td><td><input type="submit" name="ok" value="Hilfe"></td></tr>
-<tr><td>Trennzeichen</td><td><input type="text" size="2" maxlength="1" name="trenner" value=";"></td></tr>
+<tr><td>Trennzeichen</td><td>
+               <input type="radio" name="trenner" value=";" checked>Semikolon 
+               <input type="radio" name="trenner" value=",">Komma 
+               <input type="radio" name="trenner" value="#9">Tabulator
+               <input type="radio" name="trenner" value=" ">Leerzeichen
+               <input type="radio" name="trenner" value="other"> 
+               <input type="text" size="2" name="trennzeichen" value=""> 
+</td></tr>
+<tr><td>VK-Preis<br>Nachkomma:</td><td><input type="Radio" name="precision" value="0">0  
+                       <input type="Radio" name="precision" value="1">1 
+                       <input type="Radio" name="precision" value="2" checked>2 
+                       <input type="Radio" name="precision" value="3">3 
+                       <input type="Radio" name="precision" value="4">4 
+                       <input type="Radio" name="precision" value="5">5 
+       </td></tr>
+<tr><td>VK-Preis<br>Aufschlag:</td><td><input type="text" name="quotation" size="5" value="0"> 
+                       <input type="radio" name="quottype" value="P" checked>% 
+                       <input type="radio" name="quottype" value="A">Absolut</td></tr>
+<tr><td>Vorhandene<br>Artikelnummer:</td><td><input type="radio" name="update" value="U" checked>Preis update durchf&uuml;hren<br>
+                                       <input type="radio" name="update" value="I">mit neuer Nummer einf&uuml;gen</td></tr>
 <tr><td>Test</td><td><input type="checkbox" name="test" value="1">ja</td></tr>
 <tr><td>Art</td><td><input type="Radio" name="ware" value="W">Ware &nbsp; 
                    <input type="Radio" name="ware" value="D">Dienstleistung
index d147a2f..a66e404 100644 (file)
@@ -23,12 +23,27 @@ function getPartsgroupId($db, $value, $add) {
        return $rs[0]["id"];
 }
 
+//Muß noch eingebunden werden
+function getMakemodel($db,$hersteller,$model,$partsid,$add=true) {
+       $sql="select * from makemodel where make like '$hersteller' and model like = '$model'";
+       $rs=$db->getAll($sql);
+       if (empty($rs[0]["id"]) && $add) {
+               $sql="insert into makemodel (parts_id,make,model) values ($partsid,'$hersteller','$model')";    
+               $rc=$db->query($sql);
+               if (!$rc) return "f";
+               return getMakemodel($db,$hersteller,$model,$partsid,false);
+       }
+       if ($rs[0]["parts_id"]==$partsid) { return "t"; }
+       else { return "f"; }
+}
+
 function getAccnoId($db, $accno) {
        $sql = "select id from chart where accno='$accno'";
        $rs=$db->getAll($sql);
        return $rs[0]["id"];
 }
 
+//Auf Artikelnummer testen, bzw. neue Nummer erzeugen
 function chkPartNumber($db,$number,$check) {
        if ($number<>"") {
                $sql = "select * from parts where partnumber = '$number'";
@@ -54,6 +69,27 @@ function chkPartNumber($db,$number,$check) {
        return $number;
 }
 
+//Artikelnummer testen und wenn vorhanden Preis ändern
+function chkPartNumberUpd($db,$sellprice,$partnumber,$check){
+       if ($partnumber=="") {
+               $nummer=chkPartNumber($db,$partnumber,$check);
+               if ($nummer=="") { return -99; }
+               else { return $nummer; };
+       }
+       $sql = "select * from parts where partnumber = '$partnumber'";
+       $rs=$db->getAll($sql);
+       if ($rs[0]["id"]>0) {
+               if ($check) return -1;
+               $sql="update parts set sellprice = $sellprice where partnumber = '$partnumber'";
+               $rc=$db->query($sql);
+               if ($rc) return -1;
+               return -99;
+       }
+       $nummer=chkPartNumber($db,$partnumber,$check);
+       if ($nummer=="") { return -99; }
+       else { return $nummer; };
+}
+
 function getBuchungsgruppe($db, $income, $expense) {
 
        $income_id = getAccnoId($db, $income);
@@ -93,8 +129,23 @@ function show($show, $things) {
                echo $things;
 }
 
-function import_parts($db, $file, $trenner, $fields, $check, $insert, $show,$maske) {
+function getStdUnit($db,$type) {
+       $sql="select * from units where type='$type' order by sortkey limit 1";
+       $rs=$db->getAll($sql);
+       if (empty($rs[0]["name"])) return "Stck";
+       return $rs[0]["name"];
+}
+
+function import_parts($db, $file, $trenner, $trennzeichen, $fields, $check, $insert, $show,$maske) {
+
+       $pgshow=false;
+       $note2show=false;
+       $fehler=0;
+       $precision=$maske["precision"];
+       $quotation=$maske["quotation"];
+       $quottype=$maske["quottype"];
 
+       $Update=($maske["update"]=="U")?true:false;
        /* field description */
        $parts_fld = array_keys($fields);
 
@@ -105,23 +156,65 @@ function import_parts($db, $file, $trenner, $fields, $check, $insert, $show,$mas
         * read first line with table descriptions
         */
        show( $show, "<table border='1'><tr><td>#</td>\n");
+       if ($trenner=="other") $trenner=trim($trennzeichen);
+       if (substr($trenner,0,1)=="#") if (strlen($trenner)>1) $trenner=chr(substr($trenner,1));
        $infld=fgetcsv($f,1200,$trenner);
        foreach ($infld as $fld) {
                $fld = strtolower(trim(strtr($fld,array("\""=>"","'"=>""))));
                $in_fld[]=$fld;
                if (in_array(trim($fld),$parts_fld)) {
-                       show( $show, "<td>$fld</td>\n");
+                       if ($fld=="partsgroup" || $fld=="partsgroup1" ) {
+                               $pgshow=true;
+                       } else {
+                               show( $show, "<td>$fld</td>\n");
+                       }
                }
        }
-
+       if (!in_array("unit",$infld)) {
+               $stdunitW=getStdUnit($db,"dimension");
+               $stdunitD=getStdUnit($db,"service");
+               $unit=true;
+               show( $show, "<td>unit</td>\n");
+       };
+       if ($pgshow) show( $show, "<td>partsgroup</td>\n");
+       $posprice=0;
+       $posnumber=0;
+       $j=0;
+       foreach ($infld as $value) { 
+               if ($infld[$j]=="sellprice") $posprice=$j;  
+               if ($infld[$j]=="partnumber") $posnumber=$j;
+               $j++; 
+       }
        $m=0;           /* line */
        $errors=0;      /* number of errors detected */
        $income_accno = "";
        $expense_accno = "";
-       while ( ($zeile=fgetcsv($f,1200,$trenner)) != FALSE) {
+       if ($quottype=="P") $quotation=($quotation+100)/100;
+       while ( ($zeile=fgetcsv($f,15000,$trenner)) != FALSE) {
                $i=0;   /* column */
                $m++;   /* increase line */
 
+               if ($Update) {
+                       $sellprice=$zeile[$posprice];
+                       $partnumber=$zeile[$posnumber];
+                       $sellprice = str_replace(",", ".", $sellprice);
+                       if ($quotation<>0) {
+                               if ($quottype=="A") { $sellprice += $quotation; }
+                               else { $sellprice = $sellprice * $quotation; }
+                       };
+                       if ($precision>=0) $sellprice = round($sellprice,$precision);
+                       $rc=chkPartNumberUpd($db,$sellprice,$partnumber,!$insert);
+                       if ($rc==-1) {
+                               show($show,"<tr><td>Update </td><td>$partnumber:$sellprice</td></tr>\n");
+                               continue;
+                       } else if ($rc==-99) {
+                               show($show,"<tr><td>Fehler Zeile $m</td></tr>\n");
+                               continue;
+                       } else {
+                               $zeile[$posnumber]=$rc;
+                       }
+               };
+
                $sql="insert into $file ";
                $keys="(";
                $vals=" values (";
@@ -132,6 +225,7 @@ function import_parts($db, $file, $trenner, $fields, $check, $insert, $show,$mas
                $dienstleistung=false;
                $artikel=-1;
                $partNr=false;
+               $pg_name_val="";
                foreach($zeile as $data) {
                        /* check if column will be imported */
                        if (!in_array(trim($in_fld[$i]),$parts_fld)) {
@@ -139,31 +233,35 @@ function import_parts($db, $file, $trenner, $fields, $check, $insert, $show,$mas
                                continue;
                        };
                        $data=trim($data);
-                       //$data=addslashes($data);
                        $key=$in_fld[$i];
                        /* add key and data */
-                       if ($data==false or empty($data) or !$data) {
-                               show( $show, "<td>NULL</td>\n");
+
+                       /* special case partsgroup1 */
+                       if ($key == "partsgroup1") {
+                               if ($pg_name_val<>"") {
+                                       if ($data<>"")  $pg_name_val.="!".$data;
+                               } else {
+                                       $pg_name_val=$data;
+                               }
+                               $i++;
+                               continue;
+                       } else if ($key == "partsgroup") {
+                               /* special case partsgroup */
+                               $pg_name_val=$data;
                                $i++;
                                continue;
-                       }
-
-                       /* special case partsgroup */
-                       if ($key == "partsgroup") {
-
-                               /* get ID of partsgroup or add new 
-                                * partsgroup_id */
-                               $data = getPartsgroupId($db, $data, $insert);
-                               $key  = "partsgroup_id";
-
-                               /* TODO error handling */
-
                        } else if ($key == "lastcost" || 
                                   $key == "sellprice") {
                                
                                /* convert 0,0 numeric into 0.0 */
                                $data = str_replace(",", ".", $data);
-
+                               if ($key == "sellprice") {
+                                       if ($quotation<>0) {
+                                               if ($quottype=="A") { $data += $quotation; }
+                                               else { $data = $data * $quotation; }
+                                       };
+                                       if ($precision>=0) $data = round($data,$precision);
+                               }
                        } else if ($key == "partnumber") {
                                $partNr=true;
                                $partnumber=chkPartNumber($db,$data,$check);
@@ -183,6 +281,12 @@ function import_parts($db, $file, $trenner, $fields, $check, $insert, $show,$mas
                                $data=mb_convert_encoding($data,"ISO-8859-15","auto");
                                $data=addslashes($data);
                        } else if ($key == "unit") {
+                               if ($data=="") {
+                                       if ($maske["ware"]=="W") { $data=$stdunitW; }
+                                       else if ($maske["ware"]=="D") { $data=$stdunitD; }
+                                       //else if ($maske["ware"]=="G") { $data=$stdunitD; //Noch machen!}
+                                       else { $data=$stdunitW; };
+                               }
                                /* convert stück and Stunde */
                                if (preg_match("/^st..?ck$/i", $data))
                                        $data = "Stck";
@@ -211,16 +315,38 @@ function import_parts($db, $file, $trenner, $fields, $check, $insert, $show,$mas
                                show( $show, "<td>$data</td>\n");
                                continue;
                        }
+                       if ($data==false or empty($data) or !$data) {
+                               show( $show, "<td>NULL</td>\n");
+                               $i++;
+                               continue;
+                       }
                        /* convert JA to Yes */
-                       if ($data == "J" )
-                               $data = "Y";
-
+                       if ($data === "J" || $data === "j")  $data = "Y";
                        $vals.="'".$data."',";
-                       show( $show, "<td>$data</td>\n");
+                       show( $show, "<td>".htmlentities($data)."</td>\n");
                        $keys.=$key.",";
-       
                        $i++;
                }
+               if ($unit) {
+                       if ($maske["ware"]=="D") { $einh=$stdunitD; }
+                       else  { $einh=$stdunitW; }
+                       $keys.="unit,";
+                       $vals.="'$einh',";
+                       show( $show,"<td>$einh</td>\n");
+               }
+               /* special case partsgroup */
+               if ($pgshow) {
+                       if ($pg_name_val) {
+                               /* get ID of partsgroup or add new 
+                                * partsgroup_id */
+                               $ID = getPartsgroupId($db, $pg_name_val, $insert);
+                               $keys.= "partsgroup_id,";
+                               $vals.="'".$ID."',";
+                               show( $show, "<td>".htmlentities($pg_name_val).":$ID</td>\n");
+                       } else {
+                               show( $show,"<td>NULL</td>\n");
+                       }
+               }
                if ($artikel==-1) {
                        if ($maske["ware"]=="D") {  $artikel=false; }
                        else { $artikel=true; };