Bugfix Lagerbestandsberechnung

This commit is contained in:
OpenXE 2023-02-06 13:48:58 +01:00
parent aff5eef945
commit 9657e16797

View File

@ -598,14 +598,6 @@ class Lager extends GenLager {
break; break;
case "lager_wert": case "lager_wert":
$allowed['lager'] = array('wert'); $allowed['lager'] = array('wert');
$app->DB->Select("SELECT waehrungkalk,waehrungletzt,kurskalk,kursletzt FROM lagerwert LIMIT 1");
if($app->DB->error())
{
$app->erp->CheckColumn("waehrungkalk", "VARCHAR(16)", "lagerwert", "NOT NULL DEFAULT ''");
$app->erp->CheckColumn("waehrungletzt", "VARCHAR(16)", "lagerwert", "NOT NULL DEFAULT ''");
$app->erp->CheckColumn("kurskalk","DECIMAL(19,8)", "lagerwert", "NOT NULL DEFAULT '0'");
$app->erp->CheckColumn("kursletzt","DECIMAL(19,8)", "lagerwert", "NOT NULL DEFAULT '0'");
}
// Get HTML form values // Get HTML form values
$preisart = $app->User->GetParameter('preisart'); $preisart = $app->User->GetParameter('preisart');
@ -633,33 +625,6 @@ class Lager extends GenLager {
} }
} }
$lager = (String)$app->YUI->TableSearchFilter($name, 4, 'lager', $app->User->GetParameter("lager_lager"));
if($lager)
{
$lager = $app->DB->Select("SELECT id FROM lager WHERE bezeichnung = '$lager' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1");
}
$lagerplatz = (String)$app->YUI->TableSearchFilter($name, 5, 'lagerplatz', $app->User->GetParameter("lager_lagerplatz"));
if($lagerplatz)
{
$lagerplatz = explode(' ', $lagerplatz);
$lagerplatz = $app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '".reset($lagerplatz)."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1");
}
if($preiseineuro)
{
$kursusd = $app->erp->GetWaehrungUmrechnungskurs('EUR','USD');
$kurschf = $app->erp->GetWaehrungUmrechnungskurs('EUR','CHF');
}
$artikelkategorie = (String)$app->YUI->TableSearchFilter($name, 8, 'artikelkategorie', $app->User->GetParameter("lager_wert_artikelkategorie"));
$artikelkategorie = explode(" ", $artikelkategorie);
$artikelkategorieid = $artikelkategorie[0];
$artikelkategorieid = $app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$artikelkategorieid' LIMIT 1");
if($artikelkategorieid != ''){
$artikelkategorie = $artikelkategorieid;
}else{
$artikelkategorie = 0;
}
//if($artikelkategorie)$artikelkategorie = $app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung LIKE '%$artikelkategorie%' LIMIT 1");
$colgewicht ="if(lw.gewicht = 0,ifnull(art.gewicht,'0') ,lw.gewicht) *lw.menge"; $colgewicht ="if(lw.gewicht = 0,ifnull(art.gewicht,'0') ,lw.gewicht) *lw.menge";
$colvolumen = "if(lw.volumen=0,ifnull(art.laenge,'0')*ifnull(art.breite,'0')*ifnull(art.hoehe,'0'),lw.volumen)*lw.menge"; $colvolumen = "if(lw.volumen=0,ifnull(art.laenge,'0')*ifnull(art.breite,'0')*ifnull(art.hoehe,'0'),lw.volumen)*lw.menge";
$colkurzbezeichnung = 'lp.kurzbezeichnung'; $colkurzbezeichnung = 'lp.kurzbezeichnung';
@ -671,150 +636,53 @@ class Lager extends GenLager {
$colkurzbezeichnung = 'lpi.kurzbezeichnung'; $colkurzbezeichnung = 'lpi.kurzbezeichnung';
$colbezeichnung = 'lpi.bezeichnung'; $colbezeichnung = 'lpi.bezeichnung';
} }
$heading = array('Datum','Artikel-Nr.','Artikel','Artikelkategorie','Lager','Lagerplatz','Menge','Gewicht','Volumen','EK-Preis','Gesamt','Währung','letzte Bewegung', ''); $heading = array('Datum','Artikel-Nr.','Artikel','Artikelkategorie','Lager','Lagerplatz','Menge','Gewicht','Volumen','EK-Preis','Währung','Kurs','Gesamt','invisible!?','letzte Bewegung','');
$width = array('5%','10%','20%','10%','10%','10%','5%','5%','5%','5%','5%','5%','8%', '1%'); $width = array( '5%', '05%', '20%', '10%', '10%', '5%' , '5%', '5%', '5%', '5%', '5%', '5%', '1%', '23%', '5%');
$findcols = array('lw.datum','art.nummer','art.name_de','(select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, \'kat\', 1), \'_\', 1) as type from artikel where id=art.id))', $colbezeichnung,$colkurzbezeichnung,$colmenge,$colgewicht,$colvolumen); $findcols = array('lw.datum','art.nummer','art.name_de','(select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, \'kat\', 1), \'_\', 1) as type from artikel where id=art.id))', $colbezeichnung,$colkurzbezeichnung,$colmenge,$colgewicht,$colvolumen);
$kursjoin = ""; $kursjoin = "";
$numbercols = array(9, 10); $preis = self::EinzelPreis($preisart,$live);
$datecols = array(0); $preiscol = $app->erp->FormatPreis($preis,2);
if($preisart == 'letzterek')
{
if ($preiseineuro) { if ($preiseineuro) {
$kursjoin = self::KursJoin($preisart, $datum); $kursjoin = self::KursJoin($preisart, $datum);
$dummy = self::PreisUmrechnung($app, $preisart, $live); $preisEUR = self::PreisUmrechnung($app, $preisart, true);
/*$dummy = ' $gesamtcol = "(".$preisEUR.'*'.$colmenge.")";
if( $kurs = $app->erp->FormatPreis('kurs',2);
ifnull(lw.kursletzt,0)<> 0
,
1 / lw.kursletzt
,
if(
ifnull(wt.kurs,0) <> 0
,
if(
wt.waehrung_nach = lw.waehrungletzt,
(1/wt.kurs),
wt.kurs
)
,
if(lw.waehrungletzt = \'USD\',
1.0 / '.$kursusd.',
if(lw.waehrungletzt = \'CHF\',
1.0 / '.$kurschf.',
1)
)
)
)
* ifnull(lw.preis_letzterek,0)
';*/
} else { } else {
//$dummy = 'ifnull(lw.preis_letzterek,0)'; $gesamtcol = "(".$preis.'*'.$colmenge.")";
$dummy = self::EinzelPreis($preisart,$live); $kurs = 1;
} }
$findcols[] = $dummy;
$preiscol = $app->erp->FormatPreis($dummy,2); $waehrungcol = self::Waehrung($preisart,$live);
$gesamtcol = "(".$dummy.'*'.$colmenge.")"; $findcols[] = $preis;
$findcols[] = 'waehrung';
$findcols[] = 'kurs';
$findcols[] = $gesamtcol; $findcols[] = $gesamtcol;
//$waehrungcol = 'lw.waehrungletzt';
$waehrungcol = self::Waehrung($preisart,$live);
$findcols[] = $waehrungcol;
}elseif($preisart == 'inventurwert'){
if($preiseineuro){
$dummy = self::PreisUmrechnung($app, $preisart, $live);
$kursjoin = self::KursJoin($preisart, $datum);
}else{
$dummy = 'if(ifnull(lw.inventurwert,0) = 0 AND art.inventurekaktiv = 1, ifnull(art.inventurek,0), ifnull(lw.inventurwert,0))';
$dummy = $dummy = self::EinzelPreis($preisart,$live);
}
$findcols[] = $dummy;
$preiscol = $app->erp->FormatPreis($dummy,2);
$findcols[] = $dummy.'*'.$colmenge;
//$gesamtcol = $app->erp->FormatPreis($dummy.'*'.$colmenge,2);
$gesamtcol = "(".$dummy.'*'.$colmenge.")";
//$waehrungcol = "'EUR'";
$waehrungcol = self::Waehrung($preisart,$live);
$findcols[] = $waehrungcol;
}else{
if($preiseineuro){
$kursjoin = self::KursJoin($preisart, $datum);
/*$dummy = '
if(
if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0))<> 0
,
1 / if(ifnull(lw.preis_kalkulierterek,0) <> 0,ifnull(lw.kurskalk,0),ifnull(lw.kursletzt,0))
,
if(
ifnull(wt.kurs,0) <> 0
,
if(
wt.waehrung_nach = if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt),
(1/wt.kurs),
wt.kurs
)
,
if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'USD\',
1.0 / '.$kursusd.',
if(if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.kurskalk,lw.kursletzt) = \'CHF\',
1.0 / '.$kurschf.',
1)
)
)
)
* if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0))
';*/
$dummy = self::PreisUmrechnung($app, $preisart, $live);
//$dummy = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0))';
}else{
//$dummy = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.preis_kalkulierterek,ifnull(lw.preis_letzterek,0))';
$dummy = self::EinzelPreis($preisart,$live);
}
$findcols[] = $dummy;
$preiscol = $app->erp->FormatPreis($dummy,2);
$findcols[] = '('.$dummy.'*'.$colmenge.')';
//$gesamtcol = $app->erp->FormatPreis('('.$dummy.'*'.$colmenge.')',2);
$gesamtcol = '('.$dummy.'*'.$colmenge.')';
//$waehrungcol = 'if(ifnull(lw.preis_kalkulierterek,0) <> 0,lw.waehrungkalk,lw.waehrungletzt)';
$waehrungcol = self::Waehrung($preisart,$live);
$findcols[] = $waehrungcol;
}
$findcols[] = 'lw.letzte_bewegung';
$findcols[] = 'art.id'; $findcols[] = 'art.id';
//$searchsql = array('art.nummer','art.name_de','lag.bezeichnung','lp.kurzbezeichnung');
$searchsql = $findcols; $searchsql = $findcols;
$searchsql[0] = "date_format(lw.datum,'%d.%m.%Y')"; $searchsql[0] = "date_format(lw.datum,'%d.%m.%Y')";
$searchsql[11] = "date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s')"; $searchsql[13] = "date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s')";
$searchsql[12] = "date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s')";
//$columnfilter = true;
$defaultorder = 1; $defaultorder = 1;
$defaultorderdesc = 0; $defaultorderdesc = 0;
$alignright = array(7,8,9,10,11); $alignright = array(7,8,9,10,11,12,13);
$sumcol = array(8,9,11); $sumcol = array(7,8,9,13);
$numbercols = array(7,8,9,10,12,13);
$datecols = array(0);
$onequeryperuser = true; $onequeryperuser = true;
$joinek = ' LEFT JOIN '.self::LetzterEK('art', 'e1','e2').' ek ON art.id = ek.artikel'; $joinek = ' LEFT JOIN '.self::LetzterEK('art', 'e1','e2').' ek ON art.id = ek.artikel';
if($artikelkategorie > 0){
$joinartikelbaum = ' LEFT JOIN artikelbaum_artikel aba ON art.id = aba.artikel';
}
$waehrungcolanz = $waehrungcol;
if($preiseineuro){
$waehrungcolanz = "'EUR'";
}
if (!$live) if (!$live)
{ {
$findcols[] = 'lw.letzte_bewegung';
$sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(lw.datum,'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lag.bezeichnung, lp.kurzbezeichnung, $sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(lw.datum,'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lag.bezeichnung, lp.kurzbezeichnung,
".$app->erp->FormatMenge('lw.menge',2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)." ".$app->erp->FormatMenge('lw.menge',2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)."
, $preiscol, ".$app->erp->FormatPreis($gesamtcol,2).", $waehrungcolanz ,ifnull(date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s'), ''), art.id , $preiscol, $waehrungcol, ".$kurs.", ".$app->erp->FormatPreis($gesamtcol,2).", '', ifnull(date_format(lw.letzte_bewegung,'%d.%m.%Y %H:%i:%s'), ''), art.id
FROM artikel art FROM artikel art
INNER JOIN lagerwert lw ON lw.artikel = art.id AND (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1 INNER JOIN lagerwert lw ON lw.artikel = art.id AND (isnull(art.geloescht) OR art.geloescht = 0) AND art.lagerartikel = 1
$joinek $joinek
@ -828,37 +696,21 @@ class Lager extends GenLager {
$sql .= "INNER JOIN (SELECT '' as kurzbezeichnung ) lp ON lp.kurzbezeichnung = '' $sql .= "INNER JOIN (SELECT '' as kurzbezeichnung ) lp ON lp.kurzbezeichnung = ''
INNER JOIN lager lag ON lw.lager = lag.id INNER JOIN lager lag ON lw.lager = lag.id
"; ";
$where .= " AND lw.lager <> 0"; $where .= " AND lw.lager <> 0";
if($lager)
{
$where .= " AND lw.lager = '$lager' ";
}
if($lagerplatz)
{
$where .= " AND lw.lager_platz = '$lagerplatz' ";
}
} else { } else {
$sql .= "INNER JOIN lager_platz lp ON lp.id = lw.lager_platz $sql .= "INNER JOIN lager_platz lp ON lp.id = lw.lager_platz
INNER JOIN lager lag ON lag.id = lp.lager INNER JOIN lager lag ON lag.id = lp.lager
"; ";
$where .= " AND lw.lager = 0"; $where .= " AND lw.lager = 0";
if($lager)
{
$where .= " AND lw.lager = '$lager' ";
}
if($lagerplatz)
{
$where .= " AND lw.lager_platz = '$lagerplatz' ";
}
} }
} else { } else {
$findcols[0] = 'curdate()'; $findcols[0] = 'curdate()';
$findcols[] = 'lbew.zeit';
$sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(curdate(),'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lpi.bezeichnung, lpi.kurzbezeichnung, $sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS art.id, date_format(curdate(),'%d.%m.%Y'), art.nummer, art.name_de, (select bezeichnung from artikelkategorien where id=(select SUBSTRING_INDEX(SUBSTRING_INDEX(art.typ, 'kat', 1), '_', 1) as type from artikel where id=art.id)) as artikelkategorie, lpi.bezeichnung, lpi.kurzbezeichnung,
".$app->erp->FormatMenge($colmenge,2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)." ".$app->erp->FormatMenge($colmenge,2).",".$app->erp->FormatPreis($colgewicht,2).",".$app->erp->FormatPreis($colvolumen,2)."
, $preiscol, ".$app->erp->FormatPreis($gesamtcol,2).", $waehrungcolanz ,ifnull(date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s'), ''), art.id , $preiscol, $waehrungcol, ".$kurs.", ".$app->erp->FormatPreis($gesamtcol,2).", '', ifnull(date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s'), ''), art.id
FROM artikel art FROM artikel art
$joinek $joinek
$joinartikelbaum $joinartikelbaum
@ -889,7 +741,6 @@ class Lager extends GenLager {
{ {
$where .= " AND lpi.lager = '$lager' "; $where .= " AND lpi.lager = '$lager' ";
} }
//if($lagerplatz)$where .= " AND lpi.lager_platz = '$lagerplatz' ";
} else { } else {
$sql .= "INNER JOIN ( $sql .= "INNER JOIN (
SELECT lager_platz_inhalt.artikel, sum(lager_platz_inhalt.menge) as menge, lager_platz.kurzbezeichnung,lager.bezeichnung, lager.id as lager,lager_platz.id as lager_platz SELECT lager_platz_inhalt.artikel, sum(lager_platz_inhalt.menge) as menge, lager_platz.kurzbezeichnung,lager.bezeichnung, lager.id as lager,lager_platz.id as lager_platz
@ -913,12 +764,6 @@ class Lager extends GenLager {
$where .= " AND lpi.lager = '$lager' "; $where .= " AND lpi.lager = '$lager' ";
} }
} }
$findcols[10] = "CAST($gesamtcol as DECIMAL(10,2))";
$findcols[11] = $waehrungcol;
$findcols[12] = "ifnull(lbew.zeit, '')";
$searchsql[12] = "date_format(lbew.zeit,'%d.%m.%Y %H:%i:%s')";
} }
if($artikel) if($artikel)
@ -927,7 +772,6 @@ class Lager extends GenLager {
} }
if($artikelkategorie > 0){ if($artikelkategorie > 0){
$where .= " AND (aba.kategorie = '$artikelkategorie' OR art.typ = '".$artikelkategorie."_kat') "; $where .= " AND (aba.kategorie = '$artikelkategorie' OR art.typ = '".$artikelkategorie."_kat') ";
//$where .= " AND art.typ = '".$artikelkategorie."_kat' ";
} }
$sql = $app->YUI->CodiereSQLForOneQuery($sql, $name); $sql = $app->YUI->CodiereSQLForOneQuery($sql, $name);