From 046bfee9f90c30328b74e4bc95291c9cc7162c47 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 18 Sep 2024 20:12:54 +0200 Subject: [PATCH] seriennummern rework checks --- www/lib/class.erpapi.php | 28 ++++- www/pages/auftrag.php | 2 + www/pages/lieferschein.php | 2 +- www/pages/seriennummern.php | 228 +++++++++++++++++++----------------- www/pages/versandpakete.php | 5 + www/pages/wareneingang.php | 24 +++- 6 files changed, 173 insertions(+), 116 deletions(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 48380c9a..b07a9d64 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -2821,20 +2821,36 @@ public function NavigationHooks(&$menu) } } - function SeriennummernCheckWarnung(int $artikel_id) { + function SeriennummernCheckBenachrichtigung(int $artikel_id) { $obj = $this->LoadModul('seriennummern'); - $obj->seriennummern_check_and_message_stock_added($artikel_id); + return($obj->seriennummern_check_and_notification_stock_added($artikel_id)); } - - function SeriennummernCheckLieferscheinWarnung(int $lieferschein_id, bool $notification) { + + function SeriennummernCheckLieferscheinBenachrichtigung(int $lieferschein_id) { $obj = $this->LoadModul('seriennummern'); - return($obj->seriennummern_check_and_message_delivery_note($lieferschein_id, $notification)); + return($obj->seriennummern_check_and_notification_delivery_note($lieferschein_id)); + } + + function SeriennummernCheckLieferscheinWarnung(int $lieferschein_id) { + $obj = $this->LoadModul('seriennummern'); + return($obj->seriennummern_check_and_message_delivery_notes($lieferschein_id)); } function SeriennummernCheckLieferschein($lieferschein_id = null, $ignore_date = false, $only_missing = true, $group_lieferschein = false) { $obj = $this->LoadModul('seriennummern'); return ($obj->seriennummern_check_delivery_notes($lieferschein_id, $ignore_date, $only_missing, $group_lieferschein)); } + + function SeriennummernCheckWareneingangWarnung(int $wareneingang_id) { + $obj = $this->LoadModul('seriennummern'); + return($obj->seriennummern_check_and_message_incoming_goods($wareneingang_id)); + } + + function SeriennummernCheckWareneingang($wareneingang_id = null, $ignore_date = false, $only_missing = true, $group_wareneingang = false) { + $obj = $this->LoadModul('seriennummern'); + return ($obj->seriennummern_check_incoming_goods($wareneingang_id, $ignore_date, $only_missing, $group_wareneingang)); + } + // @refactor in Lager Modul function ArtikelAnzahlLagerPlatzMitSperre($artikel,$lager_platz) @@ -20479,7 +20495,7 @@ function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert, $this->RunHook('LagerEinlagern_after',7, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid); - $this->SeriennummernCheckWarnung($artikel); + $this->SeriennummernCheckBenachrichtigung($artikel); } function CreateLagerPlatzInhaltVPE($artikel, $menge, $gewicht, $laenge, $breite, $hoehe, $menge2 = 0, $gewicht2 = 0, $laenge2 = 0, $breite2 = 0, $hoehe2 = 0) diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php index 1436153c..f7f09ac9 100644 --- a/www/pages/auftrag.php +++ b/www/pages/auftrag.php @@ -5794,6 +5794,8 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. $nurRestmenge ); + $this->app->erp->SeriennummernCheckLieferscheinBenachrichtigung($lieferschein); + $sql = "SELECT id FROM kommissionierung k WHERE k.auftrag = '".$id."'"; $vorkommissionierung = $this->app->DB->Select($sql); diff --git a/www/pages/lieferschein.php b/www/pages/lieferschein.php index b2a5d241..3d3b40a6 100644 --- a/www/pages/lieferschein.php +++ b/www/pages/lieferschein.php @@ -1869,7 +1869,7 @@ class Lieferschein extends GenLieferschein $seriennummern_aktiv = !empty($seriennummern); - $seriennummern_check_result = $this->app->erp->SeriennummernCheckLieferscheinWarnung($id, false); + $seriennummern_check_result = $this->app->erp->SeriennummernCheckLieferscheinWarnung($id); $seriennummern_ok = empty($seriennummern_check_result); diff --git a/www/pages/seriennummern.php b/www/pages/seriennummern.php index c2b88781..19501fd1 100644 --- a/www/pages/seriennummern.php +++ b/www/pages/seriennummern.php @@ -554,77 +554,7 @@ class Seriennummern { $this->app->erp->MenuEintrag("index.php?module=seriennummern&action=wareneingaenge_list", "Wareneingänge"); // $this->app->erp->MenuEintrag("index.php", "Zurück"); } - - function seriennummern_check_and_message($artikel_id) { - $check_seriennummern = $this->seriennummern_check_serials($artikel_id); - - if (!empty($check_seriennummern)) { - $artikel_minus_id_links = array(); - $artikel_plus_id_links = array(); - foreach ($check_seriennummern as $artikel_id) { - if ($artikel_id['menge_nummern'] < $artikel_id['menge_auf_lager']) { - $artikel_minus_id_links[] = ''.$artikel_id['nummer'].''; - } - else if ($artikel_id['menge_nummern'] > $artikel_id['menge_auf_lager']) { - $artikel_plus_id_links[] = ''.$artikel_id['nummer'].''; - } - } - if (!empty($artikel_minus_id_links)) { - $this->app->YUI->Message('warning','Seriennummern fehlen für Artikel: '.implode(', ',$artikel_minus_id_links)); - } - if (!empty($artikel_plus_id_links)) { - $this->app->YUI->Message('warning','Seriennummern Überschuss für Artikel: '.implode(', ',$artikel_plus_id_links)); - } - } - } - - function seriennummern_delivery_note_check_and_message($lieferschein_id) { - - $check_incoming_goods = $this->seriennummern_check_delivery_notes($lieferschein_id, group_lieferschein: true); - if (!empty($check_delivery_notes)) { - $lieferschein_minus_links = array(); - $lieferschein_plus_links = array(); - foreach ($check_delivery_notes as $check_delivery_note) { - if ($check_delivery_note['anzahl_nummern'] < $check_delivery_note['menge_lieferschein']) { - $lieferschein_minus_links[] = ''.$check_delivery_note['belegnr'].''; - } - else if ($check_delivery_note['anzahl_nummern'] > $check_delivery_note['menge']) { - $lieferschein_plus_links[] = ''.$check_delivery_note['belegnr'].''; - } - } - if (!empty($lieferschein_minus_links)) { - $this->app->YUI->Message('warning','Seriennummern fehlen für Lieferschein: '.implode(', ',$lieferschein_minus_links)); - } - if (!empty($lieferschein_plus_links)) { - $this->app->YUI->Message('warning','Seriennummern Überschuss für Lieferschein: '.implode(', ',$lieferschein_plus_links)); - } - } - } - - function seriennummern_check_incoming_goods_and_message($wareneingang_id) { - - $check_incoming_goods = $this->seriennummern_check_incoming_goods($wareneingang_id, group_wareneingang: true); - - if (!empty($check_incoming_goods)) { - $wareneingang_minus_links = array(); - $wareneingang_plus_links = array(); - foreach ($check_incoming_goods as $check_delivery_note) { - if ($check_delivery_note['anzahl_nummern'] < $check_delivery_note['menge_wareneingang']) { - $wareneingang_minus_links[] = ''.$check_delivery_note['belegnr'].''; - } - else if ($check_delivery_note['anzahl_nummern'] > $check_delivery_note['menge']) { - $wareneingang_plus_links[] = ''.$check_delivery_note['belegnr'].''; - } - } - if (!empty($wareneingang_minus_links)) { - $this->app->YUI->Message('warning','Seriennummern fehlen für Wareneingang: '.implode(', ',$wareneingang_minus_links)); - } - if (!empty($wareneingang_plus_links)) { - $this->app->YUI->Message('warning','Seriennummern Überschuss für Wareneingang: '.implode(', ',$wareneingang_plus_links)); - } - } - } - + function seriennummern_nummern_list() { $this->seriennummern_menu(); @@ -675,8 +605,8 @@ class Seriennummern { function seriennummern_menu_checks() { $this->seriennummern_check_and_message(null); - $this->seriennummern_delivery_note_check_and_message(null); - $this->seriennummern_check_incoming_goods_and_message(null); + $this->seriennummern_check_and_message_delivery_notes(null); + $this->seriennummern_check_and_message_incoming_goods(null); } function seriennummern_artikel_list() { @@ -1044,6 +974,9 @@ class Seriennummern { } + /* -------------------------------------------- + CHECKS + -------------------------------------------- */ /* * Check if all serial numbers are given * Return array of article ids @@ -1095,7 +1028,7 @@ class Seriennummern { * Check if all incoming goods notes have serials * Return array of incoming goods note positions and head information */ - public function seriennummern_check_incoming_goods($wareneingang_id = null, $ignore_date = false, $only_missing = true, $group_wareneingang = false) : array { + public function seriennummern_check_incoming_goods($wareneingang_id = null, $only_missing = true, $group_wareneingang = false) : array { if ($group_wareneingang) { $sql_we = "''"; @@ -1132,16 +1065,7 @@ class Seriennummern { ) spd ON spd.paketdistribution = pd.id WHERE (a.seriennummern <> 'keine') - AND ( - pa.datum >=( - SELECT - COALESCE(DATE(MIN(datum)),CURRENT_DATE()) - FROM - seriennummern - WHERE - artikel = a.id - ) OR ('".$ignore_date."' <> '') - ) + AND pa.status <> 'abgeschlossen' AND (pa.id = '".$wareneingang_id."' OR '".$wareneingang_id."' = '') GROUP BY pa.id @@ -1222,6 +1146,9 @@ class Seriennummern { return(empty($result)?array():$result); } + /* -------------------------------------------- + NOTIFICATIONS + -------------------------------------------- */ protected function seriennummern_create_notification_artikel($artikel_id, $action, $title = 'Seriennummern', $message = 'Meldung', $button = 'Ok') { // Notification erstellen @@ -1265,32 +1192,131 @@ class Seriennummern { $notification = $this->app->Container->get('NotificationService'); $notification->createFromData($this->app->User->GetID(), $notification_message); } - + + /* -------------------------------------------- + CHECKS AND NOTIFICATIONS + -------------------------------------------- */ /* * Check if new numbers need to be entered, if yes, create notification */ - public function seriennummern_check_and_message_stock_added(int $artikel_id) { + public function seriennummern_check_and_notification_stock_added(int $artikel_id) { $check_seriennummern = $this->seriennummern_check_serials($artikel_id); if ($check_seriennummern[0]['menge_nummern'] < $check_seriennummern[0]['menge_auf_lager']) { $this->seriennummern_create_notification_artikel($artikel_id, 'enter', 'Seriennummern','Bitte Seriennummern für Einlagerung erfassen','Zur Eingabe'); } - } - + } + /* * Check if numbers need to be entered after stock removal, if yes, create notification or message */ - public function seriennummern_check_and_message_delivery_note(int $lieferschein_id, bool $notification) { + public function seriennummern_check_and_notification_delivery_note(int $lieferschein_id) { $check_delivery_notes = $this->seriennummern_check_delivery_notes($lieferschein_id); if (!empty($check_delivery_notes)) { - 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',"