Produktion improvement using functions, production progress with reserved quantity
This commit is contained in:
parent
99d5804ffa
commit
06dbb9b8b8
|
|
@ -152,24 +152,26 @@
|
||||||
<tr [AKTION_PLANEN_VISIBLE]><td><input type="text" name="artikel_planen_menge" id="artikel_planen_menge" value="[ARTIKEL_PLANEN_MENGE]" size="20"></td></tr>
|
<tr [AKTION_PLANEN_VISIBLE]><td><input type="text" name="artikel_planen_menge" id="artikel_planen_menge" value="[ARTIKEL_PLANEN_MENGE]" size="20"></td></tr>
|
||||||
<tr [ARTIKEL_MENGE_VISIBLE]>
|
<tr [ARTIKEL_MENGE_VISIBLE]>
|
||||||
<td>{|Geplant|}:</td>
|
<td>{|Geplant|}:</td>
|
||||||
<td>{|Produziert|}:</td>
|
|
||||||
<td>{|Erfolgreich|}:</td>
|
|
||||||
</tr>
|
|
||||||
<tr [ARTIKEL_MENGE_VISIBLE]>
|
|
||||||
<td>[MENGE_GEPLANT]</td>
|
<td>[MENGE_GEPLANT]</td>
|
||||||
<td>[MENGE_PRODUZIERT]</td>
|
|
||||||
<td>[MENGEERFOLGREICH]</td>
|
|
||||||
</tr>
|
|
||||||
<tr [ARTIKEL_MENGE_VISIBLE]>
|
|
||||||
<td>{|Ausschuss|}:</td>
|
|
||||||
<td>{|Offen:|}</td>
|
<td>{|Offen:|}</td>
|
||||||
<td>{|Produzierbar:|}</td>
|
<td>[MENGE_OFFEN]</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr [ARTIKEL_MENGE_VISIBLE]>
|
<tr [ARTIKEL_MENGE_VISIBLE]>
|
||||||
<td>[MENGEAUSSCHUSS]</td>
|
<td>{|Produziert|}:</td>
|
||||||
<td>[MENGE_OFFEN]</td>
|
<td>[MENGE_PRODUZIERT]</td>
|
||||||
|
<td>{|Reserviert:|}</td>
|
||||||
|
<td>[MENGE_RESERVIERT]</td>
|
||||||
|
</tr>
|
||||||
|
<tr [ARTIKEL_MENGE_VISIBLE]>
|
||||||
|
<td>{|Erfolgreich|}:</td>
|
||||||
|
<td>[MENGEERFOLGREICH]</td>
|
||||||
|
<td>{|Produzierbar:|}</td>
|
||||||
<td>[MENGE_PRODUZIERBAR]</td>
|
<td>[MENGE_PRODUZIERBAR]</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tr>
|
||||||
|
<td>{|Ausschuss|}:</td>
|
||||||
|
<td>[MENGEAUSSCHUSS]</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -419,7 +419,7 @@ class Produktion {
|
||||||
break;
|
break;
|
||||||
case 'produzieren':
|
case 'produzieren':
|
||||||
|
|
||||||
// Check quanitites -> all must be reserved before production
|
// Check quanitites
|
||||||
// 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";
|
$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];
|
$produktionsartikel_position = $this->app->DB->SelectArr($sql)[0];
|
||||||
|
|
@ -448,7 +448,7 @@ class Produktion {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$menge_moeglich = $this->LagerCheckProduktion($id, $global_standardlager);
|
$menge_moeglich = $this->LagerCheckProduktion($id, $global_standardlager, false);
|
||||||
|
|
||||||
if ($menge_auslagern > $menge_moeglich) {
|
if ($menge_auslagern > $menge_moeglich) {
|
||||||
$msg .= "<div class=\"error\">Lagermenge nicht ausreichend. ($menge_auslagern > $menge_moeglich)</div>";
|
$msg .= "<div class=\"error\">Lagermenge nicht ausreichend. ($menge_auslagern > $menge_moeglich)</div>";
|
||||||
|
|
@ -500,21 +500,13 @@ class Produktion {
|
||||||
break;
|
break;
|
||||||
case 'teilen':
|
case 'teilen':
|
||||||
|
|
||||||
// Create partial sub production
|
// Create partial production
|
||||||
/*
|
|
||||||
Check open quantities
|
|
||||||
Reduce open quantities by partial
|
|
||||||
Adjust reservations
|
|
||||||
Add new production
|
|
||||||
Add partial quantities to new production
|
|
||||||
*/
|
|
||||||
|
|
||||||
$menge_abteilen = $this->app->Secure->GetPOST('menge_produzieren');
|
$menge_abteilen = $this->app->Secure->GetPOST('menge_produzieren');
|
||||||
|
|
||||||
$sql = "SELECT menge,geliefert_menge FROM produktion_position WHERE produktion = $id AND stuecklistestufe = 1";
|
$fortschritt = $this->MengeFortschritt($id,$global_standardlager);
|
||||||
$produktionsmengen_alt = $this->app->DB->SelectArr($sql)[0];
|
|
||||||
|
|
||||||
if ($menge_abteilen < 1 || $menge_abteilen > ($produktionsmengen_alt['menge']-$produktionsmengen_alt['geliefert_menge'])) {
|
if ($menge_abteilen < 1 || $menge_abteilen > ($fortschritt['geplant']-$fortschritt['produziert'])) {
|
||||||
$msg .= "<div class=\"error\">Ungültige Teilmenge.</div>";
|
$msg .= "<div class=\"error\">Ungültige Teilmenge.</div>";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -592,7 +584,7 @@ class Produktion {
|
||||||
// For the new positions
|
// For the new positions
|
||||||
$position['id'] = 'NULL';
|
$position['id'] = 'NULL';
|
||||||
$position['geliefert_menge'] = 0;
|
$position['geliefert_menge'] = 0;
|
||||||
$position['menge'] = $menge_abteilen*($position['menge']/$produktionsmengen_alt['menge']);
|
$position['menge'] = $menge_abteilen*($position['menge']/$fortschritt['geplant']);
|
||||||
$position['produktion'] = $produktion_neu_id;
|
$position['produktion'] = $produktion_neu_id;
|
||||||
|
|
||||||
$values = "";
|
$values = "";
|
||||||
|
|
@ -609,7 +601,7 @@ class Produktion {
|
||||||
// Reduce positions in old production
|
// Reduce positions in old production
|
||||||
$position['id'] = $pos_id;
|
$position['id'] = $pos_id;
|
||||||
$position['geliefert_menge'] = $geliefert_menge;
|
$position['geliefert_menge'] = $geliefert_menge;
|
||||||
$position['menge'] = $menge - $position['menge']; // old - part
|
$position['menge'] = $menge - $position['menge']; // old quantity - partial quantity
|
||||||
$position['produktion'] = $produktion_alt_id;
|
$position['produktion'] = $produktion_alt_id;
|
||||||
|
|
||||||
$fix = "";
|
$fix = "";
|
||||||
|
|
@ -922,6 +914,7 @@ class Produktion {
|
||||||
$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";
|
$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];
|
$produktionsartikel_position = $this->app->DB->SelectArr($sql)[0];
|
||||||
|
|
||||||
|
// Not planned
|
||||||
if (empty($produktionsartikel_position)) {
|
if (empty($produktionsartikel_position)) {
|
||||||
$this->app->Tpl->Set('AKTION_FREIGEBEN_VISIBLE','hidden');
|
$this->app->Tpl->Set('AKTION_FREIGEBEN_VISIBLE','hidden');
|
||||||
$this->app->Tpl->Set('ARTIKEL_MENGE_VISIBLE','hidden');
|
$this->app->Tpl->Set('ARTIKEL_MENGE_VISIBLE','hidden');
|
||||||
|
|
@ -930,23 +923,23 @@ class Produktion {
|
||||||
$this->app->Tpl->Set('AKTION_RESERVIEREN_VISIBLE','hidden');
|
$this->app->Tpl->Set('AKTION_RESERVIEREN_VISIBLE','hidden');
|
||||||
$this->app->Tpl->Set('AKTION_TEILEN_VISIBLE','hidden');
|
$this->app->Tpl->Set('AKTION_TEILEN_VISIBLE','hidden');
|
||||||
} else {
|
} else {
|
||||||
|
// Planned
|
||||||
|
|
||||||
$this->app->Tpl->Set('MENGE_GEPLANT',$produktionsartikel_position['menge']);
|
$fortschritt = $this->MengeFortschritt($id, $produktion_from_db['standardlager']);
|
||||||
|
|
||||||
$menge_offen = $produktionsartikel_position['menge']-$produktion_from_db['mengeerfolgreich'];
|
if (!empty($fortschritt)) {
|
||||||
if ($menge_offen < 0) {
|
$this->app->Tpl->Set('MENGE_GEPLANT',$fortschritt['geplant']);
|
||||||
$menge_offen = 0;
|
$this->app->Tpl->Set('MENGE_PRODUZIERT',$fortschritt['produziert']);
|
||||||
$msg .= "<div class=\"info\">Planmenge überschritten.</div>";
|
$this->app->Tpl->Set('MENGE_OFFEN',$fortschritt['offen']);
|
||||||
|
$this->app->Tpl->Add('MENGE_RESERVIERT',$fortschritt['reserviert']);
|
||||||
|
$this->app->Tpl->Set('MENGE_PRODUZIERBAR',$fortschritt['produzierbar']);
|
||||||
|
|
||||||
|
if ($fortschritt['produziert'] > $fortschritt['geplant']) {
|
||||||
|
$msg .= "<div class=\"info\">Planmenge überschritten.</div>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$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']));
|
|
||||||
|
|
||||||
$this->app->Tpl->Set('AKTION_PLANEN_VISIBLE','hidden');
|
$this->app->Tpl->Set('AKTION_PLANEN_VISIBLE','hidden');
|
||||||
// $this->app->YUI->TableSearch('PRODUKTION_POSITION_TARGET_TABELLE', 'produktion_position_target_list', "show", "", "", basename(__FILE__), __CLASS__);
|
|
||||||
$this->app->YUI->TableSearch('PRODUKTION_POSITION_SOURCE_POSITION_TABELLE', 'produktion_position_source_list', "show", "", "", basename(__FILE__), __CLASS__);
|
$this->app->YUI->TableSearch('PRODUKTION_POSITION_SOURCE_POSITION_TABELLE', 'produktion_position_source_list', "show", "", "", basename(__FILE__), __CLASS__);
|
||||||
$this->app->YUI->TableSearch('PRODUKTION_POSITION_SOURCE_TABELLE', 'produktion_source_list', "show", "", "", basename(__FILE__), __CLASS__);
|
$this->app->YUI->TableSearch('PRODUKTION_POSITION_SOURCE_TABELLE', 'produktion_source_list', "show", "", "", basename(__FILE__), __CLASS__);
|
||||||
$produktionsartikel_id = $produktionsartikel_position['artikel'];
|
$produktionsartikel_id = $produktionsartikel_position['artikel'];
|
||||||
|
|
@ -1032,9 +1025,9 @@ class Produktion {
|
||||||
return $input;
|
return $input;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check stock situation and reservation to set icon status
|
// Check stock situation and reservation
|
||||||
// Return possible production quantity
|
// Return possible production quantity for all stock or just the reserved
|
||||||
function LagerCheckProduktion(int $produktion_id, int $lager) : int {
|
function LagerCheckProduktion(int $produktion_id, int $lager, bool $only_reservations) : int {
|
||||||
|
|
||||||
$menge_moeglich = PHP_INT_MAX;
|
$menge_moeglich = PHP_INT_MAX;
|
||||||
|
|
||||||
|
|
@ -1056,22 +1049,23 @@ class Produktion {
|
||||||
$menge_plan_artikel = $materialbedarf_artikel['menge'];
|
$menge_plan_artikel = $materialbedarf_artikel['menge'];
|
||||||
$menge_geliefert = $materialbedarf_artikel['geliefert_menge'];
|
$menge_geliefert = $materialbedarf_artikel['geliefert_menge'];
|
||||||
|
|
||||||
$sql = "SELECT SUM(menge) as menge FROM lager_platz_inhalt WHERE lager_platz=$lager AND artikel = $artikel";
|
$sql = "SELECT SUM(menge) as menge FROM lager_reserviert r WHERE lager_platz=$lager AND artikel = $artikel AND r.objekt = 'produktion' AND r.parameter = $produktion_id";
|
||||||
$menge_lager = $this->app->DB->SelectArr($sql)[0]['menge'];
|
|
||||||
|
|
||||||
$sql = "SELECT SUM(menge) as menge FROM lager_platz_inhalt WHERE artikel = $artikel";
|
|
||||||
$menge_lager_gesamt = $this->app->DB->SelectArr($sql)[0]['menge'];
|
|
||||||
|
|
||||||
$sql = "SELECT SUM(menge) as menge FROM lager_reserviert r WHERE lager_platz=$lager AND artikel = $artikel AND r.objekt = 'produktion' AND r.parameter = $produktion_id AND r.posid = $position";
|
|
||||||
$menge_reserviert_diese = $this->app->DB->SelectArr($sql)[0]['menge'];
|
$menge_reserviert_diese = $this->app->DB->SelectArr($sql)[0]['menge'];
|
||||||
|
|
||||||
$sql = "SELECT SUM(menge) as menge FROM lager_reserviert r WHERE lager_platz=$lager AND artikel = $artikel";
|
if ($only_reservations) {
|
||||||
$menge_reserviert_lager = $this->app->DB->SelectArr($sql)[0]['menge'];
|
$menge_verfuegbar = $menge_reserviert_diese;
|
||||||
|
} else {
|
||||||
|
$sql = "SELECT SUM(menge) as menge FROM lager_platz_inhalt WHERE lager_platz=$lager AND artikel = $artikel";
|
||||||
|
$menge_lager = $this->app->DB->SelectArr($sql)[0]['menge'];
|
||||||
|
|
||||||
$sql = "SELECT SUM(menge) as menge FROM lager_reserviert r WHERE artikel = $artikel";
|
$sql = "SELECT SUM(menge) as menge FROM lager_reserviert r WHERE lager_platz=$lager AND artikel = $artikel";
|
||||||
$menge_reserviert_gesamt = $this->app->DB->SelectArr($sql)[0]['menge'];
|
$menge_reserviert_lager = $this->app->DB->SelectArr($sql)[0]['menge'];
|
||||||
|
|
||||||
$menge_verfuegbar = $menge_lager-$menge_reserviert_lager+$menge_reserviert_diese;
|
$sql = "SELECT SUM(menge) as menge FROM lager_reserviert r WHERE artikel = $artikel";
|
||||||
|
$menge_reserviert_gesamt = $this->app->DB->SelectArr($sql)[0]['menge'];
|
||||||
|
|
||||||
|
$menge_verfuegbar = $menge_lager-$menge_reserviert_lager+$menge_reserviert_diese;
|
||||||
|
}
|
||||||
|
|
||||||
$menge_moeglich_artikel = round($menge_verfuegbar / ($menge_plan_artikel/$menge_plan_gesamt), 0, PHP_ROUND_HALF_DOWN);
|
$menge_moeglich_artikel = round($menge_verfuegbar / ($menge_plan_artikel/$menge_plan_gesamt), 0, PHP_ROUND_HALF_DOWN);
|
||||||
|
|
||||||
|
|
@ -1079,7 +1073,7 @@ class Produktion {
|
||||||
$menge_moeglich = $menge_moeglich_artikel;
|
$menge_moeglich = $menge_moeglich_artikel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// echo("------------------------Lager $lager a $artikel menge_plan_artikel $menge_plan_artikel menge_geliefert $menge_geliefert menge_lager $menge_lager menge_reserviert_diese $menge_reserviert_diese menge_reserviert_gesamt $menge_reserviert_gesamt menge_verfuegbar $menge_verfuegbar menge_moeglich_artikel $menge_moeglich_artikel menge_moeglich $menge_moeglich<br>");
|
// echo("------------------------Lager $lager a $artikel menge_plan_artikel $menge_plan_artikel menge_geliefert $menge_geliefert menge_lager $menge_lager menge_reserviert_diese $menge_reserviert_diese menge_reserviert_gesamt $menge_reserviert_gesamt menge_verfuegbar $menge_verfuegbar menge_moeglich_artikel $menge_moeglich_artikel menge_moeglich $menge_moeglich<br>");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1190,7 +1184,7 @@ class Produktion {
|
||||||
if (empty($produktionsmengen_alt)) {
|
if (empty($produktionsmengen_alt)) {
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
if ($menge_neu <= $produktionsmengen_alt['geliefert_menge']) {
|
if ($menge_neu < $produktionsmengen_alt['geliefert_menge']) {
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1211,4 +1205,50 @@ class Produktion {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Output progress information
|
||||||
|
['geplant']
|
||||||
|
['produziert']
|
||||||
|
['erfolgreich']
|
||||||
|
['ausschuss']
|
||||||
|
['offen']
|
||||||
|
['reserviert']
|
||||||
|
['produzierbar']
|
||||||
|
*/
|
||||||
|
function MengeFortschritt(int $produktion_id, int $lager) : array {
|
||||||
|
$result = array();
|
||||||
|
|
||||||
|
$sql = "SELECT FORMAT(menge,0) as geplant,FORMAT(geliefert_menge,0) as produziert FROM produktion_position WHERE produktion = $produktion_id AND stuecklistestufe = 1";
|
||||||
|
$values = $this->app->DB->SelectArr($sql)[0];
|
||||||
|
|
||||||
|
if (empty($values)) {
|
||||||
|
return(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result['geplant'] = $values['geplant'];
|
||||||
|
$result['produziert'] = $values['produziert'];
|
||||||
|
|
||||||
|
$sql = "SELECT FORMAT(mengeerfolgreich,0) as erfolgreich,FORMAT(mengeausschuss,0) as ausschuss FROM produktion WHERE id = $produktion_id";
|
||||||
|
$values = $this->app->DB->SelectArr($sql)[0];
|
||||||
|
|
||||||
|
if (empty($values)) {
|
||||||
|
return(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result['erfolgreich'] = $values['erfolgreich'];
|
||||||
|
$result['ausschuss'] = $values['ausschuss'];
|
||||||
|
|
||||||
|
$result['offen'] = $result['geplant']-$result['erfolgreich'];
|
||||||
|
|
||||||
|
$result['reserviert'] = $this->LagerCheckProduktion($produktion_id, $lager, true);
|
||||||
|
$result['produzierbar'] = $this->LagerCheckProduktion($produktion_id, $lager, false);
|
||||||
|
|
||||||
|
return($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do calculations for the status icon display
|
||||||
|
function StatusBerechnen(int $produktion_d) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue