diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index b065dbb9..4debd59d 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -1514,8 +1514,10 @@ public function NavigationHooks(&$menu) function FormatMenge($spalte, $decimals = 0) { return ('FORMAT('.$spalte.','.$decimals.',\'de_DE\')'); + } -// return "replace(trim($spalte)+0,'.',',')"; + function FormatMengeFuerFormular($spalte) { + return "trim($spalte)+0"; } function FormatUCfirst($spalte) @@ -2810,14 +2812,19 @@ public function NavigationHooks(&$menu) } -function LieferscheinSeriennummernberechnen($id) -{ - /** @var Seriennummern $obj */ - $obj = $this->LoadModul('seriennummern'); - if(!empty($obj) && method_exists($obj, 'LieferscheinSeriennummernberechnen')) { - $obj->LieferscheinSeriennummernberechnen($id); - } -} + function LieferscheinSeriennummernberechnen($id) + { + /** @var Seriennummern $obj */ + $obj = $this->LoadModul('seriennummern'); + if(!empty($obj) && method_exists($obj, 'LieferscheinSeriennummernberechnen')) { + $obj->LieferscheinSeriennummernberechnen($id); + } + } + + function SeriennummernCheckWarnung($artikel_id) { + $obj = $this->LoadModul('seriennummern'); + $obj->seriennummern_check_and_message_stock_added($artikel_id); + } // @refactor in Lager Modul function ArtikelAnzahlLagerPlatzMitSperre($artikel,$lager_platz) @@ -20465,6 +20472,8 @@ function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert, } $this->RunHook('LagerEinlagern_after',7, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid); + + $this->SeriennummernCheckWarnung($artikel); } function CreateLagerPlatzInhaltVPE($artikel, $menge, $gewicht, $laenge, $breite, $hoehe, $menge2 = 0, $gewicht2 = 0, $laenge2 = 0, $breite2 = 0, $hoehe2 = 0) @@ -39577,7 +39586,7 @@ function Firmendaten($field,$projekt="") } return $sipuid; } -} +} // END erpAPI function parse_csv($str,$parse_split_parameter="") diff --git a/www/pages/seriennummern.php b/www/pages/seriennummern.php index 70427ec7..acd19138 100644 --- a/www/pages/seriennummern.php +++ b/www/pages/seriennummern.php @@ -31,13 +31,14 @@ class Seriennummern { switch ($name) { case "seriennummern_list": $allowed['seriennummern_list'] = array('list'); - $heading = array('','','Artikel', 'Seriennummer','Adresse','Lieferschein','Lieferdatum', 'Menü'); + $heading = array('','','Nummer','Artikel', 'Seriennummer','Erzeugt am','Adresse','Lieferschein','Lieferdatum', 'Menü'); $width = array('1%','1%','10%'); // Fill out manually later // columns that are aligned right (numbers etc) // $alignright = array(4,5,6,7,8); - $findcols = array('s.id','s.id','a.nummer', 's.seriennummer','ad.name','l.belegnr','l.datum','s.id'); + $findcols = array('s.id','s.id', 'a.name_de', 'a.nummer', 's.seriennummer','s.logdatei','ad.name','l.belegnr','l.datum','s.id'); + $searchsql = array('a.name_de', 'a.name_de', 'a.nummer', 's.seriennummer'); $defaultorder = 1; $defaultorderdesc = 0; @@ -58,8 +59,10 @@ class Seriennummern { SELECT SQL_CALC_FOUND_ROWS s.id, $dropnbox, - a.nummer, + CONCAT('',a.nummer,'') as nummer, + a.name_de, s.seriennummer, + ".$app->erp->FormatDateTime("s.logdatei").", ad.name, l.belegnr, ".$app->erp->FormatDate("l.datum").", @@ -110,7 +113,7 @@ class Seriennummern { '', - 'Erfassen', + '', '' ); @@ -119,7 +122,7 @@ class Seriennummern { $dropnbox, CONCAT('',a.nummer,'') as nummer, a.name_de, - auf_lager.anzahl, + ".$app->erp->FormatMenge('auf_lager.anzahl').", SUM(if(s.id IS NULL,0,1))-SUM(if(s.lieferscheinpos <> 0,1,0)), SUM(if(s.lieferscheinpos <> 0,1,0)), SUM(if(s.id IS NULL,0,1)), @@ -183,7 +186,7 @@ class Seriennummern { $dropnbox, CONCAT('',a.nummer,'') as nummer, a.name_de, - auf_lager.anzahl, + ".$app->erp->FormatMenge('auf_lager.anzahl').", SUM(if(s.id IS NULL,0,1))-SUM(if(s.lieferscheinpos <> 0,1,0)), SUM(if(s.lieferscheinpos <> 0,1,0)), SUM(if(s.id IS NULL,0,1)) @@ -296,7 +299,7 @@ class Seriennummern { continue; } - $sql = "INSERT INTO seriennummern (seriennummer, artikel) VALUES ('".$this->app->DB->real_escape_string($seriennummer)."', '".$artikel_id."')"; + $sql = "INSERT INTO seriennummern (seriennummer, artikel, logdatei) VALUES ('".$this->app->DB->real_escape_string($seriennummer)."', '".$artikel_id."', CURRENT_TIMESTAMP)"; try { $this->app->DB->Insert($sql); } catch (mysqli_sql_exception $e) { @@ -327,14 +330,14 @@ class Seriennummern { $seriennummern = array_unique($seriennummern); $check_seriennummern = $this->seriennummern_check_serials($artikel_id); - if (empty($check_seriennummern)) { + $check_seriennummern = $check_seriennummern[0]; + + $anzahl_fehlt = $check_seriennummern['menge_auf_lager']-$check_seriennummern['menge_nummern']; + + if ($anzahl_fehlt == 0) { $this->app->Tpl->addMessage('success', 'Seriennummern vollständig.'); } - $check_seriennummern = $check_seriennummern[0]; - - $anzahl_fehlt = $check_seriennummern['menge_auf_lager']-$check_seriennummern['menge_nummern']; - if ($anzahl_fehlt < 0) { $anzahl_fehlt = 0; } @@ -372,7 +375,7 @@ class Seriennummern { auf_lager.id, nummer, name, - auf_lager.anzahl menge_auf_lager, + ".$this->app->erp->FormatMenge('auf_lager.anzahl')." menge_auf_lager, COALESCE(nummern_verfuegbar.anzahl,0) menge_nummern FROM ( @@ -405,8 +408,6 @@ class Seriennummern { auf_lager.id = nummern_verfuegbar.artikel GROUP BY auf_lager.id - HAVING - menge_nummern <> menge_auf_lager "; $result = $this->app->DB->SelectArr($sql); @@ -419,29 +420,46 @@ class Seriennummern { * * @return void */ - protected function seriennummern_create_notification($article) + protected function seriennummern_create_notification($artikel_id, $action, $title = 'Seriennummern', $message = 'Meldung', $button = 'Ok') { // Notification erstellen - $message = new NotificationMessageData('default', 'Seriennummern check problem alter'); - $message->setMessage('Nicht genug Seriendinges'); - $message->addTags(['seriennummern']); - $message->setOption('id', $article); - $message->setPriority(true); + $notification_message = new NotificationMessageData('default', $title); + $artikel = $this->app->DB->SelectRow("SELECT name_de, nummer FROM artikel WHERE id = '".$artikel_id."' LIMIT 1"); + $notification_message->setMessage($message.' Artikel ('.$artikel['nummer'].') '.$artikel['name']); + $notification_message->addTags(['seriennummern']); + $notification_message->setPriority(true); $messageButtons = [ [ - 'text' => 'Seriennummern pflegen', - 'link' => sprintf('index.php?module=seriennummern&action=edit&article=%s', $article), - ], - [ - 'text' => 'Zum Spooler', - 'link' => '#' + 'text' => $button, + 'link' => sprintf('index.php?module=seriennummern&action='.$action.'&artikel=%s', $artikel_id), ] ]; - $message->setOption('buttons', $messageButtons); + $notification_message->setOption('buttons', $messageButtons); /** @var NotificationService $notification */ $notification = $this->app->Container->get('NotificationService'); - $notification->createFromData($this->app->User->GetID(), $message); + $notification->createFromData($this->app->User->GetID(), $notification_message); } + + /* + * Check if new numbers need to be entered, if yes, create notification + */ + public function seriennummern_check_and_message_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_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 + */ + public function seriennummern_check_and_message_stock_removed(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_id, 'enter', 'Seriennummern','Bitte Seriennummern für Auslagerung erfassen','Zur Eingabe'); + } + } + }