Bugfix produktion non-stock artikel

This commit is contained in:
OpenXE 2023-01-10 19:59:26 +01:00
parent cad0103b7f
commit 1fdd6dbf95
4 changed files with 56 additions and 29 deletions

View File

@ -1085,7 +1085,7 @@ $tooltip['produktion']['abschluss']['#mengeerfolgreich'] = 'Höhere Mengen als d
$tooltip['produktion']['edit']['#mengeerfolgreich'] = $tooltip['produktion']['abschluss']['#mengeerfolgreich'];
$tooltip['produktion']['create']['#standardlager'] = "Lager, aus dem die Artikel für die Produktion ausgelagert werden sollen. Hier können alle Lager ausgewählt werden, in denen sich mindestens ein Lagerplatz befindet, aus dem Produktionen ausgelagert werden dürfen (Einstellung auf Regalebene unter Lager => Lagerverwaltung).";
$tooltip['produktion']['edit']['#standardlager'] = $tooltip['produktion']['create']['#standardlager'];
$tooltip['produktion']['edit']['#ziellager'] = "Wenn kein Ziellager angegenen ist, wird in das Standard-Lager des Artikels gebucht, wenn es das nicht gibt, in das Materiallager der Produktion.";
/* PROJEKT */

View File

@ -191,7 +191,7 @@
<td><input type="number" min="0" name="menge_ausschuss_produzieren" id="menge_ausschuss_produzieren" value="[MENGE_AUSSCHUSS_PRODUZIEREN]" size="20"></td>
</tr>
<tr [AKTION_PRODUZIEREN_VISIBLE]>
<td>{|Ziellager|}:</td>
<td>{|Ziellager|}:</td><i>Info like this.</i>
<td><input type="text" name="ziellager" id="ziellager" value="[ZIELLAGER]" size="20"></td>
</tr>
</table>
@ -243,7 +243,7 @@
</div>
<div id="tabs-3">
[MESSAGE]
<form action="" method="post">
<form action="index.php?module=produktion_position&action=edit&produktion=[PRODUKTION_ID]" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
@ -252,6 +252,15 @@
<fieldset>
<legend>{|Positionen|}</legend>
[PRODUKTION_POSITION_SOURCE_POSITION_TABELLE]
<table width="100%" border="0" class="mkTableFormular">
<tr [AKTION_FREIGEBEN]>
<td>{|Artikel|}:</td>
<td><input type="text" name="artikel" id="artikel" size="20"></td>
<td>{|Menge|}:</td>
<td><input type="number" min="0" name="menge" id="menge" size="20"></td>
<td><button name="submit" value="hinzufuegen" class="ui-button-icon" style="width:100%;">Hinzuf&uuml;gen</button></td>
</tr>
</table>
</fieldset>
</div>
</div>

View File

