From a3285d6c61e564450ea22ed7c848d6b9173b84c9 Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Wed, 21 Aug 2024 12:45:19 +0200
Subject: [PATCH] seriennummern added workflow buttons control, minidetail for
seriennummer
---
www/lib/class.erpapi.php | 2 +-
.../seriennummern_lieferschein_enter.tpl | 197 ------------------
www/pages/lieferschein.php | 119 +++++------
www/pages/seriennummern.php | 74 ++++---
4 files changed, 104 insertions(+), 288 deletions(-)
delete mode 100644 www/pages/content/seriennummern_lieferschein_enter.tpl
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index b6dfb773..ce30b82d 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -2828,7 +2828,7 @@ public function NavigationHooks(&$menu)
function SeriennummernCheckLieferscheinWarnung(int $lieferschein_id, bool $notification) {
$obj = $this->LoadModul('seriennummern');
- $obj->seriennummern_check_and_message_delivery_note($lieferschein_id, $notification);
+ return($obj->seriennummern_check_and_message_delivery_note($lieferschein_id, $notification));
}
function SeriennummernCheckLieferschein($lieferschein_id = null, $ignore_date = false, $only_missing = true, $group_lieferschein = false) {
diff --git a/www/pages/content/seriennummern_lieferschein_enter.tpl b/www/pages/content/seriennummern_lieferschein_enter.tpl
deleted file mode 100644
index 672c4941..00000000
--- a/www/pages/content/seriennummern_lieferschein_enter.tpl
+++ /dev/null
@@ -1,197 +0,0 @@
-
-
diff --git a/www/pages/lieferschein.php b/www/pages/lieferschein.php
index 0c206ccf..b2a5d241 100644
--- a/www/pages/lieferschein.php
+++ b/www/pages/lieferschein.php
@@ -645,12 +645,15 @@ class Lieferschein extends GenLieferschein
$adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1");
$lieferantenretoure = $this->app->DB->Select("SELECT lieferantenretoure FROM lieferschein WHERE id='$id' LIMIT 1");
- if($adresse > 0 && ($status=="angelegt" || $status==""))
- $freigabe = "";
+ if($adresse > 0 && ($status=="angelegt" || $status=="")) {
+ $freigabe = "";
+ }
+ $seriennummern_check_result = $this->app->erp->SeriennummernCheckLieferschein(lieferschein_id: $id, ignore_date: true, only_missing: true, group_lieferschein: true);
- if(($status=="versendet" || $status=="freigegeben") && $lieferantenretoure=="1")
- $abschliessen = "";
+ if(($status=="versendet" || $status=="freigegeben") && $lieferantenretoure=="1" && empty($seriennummern_check_result)) {
+ $abschliessen = "";
+ }
$checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$id' LIMIT 1");
@@ -668,7 +671,6 @@ class Lieferschein extends GenLieferschein
$hookcase = '';
$this->app->erp->RunHook('Lieferschein_Aktion_option',3, $id, $status, $hookoption);
$this->app->erp->RunHook('Lieferschein_Aktion_case',3, $id, $status, $hookcase);
-
$bestellmengelagerartikel = $this->app->DB->Select("SELECT sum(lp.menge) as bestellmenge from lieferschein_position lp INNER JOIN artikel a on a.id=lp.artikel where a.lagerartikel=1 AND lp.lieferschein = '$id'");
$liefermengelagerartikel = $this->app->DB->Select("SELECT sum(lp.geliefert) as liefermenge from lieferschein_position lp INNER JOIN artikel a on a.id=lp.artikel where a.lagerartikel=1 AND lp.lieferschein = '$id'");
@@ -695,19 +697,20 @@ class Lieferschein extends GenLieferschein
}
$optionumlagern = "";
- $abschicken = "";
- if($status!="angelegt" && $lieferantenretoure!="1")
- {
- $alsrechnung = "";
- if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung'))
- {
- $alsrechnung .= "";
- }
+ if (empty($seriennummern_check_result)) {
+ $abschicken = "";
+ if($status!="angelegt" && $lieferantenretoure!="1")
+ {
+ $alsrechnung = "";
+ if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung'))
+ {
+ $alsrechnung .= "";
+ }
+ }
}
}
-
if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport'))
{
$casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=lieferschein&id=%value%'; break;";
@@ -829,7 +832,6 @@ class Lieferschein extends GenLieferschein
$lieferantenretoureinfo = $auftragArr[0]['lieferantenretoureinfo'];
}
-
$this->app->Tpl->Set('LIEFERANTENRETOUREINFO',$lieferantenretoureinfo);
if($lieferantenretoure!='1') {
@@ -849,7 +851,6 @@ class Lieferschein extends GenLieferschein
$this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']);
$this->app->Tpl->Set('STATUS',$auftragArr[0]['status']);
-
if($auftragArr[0]['auftragid'] > 0){
$orderRow = $this->app->DB->SelectRow(
"SELECT belegnr, projekt FROM auftrag WHERE id='".$auftragArr[0]['auftragid']."' LIMIT 1"
@@ -874,8 +875,7 @@ class Lieferschein extends GenLieferschein
}else{
$this->app->Tpl->Set('AUFTRAG','-');
}
-
-
+
if($auftragArr[0]['auftragid'] > 0){
$rechnung = $this->app->DB->SelectArr(
($auftragArr[0]['auftragid']?
@@ -915,9 +915,7 @@ class Lieferschein extends GenLieferschein
INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
WHERE lp.lieferschein='$id'
");
-
}
-
}
$crechnung = !empty($rechnung)?count($rechnung):0;
@@ -939,14 +937,13 @@ class Lieferschein extends GenLieferschein
else
$this->app->Tpl->Set('STEUER',"Export");
-
if($menu)
{
$menu = $this->LieferscheinIconMenu($id);
$this->app->Tpl->Set('MENU',$menu);
}
- // ARTIKEL
+ // ARTIKEL
$lieferscheinarr = $this->app->DB->SelectRow("SELECT * FROM lieferschein WHERE id='$id' LIMIT 1");
$status = $lieferscheinarr['status'];//$this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
@@ -1313,8 +1310,6 @@ class Lieferschein extends GenLieferschein
$this->app->erp->DokumentAbschicken();
}
-
-
function LieferscheinDelete($id = null)
{
if(is_null($id))
@@ -1716,7 +1711,7 @@ class Lieferschein extends GenLieferschein
}
- function LieferscheinMenu()
+ function LieferscheinMenu($seriennummern_zeigen = false, $paketmarke_zeigen = false)
{
$id = $this->app->Secure->GetGET("id");
@@ -1733,26 +1728,22 @@ class Lieferschein extends GenLieferschein
// status bestell
$status = $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
+ $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=edit&id=$id","Details");
+
if ($status=="angelegt")
{
- $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=freigabe&id=$id","Freigabe");
+ $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=freigabe&id=$id","Freigabe");
+ } else {
+ if ($seriennummern_zeigen) {
+ $this->app->erp->MenuEintrag("index.php?module=seriennummern&action=enter&lieferschein=".$id."&from=lieferschein", "Seriennummern");
+ }
+ if ($paketmarke_zeigen) {
+ $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=paketmarke&id=$id","Paketmarke");
+ }
}
- $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=edit&id=$id","Details");
- // $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=abschicken&id=$id","Abschicken / Protokoll");
- // $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=protokoll&id=$id","Protokoll");
$this->app->erp->MenuEintrag("index.php?module=lieferschein&action=list","Zurück zur Übersicht");
-
- if (!empty($this->app->erp->SeriennummernCheckLieferschein(
- lieferschein_id: $id,
- ignore_date: true,
- only_missing: false,
- group_lieferschein: true))) {
- $this->app->erp->MenuEintrag("index.php?module=seriennummern&action=enter&lieferschein=".$id."&from=lieferschein", "Seriennummern");
- }
-
- $this->app->erp->MenuEintrag("index.php?module=lieferschein&action=paketmarke&id=$id","Paketmarke");
-
+
$this->app->erp->RunMenuHook('lieferschein');
}
@@ -1869,15 +1860,25 @@ class Lieferschein extends GenLieferschein
if($this->app->erp->InnendienstAendern("lieferschein",$id,$cmd,$sid))
return;
+
+ $seriennummern = $this->app->erp->SeriennummernCheckLieferschein(
+ lieferschein_id: $id,
+ ignore_date: true,
+ only_missing: false,
+ group_lieferschein: true);
+
+ $seriennummern_aktiv = !empty($seriennummern);
+
+ $seriennummern_check_result = $this->app->erp->SeriennummernCheckLieferscheinWarnung($id, false);
+
+ $seriennummern_ok = empty($seriennummern_check_result);
+
if($this->app->erp->DisableModul("lieferschein",$id))
{
- //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht");
- $this->LieferscheinMenu();
+ $this->LieferscheinMenu(seriennummern_zeigen: !empty($seriennummern), paketmarke_zeigen: false);
return;
}
-
-
$this->app->YUI->AARLGPositionen();
$this->app->erp->CheckVertrieb($id,"lieferschein");
@@ -1893,10 +1894,6 @@ class Lieferschein extends GenLieferschein
$lieferantenretoure = $lieferscheinarr['lieferantenretoure'];//$this->app->DB->Select("SELECT lieferantenretoure FROM lieferschein WHERE id='$id' LIMIT 1");
$schreibschutz = $lieferscheinarr['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM lieferschein WHERE id='$id' LIMIT 1");
$status = $lieferscheinarr['status'];//$this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
-
- if ($status != 'angelegt' && $status != 'storniert') {
- $this->app->erp->SeriennummernCheckLieferscheinWarnung($id, false);
- }
}else{
$nummer = '';
$projekt = 0;
@@ -1958,20 +1955,19 @@ class Lieferschein extends GenLieferschein
$this->app->erp->PDFArchivieren('lieferschein', $id, true);
}
- if($status != "angelegt" && $status != "angelegta" && $status != "a")
+ if($status != "angelegt" && $status != "angelegta" && $status != "a" && $seriennummern_ok)
{
$Brief = new Briefpapier($this->app);
- if($Brief->zuArchivieren($id, "lieferschein"))
+ if ($Brief->zuArchivieren($id, "lieferschein"))
{
- $this->app->Tpl->Add('MESSAGE',"Der Lieferschein ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
-
");
- }elseif(!$this->app->DB->Select("SELECT versendet FROM lieferschein WHERE id = '$id' LIMIT 1"))
+ $this->app->Tpl->Add('MESSAGE',"Der Lieferschein ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
");
+ } elseif(!$this->app->DB->Select("SELECT versendet FROM lieferschein WHERE id = '$id' LIMIT 1"))
{
$this->app->Tpl->Add('MESSAGE',"Der Lieferschein wurde noch nicht versendet!
");
}
}
- if($schreibschutz!="1")// && $this->app->erp->RechteVorhanden("lieferschein","schreibschutz"))
+ if($schreibschutz!="1")
{
$this->app->erp->AnsprechpartnerButton($adresse);
$this->app->erp->LieferadresseButton($adresse);
@@ -1980,11 +1976,8 @@ class Lieferschein extends GenLieferschein
$this->app->erp->LieferscheinNeuberechnen($id);
}
-
- //$this->LieferscheinMiniDetail(MINIDETAIL,false);
$this->app->Tpl->Set('ICONMENU',$this->LieferscheinIconMenu($id));
- $this->app->Tpl->Set('ICONMENU2',$this->LieferscheinIconMenu($id,2));
-
+ //$this->app->Tpl->Set('ICONMENU2',$this->LieferscheinIconMenu($id,2));
if($nummer!="")
{
@@ -1998,7 +1991,6 @@ class Lieferschein extends GenLieferschein
if($schreibschutz=="1" && $this->app->erp->RechteVorhanden("lieferschein","schreibschutz"))
{
$this->app->Tpl->Add('MESSAGE',"Dieser Lieferschein ist schreibgeschützt und darf daher nicht mehr bearbeitet werden!
");
- // $this->app->erp->CommonReadonly();
}
if($schreibschutz=="1")
$this->app->erp->CommonReadonly();
@@ -2012,13 +2004,11 @@ class Lieferschein extends GenLieferschein
');
-
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
');
}
-
// immer wenn sich der lieferant genändert hat standartwerte setzen
if($this->app->Secure->GetPOST("adresse")!="")
{
@@ -2053,10 +2043,8 @@ class Lieferschein extends GenLieferschein
header("Location: index.php?module=lieferschein&action=edit&id=$id");
exit;
}
-
}
-
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$table->Query("SELECT nummer as Nummer, bezeichnung, menge,vpe as VPE
@@ -2086,7 +2074,8 @@ class Lieferschein extends GenLieferschein
header("Location: index.php?module=lieferschein&action=positionen&id=$id");
exit;
}
- $this->LieferscheinMenu();
+
+ $this->LieferscheinMenu(seriennummern_zeigen: $seriennummern_aktiv, paketmarke_zeigen: $seriennummern_ok);
}
@@ -2230,8 +2219,6 @@ class Lieferschein extends GenLieferschein
$this->app->YUI->DateiUpload('PAGE',"Lieferschein",$id);
}
-
-
function LieferscheinList()
{
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('lieferschein', 'edit'))
diff --git a/www/pages/seriennummern.php b/www/pages/seriennummern.php
index dd23d019..64e914d7 100644
--- a/www/pages/seriennummern.php
+++ b/www/pages/seriennummern.php
@@ -22,6 +22,7 @@ class Seriennummern {
$this->app->ActionHandler("enter", "seriennummern_enter");
$this->app->ActionHandler("delete", "seriennummern_delete");
$this->app->ActionHandler("remove", "seriennummern_remove");
+ $this->app->ActionHandler("minidetail_lieferscheinposition", "seriennummern_lieferscheinpos_minidetail");
$this->app->ActionHandler("minidetail", "seriennummern_minidetail");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
@@ -36,14 +37,14 @@ class Seriennummern {
case "seriennummern_list":
$allowed['seriennummern_list'] = array('list');
// $heading = array('Artikel-Nr.','Artikel', 'Seriennummer','Erfasst am','Eingelagert','Adresse','Lieferschein','Lieferdatum', 'Menü');
- $heading = array('Artikel-Nr.','Artikel', 'Seriennummer','Erfasst am','Eingelagert', 'Menü');
- $width = array('10%','20%','20%','10%','1%','1%'); // Fill out manually later
+ $heading = array('','','Artikel-Nr.','Artikel', 'Seriennummer','Erfasst am','Eingelagert', 'Menü');
+ $width = array('1%','1%','10%','20%','20%','10%','1%','1%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
// $findcols = array('a.nummer', 'a.name_de', 's.seriennummer','s.datum','s.eingelagert','lh.adresse_name','lh.belegnr','lh.datum','s.id');
- $findcols = array('a.nummer', 'a.name_de', 's.seriennummer','s.datum','s.eingelagert','s.id');
+ $findcols = array('s.id','s.id','a.nummer', 'a.name_de', 's.seriennummer','s.datum','s.eingelagert','s.id');
$searchsql = array('a.nummer', 'a.name_de', 's.seriennummer');
$defaultorder = 1;
@@ -55,9 +56,9 @@ class Seriennummern {
$dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`";
-// $moreinfo = true; // Allow drop down details
+ $moreinfo = true; // Allow drop down details
// $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails
-// $menucol = 11; // Set id col for moredata/menu
+ $menucol = 1; // Set id col for moredata/menu
$menu = "";
@@ -84,6 +85,7 @@ class Seriennummern {
$sql_columns = "
s.id,
+ $dropnbox,
CONCAT('',a.nummer,'') as nummer,
a.name_de,
s.seriennummer,
@@ -369,7 +371,7 @@ class Seriennummern {
$searchsql = array('l.belegnr');
$moreinfo = true; // Allow drop down details
-// $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails
+ $moreinfoaction = "_lieferscheinposition"; // specify suffix for minidetail-URL to allow different minidetails
$menucol = 1; // Set id col for moredata/menu
$defaultorder = 1;
@@ -380,7 +382,7 @@ class Seriennummern {
$dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`";
- $menu = "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
+ $menu = "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
$lieferschein_link = array(
'app->Tpl->addMessage('error', 'Der Eintrag wurde gelöscht');
- }
- $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM lieferschein_position WHERE id = '".$id."'");
- $this->app->Location->execute("index.php?module=seriennummern&action=enter&lieferschein=$lieferschein&msg=$msg");
+ if ($id) {
+ $sql = "SELECT l.id, l.schreibschutz FROM lieferschein l INNER JOIN lieferschein_position lp ON l.id = lp.lieferschein WHERE lp.id = '".$id."' LIMIT 1";
+ $lieferschein = $this->app->DB->SelectRow($sql);
+ if ($lieferschein['schreibschutz']) {
+ $msg = $this->app->erp->base64_url_encode("Der Lieferschein ist schreibgeschützt.
");
+ } else {
+ $sql = "SELECT seriennummer FROM seriennummern_lieferschein_position WHERE `lieferschein_position` = '{$id}'";
+ $seriennummer_ids = $this->app->DB->SelectArr($sql);
+ if (!$this->app->DB->Delete("DELETE FROM `seriennummern_lieferschein_position` WHERE `lieferschein_position` = '{$id}'")) {
+ $msg = $this->app->erp->base64_url_encode("Die Einträge wurden nicht gelöscht!
");
+ } else {
+ $msg = $this->app->erp->base64_url_encode("Die Einträge wurden gelöscht.
");
+ if (!empty($seriennummer_ids)) {
+ $sql = "UPDATE seriennummern SET eingelagert = 1, logdatei = CURRENT_TIMESTAMP WHERE id IN (".implode(', ',array_column($seriennummer_ids, 'seriennummer')).")";
+ $this->app->DB->Update($sql);
+ }
+ }
+ }
+ $this->app->Location->execute("index.php?module=seriennummern&action=enter&lieferschein=".$lieferschein['id']."&msg=$msg&from=$from");
}
}
@@ -746,22 +762,20 @@ class Seriennummern {
}
if ($lieferschein_position == $position['lieferschein_position']) {
$sql = "INSERT INTO seriennummern_lieferschein_position (lieferschein_position, seriennummer) VALUES ('".$lieferschein_position."','".$check_existing[0]['id']."') ";
-
$this->app->DB->Insert($sql);
+ $sql = "UPDATE seriennummern SET eingelagert = 0, logdatei = CURRENT_TIMESTAMP WHERE id = '".$check_existing[0]['id']."'";
+ $this->app->DB->Update($sql);
$written = true;
}
}
}
-
if (!$written) {
$seriennummern_not_written[] = $seriennummer;
}
-
}
-
}
if (!empty($seriennummern_dont_exist)) {
- $this->app->Tpl->addMessage('error', 'Seriennummern existieren nicht: '.implode(', ',$seriennummern_dont_exist));
+ $this->app->Tpl->addMessage('error', 'Seriennummern nicht verfügbar: '.implode(', ',$seriennummern_dont_exist));
}
if (!empty($seriennummern_ambigious)) {
$this->app->Tpl->addMessage('error', 'Seriennummern nicht eindeutig: '.implode(', ',$seriennummern_ambigious));
@@ -853,12 +867,9 @@ class Seriennummern {
DISTINCT s.seriennummer
FROM
seriennummern s
- LEFT JOIN
- seriennummern_lieferschein_position slp ON slp.seriennummer = s.id
WHERE
s.artikel = '".$check_lieferschein[0]['artikel']."'
AND s.eingelagert = 1
- AND slp.id IS NULL
ORDER BY s.id ASC
LIMIT 1
";
@@ -1069,12 +1080,13 @@ class Seriennummern {
if ($notificiation) {
$this->seriennummern_create_notification_lieferschein($lieferschein_id, 'enter', 'Seriennummern','Bitte Seriennummern für Lieferschein erfassen','Zur Eingabe');
} else {
- $this->app->Tpl->Add('MESSAGE',"Bitte Seriennummern erfassen
");
+ $this->app->Tpl->Add('MESSAGE',"Seriennummern unvollständig!
");
}
}
+ return($check_delivery_notes);
}
- public function seriennummern_minidetail($parsetarget='',$menu=true) {
+ public function seriennummern_lieferscheinpos_minidetail($parsetarget='',$menu=true) {
$id = $this->app->Secure->GetGET('id');
if($parsetarget=='')
@@ -1087,4 +1099,18 @@ class Seriennummern {
$this->app->ExitXentral();
}
}
+
+ public function seriennummern_minidetail($parsetarget='',$menu=true) {
+ $id = $this->app->Secure->GetGET('id');
+
+ if($parsetarget=='')
+ {
+ $tmp = new EasyTable($this->app);
+ $tmp->Query("SELECT l.belegnr AS Lieferschein, ".$this->app->erp->FormatDate('l.datum')." AS Datum, a.name AS Adresse FROM lieferschein l INNER JOIN adresse a ON a.id = l.adresse INNER JOIN lieferschein_position lp ON l.id = lp.lieferschein INNER JOIN seriennummern_lieferschein_position slp ON slp.lieferschein_position = lp.id WHERE slp.seriennummer ='$id' ",0,"");
+ $tmp->DisplayNew('TAB1',"Adresse","noAction");
+
+ $this->app->Tpl->Output('emptytab.tpl');
+ $this->app->ExitXentral();
+ }
+ }
}