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 @@ -
- - -
- [MESSAGE] -
- [FORMHANDLEREVENT] -
-
-
-
-
- {|Seriennummern erfassen [LEGEND]|} - - - - - - - - - - - - - - - - - - - - - -
- {|Lagermenge|}: - - -
- {|Seriennummern verfügbar|}: - - -
- {|Seriennummern fehlen|}: - - -
- {|Seriennummer scannen|}: - - -
- {|Seriennummer wählen|}: - - -
-
-
-
-
-
-
- {|Seriennummernassistent|} - - - - - - - - - - - - - - - - - - - - - -
- {|Letzte Seriennummer|}: - - -
- {|Präfix|}: - - -
- {|Start|}: - - -
- {|Postfix|}: - - -
- {|Anzahl|}: - - -
-
-
-
-
-
-
- {|Aktionen|} - - - - - - - -
- -
- -
-
-
-
-
-
-
-
-
-
-
- {|Gewählte Seriennummern|} - - - - - -
- {|Seriennummern|}: - - - Liste der Seriennummern, 1 pro Zeile -
-
-
-
-
-
-
- {|Aktionen|} - - - - - - - - - - -
- {|Ausgelieferte erlauben|} -
- -
- -
-
-
-
-
-
-
-
-
-
-
- {|Lieferscheinpositionen|} - [LIEFERSCHEINPOSITIONEN] -
-
-
-
-
-
-
-
- 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 = "
" . "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; @@ -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(); + } + } }