@ -179,8 +179,8 @@ class Produktion {
$width = array( '1%','1%','5%', '30%', '5%', '1%', '1%', '1%' , '1%', '1%', '1%' ,'1%');
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=produktion_position&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=produktion_position&action=delete&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
} else {
$heading = array('','','Nummer', 'Artikel', 'Projekt','Planmenge pro St&uuml;ck', 'Lager (verf&uuml;gbar)', 'Reserviert','Planmenge', 'Verbraucht','');
$width = array('1%','1%', '5%','30%', '5%', '1%', '1%', '1%' , '1%' ,'1%' ,'1%');
$heading = array('','','Nummer', 'Artikel', 'Projekt','Planmenge pro St&uuml;ck', 'Lager alle (verf&uuml;gbar)', 'Lager (verf&uuml;gbar)', 'Reserviert', 'Planmenge', 'Verbraucht', '');
$width = array( '1%','1%','5%', '30%', '5%', '1%', '1%', '1%' , '1%', '1%', '1%' ,'1%');
$menu = "";
}
@ -201,6 +201,7 @@ class Produktion {
(SELECT a.name_de FROM artikel a WHERE a.id = p.artikel LIMIT 1) as name,
(SELECT projekt.abkuerzung FROM projekt INNER JOIN artikel a WHERE a.projekt = projekt.id AND a.id = p.artikel LIMIT 1) as projekt,
FORMAT(p.menge/$produktionsmenge,0,'de_DE') as stueckmenge,
IF ((SELECT lagerartikel FROM artikel a WHERE a.id = p.artikel LIMIT 1) != 0,
CONCAT (
FORMAT (IFNULL((SELECT SUM(menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel = p.artikel),0),0,'de_DE'),
' (',
@ -211,8 +212,8 @@ class Produktion {
'de_DE'
),
')'
) as lageralle,
if ('$standardlager' = '0','-',
),'') as lageralle,
if (('$standardlager' != '0') && ((SELECT lagerartikel FROM artikel a WHERE a.id = p.artikel LIMIT 1) != 0),
CONCAT (
FORMAT (IFNULL((SELECT SUM(menge) FROM lager_platz_inhalt lpi WHERE lpi.lager_platz = $standardlager AND lpi.artikel = p.artikel),0),0,'de_DE'),
' (',
@ -224,6 +225,7 @@ class Produktion {
),
')'
)
,''
) as lager,
FORMAT ((SELECT SUM(menge) FROM lager_reserviert r WHERE r.lager_platz = $standardlager AND r.artikel = p.artikel AND r.objekt = 'produktion' AND r.parameter = $id AND r.posid = p.id),0,'de_DE') as Reserviert,
FORMAT(p.menge,0,'de_DE'),
@ -268,6 +270,7 @@ class Produktion {
(SELECT a.name_de FROM artikel a WHERE a.id = p.artikel LIMIT 1) as name,
(SELECT projekt.abkuerzung FROM projekt INNER JOIN artikel a WHERE a.projekt = projekt.id AND a.id = p.artikel LIMIT 1) as projekt,
FORMAT(SUM(p.menge)/$produktionsmenge,0,'de_DE') as stueckmenge,
IF ((SELECT lagerartikel FROM artikel a WHERE a.id = p.artikel LIMIT 1) != 0,
CONCAT (
FORMAT (IFNULL((SELECT SUM(menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel = p.artikel),0),0,'de_DE'),
' (',
@ -278,8 +281,8 @@ class Produktion {
'de_DE'
),
')'
) as lageralle,
if ('$standardlager' = '0','-',
),'') as lageralle,
if (('$standardlager' != '0') && ((SELECT lagerartikel FROM artikel a WHERE a.id = p.artikel LIMIT 1) != 0),
CONCAT (
FORMAT (IFNULL((SELECT SUM(menge) FROM lager_platz_inhalt lpi WHERE lpi.lager_platz = $standardlager AND lpi.artikel = p.artikel),0),0,'de_DE'),
' (',
@ -291,6 +294,7 @@ class Produktion {
),
')'
)
,''
) as lager,
FORMAT ((SELECT SUM(menge) FROM lager_reserviert r WHERE r.lager_platz = $standardlager AND r.artikel = p.artikel AND r.objekt = 'produktion' AND r.parameter = $id),0,'de_DE') as reserviert,
FORMAT(SUM(p.menge),0,'de_DE') as menge,
@ -579,7 +583,7 @@ class Produktion {
$sql = "UPDATE produktion SET status = 'gestartet' WHERE id=$id";
$this->app->DB->Update($sql);
$sql = "SELECT id, artikel, menge, geliefert_menge, stuecklistestufe FROM produktion_position pp WHERE produktion=$id";
$sql = "SELECT pp.id, pp.artikel, pp.menge, pp.geliefert_menge, pp.stuecklistestufe, a.lagerartikel FROM produktion_position pp INNER JOIN artikel a ON a.id = pp.artikel WHERE pp.produktion=$id";
$material = $this->app->DB->SelectArr($sql);
foreach ($material as $material_position) {
@ -588,7 +592,7 @@ class Produktion {
$menge_artikel_auslagern = $material_position['menge']/$produktionsartikel_position['menge']*$menge_auslagern;
// Remove material from stock
if ($material_position['stuecklistestufe'] == 0) {
if ($material_position['stuecklistestufe'] == 0 && $material_position['lagerartikel']) {
$result = $this->app->erp->LagerAuslagernRegal($material_position['artikel'],$global_standardlager,$menge_artikel_auslagern,$global_projekt,'Produktion '.$produktion_belegnr);
if ($result != 1) {
$msg .= "<div class=\"error\">Kritischer Fehler beim Ausbuchen! (Position ".$material_position['id'].", Menge ".$menge_artikel_auslagern.").</div>".
@ -1046,7 +1050,7 @@ class Produktion {
}
if($produktion_from_db['standardlager'] == 0) {
$msg .= "<div class=\"error\">Kein Lager ausgew&auml;hlt.</div>";
$msg .= "<div class=\"error\">Kein Materiallager ausgew&auml;hlt.</div>";
}
$this->app->YUI->AutoComplete("projekt", "projektname", 1);
@ -1054,10 +1058,13 @@ class Produktion {
$this->app->YUI->AutoComplete("auftragid", "auftrag", 1);
$this->app->YUI->AutoComplete("artikel_planen", "stuecklistenartikel");
$this->app->YUI->AutoComplete("artikel_hinzu", "artikelnummer");
$this->app->YUI->AutoComplete("standardlager", "lagerplatz");
$this->app->YUI->AutoComplete("ziellager", "lagerplatz");
$this->app->YUI->AutoComplete("artikel", "artikelnummer");
$this->app->Tpl->Set('STANDARDLAGER', $this->app->erp->ReplaceLagerPlatz(false,$produktion_from_db['standardlager'],false)); // Convert ID to form display
$this->app->YUI->DatePicker("datum");
@ -1172,6 +1179,8 @@ class Produktion {
break;
}
$this->app->Tpl->Set('PRODUKTION_ID',$id);
$this->app->Tpl->Set('MESSAGE', $msg);
$this->produktion_minidetail('MINIDETAILINEDIT');
$this->app->Tpl->Parse('PAGE', "produktion_edit.tpl");
@ -1267,7 +1276,7 @@ class Produktion {
$menge_moeglich = PHP_INT_MAX;
$sql = "SELECT id, artikel, SUM(menge) as menge, geliefert_menge FROM produktion_position pp WHERE produktion=$produktion_id AND stuecklistestufe=0 GROUP BY artikel";
$sql = "SELECT pp.id, artikel, SUM(menge) as menge, geliefert_menge FROM produktion_position pp INNER JOIN artikel a ON pp.artikel = a.id WHERE pp.produktion=$produktion_id AND pp.stuecklistestufe=0 AND a.lagerartikel != 0 GROUP BY artikel";
$materialbedarf_gesamt = $this->app->DB->SelectArr($sql);
$sql = "SELECT id, artikel, SUM(menge) as menge, geliefert_menge as geliefert_menge FROM produktion_position pp WHERE produktion=$produktion_id AND stuecklistestufe=1 GROUP BY artikel";

View File

@ -86,7 +86,6 @@ class Produktion_position {
}
if ($go_to_production) {
if ($pid == 0) {
$id = (int) $this->app->Secure->GetGET('id');
$sql = "SELECT p.status, p.id from produktion p INNER JOIN produktion_position pp ON pp.produktion = p.id WHERE pp.id = $id";
@ -138,17 +137,27 @@ class Produktion_position {
if (empty($id)) {
// New item
$id = 'NULL';
}
$produktion_id = $this->app->Secure->GetGET('produktion');
$sql = "SELECT p.status from produktion p WHERE p.id = $produktion_id";
$result = $this->app->DB->SelectArr($sql)[0];
$status = $result['status'];
} else {
$sql = "SELECT p.status, p.id from produktion p INNER JOIN produktion_position pp ON pp.produktion = p.id WHERE pp.id = $id";
$result = $this->app->DB->SelectArr($sql)[0];
$status = $result['status'];
$produktion_id = $result['id'];
}
$input['produktion'] = $produktion_id;
$sql = "SELECT FORMAT(menge,0) as menge FROM produktion_position WHERE produktion = $produktion_id AND stuecklistestufe = 1";
$result = $this->app->DB->SelectArr($sql)[0];
$planmenge = $result['menge'];
if ($planmenge == 0) {
$this->produktion_position_edit_end("Keine Planung vorhanden.",true, true, $produktion_id);
}
if ($submit != '')
{
@ -168,7 +177,7 @@ class Produktion_position {
// Only allow quantities that are a multiple of the target quantity
if ($input['menge'] % $planmenge != 0) {
$this->produktion_position_edit_end("Positionsmenge muss Vielfaches von $planmenge sein.",true, true);
$this->produktion_position_edit_end("Positionsmenge muss Vielfaches von $planmenge sein.",true, true, $produktion_id);
}
$columns = "id, ";
@ -200,7 +209,7 @@ class Produktion_position {
} else {
$msg = "Die Einstellungen wurden erfolgreich &uuml;bernommen.";
}
$this->produktion_position_edit_end($msg,false,true);
$this->produktion_position_edit_end($msg,false,true,$produktion_id);
}
@ -222,8 +231,8 @@ class Produktion_position {
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
*/
//$this->app->YUI->AutoComplete("artikel", "artikelnummer");
$this->app->YUI->AutoComplete("artikel", "lagerartikelnummer");
$this->app->YUI->AutoComplete("artikel", "artikelnummer");
//$this->app->YUI->AutoComplete("artikel", "lagerartikelnummer");
$this->app->Tpl->Set('ARTIKEL',$this->app->erp->ReplaceArtikel(false, $result[0]['artikel'], false)); // Convert from form to db
$this->app->Tpl->Set('PRODUKTIONID',$result[0]['produktion']);