2022-10-21 18:12:46 +02:00
< ? php
/*
* Copyright ( c ) 2022 OpenXE project
*/
use Xentral\Components\Database\Exception\QueryFailureException ;
class Produktion {
2022-11-17 17:56:58 +01:00
// Botched helper function -> Should be replaced with a proper locale solution someday TODO
function FormatMenge ( $value ) {
return ( number_format ( $value , 0 , ',' , '.' )); // DE
// return(number_format($value,0,'.',',')); // EN
}
2022-10-21 18:12:46 +02:00
function __construct ( $app , $intern = false ) {
$this -> app = $app ;
if ( $intern )
return ;
$this -> app -> ActionHandlerInit ( $this );
$this -> app -> ActionHandler ( " list " , " produktion_list " );
$this -> app -> ActionHandler ( " create " , " produktion_edit " ); // This automatically adds a "New" button
$this -> app -> ActionHandler ( " edit " , " produktion_edit " );
2022-11-15 12:30:25 +01:00
$this -> app -> ActionHandler ( " copy " , " produktion_copy " );
2022-11-15 15:50:59 +01:00
$this -> app -> ActionHandler ( " minidetail " , " produktion_minidetail " );
2022-11-04 13:57:13 +01:00
$this -> app -> ActionHandler ( " delete " , " produktion_delete " );
2022-10-21 18:12:46 +02:00
$this -> app -> DefaultActionHandler ( " list " );
$this -> app -> ActionHandlerListen ( $app );
2022-11-06 16:06:13 +01:00
$this -> Install ();
2022-10-21 18:12:46 +02:00
}
public function Install () {
2022-11-06 16:06:13 +01:00
2022-10-21 18:12:46 +02:00
}
2022-11-11 16:14:59 +01:00
public function TableSearch ( & $app , $name , $erlaubtevars ) {
2022-10-21 18:12:46 +02:00
switch ( $name ) {
case " produktion_list " :
$allowed [ 'produktion_list' ] = array ( 'list' );
2022-10-21 22:40:47 +02:00
2022-10-21 18:12:46 +02:00
// $heading = array('','','datum', 'art', 'projekt', 'belegnr', 'internet', 'bearbeiter', 'angebot', 'freitext', 'internebemerkung', 'status', 'adresse', 'name', 'abteilung', 'unterabteilung', 'strasse', 'adresszusatz', 'ansprechpartner', 'plz', 'ort', 'land', 'ustid', 'ust_befreit', 'ust_inner', 'email', 'telefon', 'telefax', 'betreff', 'kundennummer', 'versandart', 'vertrieb', 'zahlungsweise', 'zahlungszieltage', 'zahlungszieltageskonto', 'zahlungszielskonto', 'bank_inhaber', 'bank_institut', 'bank_blz', 'bank_konto', 'kreditkarte_typ', 'kreditkarte_inhaber', 'kreditkarte_nummer', 'kreditkarte_pruefnummer', 'kreditkarte_monat', 'kreditkarte_jahr', 'firma', 'versendet', 'versendet_am', 'versendet_per', 'versendet_durch', 'autoversand', 'keinporto', 'keinestornomail', 'abweichendelieferadresse', 'liefername', 'lieferabteilung', 'lieferunterabteilung', 'lieferland', 'lieferstrasse', 'lieferort', 'lieferplz', 'lieferadresszusatz', 'lieferansprechpartner', 'packstation_inhaber', 'packstation_station', 'packstation_ident', 'packstation_plz', 'packstation_ort', 'autofreigabe', 'freigabe', 'nachbesserung', 'gesamtsumme', 'inbearbeitung', 'abgeschlossen', 'nachlieferung', 'lager_ok', 'porto_ok', 'ust_ok', 'check_ok', 'vorkasse_ok', 'nachnahme_ok', 'reserviert_ok', 'bestellt_ok', 'zeit_ok', 'versand_ok', 'partnerid', 'folgebestaetigung', 'zahlungsmail', 'stornogrund', 'stornosonstiges', 'stornorueckzahlung', 'stornobetrag', 'stornobankinhaber', 'stornobankkonto', 'stornobankblz', 'stornobankbank', 'stornogutschrift', 'stornogutschriftbeleg', 'stornowareerhalten', 'stornomanuellebearbeitung', 'stornokommentar', 'stornobezahlt', 'stornobezahltam', 'stornobezahltvon', 'stornoabgeschlossen', 'stornorueckzahlungper', 'stornowareerhaltenretour', 'partnerausgezahlt', 'partnerausgezahltam', 'kennen', 'logdatei', 'bezeichnung', 'datumproduktion', 'anschreiben', 'usereditid', 'useredittimestamp', 'steuersatz_normal', 'steuersatz_zwischen', 'steuersatz_ermaessigt', 'steuersatz_starkermaessigt', 'steuersatz_dienstleistung', 'waehrung', 'schreibschutz', 'pdfarchiviert', 'pdfarchiviertversion', 'typ', 'reservierart', 'auslagerart', 'projektfiliale', 'datumauslieferung', 'datumbereitstellung', 'unterlistenexplodieren', 'charge', 'arbeitsschrittetextanzeigen', 'einlagern_ok', 'auslagern_ok', 'mhd', 'auftragmengenanpassen', 'internebezeichnung', 'mengeoriginal', 'teilproduktionvon', 'teilproduktionnummer', 'parent', 'parentnummer', 'bearbeiterid', 'mengeausschuss', 'mengeerfolgreich', 'abschlussbemerkung', 'auftragid', 'funktionstest', 'seriennummer_erstellen', 'unterseriennummern_erfassen', 'datumproduktionende', 'standardlager', 'Menü');
2022-10-21 22:40:47 +02:00
$heading = array ( '' , '' , 'Produktion' , 'Kd-Nr.' , 'Kunde' , 'Vom' , 'Bezeichnung' , 'Soll' , 'Ist' , 'Zeit geplant' , 'Zeit gebucht' , 'Projekt' , 'Status' , 'Monitor' , 'Menü' );
2022-11-07 16:52:16 +01:00
$alignright = array ( 8 , 9 , 10 , 11 );
2022-10-21 18:12:46 +02:00
$width = array ( '1%' , '1%' , '10%' ); // Fill out manually later
2022-10-21 22:40:47 +02:00
// $findcols = array('p.datum', 'p.art', 'p.projekt', 'p.belegnr', 'p.internet', 'p.bearbeiter', 'p.angebot', 'p.freitext', 'p.internebemerkung', 'p.status', 'p.adresse', 'p.name', 'p.abteilung', 'p.unterabteilung', 'p.strasse', 'p.adresszusatz', 'p.ansprechpartner', 'p.plz', 'p.ort', 'p.land', 'p.ustid', 'p.ust_befreit', 'p.ust_inner', 'p.email', 'p.telefon', 'p.telefax', 'p.betreff', 'p.kundennummer', 'p.versandart', 'p.vertrieb', 'p.zahlungsweise', 'p.zahlungszieltage', 'p.zahlungszieltageskonto', 'p.zahlungszielskonto', 'p.bank_inhaber', 'p.bank_institut', 'p.bank_blz', 'p.bank_konto', 'p.kreditkarte_typ', 'p.kreditkarte_inhaber', 'p.kreditkarte_nummer', 'p.kreditkarte_pruefnummer', 'p.kreditkarte_monat', 'p.kreditkarte_jahr', 'p.firma', 'p.versendet', 'p.versendet_am', 'p.versendet_per', 'p.versendet_durch', 'p.autoversand', 'p.keinporto', 'p.keinestornomail', 'p.abweichendelieferadresse', 'p.liefername', 'p.lieferabteilung', 'p.lieferunterabteilung', 'p.lieferland', 'p.lieferstrasse', 'p.lieferort', 'p.lieferplz', 'p.lieferadresszusatz', 'p.lieferansprechpartner', 'p.packstation_inhaber', 'p.packstation_station', 'p.packstation_ident', 'p.packstation_plz', 'p.packstation_ort', 'p.autofreigabe', 'p.freigabe', 'p.nachbesserung', 'p.gesamtsumme', 'p.inbearbeitung', 'p.abgeschlossen', 'p.nachlieferung', 'p.lager_ok', 'p.porto_ok', 'p.ust_ok', 'p.check_ok', 'p.vorkasse_ok', 'p.nachnahme_ok', 'p.reserviert_ok', 'p.bestellt_ok', 'p.zeit_ok', 'p.versand_ok', 'p.partnerid', 'p.folgebestaetigung', 'p.zahlungsmail', 'p.stornogrund', 'p.stornosonstiges', 'p.stornorueckzahlung', 'p.stornobetrag', 'p.stornobankinhaber', 'p.stornobankkonto', 'p.stornobankblz', 'p.stornobankbank', 'p.stornogutschrift', 'p.stornogutschriftbeleg', 'p.stornowareerhalten', 'p.stornomanuellebearbeitung', 'p.stornokommentar', 'p.stornobezahlt', 'p.stornobezahltam', 'p.stornobezahltvon', 'p.stornoabgeschlossen', 'p.stornorueckzahlungper', 'p.stornowareerhaltenretour', 'p.partnerausgezahlt', 'p.partnerausgezahltam', 'p.kennen', 'p.logdatei', 'p.bezeichnung', 'p.datumproduktion', 'p.anschreiben', 'p.usereditid', 'p.useredittimestamp', 'p.steuersatz_normal', 'p.steuersatz_zwischen', 'p.steuersatz_ermaessigt', 'p.steuersatz_starkermaessigt', 'p.steuersatz_dienstleistung', 'p.waehrung', 'p.schreibschutz', 'p.pdfarchiviert', 'p.pdfarchiviertversion', 'p.typ', 'p.reservierart', 'p.auslagerart', 'p.projektfiliale', 'p.datumauslieferung', 'p.datumbereitstellung', 'p.unterlistenexplodieren', 'p.charge', 'p.arbeitsschrittetextanzeigen', 'p.einlagern_ok', 'p.auslagern_ok', 'p.mhd', 'p.auftragmengenanpassen', 'p.internebezeichnung', 'p.mengeoriginal', 'p.teilproduktionvon', 'p.teilproduktionnummer', 'p.parent', 'p.parentnummer', 'p.bearbeiterid', 'p.mengeausschuss', 'p.mengeerfolgreich', 'p.abschlussbemerkung', 'p.auftragid', 'p.funktionstest', 'p.seriennummer_erstellen', 'p.unterseriennummern_erfassen', 'p.datumproduktionende', 'p.standardlager');
2022-11-04 13:57:13 +01:00
$findcols = array ( 'p.id' , 'p.id' , 'p.belegnr' , 'p.kundennummer' , 'p.name' , 'p.datum' , 'a.name_de' , 'soll' , 'ist' , 'zeit_geplant' , 'zeit_geplant' , 'projekt' , 'p.status' , 'icons' , 'id' );
2022-10-21 22:40:47 +02:00
// $searchsql = array('p.datum', 'p.art', 'p.projekt', 'p.belegnr', 'p.internet', 'p.bearbeiter', 'p.angebot', 'p.freitext', 'p.internebemerkung', 'p.status', 'p.adresse', 'p.name', 'p.abteilung', 'p.unterabteilung', 'p.strasse', 'p.adresszusatz', 'p.ansprechpartner', 'p.plz', 'p.ort', 'p.land', 'p.ustid', 'p.ust_befreit', 'p.ust_inner', 'p.email', 'p.telefon', 'p.telefax', 'p.betreff', 'p.kundennummer', 'p.versandart', 'p.vertrieb', 'p.zahlungsweise', 'p.zahlungszieltage', 'p.zahlungszieltageskonto', 'p.zahlungszielskonto', 'p.bank_inhaber', 'p.bank_institut', 'p.bank_blz', 'p.bank_konto', 'p.kreditkarte_typ', 'p.kreditkarte_inhaber', 'p.kreditkarte_nummer', 'p.kreditkarte_pruefnummer', 'p.kreditkarte_monat', 'p.kreditkarte_jahr', 'p.firma', 'p.versendet', 'p.versendet_am', 'p.versendet_per', 'p.versendet_durch', 'p.autoversand', 'p.keinporto', 'p.keinestornomail', 'p.abweichendelieferadresse', 'p.liefername', 'p.lieferabteilung', 'p.lieferunterabteilung', 'p.lieferland', 'p.lieferstrasse', 'p.lieferort', 'p.lieferplz', 'p.lieferadresszusatz', 'p.lieferansprechpartner', 'p.packstation_inhaber', 'p.packstation_station', 'p.packstation_ident', 'p.packstation_plz', 'p.packstation_ort', 'p.autofreigabe', 'p.freigabe', 'p.nachbesserung', 'p.gesamtsumme', 'p.inbearbeitung', 'p.abgeschlossen', 'p.nachlieferung', 'p.lager_ok', 'p.porto_ok', 'p.ust_ok', 'p.check_ok', 'p.vorkasse_ok', 'p.nachnahme_ok', 'p.reserviert_ok', 'p.bestellt_ok', 'p.zeit_ok', 'p.versand_ok', 'p.partnerid', 'p.folgebestaetigung', 'p.zahlungsmail', 'p.stornogrund', 'p.stornosonstiges', 'p.stornorueckzahlung', 'p.stornobetrag', 'p.stornobankinhaber', 'p.stornobankkonto', 'p.stornobankblz', 'p.stornobankbank', 'p.stornogutschrift', 'p.stornogutschriftbeleg', 'p.stornowareerhalten', 'p.stornomanuellebearbeitung', 'p.stornokommentar', 'p.stornobezahlt', 'p.stornobezahltam', 'p.stornobezahltvon', 'p.stornoabgeschlossen', 'p.stornorueckzahlungper', 'p.stornowareerhaltenretour', 'p.partnerausgezahlt', 'p.partnerausgezahltam', 'p.kennen', 'p.logdatei', 'p.bezeichnung', 'p.datumproduktion', 'p.anschreiben', 'p.usereditid', 'p.useredittimestamp', 'p.steuersatz_normal', 'p.steuersatz_zwischen', 'p.steuersatz_ermaessigt', 'p.steuersatz_starkermaessigt', 'p.steuersatz_dienstleistung', 'p.waehrung', 'p.schreibschutz', 'p.pdfarchiviert', 'p.pdfarchiviertversion', 'p.typ', 'p.reservierart', 'p.auslagerart', 'p.projektfiliale', 'p.datumauslieferung', 'p.datumbereitstellung', 'p.unterlistenexplodieren', 'p.charge', 'p.arbeitsschrittetextanzeigen', 'p.einlagern_ok', 'p.auslagern_ok', 'p.mhd', 'p.auftragmengenanpassen', 'p.internebezeichnung', 'p.mengeoriginal', 'p.teilproduktionvon', 'p.teilproduktionnummer', 'p.parent', 'p.parentnummer', 'p.bearbeiterid', 'p.mengeausschuss', 'p.mengeerfolgreich', 'p.abschlussbemerkung', 'p.auftragid', 'p.funktionstest', 'p.seriennummer_erstellen', 'p.unterseriennummern_erfassen', 'p.datumproduktionende', 'p.standardlager');
2022-10-21 18:12:46 +02:00
$searchsql = array ( 'p.datum' , 'p.art' , 'p.projekt' , 'p.belegnr' , 'p.internet' , 'p.bearbeiter' , 'p.angebot' , 'p.freitext' , 'p.internebemerkung' , 'p.status' , 'p.adresse' , 'p.name' , 'p.abteilung' , 'p.unterabteilung' , 'p.strasse' , 'p.adresszusatz' , 'p.ansprechpartner' , 'p.plz' , 'p.ort' , 'p.land' , 'p.ustid' , 'p.ust_befreit' , 'p.ust_inner' , 'p.email' , 'p.telefon' , 'p.telefax' , 'p.betreff' , 'p.kundennummer' , 'p.versandart' , 'p.vertrieb' , 'p.zahlungsweise' , 'p.zahlungszieltage' , 'p.zahlungszieltageskonto' , 'p.zahlungszielskonto' , 'p.bank_inhaber' , 'p.bank_institut' , 'p.bank_blz' , 'p.bank_konto' , 'p.kreditkarte_typ' , 'p.kreditkarte_inhaber' , 'p.kreditkarte_nummer' , 'p.kreditkarte_pruefnummer' , 'p.kreditkarte_monat' , 'p.kreditkarte_jahr' , 'p.firma' , 'p.versendet' , 'p.versendet_am' , 'p.versendet_per' , 'p.versendet_durch' , 'p.autoversand' , 'p.keinporto' , 'p.keinestornomail' , 'p.abweichendelieferadresse' , 'p.liefername' , 'p.lieferabteilung' , 'p.lieferunterabteilung' , 'p.lieferland' , 'p.lieferstrasse' , 'p.lieferort' , 'p.lieferplz' , 'p.lieferadresszusatz' , 'p.lieferansprechpartner' , 'p.packstation_inhaber' , 'p.packstation_station' , 'p.packstation_ident' , 'p.packstation_plz' , 'p.packstation_ort' , 'p.autofreigabe' , 'p.freigabe' , 'p.nachbesserung' , 'p.gesamtsumme' , 'p.inbearbeitung' , 'p.abgeschlossen' , 'p.nachlieferung' , 'p.lager_ok' , 'p.porto_ok' , 'p.ust_ok' , 'p.check_ok' , 'p.vorkasse_ok' , 'p.nachnahme_ok' , 'p.reserviert_ok' , 'p.bestellt_ok' , 'p.zeit_ok' , 'p.versand_ok' , 'p.partnerid' , 'p.folgebestaetigung' , 'p.zahlungsmail' , 'p.stornogrund' , 'p.stornosonstiges' , 'p.stornorueckzahlung' , 'p.stornobetrag' , 'p.stornobankinhaber' , 'p.stornobankkonto' , 'p.stornobankblz' , 'p.stornobankbank' , 'p.stornogutschrift' , 'p.stornogutschriftbeleg' , 'p.stornowareerhalten' , 'p.stornomanuellebearbeitung' , 'p.stornokommentar' , 'p.stornobezahlt' , 'p.stornobezahltam' , 'p.stornobezahltvon' , 'p.stornoabgeschlossen' , 'p.stornorueckzahlungper' , 'p.stornowareerhaltenretour' , 'p.partnerausgezahlt' , 'p.partnerausgezahltam' , 'p.kennen' , 'p.logdatei' , 'p.bezeichnung' , 'p.datumproduktion' , 'p.anschreiben' , 'p.usereditid' , 'p.useredittimestamp' , 'p.steuersatz_normal' , 'p.steuersatz_zwischen' , 'p.steuersatz_ermaessigt' , 'p.steuersatz_starkermaessigt' , 'p.steuersatz_dienstleistung' , 'p.waehrung' , 'p.schreibschutz' , 'p.pdfarchiviert' , 'p.pdfarchiviertversion' , 'p.typ' , 'p.reservierart' , 'p.auslagerart' , 'p.projektfiliale' , 'p.datumauslieferung' , 'p.datumbereitstellung' , 'p.unterlistenexplodieren' , 'p.charge' , 'p.arbeitsschrittetextanzeigen' , 'p.einlagern_ok' , 'p.auslagern_ok' , 'p.mhd' , 'p.auftragmengenanpassen' , 'p.internebezeichnung' , 'p.mengeoriginal' , 'p.teilproduktionvon' , 'p.teilproduktionnummer' , 'p.parent' , 'p.parentnummer' , 'p.bearbeiterid' , 'p.mengeausschuss' , 'p.mengeerfolgreich' , 'p.abschlussbemerkung' , 'p.auftragid' , 'p.funktionstest' , 'p.seriennummer_erstellen' , 'p.unterseriennummern_erfassen' , 'p.datumproduktionende' , 'p.standardlager' );
$defaultorder = 1 ;
$defaultorderdesc = 0 ;
2022-11-04 13:57:13 +01:00
$dropnbox = " '<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type= \" checkbox \" name= \" auswahl[] \" value= \" ',p.id,' \" />') AS `auswahl` " ;
2022-10-21 18:12:46 +02:00
2022-10-27 17:55:24 +02:00
$menu = " <table cellpadding=0 cellspacing=0><tr><td nowrap> " .
" <a href= \" index.php?module=produktion&action=edit&id=%value% \" ><img src= \" ./themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/edit.svg \" border= \" 0 \" ></a> " .
" <a href= \" # \" onclick=DeleteDialog( \" index.php?module=produktion&action=delete&id=%value% \" );><img src= \" themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/delete.svg \" border= \" 0 \" ></a> " .
2022-11-15 12:30:25 +01:00
" <a href= \" # \" onclick=CopyDialog( \" index.php?module=produktion&action=copy&id=%value% \" );><img src= \" themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/copy.svg \" border= \" 0 \" ></a> " .
2022-10-27 17:55:24 +02:00
" </td></tr></table> " ;
2022-10-21 18:12:46 +02:00
2022-10-21 22:40:47 +02:00
// $sql = "SELECT SQL_CALC_FOUND_ROWS p.id, $dropnbox, p.datum, p.art, p.projekt, p.belegnr, p.internet, p.bearbeiter, p.angebot, p.freitext, p.internebemerkung, p.status, p.adresse, p.name, p.abteilung, p.unterabteilung, p.strasse, p.adresszusatz, p.ansprechpartner, p.plz, p.ort, p.land, p.ustid, p.ust_befreit, p.ust_inner, p.email, p.telefon, p.telefax, p.betreff, p.kundennummer, p.versandart, p.vertrieb, p.zahlungsweise, p.zahlungszieltage, p.zahlungszieltageskonto, p.zahlungszielskonto, p.bank_inhaber, p.bank_institut, p.bank_blz, p.bank_konto, p.kreditkarte_typ, p.kreditkarte_inhaber, p.kreditkarte_nummer, p.kreditkarte_pruefnummer, p.kreditkarte_monat, p.kreditkarte_jahr, p.firma, p.versendet, p.versendet_am, p.versendet_per, p.versendet_durch, p.autoversand, p.keinporto, p.keinestornomail, p.abweichendelieferadresse, p.liefername, p.lieferabteilung, p.lieferunterabteilung, p.lieferland, p.lieferstrasse, p.lieferort, p.lieferplz, p.lieferadresszusatz, p.lieferansprechpartner, p.packstation_inhaber, p.packstation_station, p.packstation_ident, p.packstation_plz, p.packstation_ort, p.autofreigabe, p.freigabe, p.nachbesserung, p.gesamtsumme, p.inbearbeitung, p.abgeschlossen, p.nachlieferung, p.lager_ok, p.porto_ok, p.ust_ok, p.check_ok, p.vorkasse_ok, p.nachnahme_ok, p.reserviert_ok, p.bestellt_ok, p.zeit_ok, p.versand_ok, p.partnerid, p.folgebestaetigung, p.zahlungsmail, p.stornogrund, p.stornosonstiges, p.stornorueckzahlung, p.stornobetrag, p.stornobankinhaber, p.stornobankkonto, p.stornobankblz, p.stornobankbank, p.stornogutschrift, p.stornogutschriftbeleg, p.stornowareerhalten, p.stornomanuellebearbeitung, p.stornokommentar, p.stornobezahlt, p.stornobezahltam, p.stornobezahltvon, p.stornoabgeschlossen, p.stornorueckzahlungper, p.stornowareerhaltenretour, p.partnerausgezahlt, p.partnerausgezahltam, p.kennen, p.logdatei, p.bezeichnung, p.datumproduktion, p.anschreiben, p.usereditid, p.useredittimestamp, p.steuersatz_normal, p.steuersatz_zwischen, p.steuersatz_ermaessigt, p.steuersatz_starkermaessigt, p.steuersatz_dienstleistung, p.waehrung, p.schreibschutz, p.pdfarchiviert, p.pdfarchiviertversion, p.typ, p.reservierart, p.auslagerart, p.projektfiliale, p.datumauslieferung, p.datumbereitstellung, p.unterlistenexplodieren, p.charge, p.arbeitsschrittetextanzeigen, p.einlagern_ok, p.auslagern_ok, p.mhd, p.auftragmengenanpassen, p.internebezeichnung, p.mengeoriginal, p.teilproduktionvon, p.teilproduktionnummer, p.parent, p.parentnummer, p.bearbeiterid, p.mengeausschuss, p.mengeerfolgreich, p.abschlussbemerkung, p.auftragid, p.funktionstest, p.seriennummer_erstellen, p.unterseriennummern_erfassen, p.datumproduktionende, p.standardlager, p.id FROM produktion p";
// $sql = "SELECT SQL_CALC_FOUND_ROWS p.id, $dropnbox, p.belegnr, p.kundennummer, p.name, p.datum, \"SUBSELECT\", \"SUBSELECT\", p.mengeerfolgreich, \"-\", \"-\", p.projekt, p.status, p.status, p.id FROM produktion p";
$sql = " SELECT SQL_CALC_FOUND_ROWS
2022-11-03 13:23:53 +01:00
p . id ,
$dropnbox ,
p . belegnr ,
p . kundennummer ,
2022-11-08 23:22:27 +01:00
( SELECT name FROM adresse WHERE kundennummer = p . kundennummer AND p . kundennummer != 0 LIMIT 1 ) as name ,
2022-11-06 16:06:13 +01:00
DATE_FORMAT ( datum , '%d.%m.%Y' ) as datum ,
2022-11-08 23:22:27 +01:00
CONCAT (
2022-11-10 10:10:04 +01:00
IFNULL (( SELECT CONCAT ( a . name_de , ' (' , a . nummer , ')' , '<br>' ) FROM artikel a INNER JOIN produktion_position pp ON pp . artikel = a . id WHERE pp . stuecklistestufe = 1 AND pp . produktion = p . id LIMIT 1 ), '' ),
2022-11-08 23:22:27 +01:00
CONCAT ( '<i>' , internebezeichnung , '</i>' )
) as bezeichnung ,
2022-11-03 22:30:14 +01:00
FORMAT (( SELECT SUM ( menge ) FROM produktion_position pp WHERE pp . produktion = p . id AND pp . stuecklistestufe = 1 ), 0 , 'de_DE' ) as soll ,
2022-11-07 15:00:51 +01:00
FORMAT ( p . mengeerfolgreich , 0 , 'de_DE' ) as ist ,
2022-11-03 22:30:14 +01:00
\ " - \" as zeit_geplant,
\ " - \" as zeit_erfasst,
( SELECT projekt . abkuerzung FROM projekt WHERE p . projekt = projekt . id LIMIT 1 ) as projekt ,
2022-11-03 13:23:53 +01:00
p . status ,
2022-11-04 13:57:13 +01:00
( " . $app->YUI ->IconsSQL_produktion('p') . " ) AS `icons` ,
2022-11-03 13:23:53 +01:00
p . id
2022-11-04 13:57:13 +01:00
FROM produktion p
" ;
2022-10-21 18:12:46 +02:00
2022-11-11 16:14:59 +01:00
$where = " 0 " ;
// Toggle filters
$this -> app -> Tpl -> Add ( 'JQUERYREADY' , " $ ('#angelegte').click( function() { fnFilterColumn1( 0 ); } ); " );
$this -> app -> Tpl -> Add ( 'JQUERYREADY' , " $ ('#offene').click( function() { fnFilterColumn2( 0 ); } ); " );
$this -> app -> Tpl -> Add ( 'JQUERYREADY' , " $ ('#geschlossene').click( function() { fnFilterColumn3( 0 ); } ); " );
$this -> app -> Tpl -> Add ( 'JQUERYREADY' , " $ ('#stornierte').click( function() { fnFilterColumn4( 0 ); } ); " );
for ( $r = 1 ; $r <= 4 ; $r ++ ) {
$this -> app -> Tpl -> Add ( 'JAVASCRIPT' , '
function fnFilterColumn ' . $r . ' ( i )
{
if ( oMoreData ' . $r . $name . ' == 1 )
oMoreData ' . $r . $name . ' = 0 ;
else
oMoreData ' . $r . $name . ' = 1 ;
$ ( \ '#' . $name . ' \ ' ) . dataTable () . fnFilter (
\ ' \ ' ,
i ,
0 , 0
);
}
' );
}
$more_data1 = $this -> app -> Secure -> GetGET ( " more_data1 " );
if ( $more_data1 == 1 ) {
$where .= " OR p.status IN ('angelegt') " ;
} else {
}
$more_data2 = $this -> app -> Secure -> GetGET ( " more_data2 " );
if ( $more_data2 == 1 ) {
$where .= " OR p.status IN ('freigegeben','gestartet') " ;
}
else {
}
$more_data3 = $this -> app -> Secure -> GetGET ( " more_data3 " );
if ( $more_data3 == 1 ) {
$where .= " OR p.status IN ('abgeschlossen') " ;
}
else {
}
$more_data4 = $this -> app -> Secure -> GetGET ( " more_data4 " );
if ( $more_data4 == 1 ) {
$where .= " OR p.status IN ('storniert') " ;
}
else {
}
// END Toggle filters
2022-11-15 15:50:59 +01:00
$moreinfo = true ; // Allow drop down details
$menucol = 14 ; // For moredata
2022-11-11 16:14:59 +01:00
if ( $where == '0' ) {
$where = " p.status IN ('freigegeben','gestartet') " ;
}
2022-11-04 13:57:13 +01:00
$count = " SELECT count(DISTINCT p.id) FROM produktion p INNER JOIN produktion_position pp ON pp.produktion = pp.id WHERE $where " ;
2022-10-26 15:52:50 +02:00
// $groupby = "";
break ;
2022-11-03 13:23:53 +01:00
case " produktion_position_source_list " :
2022-10-26 15:52:50 +02:00
$id = $app -> Secure -> GetGET ( 'id' );
2022-11-03 13:23:53 +01:00
$sql = " SELECT standardlager FROM produktion WHERE id= $id " ;
$standardlager = $app -> DB -> SelectArr ( $sql )[ 0 ][ 'standardlager' ];
2022-10-26 15:52:50 +02:00
$allowed [ 'produktion_position_list' ] = array ( 'list' );
2022-11-06 16:18:54 +01:00
$sql = " SELECT menge FROM produktion_position pp WHERE produktion= $id AND stuecklistestufe=1 " ;
$produktionsmenge = $app -> DB -> SelectArr ( $sql )[ 0 ][ 'menge' ];
2022-11-04 13:57:13 +01:00
// Get status to control UI element menu availability
$sql = " SELECT p.status from produktion p WHERE p.id = $id " ;
$result = $app -> DB -> SelectArr ( $sql )[ 0 ];
$status = $result [ 'status' ];
if ( in_array ( $status , array ( 'angelegt' , 'freigegeben' ))) {
2022-11-18 16:22:34 +01:00
$heading = array ( '' , '' , 'Nummer' , 'Artikel' , 'Projekt' , 'Planmenge pro Stück' , 'Lager alle (verfügbar)' , 'Lager (verfügbar)' , 'Reserviert' , 'Planmenge' , 'Verbraucht' , 'Menü' );
2023-01-10 19:59:26 +01:00
$width = array ( '1%' , '1%' , '5%' , '30%' , '5%' , '1%' , '1%' , '1%' , '1%' , '1%' , '1%' , '1%' );
2022-11-04 13:57:13 +01:00
$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> <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 {
2023-01-10 19:59:26 +01:00
$heading = array ( '' , '' , 'Nummer' , 'Artikel' , 'Projekt' , 'Planmenge pro Stück' , 'Lager alle (verfügbar)' , 'Lager (verfügbar)' , 'Reserviert' , 'Planmenge' , 'Verbraucht' , '' );
$width = array ( '1%' , '1%' , '5%' , '30%' , '5%' , '1%' , '1%' , '1%' , '1%' , '1%' , '1%' , '1%' );
2022-11-04 13:57:13 +01:00
$menu = " " ;
}
2022-11-07 16:52:16 +01:00
$alignright = array ( 6 , 7 , 8 , 9 , 10 );
2022-11-04 13:57:13 +01:00
2022-11-18 16:22:34 +01:00
$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' , 'lageralle' , 'lager' , 'reserviert' , 'menge' , 'geliefert_menge' );
2022-11-03 22:30:14 +01:00
$searchsql = array ( 'p.artikel' , 'nummer' , 'name' , 'projekt' , 'lager' , 'menge' , 'reserviert' , 'geliefert_menge' );
2022-10-26 15:52:50 +02:00
$defaultorder = 1 ;
$defaultorderdesc = 0 ;
2022-10-27 17:55:24 +02:00
$dropnbox = " '<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type= \" checkbox \" name= \" auswahl[] \" value= \" ',p.id,' \" />') AS `auswahl` " ;
2022-11-04 13:57:13 +01:00
2022-10-26 15:52:50 +02:00
$sql = " SELECT SQL_CALC_FOUND_ROWS
p . id ,
$dropnbox ,
2022-11-03 15:49:42 +01:00
( SELECT a . nummer FROM artikel a WHERE a . id = p . artikel LIMIT 1 ) as nummer ,
2022-10-28 12:06:22 +02:00
( 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 ,
2022-11-06 19:46:57 +01:00
FORMAT ( p . menge / $produktionsmenge , 0 , 'de_DE' ) as stueckmenge ,
2023-01-10 19:59:26 +01:00
IF (( SELECT lagerartikel FROM artikel a WHERE a . id = p . artikel LIMIT 1 ) != 0 ,
2022-11-18 16:22:34 +01:00
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 ) -
IFNULL (( SELECT SUM ( menge ) FROM lager_reserviert r WHERE r . artikel = p . artikel ), 0 ),
0 ,
'de_DE'
),
')'
2023-01-10 19:59:26 +01:00
), '' ) as lageralle ,
if (( '$standardlager' != '0' ) && (( SELECT lagerartikel FROM artikel a WHERE a . id = p . artikel LIMIT 1 ) != 0 ),
2022-11-18 16:38:59 +01:00
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'
),
')'
)
2023-01-10 19:59:26 +01:00
, ''
2022-11-07 18:09:19 +01:00
) as lager ,
2022-11-07 15:00:51 +01:00
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 ,
2022-11-04 13:57:13 +01:00
FORMAT ( p . menge , 0 , 'de_DE' ),
FORMAT ( p . geliefert_menge , 0 , 'de_DE' ) as geliefert_menge ,
2022-11-03 15:49:42 +01:00
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' );
2022-11-06 16:18:54 +01:00
$sql = " SELECT menge FROM produktion_position pp WHERE produktion= $id AND stuecklistestufe=1 " ;
$produktionsmenge = $app -> DB -> SelectArr ( $sql )[ 0 ][ 'menge' ];
2022-11-03 15:49:42 +01:00
$sql = " SELECT standardlager FROM produktion WHERE id= $id " ;
$standardlager = $app -> DB -> SelectArr ( $sql )[ 0 ][ 'standardlager' ];
$allowed [ 'produktion_position_list' ] = array ( 'list' );
2022-11-18 16:22:34 +01:00
$heading = array ( '' , 'Nummer' , 'Artikel' , 'Projekt' , 'Planmenge pro Stück' , 'Lager alle (verfügbar)' , 'Lager (verfügbar)' , 'Reserviert' , 'Planmenge' , 'Verbraucht' , '' );
$width = array ( '1%' , '5%' , '30%' , '5%' , '1%' , '1%' , '1%' , '1%' , '1%' , '1%' , '1%' );
2022-11-03 15:49:42 +01:00
2022-11-07 16:52:16 +01:00
$alignright = array ( 5 , 6 , 7 , 8 , 9 );
2022-11-18 16:22:34 +01:00
$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' , 'lageralle' , 'lager' , 'reserviert' , 'menge' , 'geliefert_menge' );
2022-11-03 22:30:14 +01:00
$searchsql = array ( 'p.artikel' , 'nummer' , 'name' , 'projekt' , 'lager' , 'menge' , 'reserviert' , 'geliefert_menge' );
2022-11-03 15:49:42 +01:00
$defaultorder = 1 ;
$defaultorderdesc = 0 ;
2022-11-03 22:30:14 +01:00
$drop = " '<img src=./themes/new/images/details_open.png class=details>' AS `open` " ;
2022-11-03 15:49:42 +01:00
$sql = " SELECT SQL_CALC_FOUND_ROWS
p . artikel ,
2022-11-03 22:30:14 +01:00
$drop ,
2022-11-03 15:49:42 +01:00
( 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 ,
2022-11-08 15:52:33 +01:00
FORMAT ( SUM ( p . menge ) / $produktionsmenge , 0 , 'de_DE' ) as stueckmenge ,
2023-01-10 19:59:26 +01:00
IF (( SELECT lagerartikel FROM artikel a WHERE a . id = p . artikel LIMIT 1 ) != 0 ,
2022-11-03 13:23:53 +01:00
CONCAT (
2022-11-18 16:22:34 +01:00
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 ) -
IFNULL (( SELECT SUM ( menge ) FROM lager_reserviert r WHERE r . artikel = p . artikel ), 0 ),
0 ,
'de_DE'
),
')'
2023-01-10 19:59:26 +01:00
), '' ) as lageralle ,
if (( '$standardlager' != '0' ) && (( SELECT lagerartikel FROM artikel a WHERE a . id = p . artikel LIMIT 1 ) != 0 ),
2022-11-18 16:38:59 +01:00
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'
),
')'
)
2023-01-10 19:59:26 +01:00
, ''
2022-11-03 22:30:14 +01:00
) as lager ,
2022-11-07 15:00:51 +01:00
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 ,
2022-11-04 13:57:13 +01:00
FORMAT ( SUM ( p . menge ), 0 , 'de_DE' ) as menge ,
2022-11-03 22:30:14 +01:00
FORMAT ( p . geliefert_menge , 0 , 'de_DE' ) as geliefert_menge ,
2022-10-26 15:52:50 +02:00
p . id
FROM produktion_position p " ;
$where = " stuecklistestufe = 0 AND produktion = $id " ;
$count = " SELECT count(DISTINCT id) FROM produktion_position WHERE $where " ;
2022-11-03 15:49:42 +01:00
$groupby = " GROUP BY p.artikel " ;
2022-10-26 15:52:50 +02:00
2022-10-21 18:12:46 +02:00
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 " );
2022-11-11 15:16:46 +01:00
$this -> StatusBerechnen ( 0 ); // all open ones
2022-10-21 18:12:46 +02:00
$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' );
2022-10-27 17:55:24 +02:00
// Check if storno possible -> No partial production yet
2022-11-04 13:57:13 +01:00
$geliefert_menge = $this -> app -> DB -> SelectArr ( " SELECT SUM(geliefert_menge) as menge FROM produktion_position pp WHERE pp.produktion = $id " )[ 0 ][ 'menge' ];
2022-10-27 17:55:24 +02:00
2022-11-04 13:57:13 +01:00
if ( $geliefert_menge == 0 ) {
2022-11-03 13:23:53 +01:00
$sql = " UPDATE produktion SET status='storniert' WHERE id = ' $id ' " ;
$this -> app -> DB -> Update ( $sql );
2022-10-27 17:55:24 +02:00
$this -> app -> Tpl -> Set ( 'MESSAGE' , " <div class= \" info \" >Der Eintrag wurde storniert.</div> " );
} else {
$this -> app -> Tpl -> Set ( 'MESSAGE' , " <div class= \" error \" >Der Eintrag kann nicht storniert werden, da bereits Buchungen vorhanden sind.</div> " );
}
2022-10-21 18:12:46 +02:00
$this -> produktion_list ();
}
/*
* Edit produktion item
* If id is empty , create a new one
*/
2022-11-15 12:30:25 +01:00
function produktion_edit ( $id = NULL ) {
if ( empty ( $id )) {
$id = $this -> app -> Secure -> GetGET ( 'id' );
}
2022-11-10 17:00:25 +01:00
if ( $this -> app -> erp -> DisableModul ( 'produktion' , $id ))
{
return ;
}
2022-10-28 12:06:22 +02:00
$submit = $this -> app -> Secure -> GetPOST ( 'submit' );
2022-10-21 18:12:46 +02:00
$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 " );
$input = $this -> GetInput ();
2022-11-08 23:22:27 +01:00
$msg = $this -> app -> erp -> base64_url_decode ( $this -> app -> Secure -> GetGET ( 'msg' ));
2022-10-28 12:06:22 +02:00
2022-11-04 13:57:13 +01:00
$sql = " SELECT status, belegnr, projekt, standardlager FROM produktion WHERE id = ' $id ' " ;
2022-11-03 15:49:42 +01:00
$from_db = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
2022-11-09 15:48:09 +01:00
$global_status = $from_db [ 'status' ];
2022-11-04 13:57:13 +01:00
$global_produktionsnummer = $from_db [ 'belegnr' ];
$global_projekt = $from_db [ 'projekt' ];
$global_standardlager = $from_db [ 'standardlager' ];
2022-10-28 12:06:22 +02:00
// foreach ($input as $key => $value) {
// echo($key." -> ".$value."<br>\n");
// }
2022-11-04 13:57:13 +01:00
$this -> app -> Tpl -> Set ( 'MESSAGE' , " " );
2022-10-28 12:06:22 +02:00
2022-10-21 18:12:46 +02:00
if ( empty ( $id )) {
// New item
2022-10-28 12:06:22 +02:00
$id = 'NULL' ;
2022-11-03 13:23:53 +01:00
2022-10-28 12:06:22 +02:00
} else {
}
2022-10-21 18:12:46 +02:00
if ( $submit != '' )
{
2022-11-18 16:14:02 +01:00
$msg = " " ;
2022-10-28 12:06:22 +02:00
switch ( $submit ) {
case 'speichern' :
// Write to database
// Add checks here
2022-10-21 18:12:46 +02:00
2022-11-06 16:06:13 +01:00
if ( empty ( $input [ 'datum' ])) {
$input [ 'datum' ] = date ( " Y-m-d " );
} else {
$input [ 'datum' ] = $this -> app -> erp -> ReplaceDatum ( true , $input [ 'datum' ], true );
}
2022-11-07 16:08:25 +01:00
if ( $id == 'NULL' ) {
2022-11-07 12:29:43 +01:00
$input [ 'status' ] = 'angelegt' ;
}
2022-11-06 16:06:13 +01:00
$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 );
2022-10-28 12:06:22 +02:00
$columns = " id, " ;
$values = " $id , " ;
$update = " " ;
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
$fix = " " ;
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
foreach ( $input as $key => $value ) {
$columns = $columns . $fix . $key ;
$values = $values . $fix . " ' " . $value . " ' " ;
$update = $update . $fix . $key . " = ' $value ' " ;
2022-11-06 16:06:13 +01:00
$fix = " , " ;
2022-10-28 12:06:22 +02:00
}
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
$sql = " INSERT INTO produktion ( " . $columns . " ) VALUES ( " . $values . " ) ON DUPLICATE KEY UPDATE " . $update ;
$this -> app -> DB -> Update ( $sql );
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
if ( $id == 'NULL' ) {
2022-11-15 10:16:58 +01:00
$id = $this -> app -> DB -> GetInsertID ();
if ( ! empty ( $id )) {
2022-11-16 11:37:45 +01:00
$this -> ProtokollSchreiben ( $id , 'Produktion angelegt' );
2022-11-17 17:56:58 +01:00
$msg = " <div class= \" success \" >Das Element wurde erfolgreich angelegt.</div> " ; // Overwrite old MSG
2022-11-16 11:37:45 +01:00
$msg = $this -> app -> erp -> base64_url_encode ( $msg );
2022-11-15 10:16:58 +01:00
header ( " Location: index.php?module=produktion&action=edit&id= $id &msg= $msg " );
}
2022-10-28 12:06:22 +02:00
} else {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" success \" >Die Einstellungen wurden erfolgreich übernommen.</div> " ;
2022-10-28 12:06:22 +02:00
}
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 );
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
if ( ! empty ( $produktionsartikel )) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" success \" >Bereits geplant.</div> " ;
2022-10-28 12:06:22 +02:00
break ;
}
2022-10-21 18:12:46 +02:00
2022-11-03 13:23:53 +01:00
$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' );
2022-10-21 18:12:46 +02:00
2022-11-03 13:23:53 +01:00
if ( ! $artikel_planen_id ) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" error \" >Artikel ist keine Stückliste.</div> " ;
2022-11-08 23:22:27 +01:00
break ;
}
if ( $artikel_planen_menge < 1 ) {
2022-11-10 12:08:30 +01:00
$msg .= " <div class= \" error \" >Ungültige Planmenge.</div> " ;
2022-10-28 12:06:22 +02:00
break ;
}
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
// Insert positions
$position_array = array ();
2022-11-03 13:23:53 +01:00
$sql = " SELECT ' " . $id . " ' as id, artikel, menge, '0' as stuecklistestufe FROM stueckliste WHERE stuecklistevonartikel = " . $artikel_planen_id ;
2022-10-28 12:06:22 +02:00
$stueckliste = $this -> app -> DB -> SelectArr ( $sql );
if ( empty ( $stueckliste )) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" error \" >Stückliste ist leer.</div> " ;
2022-10-28 12:06:22 +02:00
break ;
}
foreach ( $stueckliste as $key => $value ) {
$value [ 'menge' ] = $value [ 'menge' ] * $artikel_planen_menge ;
$position_values [] = '(' . implode ( " , " , $value ) . ',\'\')' ;
}
2022-11-04 13:57:13 +01:00
$sql = " INSERT INTO produktion_position (produktion, artikel, menge, stuecklistestufe, projekt) VALUES ( $id , $artikel_planen_id , $artikel_planen_menge , 1, ' $global_projekt '), " . implode ( ',' , $position_values );
2022-10-28 12:06:22 +02:00
$this -> app -> DB -> Update ( $sql );
2022-11-15 17:24:21 +01:00
$msg .= " <div class= \" success \" >Planung angelegt.</div> " ;
2022-11-21 12:48:51 +01:00
$this -> ProtokollSchreiben ( $id , " Produktion geplant ( $artikel_planen_menge ) " );
2022-11-04 13:57:13 +01:00
2022-10-28 12:06:22 +02:00
break ;
case 'freigeben' :
2022-11-03 13:23:53 +01:00
$this -> app -> erp -> BelegFreigabe ( " produktion " , $id );
2022-11-15 17:24:21 +01:00
$this -> ProtokollSchreiben ( $id , 'Produktion freigegeben' );
2022-10-28 12:06:22 +02:00
break ;
2022-11-03 13:23:53 +01:00
case 'reservieren' :
// Check quantities and reserve for every position
2022-11-04 13:57:13 +01:00
if ( $global_standardlager == 0 ) {
2022-11-03 13:23:53 +01:00
break ;
}
2022-11-11 15:16:46 +01:00
$fortschritt = $this -> MengeFortschritt ( $id , $global_standardlager );
2022-11-10 21:28:46 +01:00
if ( empty ( $fortschritt )) {
break ;
}
2022-11-17 17:56:58 +01:00
$sql = " SELECT pp.id, pp.artikel, a.name_de, a.nummer, pp.menge as menge, pp.geliefert_menge as geliefert_menge FROM produktion_position pp INNER JOIN artikel a ON a.id = pp.artikel WHERE pp.produktion= $id AND pp.stuecklistestufe=0 " ;
2022-11-03 13:23:53 +01:00
$materialbedarf = $this -> app -> DB -> SelectArr ( $sql );
// Try to reserve material
$reservierung_durchgefuehrt = false ;
foreach ( $materialbedarf as $materialbedarf_position ) {
2022-11-10 21:28:46 +01:00
// Calculate new needed quantity if there is scrap
$materialbedarf_position [ 'menge' ] = $materialbedarf_position [ 'menge' ] * ( $fortschritt [ 'ausschuss' ] + $fortschritt [ 'geplant' ]) / $fortschritt [ 'geplant' ];
2022-11-09 15:48:09 +01:00
$result = $this -> ArtikelReservieren ( $materialbedarf_position [ 'artikel' ], $global_standardlager , $materialbedarf_position [ 'menge' ] - $materialbedarf_position [ 'geliefert_menge' ], 0 , 'produktion' , $id , $materialbedarf_position [ 'id' ], " Produktion $global_produktionsnummer " );
2022-11-04 13:57:13 +01:00
if ( $result > 0 ) {
$reservierung_durchgefuehrt = true ;
}
}
2022-11-03 13:23:53 +01:00
// Message output
if ( $reservierung_durchgefuehrt ) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" info \" >Reservierung durchgeführt.</div> " ;
2022-11-03 13:23:53 +01:00
} else {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" error \" >Keine Reservierung durchgeführt!</div> " ;
2022-11-03 13:23:53 +01:00
}
break ;
2022-10-28 12:06:22 +02:00
case 'produzieren' :
2022-11-03 13:23:53 +01:00
2022-11-10 20:48:34 +01:00
// Check quanitites
2022-11-09 15:48:09 +01:00
// Parse positions
2022-11-17 17:56:58 +01:00
$sql = " SELECT artikel, menge, geliefert_menge FROM produktion_position pp WHERE produktion= $id AND stuecklistestufe=1 " ;
2022-11-03 13:23:53 +01:00
$produktionsartikel_position = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
if ( empty ( $produktionsartikel_position )) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" error \" >Keine Planung vorhanden.</div> " ;
break ;
2022-11-03 13:23:53 +01:00
}
$menge_produzieren = $this -> app -> Secure -> GetPOST ( 'menge_produzieren' );
2022-11-03 15:49:42 +01:00
if ( empty ( $menge_produzieren )) {
$menge_produzieren = 0 ;
}
2022-11-18 16:38:59 +01:00
$menge_ausschuss = $this -> app -> Secure -> GetPOST ( 'menge_ausschuss_produzieren' );
2022-11-03 13:23:53 +01:00
if ( empty ( $menge_ausschuss )) {
$menge_ausschuss = 0 ;
}
$menge_plan = $produktionsartikel_position [ 'menge' ];
$menge_geliefert = $produktionsartikel_position [ 'geliefert_menge' ];
2022-11-04 13:57:13 +01:00
$menge_auslagern = $menge_produzieren + $menge_ausschuss ;
2022-11-08 23:22:27 +01:00
if ( $menge_auslagern < 1 ) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" error \" >Ungültige Menge.</div> " ;
2022-11-08 23:22:27 +01:00
break ;
}
2022-11-10 20:48:34 +01:00
$menge_moeglich = $this -> LagerCheckProduktion ( $id , $global_standardlager , false );
2022-11-04 13:57:13 +01:00
if ( $menge_auslagern > $menge_moeglich ) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" error \" >Lagermenge nicht ausreichend. ( $menge_auslagern > $menge_moeglich )</div> " ;
break ;
2022-11-04 13:57:13 +01:00
}
2022-11-03 13:23:53 +01:00
2022-11-04 13:57:13 +01:00
$sql = " UPDATE produktion SET status = 'gestartet' WHERE id= $id " ;
2022-11-09 15:48:09 +01:00
$this -> app -> DB -> Update ( $sql );
2022-11-03 13:23:53 +01:00
2023-01-10 19:59:26 +01:00
$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 " ;
2022-11-04 13:57:13 +01:00
$material = $this -> app -> DB -> SelectArr ( $sql );
2022-11-03 13:23:53 +01:00
2022-11-09 15:48:09 +01:00
foreach ( $material as $material_position ) {
2022-11-03 15:49:42 +01:00
2022-11-04 13:57:13 +01:00
// Calculate quantity to be removed
$menge_artikel_auslagern = $material_position [ 'menge' ] / $produktionsartikel_position [ 'menge' ] * $menge_auslagern ;
2022-11-03 13:23:53 +01:00
2022-11-09 15:48:09 +01:00
// Remove material from stock
2023-01-10 19:59:26 +01:00
if ( $material_position [ 'stuecklistestufe' ] == 0 && $material_position [ 'lagerartikel' ]) {
2022-11-09 17:19:20 +01:00
$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> " .
$error = true ;
break ;
}
// Adjust reservation
2022-11-09 15:48:09 +01:00
$result = $this -> ArtikelReservieren ( $material_position [ 'artikel' ], $global_standardlager , - $menge_artikel_auslagern , 0 , 'produktion' , $id , $material_position [ 'id' ], " Produktion $global_produktionsnummer " );
}
2022-11-04 13:57:13 +01:00
// Update position
$sql = " UPDATE produktion_position SET geliefert_menge = geliefert_menge + $menge_artikel_auslagern WHERE id = " . $material_position [ 'id' ];
2022-11-09 15:48:09 +01:00
$this -> app -> DB -> Update ( $sql );
2022-11-03 13:23:53 +01:00
}
if ( $error ) {
2022-11-09 15:48:09 +01:00
break ;
2022-11-03 13:23:53 +01:00
}
2022-11-16 11:37:45 +01:00
// Insert produced parts into stock
// Check target stock, if not existing, use default stock of article, if not given use production stock
$ziellager_from_form = $this -> app -> erp -> ReplaceLagerPlatz ( true , $this -> app -> Secure -> GetPOST ( 'ziellager' ), true ); // Parameters: Target db?, value, from form?
$use_artikel_lager = false ;
$ziellager = $global_standardlager ;
if ( ! empty ( $ziellager_from_form )) {
$sql = " SELECT id FROM lager_platz WHERE id = " . $ziellager_from_form ;
$result = $this -> app -> DB -> SelectArr ( $sql );
if ( ! empty ( $result )) {
$ziellager = $ziellager_from_form ;
} else {
$use_artikel_lager = true ;
}
} else {
$use_artikel_lager = true ;
}
if ( $use_artikel_lager ) {
$sql = " SELECT lager_platz FROM artikel WHERE id = " . $produktionsartikel_position [ 'artikel' ];
$result = $this -> app -> DB -> SelectArr ( $sql );
if ( ! empty ( $result ) && ! empty ( $result [ 0 ][ 'lager_platz' ])) {
$ziellager = $result [ 0 ][ 'lager_platz' ];
} else {
}
} else {
}
$sql = " SELECT kurzbezeichnung FROM lager_platz WHERE id = $ziellager " ;
$lagername = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'kurzbezeichnung' ];
2022-11-03 13:23:53 +01:00
// ERPAPI
// function LagerEinlagern($artikel,$menge,$regal,$projekt,$grund="",$importer="",$paketannahme="",$doctype = "", $doctypeid = 0, $vpeid = 0, $permanenteinventur = 0, $adresse = 0)
2022-11-16 11:37:45 +01:00
$this -> app -> erp -> LagerEinlagern ( $produktionsartikel_position [ 'artikel' ], $menge_produzieren , $ziellager , $global_projekt , " Produktion $global_produktionsnummer " );
2022-11-04 13:57:13 +01:00
// 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 );
2022-11-03 13:23:53 +01:00
2022-11-17 17:56:58 +01:00
if ( $menge_produzieren > 0 ) {
2022-11-16 11:37:45 +01:00
$lagertext = " , eingelagert in $lagername " ;
}
2022-11-17 17:56:58 +01:00
$text = " Produktion durchgeführt ( $menge_produzieren erfolgreich, $menge_ausschuss Ausschuss) $lagertext " ;
2022-11-16 11:37:45 +01:00
$msg .= " <div class= \" info \" > $text .</div> " ;
$this -> ProtokollSchreiben ( $id , $text );
2022-11-15 17:24:21 +01:00
2022-11-08 23:22:27 +01:00
break ;
case 'teilen' :
2022-11-10 20:48:34 +01:00
// Create partial production
2022-11-08 23:22:27 +01:00
$menge_abteilen = $this -> app -> Secure -> GetPOST ( 'menge_produzieren' );
2022-11-10 20:48:34 +01:00
$fortschritt = $this -> MengeFortschritt ( $id , $global_standardlager );
2022-11-09 15:48:09 +01:00
2022-11-11 15:16:46 +01:00
if ( empty ( $fortschritt )) {
break ;
}
2022-11-17 17:56:58 +01:00
if (( $menge_abteilen < 1 ) || ( $menge_abteilen > $fortschritt [ 'offen' ])) {
2022-11-09 15:48:09 +01:00
$msg .= " <div class= \" error \" >Ungültige Teilmenge.</div> " ;
2022-11-08 23:22:27 +01:00
break ;
}
$sql = " SELECT * from produktion WHERE id = $id " ;
$produktion_alt = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
// Part production of part production -> select parent
$hauptproduktion_id = $produktion_alt [ 'teilproduktionvon' ];
if ( $hauptproduktion_id != 0 ) {
$sql = " SELECT belegnr FROM produktion WHERE id = $hauptproduktion_id " ;
$hauptproduktion_belegnr = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'belegnr' ];
} else {
$hauptproduktion_id = $produktion_alt [ 'id' ];
$hauptproduktion_belegnr = $produktion_alt [ 'belegnr' ];
}
$sql = " SELECT MAX(teilproduktionnummer) as tpn FROM produktion WHERE teilproduktionvon = $hauptproduktion_id " ;
$teilproduktionnummer = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'tpn' ];
if ( empty ( $teilproduktionnummer ) || $teilproduktionnummer == 0 ) {
$teilproduktionnummer = '1' ;
} else {
$teilproduktionnummer ++ ;
}
$produktion_neu = array ();
$produktion_neu [ 'status' ] = 'angelegt' ;
$produktion_neu [ 'datum' ] = date ( " Y-m-d " );
$produktion_neu [ 'art' ] = $produktion_alt [ 'art' ];
$produktion_neu [ 'projekt' ] = $produktion_alt [ 'projekt' ];
$produktion_neu [ 'angebot' ] = $produktion_alt [ 'angebot' ];
$produktion_neu [ 'kundennummer' ] = $produktion_alt [ 'kundennummer' ];
$produktion_neu [ 'auftragid' ] = $produktion_alt [ 'auftragid' ];
$produktion_neu [ 'freitext' ] = $produktion_alt [ 'freitext' ];
$produktion_neu [ 'internebemerkung' ] = $produktion_alt [ 'internebemerkung' ];
$produktion_neu [ 'adresse' ] = $produktion_alt [ 'adresse' ];
$produktion_neu [ 'internebemerkung' ] = $produktion_alt [ 'internebemerkung' ];
$produktion_neu [ 'internebezeichnung ' ] = $produktion_alt [ 'internebezeichnung' ];
$produktion_neu [ 'standardlager' ] = $produktion_alt [ 'standardlager' ];
$produktion_neu [ 'belegnr' ] = $hauptproduktion_belegnr . " - " . $teilproduktionnummer ;
$produktion_neu [ 'teilproduktionvon' ] = $hauptproduktion_id ;
$produktion_neu [ 'teilproduktionnummer' ] = $teilproduktionnummer ;
$columns = " " ;
$values = " " ;
$update = " " ;
$fix = " " ;
foreach ( $produktion_neu as $key => $value ) {
$columns = $columns . $fix . $key ;
$values = $values . $fix . " ' " . $value . " ' " ;
$update = $update . $fix . $key . " = ' $value ' " ;
$fix = " , " ;
}
$sql = " INSERT INTO produktion ( " . $columns . " ) VALUES ( " . $values . " ) " ;
$this -> app -> DB -> Update ( $sql );
$produktion_neu_id = $this -> app -> DB -> GetInsertID ();
// Now add the positions
$sql = " SELECT * FROM produktion_position WHERE produktion = $id " ;
$positionen = $this -> app -> DB -> SelectArr ( $sql );
foreach ( $positionen as $position ) {
2022-11-09 15:48:09 +01:00
$columns = " " ;
// Preserve these values
$pos_id = $position [ 'id' ];
2022-11-10 10:10:04 +01:00
$geliefert_menge = $position [ 'geliefert_menge' ];
2022-11-09 15:48:09 +01:00
$menge = $position [ 'menge' ];
$produktion_alt_id = $position [ 'produktion' ];
2022-11-11 15:16:46 +01:00
$menge_pro_stueck = $menge / $fortschritt [ 'geplant' ];
2022-11-09 15:48:09 +01:00
// For the new positions
2022-11-08 23:22:27 +01:00
$position [ 'id' ] = 'NULL' ;
$position [ 'geliefert_menge' ] = 0 ;
2022-11-11 15:16:46 +01:00
$position [ 'menge' ] = $menge_abteilen * $menge_pro_stueck ;
2022-11-08 23:22:27 +01:00
$position [ 'produktion' ] = $produktion_neu_id ;
$values = " " ;
$fix = " " ;
foreach ( $position as $key => $value ) {
$columns = $columns . $fix . $key ;
$values = $values . $fix . " ' " . $value . " ' " ;
$fix = " , " ;
}
$sql = " INSERT INTO produktion_position ( " . $columns . " ) VALUES ( " . $values . " ) " ;
$this -> app -> DB -> Update ( $sql );
2022-11-09 15:48:09 +01:00
// For the old positions
// Reduce positions in old production
$position [ 'id' ] = $pos_id ;
$position [ 'geliefert_menge' ] = $geliefert_menge ;
2022-11-10 20:48:34 +01:00
$position [ 'menge' ] = $menge - $position [ 'menge' ]; // old quantity - partial quantity
2022-11-09 15:48:09 +01:00
$position [ 'produktion' ] = $produktion_alt_id ;
2022-11-08 23:22:27 +01:00
2022-11-09 15:48:09 +01:00
$fix = " " ;
$update = " " ;
foreach ( $position as $key => $value ) {
$update = $update . $fix . $key . " = ' " . ( $value ) . " ' " ;
$fix = " , " ;
}
2022-11-08 23:22:27 +01:00
2022-11-09 15:48:09 +01:00
$sql = " UPDATE produktion_position SET $update WHERE id = $pos_id " ;
$this -> app -> DB -> Update ( $sql );
2022-11-11 15:16:46 +01:00
2022-11-09 15:48:09 +01:00
// Free surplus reservations
2022-11-11 15:16:46 +01:00
$restreservierung = $menge_pro_stueck * $fortschritt [ 'offen' ] - $menge_abteilen ;
$result = $this -> ArtikelReservieren ( $position [ 'artikel' ], $global_standardlager , 0 , $restreservierung , 'produktion' , $id , $position [ 'id' ], " Produktion $global_produktionsnummer " );
2022-11-09 15:48:09 +01:00
}
2022-11-08 23:22:27 +01:00
2022-11-16 11:37:45 +01:00
$this -> ProtokollSchreiben ( $id , " Teilproduktion erstellt: " . $produktion_neu [ 'belegnr' ] . " (Menge $menge_abteilen ) " );
2022-11-17 17:56:58 +01:00
$msg = " <div class= \" success \" >Das Element wurde erfolgreich angelegt.</div> " ; // Overwrite old MSG
2022-11-16 11:37:45 +01:00
$msg = $this -> app -> erp -> base64_url_encode ( $msg );
header ( " Location: index.php?module=produktion&action=edit&id= $produktion_neu_id &msg= $msg " );
2022-11-08 23:22:27 +01:00
2022-11-09 15:48:09 +01:00
break ;
case 'leeren' :
if ( $global_status == 'angelegt' || $global_status == 'freigegeben' ) {
2022-11-17 17:56:58 +01:00
$sql = " SELECT id, artikel, menge, geliefert_menge FROM produktion_position pp WHERE produktion= $id AND stuecklistestufe=0 " ;
2022-11-09 15:48:09 +01:00
$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 .= " <div class= \" warning \" >Planung geleert.</div> " ;
} else {
$msg .= " <div class= \" error \" >Planung kann nicht geleert werden.</div> " ;
}
2022-11-10 12:08:30 +01:00
break ;
case 'anpassen' :
if ( $global_status == 'angelegt' || $global_status == 'freigegeben' || $global_status == 'gestartet' ) {
$menge_anpassen = $this -> app -> Secure -> GetPOST ( 'menge_produzieren' );
if ( empty ( $menge_anpassen )) {
$msg .= " <div class= \" error \" >Ungültige Planmenge.</div> " ;
break ;
}
2022-11-11 15:16:46 +01:00
$fortschritt = $this -> MengeFortschritt ( $id , $global_standardlager );
2022-11-10 12:08:30 +01:00
$result = $this -> MengeAnpassen ( $id , $menge_anpassen , $global_standardlager );
if ( $result == - 1 ) {
$msg .= " <div class= \" error \" >Ungültige Planmenge.</div> " ;
} else {
$msg .= " <div class= \" info \" >Planmenge angepasst.</div> " ;
}
}
2022-11-17 17:56:58 +01:00
$this -> ProtokollSchreiben ( $id , " Menge angepasst auf " . $this -> FormatMenge ( $menge_anpassen ));
2022-11-15 17:24:21 +01:00
2023-01-10 19:59:26 +01:00
break ;
2022-10-28 12:06:22 +02:00
case 'abschliessen' :
$sql = " UPDATE produktion SET status = 'abgeschlossen' WHERE id= $id " ;
2022-11-04 13:57:13 +01:00
$this -> app -> DB -> Update ( $sql );
2022-11-17 17:56:58 +01:00
$sql = " SELECT id, artikel, menge, geliefert_menge FROM produktion_position pp WHERE produktion= $id AND stuecklistestufe=0 " ;
2022-11-04 13:57:13 +01:00
$material = $this -> app -> DB -> SelectArr ( $sql );
foreach ( $material as $material_position ) {
// Remove reservation
2022-11-09 15:48:09 +01:00
$result = $this -> ArtikelReservieren ( $material_position [ 'artikel' ], $global_standardlager , 0 , 0 , 'produktion' , $id , $material_position [ 'id' ], " Produktion $global_produktionsnummer " );
2022-11-04 13:57:13 +01:00
}
2022-11-15 17:24:21 +01:00
$this -> ProtokollSchreiben ( $id , 'Produktion abgeschlossen' );
2022-10-28 12:06:22 +02:00
break ;
}
2022-10-21 18:12:46 +02:00
}
// Load values again from database
2022-11-03 13:23:53 +01:00
// toDo: cleanup
2022-10-22 14:31:37 +02:00
2022-10-28 12:06:22 +02:00
$sql = " SELECT SQL_CALC_FOUND_ROWS
2022-10-27 17:55:24 +02:00
p . id ,
( SELECT pp . bezeichnung FROM produktion_position pp WHERE pp . produktion = p . id AND pp . stuecklistestufe = 1 LIMIT 1 ) as artikelname ,
p . datum ,
p . art ,
p . projekt ,
p . belegnr ,
p . internet ,
p . bearbeiter ,
p . angebot ,
p . freitext ,
p . internebemerkung ,
p . status ,
p . adresse ,
p . name ,
p . abteilung ,
p . unterabteilung ,
p . strasse ,
p . adresszusatz ,
p . ansprechpartner ,
p . plz ,
p . ort ,
p . land ,
p . ustid ,
p . ust_befreit ,
p . ust_inner ,
p . email ,
p . telefon ,
p . telefax ,
p . betreff ,
p . kundennummer ,
p . versandart ,
p . vertrieb ,
p . zahlungsweise ,
p . zahlungszieltage ,
p . zahlungszieltageskonto ,
p . zahlungszielskonto ,
p . bank_inhaber ,
p . bank_institut ,
p . bank_blz ,
p . bank_konto ,
p . kreditkarte_typ ,
p . kreditkarte_inhaber ,
p . kreditkarte_nummer ,
p . kreditkarte_pruefnummer ,
p . kreditkarte_monat ,
p . kreditkarte_jahr ,
p . firma ,
p . versendet ,
p . versendet_am ,
p . versendet_per ,
p . versendet_durch ,
p . autoversand ,
p . keinporto ,
p . keinestornomail ,
p . abweichendelieferadresse ,
p . liefername ,
p . lieferabteilung ,
p . lieferunterabteilung ,
p . lieferland ,
p . lieferstrasse ,
p . lieferort ,
p . lieferplz ,
p . lieferadresszusatz ,
p . lieferansprechpartner ,
p . packstation_inhaber ,
p . packstation_station ,
p . packstation_ident ,
p . packstation_plz ,
p . packstation_ort ,
p . autofreigabe ,
p . freigabe ,
p . nachbesserung ,
p . gesamtsumme ,
p . inbearbeitung ,
p . abgeschlossen ,
p . nachlieferung ,
p . lager_ok ,
p . porto_ok ,
p . ust_ok ,
p . check_ok ,
p . vorkasse_ok ,
p . nachnahme_ok ,
p . reserviert_ok ,
p . bestellt_ok ,
p . zeit_ok ,
p . versand_ok ,
p . partnerid ,
p . folgebestaetigung ,
p . zahlungsmail ,
p . stornogrund ,
p . stornosonstiges ,
p . stornorueckzahlung ,
p . stornobetrag ,
p . stornobankinhaber ,
p . stornobankkonto ,
p . stornobankblz ,
p . stornobankbank ,
p . stornogutschrift ,
p . stornogutschriftbeleg ,
p . stornowareerhalten ,
p . stornomanuellebearbeitung ,
p . stornokommentar ,
p . stornobezahlt ,
p . stornobezahltam ,
p . stornobezahltvon ,
p . stornoabgeschlossen ,
p . stornorueckzahlungper ,
p . stornowareerhaltenretour ,
p . partnerausgezahlt ,
p . partnerausgezahltam ,
p . kennen ,
p . logdatei ,
p . bezeichnung ,
p . datumproduktion ,
p . anschreiben ,
p . usereditid ,
p . useredittimestamp ,
p . steuersatz_normal ,
p . steuersatz_zwischen ,
p . steuersatz_ermaessigt ,
p . steuersatz_starkermaessigt ,
p . steuersatz_dienstleistung ,
p . waehrung ,
p . schreibschutz ,
p . pdfarchiviert ,
p . pdfarchiviertversion ,
p . typ ,
p . reservierart ,
p . auslagerart ,
p . projektfiliale ,
p . datumauslieferung ,
p . datumbereitstellung ,
p . unterlistenexplodieren ,
p . charge ,
p . arbeitsschrittetextanzeigen ,
p . einlagern_ok ,
p . auslagern_ok ,
p . mhd ,
p . auftragmengenanpassen ,
p . internebezeichnung ,
p . mengeoriginal ,
p . teilproduktionvon ,
p . teilproduktionnummer ,
p . parent ,
p . parentnummer ,
p . bearbeiterid ,
2022-11-17 17:56:58 +01:00
p . mengeausschuss ,
p . mengeerfolgreich ,
2022-10-27 17:55:24 +02:00
p . abschlussbemerkung ,
p . auftragid ,
p . funktionstest ,
p . seriennummer_erstellen ,
p . unterseriennummern_erfassen ,
p . datumproduktionende ,
p . standardlager ,
p . id FROM produktion p " . " WHERE id = $id " ;
2022-10-28 12:06:22 +02:00
$produktion_from_db = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
foreach ( $produktion_from_db as $key => $value ) {
$this -> app -> Tpl -> Set ( strtoupper ( $key ), $value );
2022-10-21 18:12:46 +02:00
}
/*
* Add displayed items later
2022-10-26 15:52:50 +02:00
*/
2022-11-11 18:07:42 +01:00
$this -> StatusBerechnen (( int ) $id );
2022-11-10 21:28:46 +01:00
2022-10-27 17:55:24 +02:00
$sql = " SELECT " . $this -> app -> YUI -> IconsSQL_produktion ( 'p' ) . " AS `icons` FROM produktion p WHERE id= $id " ;
$icons = $this -> app -> DB -> SelectArr ( $sql );
2022-10-26 15:52:50 +02:00
$this -> app -> Tpl -> Add ( 'STATUSICONS' , $icons [ 0 ][ 'icons' ]);
2022-11-08 23:22:27 +01:00
if ( $produktion_from_db [ 'teilproduktionvon' ] != 0 ) {
$sql = " SELECT belegnr FROM produktion WHERE id = " . $produktion_from_db [ 'teilproduktionvon' ];
$hauptproduktion_belegnr = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'belegnr' ];
$this -> app -> Tpl -> Set ( 'TEILPRODUKTIONINFO' , " Teilproduktion von " . $hauptproduktion_belegnr );
}
$sql = " SELECT belegnr FROM produktion WHERE teilproduktionvon = $id " ;
$teilproduktionen = $this -> app -> DB -> SelectArr ( $sql );
if ( ! empty ( $teilproduktionen )) {
2022-11-09 15:48:09 +01:00
$this -> app -> Tpl -> Set ( 'TEILPRODUKTIONINFO' , " Zu dieser Produktion gehören die Teilproduktionen: " . implode ( ', ' , array_column ( $teilproduktionen , 'belegnr' )));
2022-11-08 23:22:27 +01:00
}
2022-11-10 12:08:30 +01:00
if ( $produktion_from_db [ 'standardlager' ] == 0 ) {
2023-01-10 19:59:26 +01:00
$msg .= " <div class= \" error \" >Kein Materiallager ausgewählt.</div> " ;
2022-11-10 12:08:30 +01:00
}
2022-10-27 17:55:24 +02:00
$this -> app -> YUI -> AutoComplete ( " projekt " , " projektname " , 1 );
$this -> app -> YUI -> AutoComplete ( " kundennummer " , " kunde " , 1 );
$this -> app -> YUI -> AutoComplete ( " auftragid " , " auftrag " , 1 );
2022-10-26 15:52:50 +02:00
2022-11-03 13:23:53 +01:00
$this -> app -> YUI -> AutoComplete ( " artikel_planen " , " stuecklistenartikel " );
2023-01-10 19:59:26 +01:00
$this -> app -> YUI -> AutoComplete ( " artikel_hinzu " , " artikelnummer " );
2022-10-28 12:06:22 +02:00
$this -> app -> YUI -> AutoComplete ( " standardlager " , " lagerplatz " );
2022-11-16 11:37:45 +01:00
$this -> app -> YUI -> AutoComplete ( " ziellager " , " lagerplatz " );
2023-01-10 19:59:26 +01:00
$this -> app -> YUI -> AutoComplete ( " artikel " , " artikelnummer " );
2022-10-28 12:06:22 +02:00
$this -> app -> Tpl -> Set ( 'STANDARDLAGER' , $this -> app -> erp -> ReplaceLagerPlatz ( false , $produktion_from_db [ 'standardlager' ], false )); // Convert ID to form display
2022-10-21 18:12:46 +02:00
2022-10-27 17:55:24 +02:00
$this -> app -> YUI -> DatePicker ( " datum " );
2022-11-06 16:06:13 +01:00
$this -> app -> Tpl -> Set ( 'DATUM' , $this -> app -> erp -> ReplaceDatum ( false , $produktion_from_db [ 'datum' ], true ));
2022-10-27 17:55:24 +02:00
$this -> app -> YUI -> DatePicker ( " datumauslieferung " );
2022-11-06 16:06:13 +01:00
$this -> app -> Tpl -> Set ( 'DATUMAUSLIEFERUNG' , $this -> app -> erp -> ReplaceDatum ( false , $produktion_from_db [ 'datumauslieferung' ], false ));
2022-10-27 17:55:24 +02:00
$this -> app -> YUI -> DatePicker ( " datumbereitstellung " );
2022-11-06 16:06:13 +01:00
$this -> app -> Tpl -> Set ( 'DATUMBEREITSTELLUNG' , $this -> app -> erp -> ReplaceDatum ( false , $produktion_from_db [ 'datumbereitstellung' ], false ));
2022-10-27 17:55:24 +02:00
$this -> app -> YUI -> DatePicker ( " datumproduktion " );
2022-11-06 16:06:13 +01:00
$this -> app -> Tpl -> Set ( 'DATUMPRODUKTION' , $this -> app -> erp -> ReplaceDatum ( false , $produktion_from_db [ 'datumproduktion' ], false ));
2022-10-21 18:12:46 +02:00
2022-11-06 16:06:13 +01:00
$this -> app -> YUI -> DatePicker ( " datumproduktionende " );
$this -> app -> Tpl -> Set ( 'DATUMPRODUKTIONENDE' , $this -> app -> erp -> ReplaceDatum ( false , $produktion_from_db [ 'datumproduktionende' ], false ));
2022-10-26 15:52:50 +02:00
2022-10-27 17:55:24 +02:00
$this -> app -> YUI -> CkEditor ( " freitext " , " internal " , null , 'JQUERY' );
$this -> app -> YUI -> CkEditor ( " internebemerkung " , " internal " , null , 'JQUERY' );
2022-10-26 15:52:50 +02:00
2022-11-03 13:23:53 +01:00
/*
UI Elements
AKTION_SPEICHERN_DISABLED
AKTION_PLANEN_VISIBLE
AKTION_FREIGEBEN_VISIBLE
AKTION_RESERVIEREN_VISIBLE
AKTION_PRODUZIEREN_VISIBLE
AKTION_ABSCHLIESSEN_VISIBLE
POSITIONEN_TAB_VISIBLE
*/
2022-10-28 12:06:22 +02:00
// Reparse positions
2022-11-17 17:56:58 +01:00
$sql = " SELECT id,artikel, menge, geliefert_menge FROM produktion_position pp WHERE produktion= $id AND stuecklistestufe=1 " ;
2022-11-03 13:23:53 +01:00
$produktionsartikel_position = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
2022-10-28 12:06:22 +02:00
2022-11-10 20:48:34 +01:00
// Not planned
2022-11-03 13:23:53 +01:00
if ( empty ( $produktionsartikel_position )) {
2022-11-17 17:56:58 +01:00
2022-10-28 12:06:22 +02:00
$this -> app -> Tpl -> Set ( 'AKTION_FREIGEBEN_VISIBLE' , 'hidden' );
2022-11-09 15:48:09 +01:00
$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' );
2022-10-28 12:06:22 +02:00
} else {
2022-11-10 20:48:34 +01:00
// Planned
2022-11-03 13:23:53 +01:00
2022-11-17 17:56:58 +01:00
$fortschritt = $this -> MengeFortschritt (( int ) $id , 0 );
2022-11-09 15:48:09 +01:00
2022-11-10 20:48:34 +01:00
if ( ! empty ( $fortschritt )) {
2022-11-17 17:56:58 +01:00
$this -> app -> Tpl -> Set ( 'MENGE_GEPLANT' , $this -> FormatMenge ( $fortschritt [ 'geplant' ]));
$this -> app -> Tpl -> Set ( 'MENGE_PRODUZIERT' , $this -> FormatMenge ( $fortschritt [ 'produziert' ]));
$this -> app -> Tpl -> Set ( 'MENGE_OFFEN' , $this -> FormatMenge ( $fortschritt [ 'offen' ]));
$this -> app -> Tpl -> Set ( 'MENGE_RESERVIERT' , $this -> FormatMenge ( $fortschritt [ 'reserviert' ]));
$this -> app -> Tpl -> Set ( 'MENGE_PRODUZIERBAR' , $this -> FormatMenge ( $fortschritt [ 'produzierbar' ]));
2022-11-18 16:38:59 +01:00
$this -> app -> Tpl -> Set ( 'MENGE_ERFOLGREICH' , $this -> FormatMenge ( $fortschritt [ 'erfolgreich' ]));
$this -> app -> Tpl -> Set ( 'MENGE_AUSSCHUSS' , $this -> FormatMenge ( $fortschritt [ 'ausschuss' ]));
2022-11-17 17:56:58 +01:00
}
if ( $fortschritt [ 'produziert' ] > $fortschritt [ 'geplant' ]) {
$msg .= " <div class= \" info \" >Planmenge überschritten.</div> " ;
2022-11-10 20:48:34 +01:00
}
2022-11-03 22:30:14 +01:00
2022-11-03 13:23:53 +01:00
$this -> app -> Tpl -> Set ( 'AKTION_PLANEN_VISIBLE' , 'hidden' );
2022-11-03 15:49:42 +01:00
$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__ );
2022-11-03 13:23:53 +01:00
$produktionsartikel_id = $produktionsartikel_position [ 'artikel' ];
2022-10-28 12:06:22 +02:00
$sql = " SELECT name_de,nummer FROM artikel WHERE id= " . $produktionsartikel_id ;
2022-11-03 13:23:53 +01:00
$produktionsartikel = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
$produktionsartikel_name = $produktionsartikel [ 'name_de' ];
$produktionsartikel_nummer = $produktionsartikel [ 'nummer' ];
}
2022-10-28 12:06:22 +02:00
2022-11-06 16:06:13 +01:00
if ( empty ( $produktion_from_db [ 'belegnr' ])) {
$this -> app -> Tpl -> SetText ( 'KURZUEBERSCHRIFT2' , 'ENTWURF - ' . $produktionsartikel_name . " ( " . $produktionsartikel_nummer . " ) " );
} else {
$this -> app -> Tpl -> SetText ( 'KURZUEBERSCHRIFT2' , $produktion_from_db [ 'belegnr' ] . " " . $produktionsartikel_name . " ( " . $produktionsartikel_nummer . " ) " );
}
2022-11-03 13:23:53 +01:00
$this -> app -> Tpl -> SetText ( 'ARTIKELNAME' , $produktionsartikel_name );
2022-10-26 15:52:50 +02:00
2022-10-27 17:55:24 +02:00
// Action menu
2022-10-28 12:06:22 +02:00
switch ( $produktion_from_db [ 'status' ]) {
2022-10-27 17:55:24 +02:00
case 'angelegt' :
$this -> app -> Tpl -> Set ( 'AKTION_RESERVIEREN_VISIBLE' , 'hidden' );
$this -> app -> Tpl -> Set ( 'AKTION_PRODUZIEREN_VISIBLE' , 'hidden' );
$this -> app -> Tpl -> Set ( 'AKTION_ABSCHLIESSEN_VISIBLE' , 'hidden' );
break ;
case 'freigegeben' :
$this -> app -> Tpl -> Set ( 'AKTION_FREIGEBEN_VISIBLE' , 'hidden' );
break ;
case 'gestartet' :
$this -> app -> Tpl -> Set ( 'AKTION_FREIGEBEN_VISIBLE' , 'hidden' );
2022-11-03 13:23:53 +01:00
$this -> app -> Tpl -> Set ( 'AKTION_PLANEN_VISIBLE' , 'hidden' );
2022-11-09 15:48:09 +01:00
$this -> app -> Tpl -> Set ( 'AKTION_LEEREN_VISIBLE' , 'hidden' );
2022-10-27 17:55:24 +02:00
break ;
case 'abgeschlossen' :
case 'storniert' :
$this -> app -> Tpl -> Set ( 'AKTION_SPEICHERN_DISABLED' , 'disabled' );
2022-11-03 13:23:53 +01:00
$this -> app -> Tpl -> Set ( 'AKTION_PLANEN_VISIBLE' , 'hidden' );
2022-10-27 17:55:24 +02:00
$this -> app -> Tpl -> Set ( 'AKTION_FREIGEBEN_VISIBLE' , 'hidden' );
$this -> app -> Tpl -> Set ( 'AKTION_RESERVIEREN_VISIBLE' , 'hidden' );
$this -> app -> Tpl -> Set ( 'AKTION_PRODUZIEREN_VISIBLE' , 'hidden' );
2022-11-08 23:22:27 +01:00
$this -> app -> Tpl -> Set ( 'AKTION_TEILEN_VISIBLE' , 'hidden' );
2022-10-27 17:55:24 +02:00
$this -> app -> Tpl -> Set ( 'AKTION_ABSCHLIESSEN_VISIBLE' , 'hidden' );
2022-11-09 15:48:09 +01:00
$this -> app -> Tpl -> Set ( 'AKTION_LEEREN_VISIBLE' , 'hidden' );
2022-10-27 17:55:24 +02:00
break ;
2022-10-28 12:06:22 +02:00
default : // new item
$this -> app -> Tpl -> Set ( 'POSITIONEN_TAB_VISIBLE' , 'hidden="hidden"' );
break ;
2022-10-27 17:55:24 +02:00
}
2023-01-10 19:59:26 +01:00
$this -> app -> Tpl -> Set ( 'PRODUKTION_ID' , $id );
2022-11-08 23:22:27 +01:00
$this -> app -> Tpl -> Set ( 'MESSAGE' , $msg );
2022-11-15 17:24:21 +01:00
$this -> produktion_minidetail ( 'MINIDETAILINEDIT' );
2022-10-21 18:12:46 +02:00
$this -> app -> Tpl -> Parse ( 'PAGE' , " produktion_edit.tpl " );
2022-11-15 17:24:21 +01:00
2022-10-21 18:12:46 +02:00
}
2022-11-15 12:30:25 +01:00
/*
Create a copy as draft
*/
function produktion_copy () {
$id = ( int ) $this -> app -> Secure -> GetGET ( 'id' );
if ( empty ( $id )) {
return ;
}
$result = $this -> Copy ( $id , 0 );
if ( $result <= 0 ) {
$msg .= " <div class= \" error \" >Fehler beim Anlegen der Kopie.</div> " ;
$this -> app -> Tpl -> Set ( 'MESSAGE' , $msg );
$this -> produktion_list ();
}
else {
$msg .= " <div class= \" success \" >Kopie angelegt. $result new $id old</div> " ;
$this -> app -> Tpl -> Set ( 'MESSAGE' , $msg );
$this -> produktion_edit (( int ) $result );
}
}
2022-11-15 15:50:59 +01:00
public function produktion_minidetail ( $parsetarget = '' , $menu = true ) {
$id = $this -> app -> Secure -> GetGET ( 'id' );
2022-11-16 11:37:45 +01:00
$fortschritt = $this -> MengeFortschritt (( int ) $id , 0 );
2022-11-15 15:50:59 +01:00
if ( ! empty ( $fortschritt )) {
2022-11-17 17:56:58 +01:00
$this -> app -> Tpl -> Set ( 'MINI_MENGE_GEPLANT' , $this -> FormatMenge ( $fortschritt [ 'geplant' ]));
$this -> app -> Tpl -> Set ( 'MINI_MENGE_PRODUZIERT' , $this -> FormatMenge ( $fortschritt [ 'produziert' ]));
$this -> app -> Tpl -> Set ( 'MINI_MENGE_OFFEN' , $this -> FormatMenge ( $fortschritt [ 'offen' ]));
$this -> app -> Tpl -> Set ( 'MINI_MENGE_RESERVIERT' , $this -> FormatMenge ( $fortschritt [ 'reserviert' ]));
$this -> app -> Tpl -> Set ( 'MINI_MENGE_PRODUZIERBAR' , $this -> FormatMenge ( $fortschritt [ 'produzierbar' ]));
$this -> app -> Tpl -> Set ( 'MINI_MENGEERFOLGREICH' , $this -> FormatMenge ( $fortschritt [ 'erfolgreich' ]));
$this -> app -> Tpl -> Set ( 'MINI_MENGEAUSSCHUSS' , $this -> FormatMenge ( $fortschritt [ 'ausschuss' ]));
2022-11-15 15:50:59 +01:00
}
2022-11-15 17:24:21 +01:00
$this -> ProtokollTabelleErzeugen ( $id , 'PROTOKOLL' );
2022-11-15 15:50:59 +01:00
if ( $parsetarget == '' )
{
$this -> app -> Tpl -> Output ( 'produktion_minidetail.tpl' );
$this -> app -> ExitXentral ();
}
$this -> app -> Tpl -> Parse ( $parsetarget , 'produktion_minidetail.tpl' );
}
2022-10-21 18:12:46 +02:00
/**
* Get all paramters from html form and save into $input
*/
public function GetInput () : array {
$input = array ();
2022-10-28 12:06:22 +02:00
$input [ 'kundennummer' ] = $this -> app -> Secure -> GetPOST ( 'kundennummer' );
$input [ 'projekt' ] = $this -> app -> Secure -> GetPOST ( 'projekt' );
$input [ 'auftragid' ] = $this -> app -> Secure -> GetPOST ( 'auftragid' );
$input [ 'internebezeichnung' ] = $this -> app -> Secure -> GetPOST ( 'internebezeichnung' );
2022-10-21 18:12:46 +02:00
$input [ 'datum' ] = $this -> app -> Secure -> GetPOST ( 'datum' );
2022-10-28 12:06:22 +02:00
$input [ 'standardlager' ] = $this -> app -> Secure -> GetPOST ( 'standardlager' );
2022-11-16 11:37:45 +01:00
$input [ 'standardlager' ] = $this -> app -> erp -> ReplaceLagerPlatz ( true , $input [ 'standardlager' ], true ); // Parameters: Target db?, value, from form?
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
$input [ 'reservierart' ] = $this -> app -> Secure -> GetPOST ( 'reservierart' );
$input [ 'auslagerart' ] = $this -> app -> Secure -> GetPOST ( 'auslagerart' );
$input [ 'unterlistenexplodieren' ] = $this -> app -> Secure -> GetPOST ( 'unterlistenexplodieren' );
$input [ 'funktionstest' ] = $this -> app -> Secure -> GetPOST ( 'funktionstest' );
$input [ 'arbeitsschrittetextanzeigen' ] = $this -> app -> Secure -> GetPOST ( 'arbeitsschrittetextanzeigen' );
$input [ 'seriennummer_erstellen' ] = $this -> app -> Secure -> GetPOST ( 'seriennummer_erstellen' );
2022-10-21 18:12:46 +02:00
2022-10-28 12:06:22 +02:00
$input [ 'datumauslieferung' ] = $this -> app -> Secure -> GetPOST ( 'datumauslieferung' );
$input [ 'datumbereitstellung' ] = $this -> app -> Secure -> GetPOST ( 'datumbereitstellung' );
$input [ 'datumproduktion' ] = $this -> app -> Secure -> GetPOST ( 'datumproduktion' );
$input [ 'datumproduktionende' ] = $this -> app -> Secure -> GetPOST ( 'datumproduktionende' );
$input [ 'freitext' ] = $this -> app -> Secure -> GetPOST ( 'freitext' );
$input [ 'internebemerkung' ] = $this -> app -> Secure -> GetPOST ( 'internebemerkung' );
return $input ;
2022-10-21 18:12:46 +02:00
}
2022-11-10 20:48:34 +01:00
// Check stock situation and reservation
// Return possible production quantity for all stock or just the reserved
function LagerCheckProduktion ( int $produktion_id , int $lager , bool $only_reservations ) : int {
2022-11-03 22:30:14 +01:00
$menge_moeglich = PHP_INT_MAX ;
2023-01-10 19:59:26 +01:00
$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 " ;
2022-11-03 22:30:14 +01:00
$materialbedarf_gesamt = $this -> app -> DB -> SelectArr ( $sql );
2022-11-17 17:56:58 +01:00
$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 " ;
2022-11-07 16:05:56 +01:00
$result = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
$menge_plan_gesamt = $result [ 'menge' ];
2022-11-15 12:30:25 +01:00
if ( $menge_plan_gesamt == 0 ) {
return ( 0 );
}
2022-11-17 17:56:58 +01:00
$sql = " SELECT SUM(mengeerfolgreich) as menge FROM produktion WHERE id= $produktion_id " ;
2022-11-07 16:05:56 +01:00
$result = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
$menge_geliefert_gesamt = $result [ 'menge' ];
2022-11-03 22:30:14 +01:00
foreach ( $materialbedarf_gesamt as $materialbedarf_artikel ) {
$artikel = $materialbedarf_artikel [ 'artikel' ];
$position = $materialbedarf_artikel [ 'id' ];
2022-11-04 13:57:13 +01:00
$menge_plan_artikel = $materialbedarf_artikel [ 'menge' ];
2022-11-17 17:56:58 +01:00
$menge_geliefert = $materialbedarf_artikel [ 'menge_geliefert' ];
2022-11-03 22:30:14 +01:00
2022-11-10 20:48:34 +01:00
$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 " ;
2022-11-03 22:30:14 +01:00
$menge_reserviert_diese = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'menge' ];
2022-11-10 20:48:34 +01:00
if ( $only_reservations ) {
$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' ];
2022-11-07 14:28:35 +01:00
2022-11-10 20:48:34 +01:00
$sql = " SELECT SUM(menge) as menge FROM lager_reserviert r WHERE lager_platz= $lager AND artikel = $artikel " ;
$menge_reserviert_lager = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'menge' ];
2022-11-03 22:30:14 +01:00
2022-11-10 20:48:34 +01:00
$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 ;
}
2022-11-07 14:28:35 +01:00
2022-11-04 13:57:13 +01:00
$menge_moeglich_artikel = round ( $menge_verfuegbar / ( $menge_plan_artikel / $menge_plan_gesamt ), 0 , PHP_ROUND_HALF_DOWN );
2022-11-03 22:30:14 +01:00
if ( $menge_moeglich_artikel < $menge_moeglich ) {
$menge_moeglich = $menge_moeglich_artikel ;
}
2022-11-10 20:48:34 +01:00
// 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>");
2022-11-03 22:30:14 +01:00
}
2022-11-07 14:28:35 +01:00
if ( $menge_moeglich < 0 ) {
$menge_moeglich = 0 ;
}
2022-11-07 16:05:56 +01:00
2022-11-03 22:30:14 +01:00
return ( $menge_moeglich );
}
2022-11-03 13:23:53 +01:00
2022-11-04 13:57:13 +01:00
// Modify or add reservation
2022-11-09 15:48:09 +01:00
// If quantity is negative, the existing reservation will be reduced
// If current quantity is higher as menge_reservieren_limit, current quantity will be reduced
2022-11-04 13:57:13 +01:00
// Returns amount that is reserved
2022-11-09 15:48:09 +01:00
function ArtikelReservieren ( int $artikel , $lager , int $menge_reservieren , int $menge_reservieren_limit , string $objekt , int $objekt_id , int $position_id , string $text ) : int {
2022-11-04 13:57:13 +01:00
if ( $lager <= 0 || $artikel <= 0 || $position_id <= 0 ) {
return 0 ;
}
$sql = " SELECT menge FROM lager_reserviert WHERE objekt=' $objekt ' AND parameter = $objekt_id AND artikel = $artikel AND lager_platz = $lager AND posid = $position_id " ;
$menge_reserviert_diese = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'menge' ];
if ( $menge_reserviert_diese == null ) {
$menge_reserviert_diese = 0 ;
}
$sql = " SELECT menge FROM lager_reserviert WHERE artikel = $artikel AND lager_platz = $lager " ;
$menge_reserviert_lager_platz = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'menge' ];
if ( $menge_reserviert_lager_platz == null ) {
$menge_reserviert_lager_platz = 0 ;
}
$sql = " SELECT menge FROM lager_platz_inhalt WHERE artikel = $artikel AND lager_platz = $lager " ;
$menge_lager = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'menge' ];
if ( $menge_lager == null ) {
$menge_lager = 0 ;
}
if ( $menge_reservieren < 0 ) { // Relative reduction
$menge_reservieren = $menge_reserviert_diese + $menge_reservieren ;
if ( $menge_reservieren < 0 ) {
$menge_reservieren = 0 ;
}
}
2022-11-09 15:48:09 +01:00
if (( $menge_reservieren == 0 ) && ( $menge_reservieren_limit <= 0 )) {
2022-11-04 13:57:13 +01:00
$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 );
}
$menge_lager_reservierbar = $menge_lager - $menge_reserviert_lager_platz + $menge_reserviert_diese ;
2022-11-09 15:48:09 +01:00
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 );
}
}
2022-11-04 13:57:13 +01:00
if ( $menge_lager_reservierbar > 0 ) {
if ( $menge_reserviert_diese > 0 ) {
// Modify given entry
if ( $menge_reservieren > $menge_lager_reservierbar ) {
$menge_reservieren = $menge_lager_reservierbar ; // Take all that is there
}
$sql = " UPDATE lager_reserviert SET menge = $menge_reservieren WHERE objekt = ' $objekt ' AND parameter = $objekt_id AND artikel = $artikel AND posid = $position_id " ;
$this -> app -> DB -> Update ( $sql );
} else {
// Create new entry
if ( $menge_reservieren > $menge_lager_reservierbar ) {
$menge_reservieren = $menge_lager_reservierbar ; // Take all that is there
}
$sql = " INSERT INTO lager_reserviert (menge,objekt,parameter,artikel,posid,lager_platz,grund) VALUES ( " .
$menge_reservieren . " , " .
" ' $objekt ', " .
$objekt_id . " , " .
$artikel . " , " .
$position_id . " , " .
$lager . " , " .
" ' $text ' " .
" ) " ;
$this -> app -> DB -> Update ( $sql );
}
} else {
$menge_reservieren = 0 ;
}
return ( $menge_reservieren );
}
2022-11-10 12:08:30 +01:00
/*
Adjust the planned quantity of a produktion
Lower limit is the already produced quantity
Return - 1 if not possible , else 1
*/
function MengeAnpassen ( int $produktion_id , int $menge_neu , int $lager ) : int {
2022-11-11 15:16:46 +01:00
$fortschritt = $this -> MengeFortschritt ( $produktion_id , $lager );
2022-11-10 12:08:30 +01:00
$sql = " SELECT menge,geliefert_menge FROM produktion_position WHERE produktion = $produktion_id AND stuecklistestufe = 1 " ;
$produktionsmengen_alt = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
if ( empty ( $produktionsmengen_alt )) {
return ( - 1 );
}
2022-11-10 20:48:34 +01:00
if ( $menge_neu < $produktionsmengen_alt [ 'geliefert_menge' ]) {
2022-11-10 12:08:30 +01:00
return ( - 1 );
}
$sql = " SELECT * from produktion WHERE id = $produktion_id " ;
$produktion_alt = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
// Process positions
$sql = " SELECT * FROM produktion_position WHERE produktion = $produktion_id " ;
$positionen = $this -> app -> DB -> SelectArr ( $sql );
foreach ( $positionen as $position ) {
2022-11-11 15:16:46 +01:00
$menge_pro_stueck = $position [ 'menge' ] / $produktionsmengen_alt [ 'menge' ];
$position_menge_neu = $menge_neu * $menge_pro_stueck ;
2022-11-10 12:08:30 +01:00
$sql = " UPDATE produktion_position SET menge= " . $position_menge_neu . " WHERE id = " . $position [ 'id' ];
$this -> app -> DB -> Update ( $sql );
2022-11-11 15:16:46 +01:00
2022-11-10 12:08:30 +01:00
// Free surplus reservations
2022-11-11 15:16:46 +01:00
$restreservierung = $menge_pro_stueck * ( $menge_neu + $fortschritt [ 'ausschuss' ] - $fortschritt [ 'produziert' ]);
$result = $this -> ArtikelReservieren ( $position [ 'artikel' ], $lager , 0 , $restreservierung , 'produktion' , $produktion_id , $position [ 'id' ], " Produktion " . $produktion_alt [ 'belegnr' ]);
2022-11-10 12:08:30 +01:00
}
return ( 1 );
}
2022-11-10 20:48:34 +01:00
/*
Output progress information
[ 'geplant' ]
[ 'produziert' ]
[ 'erfolgreich' ]
[ 'ausschuss' ]
[ 'offen' ]
[ 'reserviert' ]
[ 'produzierbar' ]
2022-11-10 21:28:46 +01:00
If lager <= 0 -> use lager from database
2022-11-10 20:48:34 +01:00
*/
function MengeFortschritt ( int $produktion_id , int $lager ) : array {
$result = array ();
2022-11-10 21:28:46 +01:00
if ( $lager <= 0 ) {
$sql = " SELECT standardlager FROM produktion WHERE id = $produktion_id " ;
$lager = $this -> app -> DB -> SelectArr ( $sql )[ 0 ][ 'standardlager' ];
}
2022-11-17 17:56:58 +01:00
$sql = " SELECT menge as geplant, geliefert_menge as produziert FROM produktion_position WHERE produktion = $produktion_id AND stuecklistestufe = 1 " ;
2022-11-11 15:22:04 +01:00
$position_values = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
2022-11-10 20:48:34 +01:00
2022-11-11 15:22:04 +01:00
if ( empty ( $position_values )) {
return ( $result );
2022-11-10 20:48:34 +01:00
}
2022-11-17 17:56:58 +01:00
$sql = " SELECT mengeerfolgreich as erfolgreich, mengeausschuss as ausschuss FROM produktion WHERE id = $produktion_id " ;
2022-11-11 15:22:04 +01:00
$produktion_values = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
2022-11-10 20:48:34 +01:00
2022-11-11 15:22:04 +01:00
if ( empty ( $produktion_values )) {
return ( $result );
2022-11-10 20:48:34 +01:00
}
2022-11-11 15:22:04 +01:00
$result [ 'geplant' ] = $position_values [ 'geplant' ];
$result [ 'produziert' ] = $position_values [ 'produziert' ];
$result [ 'erfolgreich' ] = $produktion_values [ 'erfolgreich' ];
$result [ 'ausschuss' ] = $produktion_values [ 'ausschuss' ];
2022-11-10 20:48:34 +01:00
$result [ 'offen' ] = $result [ 'geplant' ] - $result [ 'erfolgreich' ];
2022-11-18 16:38:59 +01:00
if ( empty ( $lager )) {
$result [ 'reserviert' ] = 0 ;
$result [ 'produzierbar' ] = 0 ;
} else {
$result [ 'reserviert' ] = $this -> LagerCheckProduktion ( $produktion_id , $lager , true );
$result [ 'produzierbar' ] = $this -> LagerCheckProduktion ( $produktion_id , $lager , false );
}
2022-11-10 20:48:34 +01:00
return ( $result );
}
// Do calculations for the status icon display
2022-11-11 15:16:46 +01:00
// id = 0 for all open ones
2022-11-10 21:28:46 +01:00
function StatusBerechnen ( int $produktion_id ) {
2022-11-11 15:16:46 +01:00
$where = " WHERE status IN ('freigegeben','gestartet') " ;
if ( $produktion_id > 0 ) {
$where .= " AND id = $produktion_id " ;
2022-11-10 21:28:46 +01:00
}
2022-11-11 15:16:46 +01:00
$sql = " SELECT id, lager_ok, reserviert_ok, auslagern_ok, einlagern_ok, zeit_ok, versand_ok FROM produktion " . $where ;
$produktionen = $this -> app -> DB -> SelectArr ( $sql );
foreach ( $produktionen as $produktion ) {
2022-11-10 21:28:46 +01:00
2022-11-11 15:16:46 +01:00
$produktion_id = $produktion [ 'id' ];
2022-11-10 21:28:46 +01:00
2022-11-11 15:16:46 +01:00
$fortschritt = $this -> MengeFortschritt ( $produktion_id , - 1 );
2022-11-10 21:28:46 +01:00
2022-11-11 15:16:46 +01:00
if ( empty ( $fortschritt )) {
continue ;
}
2022-11-10 21:28:46 +01:00
2022-11-11 15:16:46 +01:00
// lager_ok
if ( $fortschritt [ 'produzierbar' ] >= $fortschritt [ 'offen' ]) {
$values [ 'lager_ok' ] = 1 ;
// } else if ($fortschritt['produzierbar'] > 0) {
// $values['lager_ok'] = 2;
} else {
$values [ 'lager_ok' ] = 0 ;
}
2022-11-10 21:28:46 +01:00
2022-11-11 15:16:46 +01:00
// reserviert_ok
if ( $fortschritt [ 'reserviert' ] >= $fortschritt [ 'offen' ]) {
$values [ 'reserviert_ok' ] = 1 ;
// } else if ($fortschritt['reserviert'] > 0) {
// $values['reserviert_ok'] = 2;
} else {
$values [ 'reserviert_ok' ] = 0 ;
}
2022-11-10 21:28:46 +01:00
2022-11-11 15:16:46 +01:00
// auslagern_ok
if ( $fortschritt [ 'produziert' ] >= $fortschritt [ 'geplant' ]) {
$values [ 'auslagern_ok' ] = 1 ;
// } else if ($fortschritt['produziert'] > 0) {
// $values['auslagern_ok'] = 2;
} else {
$values [ 'auslagern_ok' ] = 0 ;
}
// einlagern_ok
if ( $fortschritt [ 'erfolgreich' ] >= $fortschritt [ 'geplant' ]) {
$values [ 'einlagern_ok' ] = 1 ;
// } else if ($fortschritt['erfolgreich'] > 0) {
// $values['einlagern_ok'] = 2;
} else {
$values [ 'einlagern_ok' ] = 0 ;
}
2022-11-10 21:28:46 +01:00
2022-11-11 15:16:46 +01:00
// reserviert_ok
if ( $fortschritt [ 'produziert' ] >= $fortschritt [ 'geplant' ]) {
$values [ 'auslagern_ok' ] = 1 ;
// } else if ($fortschritt['produziert'] > 0) {
// $values['auslagern_ok'] = 2;
} else {
$values [ 'auslagern_ok' ] = 0 ;
}
$fix = " " ;
$update = " " ;
foreach ( $values as $key => $value ) {
$update = $update . $fix . $key . " = ' " . ( $value ) . " ' " ;
$fix = " , " ;
}
$sql = " UPDATE produktion SET $update WHERE id = $produktion_id " ;
$this -> app -> DB -> Update ( $sql );
}
2022-11-10 20:48:34 +01:00
}
2022-11-15 12:30:25 +01:00
// Copy an existing produktion as draft, with option to adjust the quantity
// return id on sucess, else negative number
function Copy ( $produktion_id , $menge_abteilen ) : int {
if ( empty ( $produktion_id )) {
return ( - 1 );
}
$fortschritt = $this -> MengeFortschritt ( $produktion_id , 0 );
if ( empty ( $fortschritt )) {
return ( - 2 );
}
if ( $menge_abteilen < 1 ) {
$menge_abteilen = $fortschritt [ 'geplant' ];
}
$sql = " SELECT * from produktion WHERE id = $produktion_id " ;
$produktion_alt = $this -> app -> DB -> SelectArr ( $sql )[ 0 ];
if ( empty ( $produktion_alt )) {
return ( - 3 );
}
$menge_pro_stueck = $menge_abteilen / $fortschritt [ 'geplant' ];
$produktion_neu = array ();
$produktion_neu [ 'status' ] = 'angelegt' ;
$produktion_neu [ 'datum' ] = date ( " Y-m-d " );
$produktion_neu [ 'art' ] = $produktion_alt [ 'art' ];
$produktion_neu [ 'projekt' ] = $produktion_alt [ 'projekt' ];
$produktion_neu [ 'angebot' ] = $produktion_alt [ 'angebot' ];
$produktion_neu [ 'kundennummer' ] = $produktion_alt [ 'kundennummer' ];
$produktion_neu [ 'auftragid' ] = $produktion_alt [ 'auftragid' ];
$produktion_neu [ 'freitext' ] = $produktion_alt [ 'freitext' ];
$produktion_neu [ 'internebemerkung' ] = $produktion_alt [ 'internebemerkung' ];
$produktion_neu [ 'adresse' ] = $produktion_alt [ 'adresse' ];
if ( $produktion_alt [ 'belegnr' ] != '' ) {
$produktion_neu [ 'internebezeichnung ' ] = " Kopie von " . $produktion_alt [ 'belegnr' ] . " " . $produktion_alt [ 'internebezeichnung' ];
} else {
$produktion_neu [ 'internebezeichnung ' ] = $produktion_alt [ 'internebezeichnung' ];
}
$produktion_neu [ 'standardlager' ] = $produktion_alt [ 'standardlager' ];
$columns = " " ;
$values = " " ;
$update = " " ;
$fix = " " ;
foreach ( $produktion_neu as $key => $value ) {
$columns = $columns . $fix . $key ;
$values = $values . $fix . " ' " . $value . " ' " ;
$update = $update . $fix . $key . " = ' $value ' " ;
$fix = " , " ;
}
$sql = " INSERT INTO produktion ( " . $columns . " ) VALUES ( " . $values . " ) " ;
$this -> app -> DB -> Update ( $sql );
$produktion_neu_id = $this -> app -> DB -> GetInsertID ();
// Now add the positions
$sql = " SELECT * FROM produktion_position WHERE produktion = $produktion_id " ;
$positionen = $this -> app -> DB -> SelectArr ( $sql );
foreach ( $positionen as $position ) {
$columns = " " ;
// For the new positions
$position [ 'id' ] = 'NULL' ;
$position [ 'geliefert_menge' ] = 0 ;
$position [ 'menge' ] = $menge_abteilen * $menge_pro_stueck ;
$position [ 'produktion' ] = $produktion_neu_id ;
$values = " " ;
$fix = " " ;
foreach ( $position as $key => $value ) {
$columns = $columns . $fix . $key ;
$values = $values . $fix . " ' " . $value . " ' " ;
$fix = " , " ;
}
$sql = " INSERT INTO produktion_position ( " . $columns . " ) VALUES ( " . $values . " ) " ;
$this -> app -> DB -> Update ( $sql );
}
return ( $produktion_neu_id );
}
2022-11-15 17:24:21 +01:00
/*
Write something into the log
*/
function ProtokollSchreiben ( int $produktion_id , string $text ) {
$sql = " INSERT INTO produktion_protokoll (produktion, zeit, bearbeiter, grund) VALUES ( $produktion_id , NOW(), ' " . $this -> app -> DB -> real_escape_string ( $this -> app -> User -> GetName ()) . " ',' " . $this -> app -> DB -> real_escape_string ( $text ) . " ') " ;
$this -> app -> DB -> Insert ( $sql );
}
function ProtokollTabelleErzeugen ( $produktion_id , $parsetarget )
{
$tmp = new EasyTable ( $this -> app );
$tmp -> Query ( " SELECT zeit,bearbeiter,grund FROM produktion_protokoll WHERE produktion=' $produktion_id ' ORDER by zeit DESC " );
$tmp -> DisplayNew ( $parsetarget , 'Protokoll' , 'noAction' );
}
2022-10-21 18:12:46 +02:00
}
2022-11-17 17:56:58 +01:00