From ba31fc62cf84d5544fc3486aa7f932c009326cd5 Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Tue, 15 Nov 2022 11:30:25 +0000
Subject: [PATCH] Produktion copy
---
www/pages/produktion.php | 132 +++++++++++++++++++++++++++++++++++++--
1 file changed, 128 insertions(+), 4 deletions(-)
diff --git a/www/pages/produktion.php b/www/pages/produktion.php
index d3f9bf13..849800bf 100644
--- a/www/pages/produktion.php
+++ b/www/pages/produktion.php
@@ -17,6 +17,7 @@ class Produktion {
$this->app->ActionHandler("list", "produktion_list");
$this->app->ActionHandler("create", "produktion_edit"); // This automatically adds a "New" button
$this->app->ActionHandler("edit", "produktion_edit");
+ $this->app->ActionHandler("copy", "produktion_copy");
$this->app->ActionHandler("delete", "produktion_delete");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
@@ -55,6 +56,7 @@ class Produktion {
$menu = "
";
// $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";
@@ -314,9 +316,11 @@ class Produktion {
* If id is empty, create a new one
*/
- function produktion_edit() {
- $id = $this->app->Secure->GetGET('id');
-
+ function produktion_edit($id = NULL) {
+
+ if (empty($id)) {
+ $id = $this->app->Secure->GetGET('id');
+ }
if($this->app->erp->DisableModul('produktion',$id))
{
return;
@@ -328,7 +332,6 @@ class Produktion {
$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();
$msg = $this->app->erp->base64_url_decode($this->app->Secure->GetGET('msg'));
@@ -1080,6 +1083,28 @@ class Produktion {
$this->app->Tpl->Parse('PAGE', "produktion_edit.tpl");
}
+ /*
+ 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 .= "Fehler beim Anlegen der Kopie.
";
+ $this->app->Tpl->Set('MESSAGE', $msg);
+ $this->produktion_list();
+ }
+ else {
+ $msg .= "Kopie angelegt. $result new $id old
";
+ $this->app->Tpl->Set('MESSAGE', $msg);
+ $this->produktion_edit((int) $result);
+ }
+ }
+
/**
* Get all paramters from html form and save into $input
*/
@@ -1125,6 +1150,10 @@ class Produktion {
$result = $this->app->DB->SelectArr($sql)[0];
$menge_plan_gesamt = $result['menge'];
+ if ($menge_plan_gesamt == 0) {
+ return(0);
+ }
+
$sql = "SELECT FORMAT(SUM(mengeerfolgreich),0) as menge FROM produktion WHERE id=$produktion_id";
$result = $this->app->DB->SelectArr($sql)[0];
$menge_geliefert_gesamt = $result['menge'];
@@ -1431,4 +1460,99 @@ class Produktion {
}
}
+ // 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);
+ }
+
}