$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"]);
}
}
+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);
$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!
// 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 "<table border='1'>\n";
- echo "<tr><th>".str_replace(",","</th><th>",substr($keys,1,-1))."</th></tr>\n";
+ echo "<table border='1'>\n<tr><td>";
+ echo implode('</th><th>',array_keys($in_fld));
+ echo "</td></tr>\n";
$first=false;
};
- $vals=str_replace("',","'</td><td>",substr($vals,9,-1));
- echo "<tr><td>".str_replace("null,","null</td><td>",$vals)."</td></tr>\n";
+ echo "<tr><td>";
+ echo implode('</td><td>',$vals);
+ echo "</td></tr>\n";
//echo "Import $j<br>\n";
flush();
- } else {
- $sql.=$keys."taxzone_id,import)";
- $sql.=$vals."0,$nun)";
- $rc=$db->query($sql);
- if (!$rc) echo "Fehler: ".$sql."<br>";
- }
- $j++;
} else {
- $vals=str_replace("',","'</td><td>",substr($vals,9,-1));
- echo "<tr><td style=\"color:red\">".str_replace("null,","null</td><td style=\"color:red\">",$vals)."</td></tr>\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 "<br />Fehler: ".$sql."<br />"; flush(); };
+ }
+ $j++;
$zeile=fgetcsv($f,1200,$trenner);
}
fclose($f);
"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)"); /*,
echo "Dazu muß entweder in der Maske eine Standardbuchungsgruppe gewählt werden <br>";
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.<br>";
- echo "Preisgruppen müssen zunächst angelegt werden. Die Spalten für die Preisgruppen beginnen mit 'pg_' gefolgt vom Preisgruppenname.<br>";
- echo "Wenn eine Datei <code>partshead.csv</code> existiert, wird die erste Zeile aus dieser benutzt um das Format zu bestimmen. Die erste Zeile aus der eigentlichen Importdatei wird dann ignoriert.<br>";
+ echo "Preisgruppen müssen zunächst angelegt werden. Die Spalten für die Preisgruppen beginnen mit 'pg_' gefolgt vom Preisgruppenname.<br>";
+ echo "Wenn eine Datei <code>users/partshead.csv</code> existiert, wird die erste Zeile aus dieser benutzt um das Format zu bestimmen. Die erste Zeile aus der eigentlichen Importdatei wird dann ignoriert.<br>";
exit(0);
};
<tr><td>Textupdate</td><td><input type="checkbox" name="TextUpd" value="1">ja</td></tr>
<tr><td>Warengruppen<br>verbinder</td><td><input type="text" name="wgtrenner" value="!" size="3"></td></tr>
<tr><td>Shopartikel<br />falls nicht übergeben</td><td><input type="radio" name="shop" value="t">ja <input type="radio" name="shop" value="f" checked>nein</td></tr>
-<tr><td>Art</td><td><input type="Radio" name="ware" value="W" checked>Ware
+<tr><td>Eintrag in<br />Makemodel ist</td><td><input type="radio" name="vendnr" value="t">Lieferantennummer <input type="radio" name="vendnr" value="f" checked>Lieferantenname</td></tr>
+<tr><td>auch ohne<br />Model-Nr.</td><td><input type="radio" name="modnr" value="t">ja <input type="radio" name="modnr" value="f" checked>nein</td></tr>
+<tr><td>Art</td><td><input type="Radio" name="ware" value="W" checked>Ware
<input type="Radio" name="ware" value="D">Dienstleistung
<input type="Radio" name="ware" value="G">gemischt (Spalte 'art' vorhanden)</td></tr>
<tr><td>Default Einheiten<br></td><td><select name="dimensionunit">
return $rc;
}
-function getMakemodel($db,$check,$hersteller,$model,$partsid,$add=true) {
+function getMakemodel($db,$check,$hersteller,$model,$partsid,$lastcost,$add=true) {
$sql="select * from makemodel where make = $hersteller and model = '$model' and parts_id = $partsid";
$rs=$db->getAll($sql);
if (empty($rs[0]["id"]) && $add) {
- $sql="insert into makemodel (parts_id,make,model) values ($partsid,'$hersteller','$model')";
+ if (!$lastcost) $lastcost=0.00;
+ $sql="insert into makemodel (parts_id,make,model,lastcost,lastupdate,sortorder) ";
+ $sql.="values ($partsid,'$hersteller','$model',$lastcost,now(),1)";
$rc=$db->query($sql);
}
}
$wgtrenner=$maske["wgtrenner"];
$Update=($maske["update"]=="U")?true:false;
$UpdText=($maske["TextUpd"]=="1")?true:false;
+ $vendnr=($maske["vendnr"]=="t")?true:false;
+ $modnr=($maske["modnr"]=="t")?true:false;
//$stdunitW=getStdUnit($db,"dimension");
//$stdunitD=getStdUnit($db,"service");
*/
if ($show) {
show('<tr>',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("</tr>\n",false);
}
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; }
$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
"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);