From: Holger Lindemann Date: Fri, 14 Sep 2007 12:04:35 +0000 (+0000) Subject: VK-Preisupdate X-Git-Tag: release-2.6.0beta1~494 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=6555d5f7034cfe47219fe0f60aa98f7e4f5642ae;p=kivitendo-erp.git VK-Preisupdate Rundung des VK-Preises VK-Preis Update von vorhandenen Artikeln Zwei Artikelgruppenfelder auswerten für partsgroup --- diff --git a/lxo-import/import_lib.php b/lxo-import/import_lib.php index 72f3ae39d..63da20416 100644 --- a/lxo-import/import_lib.php +++ b/lxo-import/import_lib.php @@ -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()); diff --git a/lxo-import/partsB.php b/lxo-import/partsB.php index 2388fef7a..5cbcd336f 100644 --- a/lxo-import/partsB.php +++ b/lxo-import/partsB.php @@ -39,6 +39,10 @@ if ($_POST["ok"]=="Hilfe") { foreach($parts as $key=>$val) { echo "$key => $val
"; } + echo "
Die erste Zeile enthält die Feldnamen der Daten in ihrer richtigen Reihenfolge
"; + echo "Geben Sie das Trennzeichen der Datenspalten ein. Steuerzeichen können mit ihrem Dezimalwert geführt von einem "#" eingegebn werden (#11).

"; + echo "Der "sellprice" kann um den eingegeben Wert geändert werden.

"; + echo "Bei vorhandenen Artikelnummern (in der db), kann entweder ein Update auf den Preis durchgeführt werden oder der Artikel mit anderer Artikelnummer eingefügt werden.

"; echo "Jeder Artikel muß einer Buchungsgruppe zugeordnet werden. "; echo "Dazu muß entweder in der Maske eine Standardbuchungsgruppe gewählt werden
"; echo "oder es wird ein gü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:
"; -$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); - + + + +
Trennzeichen
Trennzeichen + Semikolon + Komma + Tabulator + Leerzeichen + + +
VK-Preis
Nachkomma:
0 + 1 + 2 + 3 + 4 + 5 +
VK-Preis
Aufschlag:
+ % + Absolut
Vorhandene
Artikelnummer:
Preis update durchführen
+ mit neuer Nummer einfügen
Testja
ArtWare   Dienstleistung diff --git a/lxo-import/parts_import.php b/lxo-import/parts_import.php index d147a2ffa..a66e4049f 100644 --- a/lxo-import/parts_import.php +++ b/lxo-import/parts_import.php @@ -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, "\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, "\n"); + if ($fld=="partsgroup" || $fld=="partsgroup1" ) { + $pgshow=true; + } else { + show( $show, "\n"); + } } } - + if (!in_array("unit",$infld)) { + $stdunitW=getStdUnit($db,"dimension"); + $stdunitD=getStdUnit($db,"service"); + $unit=true; + show( $show, "\n"); + }; + if ($pgshow) show( $show, "\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,"\n"); + continue; + } else if ($rc==-99) { + show($show,"\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, "\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, "\n"); continue; } + if ($data==false or empty($data) or !$data) { + show( $show, "\n"); + $i++; + continue; + } /* convert JA to Yes */ - if ($data == "J" ) - $data = "Y"; - + if ($data === "J" || $data === "j") $data = "Y"; $vals.="'".$data."',"; - show( $show, "\n"); + show( $show, "\n"); $keys.=$key.","; - $i++; } + if ($unit) { + if ($maske["ware"]=="D") { $einh=$stdunitD; } + else { $einh=$stdunitW; } + $keys.="unit,"; + $vals.="'$einh',"; + show( $show,"\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, "\n"); + } else { + show( $show,"\n"); + } + } if ($artikel==-1) { if ($maske["ware"]=="D") { $artikel=false; } else { $artikel=true; };
#$fld$fldunitpartsgroup
Update $partnumber:$sellprice
Fehler Zeile $m
NULL$dataNULL$data".htmlentities($data)."$einh".htmlentities($pg_name_val).":$IDNULL