";
break;
case 'freigeben':
@@ -389,7 +390,7 @@ class Produktion {
// Check quantities and reserve for every position
if($global_standardlager == 0) {
- $msg = "
Kein Lager ausgewählt.
";
+ $msg .= "
Kein Lager ausgewählt.
";
break;
}
@@ -399,7 +400,7 @@ class Produktion {
// Try to reserve material
$reservierung_durchgefuehrt = false;
foreach ($materialbedarf as $materialbedarf_position) {
- $result = $this->ArtikelReservieren($materialbedarf_position['artikel'], $global_standardlager, $materialbedarf_position['menge'], 'produktion', $id, $materialbedarf_position['id'],"Produktion $global_produktionsnummer");
+ $result = $this->ArtikelReservieren($materialbedarf_position['artikel'], $global_standardlager, $materialbedarf_position['menge']-$materialbedarf_position['geliefert_menge'], 0, 'produktion', $id, $materialbedarf_position['id'],"Produktion $global_produktionsnummer");
if ($result > 0) {
$reservierung_durchgefuehrt = true;
}
@@ -407,23 +408,21 @@ class Produktion {
// Message output
if ($reservierung_durchgefuehrt) {
- $msg = "
Reservierung durchgeführt.
";
+ $msg .= "
Reservierung durchgeführt.
";
} else {
- $msg = "
Keine Reservierung durchgeführt!
";
+ $msg .= "
Keine Reservierung durchgeführt!
";
}
-
break;
case 'produzieren':
// Check quanitites -> all must be reserved before production
-
- // Parse positions
+ // Parse positions
$sql = "SELECT artikel, FORMAT(menge,0) as menge, FORMAT(geliefert_menge,0) as geliefert_menge FROM produktion_position pp WHERE produktion=$id AND stuecklistestufe=1";
$produktionsartikel_position = $this->app->DB->SelectArr($sql)[0];
if (empty($produktionsartikel_position)) {
- $msg = "
");
header("Location: index.php?module=produktion&action=list&msg=$msg");
+ break;
+ case 'leeren':
+
+ if ($global_status == 'angelegt' || $global_status == 'freigegeben') {
+ $sql = "SELECT id, artikel, FORMAT(menge,0) as menge, FORMAT(geliefert_menge,0) as geliefert_menge FROM produktion_position pp WHERE produktion=$id AND stuecklistestufe=0";
+ $material = $this->app->DB->SelectArr($sql);
+ foreach ($material as $material_position) {
+ // Remove reservation
+ $result = $this->ArtikelReservieren($material_position['artikel'],$global_standardlager,0,0,'produktion',$id,$material_position['id'],"Produktion $global_produktionsnummer");
+ }
+ $sql = "DELETE FROM produktion_position WHERE produktion = $id";
+ $this->app->DB->Update($sql);
+ $msg .= "
Planung geleert.
";
+ } else {
+ $msg .= "
Planung kann nicht geleert werden.
";
+ }
+
break;
case 'abschliessen':
$sql = "UPDATE produktion SET status = 'abgeschlossen' WHERE id=$id";
@@ -616,8 +655,7 @@ class Produktion {
foreach ($material as $material_position) {
// Remove reservation
-
- $result = $this->ArtikelReservieren($material_position['artikel'],$global_standardlager,0,'produktion',$id,$material_position['id'],"Produktion $global_produktionsnummer");
+ $result = $this->ArtikelReservieren($material_position['artikel'],$global_standardlager,0,0,'produktion',$id,$material_position['id'],"Produktion $global_produktionsnummer");
}
break;
@@ -811,7 +849,7 @@ class Produktion {
$teilproduktionen = $this->app->DB->SelectArr($sql);
if (!empty($teilproduktionen)) {
- $this->app->Tpl->Set('TEILPRODUKTIONINFO',"Zu dieser Produktion gehören diese Teilproduktionen: ".implode(', ',array_column($teilproduktionen,'belegnr')));
+ $this->app->Tpl->Set('TEILPRODUKTIONINFO',"Zu dieser Produktion gehören die Teilproduktionen: ".implode(', ',array_column($teilproduktionen,'belegnr')));
}
$this->app->YUI->AutoComplete("projekt", "projektname", 1);
@@ -854,12 +892,16 @@ class Produktion {
*/
// Reparse positions
- $sql = "SELECT id,artikel, FORMAT(menge,0) as menge FROM produktion_position pp WHERE produktion=$id AND stuecklistestufe=1";
+ $sql = "SELECT id,artikel, FORMAT(menge,0) as menge, FORMAT(geliefert_menge,0) as geliefert_menge FROM produktion_position pp WHERE produktion=$id AND stuecklistestufe=1";
$produktionsartikel_position = $this->app->DB->SelectArr($sql)[0];
if (empty($produktionsartikel_position)) {
$this->app->Tpl->Set('AKTION_FREIGEBEN_VISIBLE','hidden');
- $this->app->Tpl->Set('ARTIKEL_MENGE_VISIBLE','hidden');
+ $this->app->Tpl->Set('ARTIKEL_MENGE_VISIBLE','hidden');
+ $this->app->Tpl->Set('AKTION_PRODUZIEREN_VISIBLE','hidden');
+ $this->app->Tpl->Set('AKTION_LEEREN_VISIBLE','hidden');
+ $this->app->Tpl->Set('AKTION_RESERVIEREN_VISIBLE','hidden');
+ $this->app->Tpl->Set('AKTION_TEILEN_VISIBLE','hidden');
} else {
$this->app->Tpl->Set('MENGE_GEPLANT',$produktionsartikel_position['menge']);
@@ -867,9 +909,11 @@ class Produktion {
$menge_offen = $produktionsartikel_position['menge']-$produktion_from_db['mengeerfolgreich'];
if ($menge_offen < 0) {
$menge_offen = 0;
- $msg = "
Planmenge überschritten.
";
+ $msg .= "
Planmenge überschritten.
";
}
+ $this->app->Tpl->Set('MENGE_PRODUZIERT',$produktionsartikel_position['geliefert_menge']);
+
$this->app->Tpl->Set('MENGE_OFFEN',$menge_offen);
$this->app->Tpl->Set('MENGE_PRODUZIERBAR',$this->LagerCheckProduktion($id, $produktion_from_db['standardlager']));
@@ -903,11 +947,11 @@ class Produktion {
break;
case 'freigegeben':
$this->app->Tpl->Set('AKTION_FREIGEBEN_VISIBLE','hidden');
- $this->app->Tpl->Set('AKTION_PLANEN_VISIBLE','hidden');
break;
case 'gestartet':
$this->app->Tpl->Set('AKTION_FREIGEBEN_VISIBLE','hidden');
$this->app->Tpl->Set('AKTION_PLANEN_VISIBLE','hidden');
+ $this->app->Tpl->Set('AKTION_LEEREN_VISIBLE','hidden');
break;
case 'abgeschlossen':
case 'storniert':
@@ -918,6 +962,7 @@ class Produktion {
$this->app->Tpl->Set('AKTION_PRODUZIEREN_VISIBLE','hidden');
$this->app->Tpl->Set('AKTION_TEILEN_VISIBLE','hidden');
$this->app->Tpl->Set('AKTION_ABSCHLIESSEN_VISIBLE','hidden');
+ $this->app->Tpl->Set('AKTION_LEEREN_VISIBLE','hidden');
break;
default: // new item
$this->app->Tpl->Set('POSITIONEN_TAB_VISIBLE','hidden="hidden"');
@@ -1020,9 +1065,10 @@ class Produktion {
}
// Modify or add reservation
- // If amount is negative, the existing reservation will be reduced
+ // If quantity is negative, the existing reservation will be reduced
+ // If current quantity is higher as menge_reservieren_limit, current quantity will be reduced
// Returns amount that is reserved
- function ArtikelReservieren(int $artikel, $lager, int $menge_reservieren, string $objekt, int $objekt_id, int $position_id, string $text) : int {
+ function ArtikelReservieren(int $artikel, $lager, int $menge_reservieren, int $menge_reservieren_limit, string $objekt, int $objekt_id, int $position_id, string $text) : int {
if($lager <= 0 || $artikel <= 0 || $position_id <= 0) {
return 0;
@@ -1054,7 +1100,7 @@ class Produktion {
}
}
- if ($menge_reservieren == 0) {
+ if (($menge_reservieren == 0) && ($menge_reservieren_limit <= 0)) {
$sql = "DELETE FROM lager_reserviert WHERE objekt = '$objekt' AND parameter = $objekt_id AND artikel = $artikel AND posid = $position_id";
$this->app->DB->Update($sql);
return(0);
@@ -1062,6 +1108,15 @@ class Produktion {
$menge_lager_reservierbar = $menge_lager - $menge_reserviert_lager_platz + $menge_reserviert_diese;
+ if ($menge_reservieren_limit > 0) {
+ if ($menge_reserviert_diese > $menge_reservieren_limit) {
+ $menge_reservieren = $menge_reservieren_limit;
+ } else {
+ // Nothing to do
+ return($menge_reserviert_diese);
+ }
+ }
+
if ($menge_lager_reservierbar > 0) {
if ($menge_reserviert_diese > 0) {
// Modify given entry