From: Holger Lindemann Date: Sat, 27 Nov 2010 01:12:45 +0000 (+0100) Subject: Diverse Erweiterungen und ein wenig Aufräumen. X-Git-Tag: release-2.6.2beta1~73^2~9 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=64035a1b2890a19fc9cd247c0eff2670ba09cb6b;p=kivitendo-erp.git Diverse Erweiterungen und ein wenig Aufräumen. --- diff --git a/lxo-import/addressB.php b/lxo-import/addressB.php index bd5317f05..df0cfc50e 100644 --- a/lxo-import/addressB.php +++ b/lxo-import/addressB.php @@ -69,12 +69,11 @@ if (!$file) ende ("Kein Datenfile"); $trenner=($_POST["trenner"])?$_POST["trenner"]:","; if ($trenner=="other") { $trenner=trim($trennzeichen); - if (substr($trenner,0,1)=="#") if (strlen($trenner)>1) $trenner=chr(substr($trenner,1)); } +if (substr($trenner,0,1)=="#") if (strlen($trenner)>1) $trenner=chr(substr($trenner,1)); if (!file_exists($dir.$file.".csv")) ende("$file.csv nicht im Ordner oder leer"); - if (!$db->chkcol($file)) ende("Importspalte kann nicht angelegt werden"); $employee=chkUsr($_SESSION["employee"]); @@ -114,18 +113,54 @@ $kunde_fld = array_keys($address); } } +function chkBusiness($data,$id=true) { +global $db; + if ($id) { + $rs = $db->getAll("select id from business where id =$data"); + } else { + $rs = $db->getAll("select id from business where decription ilike '$data'"); + } + if ($rs[0]["id"]) { + return $rs[0]["id"]; + } else { + return "null"; + } +} + +function chkSalesman($data,$id=true) { +global $db; + if ($id) { + $rs = $db->getAll("select id from employee where id =$data"); + } else { + $rs = $db->getAll("select id from employee where login ilike '$data'"); + } + if ($rs[0]["id"]) { + return $rs[0]["id"]; + } else { + return "null"; + } +} + $f=fopen($dir.$file.".csv","r"); $zeile=fgets($f,1200); $infld=explode($trenner,strtolower($zeile)); $first=true; $ok=true; +$p=0; foreach ($infld as $fld) { $fld = strtolower(trim(strtr($fld,array("\""=>"","'"=>"")))); - if ($fld=="branche" && !$crm) { $in_fld[]=""; continue; }; - if ($fld=="sw" && !$crm) { $in_fld[]=""; continue; }; - $in_fld[]=$fld; + if (in_array($fld,$kunde_fld)) { + if ($fld=="branche" && !$crm) { continue; }; + if ($fld=="sw" && !$crm) { continue; }; + $in_fld[$fld]=$p; + //$fldpos[$fld]=$p; + //$in_fld[]=$fld; + } + $p++; } - +$infld = array_keys($in_fld); +$infld[] = "import"; +$infld = implode(",",$infld); $j=0; $m=0; $zeile=fgetcsv($f,1200,$trenner); @@ -135,16 +170,75 @@ if ($ok) while (!feof($f)){ $anrede=""; $Matchcode=""; $sql="insert into $file "; - $keys="("; - $vals=" values ("; + $keys=array(); + $vals=array(); $number=false; - foreach($zeile as $data) { - if (!in_array(trim($in_fld[$i]),$kunde_fld)) { - if ($in_fld[$i]=="anrede") { $anrede=addslashes(trim($data)); } - $i++; - continue; - }; - $data=trim($data); + //foreach($zeile as $data) { + + foreach($in_fld as $fld => $pos) { + switch ($fld) { + case "name" : + case "department_1" : + case "department_2" : + case "matchcode" : + case "street" : + case "city" : + case "notes" : + case "sw" : + case "branche" : + case "country" : + case "contact" : + case "homepage" : + case "email" : + case "bank" : $data = addslashes(trim($zeile[$pos])); + if (Translate) translate($data); + case "ustid" : $data = strtr(trim($zeile[$pos])," ",""); + case "bank_code" : $data = trim($zeile[$pos]); + case "account_number": + case "greeting" : + case "taxnumber" : + case "zipcode" : + case "phone" : + case "fax" : $data = trim($zeile[$pos]); + $data = "'$data'"; + if ($data=="''") { + $vals[] = "null"; + } else { + $vals[] = $data; + } + break; + case "business_id" : $vals[] = chkBusiness(trim($zeile[$pos])); + break; + case "salesman_id" : $vals[] = chkSalesman(trim($zeile[$pos])); + break; + case "taxincluded" : $data = strtolower(substr($zeile[$pos],0,1)); + if ($data!="f" && $data!="t") { $vals[] = "'f'"; } + else { $vals[] = "'".$data."'";} + break; + case "taxzone_id" : $data = trim($zeile[$pos])*1; + if ($data>3 && $data<0) $data = 0; + $vals[] = $data; + break; + case "creditlimit" : + case "discount" : + case "terms" : $vals[] = trim($zeile[$pos])*1; + break; + case "customernumber": + case "vendornumber" : $data = trim($zeile[$pos]); + if (empty($data) or !$data) { + $vals[] = getKdId(); + $number = true; + } else { + $vals[] = chkKdId($data); + $number = true; + } + break; + } + }; + if (!in_array("taxzone_id",$in_fld)) { + $in_fld[] = "taxzone_id"; + $vals[] = 0; + } // seit 2.6 ist die DB-Kodierung UTF-8 @holger Ansonsten einmal vorher die DB-Encoding auslesen // Falls die Daten ISO-kodiert kommen entsprechend wandeln // done! @@ -152,78 +246,26 @@ if ($ok) while (!feof($f)){ // die blöde mb_detect... tut leider nicht immer, daher die Möglichkeit der Auswahl // TODO Umlaute am Anfang wurden bei meinem Test nicht übernommen (Österreich). S.a.: // http://forum.de.selfhtml.org/archiv/2007/1/t143904/ - - if (Translate) translate($data); - - //$data=htmlentities($data); - $data=addslashes($data); - if ($in_fld[$i]==$file."number") { // customernumber || vendornumber - if (empty($data) or !$data) { - $data=getKdId(); - $number=true; - } else { - $data=chkKdId($data); - $number=true; - } - } else if ($in_fld[$i]=="taxincluded"){ - $data=strtolower(substr($data,0,1)); - if ($data!="f" && $data!="t") $data="f"; - } else if ($in_fld[$i]=="ustid"){ - $data=strtr($data," ",""); - } /*else if ($in_fld[$i]=="matchcode") { - $matchcode=$data; - $i++; - continue; - if ($data==false or empty($data) or !$data) { - if (in_array($in_fld[$i],array("name"))) { - $data=$matchcode; - } - } - }*/ - - $keys.=$in_fld[$i].","; - if ($data==false or empty($data) or !$data) { - $vals.="null,"; - } else { - if ($in_fld[$i]=="contact"){ - if ($anrede) { - $vals.="'$anrede $data',"; - } else { - $vals.="'$data',"; - } - } else { - $vals.="'".$data."',"; - } - } - $i++; - } - if (!$number) { - $keys.=$file."number,"; - $vals.="'".getKdId()."',"; - } - if ($keys<>"(") { - if ($test) { + if ($test) { if ($first) { - echo "\n"; - echo "\n"; + echo "
".str_replace(",","",substr($keys,1,-1))."
\n\n"; $first=false; }; - $vals=str_replace("',","'\n"; + echo "\n"; //echo "Import $j
\n"; flush(); - } else { - $sql.=$keys."taxzone_id,import)"; - $sql.=$vals."0,$nun)"; - $rc=$db->query($sql); - if (!$rc) echo "Fehler: ".$sql."
"; - } - $j++; } else { - $vals=str_replace("',","'\n"; - flush(); - } + $vals[] = $nun; + $sql = "INSERT INTO $file (".$infld.") values (".implode(",",$vals).")"; + $rc=$db->query($sql); + if ($j % 10 == 0) { echo "."; flush(); }; + if (!$rc) { echo "
Fehler: ".$sql."
"; flush(); }; + } + $j++; $zeile=fgetcsv($f,1200,$trenner); } fclose($f); diff --git a/lxo-import/import_lib.php b/lxo-import/import_lib.php index 36cf30f14..996d21e64 100644 --- a/lxo-import/import_lib.php +++ b/lxo-import/import_lib.php @@ -36,6 +36,8 @@ $address = array( "bank_code" => "Bankleitzahl", "bank" => "Bankname", "branche" => "Branche", + "business_id" => "BranchenID", + "salesman_id" => "VerkäuferID", //"language" => "Sprache (de,en,fr)", "sw" => "Stichwort", "creditlimit" => "Kreditlimit (nnnnnn.nn)"); /*, diff --git a/lxo-import/partsB.php b/lxo-import/partsB.php index 134312e71..cb9de6763 100644 --- a/lxo-import/partsB.php +++ b/lxo-import/partsB.php @@ -92,8 +92,8 @@ if ($_POST["ok"] || $_GET["cron"]=="1") { 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. "; echo "Das Programm versucht dann eine passende Buchungsgruppe zu finden.
"; - echo "Preisgruppen müssen zunächst angelegt werden. Die Spalten für die Preisgruppen beginnen mit 'pg_' gefolgt vom Preisgruppenname.
"; - echo "Wenn eine Datei partshead.csv existiert, wird die erste Zeile aus dieser benutzt um das Format zu bestimmen. Die erste Zeile aus der eigentlichen Importdatei wird dann ignoriert.
"; + echo "Preisgruppen müssen zunächst angelegt werden. Die Spalten für die Preisgruppen beginnen mit 'pg_' gefolgt vom Preisgruppenname.
"; + echo "Wenn eine Datei users/partshead.csv existiert, wird die erste Zeile aus dieser benutzt um das Format zu bestimmen. Die erste Zeile aus der eigentlichen Importdatei wird dann ignoriert.
"; exit(0); }; @@ -203,7 +203,9 @@ if ($_POST["ok"] || $_GET["cron"]=="1") { - + +',false); - show("partnumber"); show("lastcost"); show("sellprice"); show("listprice"); - show("description");show("notes"); show("ean"); - show("weight"); show("image"); show("partsgroup_id"); - show("bg"); show("income_accno"); show("expense_accno"); - show("inventory_accno"); show("microfiche");show("drawing");show("rop"); - show("assembly");show("makemodel"); show("shop"); show(""); + show("partnumber"); show("lastcost"); show("sellprice"); show("listprice"); + show("description"); show("notes"); show("ean"); + show("weight"); show("image"); show("partsgroup_id"); + show("bg"); show("income_accno"); show("expense_accno"); + show("inventory_accno"); show("microfiche"); show("drawing"); + show("rop"); show("assembly"); show("makemodel"); show("shop"); show(""); show("\n",false); } @@ -342,8 +346,8 @@ function import_parts($db, $file, $fields, $check, $maske) { foreach ($prices as $pkey=>$val) { if (array_key_exists($pkey,$fldpos)) $pricegroup[$val] = str_replace(",", ".", $zeile[$fldpos[$pkey]]); - } - } + } + } if ($quotation<>0) { if ($quottype=="A") { $sellprice += $quotation; } else { $sellprice = $sellprice * $quotation; } @@ -383,32 +387,39 @@ function import_parts($db, $file, $fields, $check, $maske) { $partsgroup_id = getPartsgroupId($db, $pgname, $insert); } + /* Ware oder Dienstleistung */ + if (($maske["ware"]=="G" and strtoupper($zeile[$fldpos["art"]])=="D") or $maske["ware"]=="D") { + $artikel = false; + } else if (($maske["ware"]=="G" and strtoupper($zeile[$fldpos["art"]])=="W") or $maske["ware"]=="W") { + $artikel = true; + } + /* sind Hersteller und Modelnummer hinterlegt wenn ja, erfolgt er insert später */ $makemodel = 'f'; - if (!empty($zeile[$fldpos["makemodel"]]) and !$artikel) { + if (!empty($zeile[$fldpos["makemodel"]]) and $artikel) { $mm = $zeile[$fldpos["makemodel"]]; if (Translate) translate($mm); - $hersteller=suchFirma("vendor",$mm); - $hersteller=$hersteller["cp_cv_id"]; - if (!empty($zeile[$fldpos["model"]])) { + if ($vendnr) { + $hersteller=getFirma($mm,"vendor"); + } else { + $hersteller=suchFirma("vendor",$mm); + $hersteller=$hersteller["cp_cv_id"]; + } + if (!empty($zeile[$fldpos["model"]]) and $hersteller>0) { $mo = $zeile[$fldpos["model"]]; if (Translate) translate($mo); $model = $mo; $makemodel = 't'; - } else { + } else if ($modnr and $hersteller>0) { + $model = ''; + $makemodel = 't'; + } else { unset($hersteller); $makemodel = 'f'; } } - /* Ware oder Dienstleistung */ - if (($maske["ware"]=="G" and strtoupper($zeile[$fldpos["art"]])=="D") or $maske["ware"]=="D") { - $artikel = false; - } else if (($maske["ware"]=="G" and strtoupper($zeile[$fldpos["art"]])=="W") or $maske["ware"]=="W") { - $artikel = true; - } - /* Einheit ermitteln */ if ($zeile[$fldpos["unit"]]=="") { //Keine Einheit mitgegeben @@ -523,10 +534,10 @@ function import_parts($db, $file, $fields, $check, $maske) { "rop"=>$rop,"assembly"=>$assembly, "shop"=>$shop,"makemodel"=>$makemodel),$pricegroup ); - if ($hersteller>0 && $model) { + if ($hersteller>0 ) { // && $model) { $partsid=getPartsid($db,$zeile[$fldpos["partnumber"]]); - if ($partsid) { - getMakemodel($db,$check,$hersteller,$model,$partsid,true); + if ($partsid) { + getMakemodel($db,$check,$hersteller,$model,$partsid,$lastcost,true); } } unset($zeile);
"; + echo implode('',array_keys($in_fld)); + echo "
",substr($vals,9,-1)); - echo "
".str_replace("null,","null",$vals)."
"; + echo implode('',$vals); + echo "
",substr($vals,9,-1)); - echo "
".str_replace("null,","null",$vals)."
Textupdateja
Warengruppen
verbinder
Shopartikel
falls nicht übergeben
ja nein
ArtWare   +
Eintrag in
Makemodel ist
Lieferantennummer Lieferantenname
auch ohne
Model-Nr.
ja nein
ArtWare   Dienstleistung gemischt (Spalte 'art' vorhanden)
Default Einheiten