Revision 6555d5f7
Von Holger Lindemann vor mehr als 17 Jahren hinzugefügt
lxo-import/import_lib.php | ||
---|---|---|
"weight" => "Gewicht in Benutzerdefinition",
|
||
"onhand" => "Lagerbestand",
|
||
"notes" => "Beschreibung",
|
||
"makemodel" => "Hersteller",
|
||
"model" => "Modellbezeichnung",
|
||
//"makemodel" => "Hersteller",
|
||
//"model" => "Modellbezeichnung",
|
||
"bin" => "Lagerort",
|
||
"image" => "Pfad/Dateiname",
|
||
"drawing" => "Pfad/Dateiname",
|
||
... | ... | |
"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",
|
||
... | ... | |
var $showErr = false;
|
||
var $db = false;
|
||
var $debug = false;
|
||
var $logsql = false;
|
||
var $errfile = false;
|
||
var $logfile = false;
|
||
|
||
|
||
/****************************************************
|
||
* uudecode
|
||
... | ... | |
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");
|
||
... | ... | |
|
||
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());
|
||
... | ... | |
}
|
||
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());
|
lxo-import/partsB.php | ||
---|---|---|
foreach($parts as $key=>$val) {
|
||
echo "$key => $val<br>";
|
||
}
|
||
echo "<br>Die erste Zeile enthält die Feldnamen der Daten in ihrer richtigen Reihenfolge<br>";
|
||
echo "Geben Sie das Trennzeichen der Datenspalten ein. Steuerzeichen können mit ihrem Dezimalwert geführt von einem "#" eingegebn werden (#11).<br><br>";
|
||
echo "Der "sellprice" kann um den eingegeben Wert geändert werden.<br><br>";
|
||
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.<br><br>";
|
||
echo "Jeder Artikel muß einer Buchungsgruppe zugeordnet werden. ";
|
||
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. ";
|
||
... | ... | |
|
||
$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? */
|
||
... | ... | |
|
||
/* 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";
|
||
|
||
|
||
... | ... | |
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);
|
||
... | ... | |
<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ühren<br>
|
||
<input type="radio" name="update" value="I">mit neuer Nummer einfü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
|
||
<input type="Radio" name="ware" value="D">Dienstleistung
|
lxo-import/parts_import.php | ||
---|---|---|
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'";
|
||
... | ... | |
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);
|
||
... | ... | |
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);
|
||
|
||
... | ... | |
* 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 (";
|
||
... | ... | |
$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)) {
|
||
... | ... | |
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);
|
||
... | ... | |
$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";
|
||
... | ... | |
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; };
|
Auch abrufbar als: Unified diff
VK-Preisupdate
Rundung des VK-Preises
VK-Preis Update von vorhandenen Artikeln
Zwei Artikelgruppenfelder auswerten für partsgroup