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

@ -1083,9 +1083,9 @@ $tooltip['produktionszentrum']['abschluss']['#auftragmengenanpassen']="Die Menge
$tooltip['produktion']['abschluss']['#mengeerfolgreich'] = 'Höhere Mengen als die geplante Menge können nur mit der deaktivierten (kein Haken setzen) Systemeinstellung "Produktionskorrektur nicht verwenden" verbucht werden. '; $tooltip['produktion']['abschluss']['#mengeerfolgreich'] = 'Höhere Mengen als die geplante Menge können nur mit der deaktivierten (kein Haken setzen) Systemeinstellung "Produktionskorrektur nicht verwenden" verbucht werden. ';
$tooltip['produktion']['edit']['#mengeerfolgreich'] = $tooltip['produktion']['abschluss']['#mengeerfolgreich']; $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']['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']['#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 */ /* 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> <td><input type="number" min="0" name="menge_ausschuss_produzieren" id="menge_ausschuss_produzieren" value="[MENGE_AUSSCHUSS_PRODUZIEREN]" size="20"></td>
</tr> </tr>
<tr [AKTION_PRODUZIEREN_VISIBLE]> <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> <td><input type="text" name="ziellager" id="ziellager" value="[ZIELLAGER]" size="20"></td>
</tr> </tr>
</table> </table>
@ -243,7 +243,7 @@
</div> </div>
<div id="tabs-3"> <div id="tabs-3">
[MESSAGE] [MESSAGE]
<form action="" method="post"> <form action="index.php?module=produktion_position&action=edit&produktion=[PRODUKTION_ID]" method="post">
[FORMHANDLEREVENT] [FORMHANDLEREVENT]
<div class="row"> <div class="row">
<div class="row-height"> <div class="row-height">
@ -251,7 +251,16 @@
<div class="inside inside-full-height"> <div class="inside inside-full-height">
<fieldset> <fieldset>
<legend>{|Positionen|}</legend> <legend>{|Positionen|}</legend>
[PRODUKTION_POSITION_SOURCE_POSITION_TABELLE] [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> </fieldset>
</div> </div>
</div> </div>

View File

@ -176,11 +176,11 @@ class Produktion {
if (in_array($status,array('angelegt','freigegeben'))) { if (in_array($status,array('angelegt','freigegeben'))) {
$heading = array('','','Nummer', 'Artikel', 'Projekt', 'Planmenge pro St&uuml;ck', 'Lager alle (verf&uuml;gbar)', 'Lager (verf&uuml;gbar)', 'Reserviert', 'Planmenge', 'Verbraucht', 'Men&uuml;'); $heading = array('','','Nummer', 'Artikel', 'Projekt', 'Planmenge pro St&uuml;ck', 'Lager alle (verf&uuml;gbar)', 'Lager (verf&uuml;gbar)', 'Reserviert', 'Planmenge', 'Verbraucht', 'Men&uuml;');
$width = array('1%','1%', '5%','30%', '5%', '1%', '1%', '1%' , '1%', '1%', '1%' ,'1%'); $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>"; $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 { } else {
$heading = array('','','Nummer', 'Artikel', 'Projekt','Planmenge pro St&uuml;ck', 'Lager (verf&uuml;gbar)', 'Reserviert','Planmenge', 'Verbraucht',''); $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%'); $width = array( '1%','1%','5%', '30%', '5%', '1%', '1%', '1%' , '1%', '1%', '1%' ,'1%');
$menu = ""; $menu = "";
} }
@ -201,6 +201,7 @@ class Produktion {
(SELECT a.name_de FROM artikel a WHERE a.id = p.artikel LIMIT 1) as name, (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, (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, FORMAT(p.menge/$produktionsmenge,0,'de_DE') as stueckmenge,
IF ((SELECT lagerartikel FROM artikel a WHERE a.id = p.artikel LIMIT 1) != 0,
CONCAT ( CONCAT (
FORMAT (IFNULL((SELECT SUM(menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel = p.artikel),0),0,'de_DE'), 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' 'de_DE'
), ),
')' ')'
) as lageralle, ),'') as lageralle,
if ('$standardlager' = '0','-', if (('$standardlager' != '0') && ((SELECT lagerartikel FROM artikel a WHERE a.id = p.artikel LIMIT 1) != 0),
CONCAT ( 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'), 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, ) 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 ((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'), 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 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, (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, 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 ( CONCAT (
FORMAT (IFNULL((SELECT SUM(menge) FROM lager_platz_inhalt lpi WHERE lpi.artikel = p.artikel),0),0,'de_DE'), 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' 'de_DE'
), ),
')' ')'
) as lageralle, ),'') as lageralle,
if ('$standardlager' = '0','-', if (('$standardlager' != '0') && ((SELECT lagerartikel FROM artikel a WHERE a.id = p.artikel LIMIT 1) != 0),
CONCAT ( 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'), 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, ) 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 ((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, FORMAT(SUM(p.menge),0,'de_DE') as menge,
@ -579,7 +583,7 @@ class Produktion {
$sql = "UPDATE produktion SET status = 'gestartet' WHERE id=$id"; $sql = "UPDATE produktion SET status = 'gestartet' WHERE id=$id";
$this->app->DB->Update($sql); $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); $material = $this->app->DB->SelectArr($sql);
foreach ($material as $material_position) { foreach ($material as $material_position) {
@ -588,7 +592,7 @@ class Produktion {
$menge_artikel_auslagern = $material_position['menge']/$produktionsartikel_position['menge']*$menge_auslagern; $menge_artikel_auslagern = $material_position['menge']/$produktionsartikel_position['menge']*$menge_auslagern;
// Remove material from stock // 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); $result = $this->app->erp->LagerAuslagernRegal($material_position['artikel'],$global_standardlager,$menge_artikel_auslagern,$global_projekt,'Produktion '.$produktion_belegnr);
if ($result != 1) { if ($result != 1) {
$msg .= "<div class=\"error\">Kritischer Fehler beim Ausbuchen! (Position ".$material_position['id'].", Menge ".$menge_artikel_auslagern.").</div>". $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) { 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); $this->app->YUI->AutoComplete("projekt", "projektname", 1);
@ -1054,10 +1058,13 @@ class Produktion {
$this->app->YUI->AutoComplete("auftragid", "auftrag", 1); $this->app->YUI->AutoComplete("auftragid", "auftrag", 1);
$this->app->YUI->AutoComplete("artikel_planen", "stuecklistenartikel"); $this->app->YUI->AutoComplete("artikel_planen", "stuecklistenartikel");
$this->app->YUI->AutoComplete("artikel_hinzu", "artikelnummer");
$this->app->YUI->AutoComplete("standardlager", "lagerplatz"); $this->app->YUI->AutoComplete("standardlager", "lagerplatz");
$this->app->YUI->AutoComplete("ziellager", "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->Tpl->Set('STANDARDLAGER', $this->app->erp->ReplaceLagerPlatz(false,$produktion_from_db['standardlager'],false)); // Convert ID to form display
$this->app->YUI->DatePicker("datum"); $this->app->YUI->DatePicker("datum");
@ -1172,6 +1179,8 @@ class Produktion {
break; break;
} }
$this->app->Tpl->Set('PRODUKTION_ID',$id);
$this->app->Tpl->Set('MESSAGE', $msg); $this->app->Tpl->Set('MESSAGE', $msg);
$this->produktion_minidetail('MINIDETAILINEDIT'); $this->produktion_minidetail('MINIDETAILINEDIT');
$this->app->Tpl->Parse('PAGE', "produktion_edit.tpl"); $this->app->Tpl->Parse('PAGE', "produktion_edit.tpl");
@ -1267,7 +1276,7 @@ class Produktion {
$menge_moeglich = PHP_INT_MAX; $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); $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"; $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 ($go_to_production) {
if ($pid == 0) { if ($pid == 0) {
$id = (int) $this->app->Secure->GetGET('id'); $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"; $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)) { if (empty($id)) {
// New item // New item
$id = 'NULL'; $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'];
} }
$sql = "SELECT p.status, p.id from produktion p INNER JOIN produktion_position pp ON pp.produktion = p.id WHERE pp.id = $id"; $input['produktion'] = $produktion_id;
$result = $this->app->DB->SelectArr($sql)[0];
$status = $result['status'];
$produktion_id = $result['id'];
$sql = "SELECT FORMAT(menge,0) as menge FROM produktion_position WHERE produktion = $produktion_id AND stuecklistestufe = 1"; $sql = "SELECT FORMAT(menge,0) as menge FROM produktion_position WHERE produktion = $produktion_id AND stuecklistestufe = 1";
$result = $this->app->DB->SelectArr($sql)[0]; $result = $this->app->DB->SelectArr($sql)[0];
$planmenge = $result['menge']; $planmenge = $result['menge'];
if ($planmenge == 0) {
$this->produktion_position_edit_end("Keine Planung vorhanden.",true, true, $produktion_id);
}
if ($submit != '') if ($submit != '')
{ {
@ -168,7 +177,7 @@ class Produktion_position {
// Only allow quantities that are a multiple of the target quantity // Only allow quantities that are a multiple of the target quantity
if ($input['menge'] % $planmenge != 0) { 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, "; $columns = "id, ";
@ -200,7 +209,7 @@ class Produktion_position {
} else { } else {
$msg = "Die Einstellungen wurden erfolgreich &uuml;bernommen."; $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->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
*/ */
//$this->app->YUI->AutoComplete("artikel", "artikelnummer"); $this->app->YUI->AutoComplete("artikel", "artikelnummer");
$this->app->YUI->AutoComplete("artikel", "lagerartikelnummer"); //$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('ARTIKEL',$this->app->erp->ReplaceArtikel(false, $result[0]['artikel'], false)); // Convert from form to db
$this->app->Tpl->Set('PRODUKTIONID',$result[0]['produktion']); $this->app->Tpl->Set('PRODUKTIONID',$result[0]['produktion']);