";
} else {
$heading = array('','','Nummer', 'Artikel', 'Projekt','Planmenge pro Stück', 'Lager (verfügbar)', 'Reserviert','Planmenge', 'Verbraucht','');
$width = array('1%','1%', '5%','30%', '5%', '1%', '1%', '1%' , '1%' ,'1%' ,'1%');
$menu = "";
}
$alignright = array(6,7,8,9,10);
$findcols = array('','p.artikel','(SELECT a.nummer FROM artikel a WHERE a.id = p.artikel LIMIT 1)','(SELECT a.name_de FROM artikel a WHERE a.id = p.artikel LIMIT 1)','projekt','stueckmenge','lager','reserviert','menge','geliefert_menge');
$searchsql = array('p.artikel','nummer','name','projekt','lager','menge','reserviert','geliefert_menge');
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`";
$sql = "SELECT SQL_CALC_FOUND_ROWS
p.id,
$dropnbox,
(SELECT a.nummer FROM artikel a WHERE a.id = p.artikel LIMIT 1) as nummer,
(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,
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)-
IFNULL((SELECT SUM(menge) FROM lager_reserviert r WHERE r.lager_platz = $standardlager AND r.artikel = p.artikel),0),
0,
'de_DE'
),
')'
) 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'),
FORMAT(p.geliefert_menge,0,'de_DE') as geliefert_menge,
p.id
FROM produktion_position p";
$where = " stuecklistestufe = 0 AND produktion = $id";
$count = "SELECT count(DISTINCT id) FROM produktion_position WHERE $where";
// $groupby = "";
break;
case "produktion_source_list": // Aggregated per artikel
$id = $app->Secure->GetGET('id');
$sql = "SELECT menge FROM produktion_position pp WHERE produktion=$id AND stuecklistestufe=1";
$produktionsmenge = $app->DB->SelectArr($sql)[0]['menge'];
$sql = "SELECT standardlager FROM produktion WHERE id=$id";
$standardlager = $app->DB->SelectArr($sql)[0]['standardlager'];
$allowed['produktion_position_list'] = array('list');
$heading = array('','Nummer', 'Artikel', 'Projekt','Planmenge pro Stück', 'Lager (verfügbar)', 'Reserviert','Planmenge', 'Verbraucht','');
$width = array('1%','5%', '30%', '5%', '1%', '1%', '1%' , '1%', '1%' ,'1%');
$alignright = array(5,6,7,8,9);
$findcols = array('p.artikel','(SELECT a.nummer FROM artikel a WHERE a.id = p.artikel LIMIT 1)','(SELECT a.name_de FROM artikel a WHERE a.id = p.artikel LIMIT 1)','projekt','stueckmenge','lager','reserviert','menge','geliefert_menge');
$searchsql = array('p.artikel','nummer','name','projekt','lager','menge','reserviert','geliefert_menge');
$defaultorder = 1;
$defaultorderdesc = 0;
$drop = "'' AS `open`";
$sql = "SELECT SQL_CALC_FOUND_ROWS
p.artikel,
$drop,
(SELECT a.nummer FROM artikel a WHERE a.id = p.artikel LIMIT 1) as nummer,
(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,
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)-
IFNULL((SELECT SUM(menge) FROM lager_reserviert r WHERE r.lager_platz = $standardlager AND r.artikel = p.artikel),0),
0,
'de_DE'
),
')'
) 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,
FORMAT(p.geliefert_menge,0,'de_DE') as geliefert_menge,
p.id
FROM produktion_position p";
$where = " stuecklistestufe = 0 AND produktion = $id";
$count = "SELECT count(DISTINCT id) FROM produktion_position WHERE $where";
$groupby = " GROUP BY p.artikel ";
break;
}
$erg = false;
foreach ($erlaubtevars as $k => $v) {
if (isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
function produktion_list() {
$this->app->erp->MenuEintrag("index.php?module=produktion&action=list", "Übersicht");
$this->app->erp->MenuEintrag("index.php?module=produktion&action=create", "Neu anlegen");
$this->app->erp->MenuEintrag("index.php", "Zurück");
$this->app->YUI->TableSearch('TAB1', 'produktion_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "produktion_list.tpl");
}
public function produktion_delete() {
$id = (int) $this->app->Secure->GetGET('id');
// Check if storno possible -> No partial production yet
$geliefert_menge = $this->app->DB->SelectArr("SELECT SUM(geliefert_menge) as menge FROM produktion_position pp WHERE pp.produktion = $id")[0]['menge'];
if ($geliefert_menge == 0) {
$sql = "UPDATE produktion SET status='storniert' WHERE id = '$id'";
$this->app->DB->Update($sql);
$this->app->Tpl->Set('MESSAGE', "
Der Eintrag wurde storniert.
");
} else {
$this->app->Tpl->Set('MESSAGE', "
Der Eintrag kann nicht storniert werden, da bereits Buchungen vorhanden sind.
");
}
$this->produktion_list();
}
/*
* Edit produktion item
* If id is empty, create a new one
*/
function produktion_edit() {
$id = $this->app->Secure->GetGET('id');
$submit = $this->app->Secure->GetPOST('submit');
$this->app->Tpl->Set('ID', $id);
$this->app->erp->MenuEintrag("index.php?module=produktion&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=produktion&action=list", "Zurück zur Übersicht");
$id = $this->app->Secure->GetGET('id');
$input = $this->GetInput();
$sql = "SELECT status, belegnr, projekt, standardlager FROM produktion WHERE id = '$id'";
$from_db = $this->app->DB->SelectArr($sql)[0];
$global_produktionsnummer = $from_db['belegnr'];
$global_projekt = $from_db['projekt'];
$global_standardlager = $from_db['standardlager'];
// foreach ($input as $key => $value) {
// echo($key." -> ".$value." \n");
// }
$this->app->Tpl->Set('MESSAGE', "");
if (empty($id)) {
// New item
$id = 'NULL';
} else {
}
if ($submit != '')
{
switch ($submit) {
case 'speichern':
// Write to database
// Add checks here
$input['standardlager'] = $this->app->erp->ReplaceLagerPlatz(true,$input['standardlager'],true); // Parameters: Target db?, value, from form?
if (empty($input['datum'])) {
$input['datum'] = date("Y-m-d");
} else {
$input['datum'] = $this->app->erp->ReplaceDatum(true,$input['datum'],true);
}
if ($id == 'NULL') {
$input['status'] = 'angelegt';
}
$input['datumauslieferung'] = $this->app->erp->ReplaceDatum(true,$input['datumauslieferung'],true);
$input['datumbereitstellung'] = $this->app->erp->ReplaceDatum(true,$input['datumbereitstellung'],true);
$input['datumproduktion'] = $this->app->erp->ReplaceDatum(true,$input['datumproduktion'],true);
$input['datumproduktionende'] = $this->app->erp->ReplaceDatum(true,$input['datumproduktionende'],true);
$columns = "id, ";
$values = "$id, ";
$update = "";
$fix = "";
foreach ($input as $key => $value) {
$columns = $columns.$fix.$key;
$values = $values.$fix."'".$value."'";
$update = $update.$fix.$key." = '$value'";
$fix = ", ";
}
$sql = "INSERT INTO produktion (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update;
$this->app->DB->Update($sql);
if ($id == 'NULL') {
$msg = $this->app->erp->base64_url_encode("
");
}
break;
case 'planen':
// Check
// Parse positions
$sql = "SELECT artikel FROM produktion_position pp WHERE produktion=$id AND stuecklistestufe=1";
$produktionsartikel = $this->app->DB->SelectArr($sql);
if (!empty($produktionsartikel)) {
$this->app->Tpl->Set('MESSAGE', "
Bereits geplant.
");
break;
}
$artikel_planen_id = $this->app->erp->ReplaceArtikel(true, $this->app->Secure->GetPOST('artikel_planen'),true); // Convert from form to artikel number
$artikel_planen_menge = $this->app->Secure->GetPOST('artikel_planen_menge');
if (!$artikel_planen_id) {
$this->app->Tpl->Set('MESSAGE', "
Artikel ist keine Stückliste.
");
break;
}
// Insert positions
$position_array = array();
$sql = "SELECT '".$id."' as id, artikel, menge, '0' as stuecklistestufe FROM stueckliste WHERE stuecklistevonartikel = ".$artikel_planen_id;
$stueckliste = $this->app->DB->SelectArr($sql);
if (empty($stueckliste)) {
$this->app->Tpl->Set('MESSAGE', "
");
break;
case 'freigeben':
$this->app->erp->BelegFreigabe("produktion",$id);
break;
case 'reservieren':
// Check quantities and reserve for every position
if($global_standardlager == 0) {
$this->app->Tpl->Set('MESSAGE', "
Kein Lager ausgewählt.
");
break;
}
$sql = "SELECT pp.id, pp.artikel, a.name_de, a.nummer, FORMAT(pp.menge,0) as menge, FORMAT(pp.geliefert_menge,0) as geliefert_menge FROM produktion_position pp INNER JOIN artikel a ON a.id = pp.artikel WHERE pp.produktion=$id AND pp.stuecklistestufe=0";
$materialbedarf = $this->app->DB->SelectArr($sql);
// 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");
if ($result > 0) {
$reservierung_durchgefuehrt = true;
}
}
// Message output
if ($reservierung_durchgefuehrt) {
$this->app->Tpl->Add('MESSAGE', "
Reservierung durchgeführt.
");
} else {
$this->app->Tpl->Add('MESSAGE', "
Keine Reservierung durchgeführt!
");
}
break;
case 'produzieren':
// Check quanitites -> all must be reserved before production
// 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)) {
$this->app->Tpl->Set('MESSAGE', "
Lagermenge nicht ausreichend. ($menge_auslagern > $menge_moeglich)
");
break;
}
$sql = "UPDATE produktion SET status = 'gestartet' WHERE id=$id";
$this->app->DB->Update($sql);
$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) {
// Calculate quantity to be removed
$menge_artikel_auslagern = $material_position['menge']/$produktionsartikel_position['menge']*$menge_auslagern;
// Remove material from stock
$result = $this->app->erp->LagerAuslagernRegal($material_position['artikel'],$global_standardlager,$menge_artikel_auslagern,$global_projekt,'Produktion '.$produktion_belegnr);
if ($result != 1) {
$this->app->Tpl->Set('MESSAGE', "
Kritischer Fehler beim Ausbuchen! (Position ".$material_position['id'].", Menge ".$menge_artikel_auslagern.").
");
$error = true;
break;
}
// Adjust reservation
$result = $this->ArtikelReservieren($material_position['artikel'],$global_standardlager,-$menge_artikel_auslagern,'produktion',$id,$material_position['id'],"Produktion $global_produktionsnummer");
// Update position
$sql = "UPDATE produktion_position SET geliefert_menge = geliefert_menge + $menge_artikel_auslagern WHERE id = ".$material_position['id'];
// echo($sql);
$this->app->DB->Update($sql);
}
if ($error) {
break;
}
// Insert produced parts into stock
// ERPAPI
// function LagerEinlagern($artikel,$menge,$regal,$projekt,$grund="",$importer="",$paketannahme="",$doctype = "", $doctypeid = 0, $vpeid = 0, $permanenteinventur = 0, $adresse = 0)
$this->app->erp->LagerEinlagern($produktionsartikel_position['artikel'],$menge_produzieren,$global_standardlager,$global_projekt,"Produktion $global_produktionsnummer");
// No error handling in LagerEinlagern...
$sql = "UPDATE produktion SET mengeerfolgreich = mengeerfolgreich + $menge_produzieren, mengeausschuss = mengeausschuss + $menge_ausschuss WHERE id = $id";
$this->app->DB->Update($sql);
$this->app->Tpl->Add('MESSAGE', "