diff --git a/database/struktur.sql b/database/struktur.sql index 8f70631f..03a1c1b1 100755 --- a/database/struktur.sql +++ b/database/struktur.sql @@ -12945,12 +12945,8 @@ DROP TABLE IF EXISTS `seriennummern`; CREATE TABLE `seriennummern` ( `id` int(11) NOT NULL AUTO_INCREMENT, `seriennummer` varchar(255) NOT NULL, - `adresse` int(11) NOT NULL, `artikel` int(11) NOT NULL, `beschreibung` varchar(255) NOT NULL, - `lieferung` date NOT NULL, - `lieferschein` int(11) NOT NULL, - `lieferscheinpos` int(11) NOT NULL, `bearbeiter` varchar(255) NOT NULL, `logdatei` datetime NOT NULL, PRIMARY KEY (`id`) diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index 8db55bb4..1dd53b8c 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -91433,17 +91433,6 @@ "Privileges": "select,insert,update,references", "Comment": "" }, - { - "Field": "adresse", - "Type": "int(11)", - "Collation": null, - "Null": "NO", - "Key": "", - "Default": null, - "Extra": "", - "Privileges": "select,insert,update,references", - "Comment": "" - }, { "Field": "artikel", "Type": "int(11)", @@ -91477,39 +91466,6 @@ "Privileges": "select,insert,update,references", "Comment": "" }, - { - "Field": "lieferung", - "Type": "date", - "Collation": null, - "Null": "NO", - "Key": "", - "Default": null, - "Extra": "", - "Privileges": "select,insert,update,references", - "Comment": "" - }, - { - "Field": "lieferschein", - "Type": "int(11)", - "Collation": null, - "Null": "NO", - "Key": "", - "Default": null, - "Extra": "", - "Privileges": "select,insert,update,references", - "Comment": "" - }, - { - "Field": "lieferscheinpos", - "Type": "int(11)", - "Collation": null, - "Null": "NO", - "Key": "", - "Default": null, - "Extra": "", - "Privileges": "select,insert,update,references", - "Comment": "" - }, { "Field": "bearbeiter", "Type": "varchar(255)", @@ -91553,6 +91509,106 @@ } ] }, + { + "name": "seriennummern_lieferschein_position", + "collation": "utf8mb3_general_ci", + "type": "BASE TABLE", + "columns": [ + { + "Field": "id", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "PRI", + "Default": null, + "Extra": "auto_increment", + "Privileges": "select,insert,update,references", + "Comment": "" + }, + { + "Field": "seriennummer", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, + { + "Field": "lieferschein_position", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + } + ], + "keys": [ + { + "Key_name": "PRIMARY", + "Index_type": "BTREE", + "columns": [ + "id" + ], + "Non_unique": "" + } + ] + }, + { + "name": "seriennummern_paketdistribution", + "collation": "utf8mb3_general_ci", + "type": "BASE TABLE", + "columns": [ + { + "Field": "id", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "PRI", + "Default": null, + "Extra": "auto_increment", + "Privileges": "select,insert,update,references", + "Comment": "" + }, + { + "Field": "seriennummer", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, + { + "Field": "paketdistribution", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + } + ], + "keys": [ + { + "Key_name": "PRIMARY", + "Index_type": "BTREE", + "columns": [ + "id" + ], + "Non_unique": "" + } + ] + }, { "name": "seriennummern_log", "collation": "utf8mb3_general_ci", diff --git a/www/pages/content/seriennummern_enter.tpl b/www/pages/content/seriennummern_enter.tpl index bee44aea..2ccc0531 100644 --- a/www/pages/content/seriennummern_enter.tpl +++ b/www/pages/content/seriennummern_enter.tpl @@ -140,7 +140,7 @@ Liste der Seriennummern, 1 pro Zeile - + @@ -150,6 +150,11 @@
{|Aktionen|} + + +
+ {|Ausgelieferte erlauben|} +
diff --git a/www/pages/content/seriennummern_nummern_list.tpl b/www/pages/content/seriennummern_nummern_list.tpl index f083f7e8..03bc54fa 100644 --- a/www/pages/content/seriennummern_nummern_list.tpl +++ b/www/pages/content/seriennummern_nummern_list.tpl @@ -22,7 +22,7 @@
- {|Seriennummern verfügbar|}: + {|Seriennummern eingelagert|}: @@ -68,7 +68,17 @@ + +
  • + +
  • diff --git a/www/pages/seriennummern.php b/www/pages/seriennummern.php index d88ec33f..34433d93 100644 --- a/www/pages/seriennummern.php +++ b/www/pages/seriennummern.php @@ -33,13 +33,13 @@ class Seriennummern { switch ($name) { case "seriennummern_list": $allowed['seriennummern_list'] = array('list'); - $heading = array('','','Nummer','Artikel', 'Seriennummer','Erfasst am','Eingelagert','Adresse','Lieferschein','Lieferdatum', 'Menü'); + $heading = array('','','Artikel-Nr.','Artikel', 'Seriennummer','Erfasst am','Eingelagert','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', 'a.name_de', 's.seriennummer','s.datum','s.eingelagert','ad.name','l.belegnr','l.datum','s.id'); + $findcols = array('s.id','s.id', 'a.nummer', 'a.name_de', 's.seriennummer','s.datum','s.eingelagert','lh.adresse_name','lh.belegnr','lh.datum','s.id'); $searchsql = array('a.nummer', 'a.name_de', 's.seriennummer'); $defaultorder = 1; @@ -57,40 +57,68 @@ class Seriennummern { $menu = "
    " . "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
    "; - $sql = " - SELECT SQL_CALC_FOUND_ROWS - s.id, - $dropnbox, - CONCAT('',a.nummer,'') as nummer, - a.name_de, - s.seriennummer, - ".$app->erp->FormatDate("s.datum").", - if(s.eingelagert,'Ja','Nein'), - ad.name, - l.belegnr, - ".$app->erp->FormatDate("l.datum").", - s.id - FROM + $lieferschein_link = array( + '', + ['sql' => 'lh.belegnr'], + '', + ); + + $sql_columns = " + s.id, + $dropnbox, + CONCAT('',a.nummer,'') as nummer, + a.name_de, + s.seriennummer, + ".$app->erp->FormatDate("s.datum").", + if(s.eingelagert,'Ja','Nein'), + lh.adresse_name, + ".$app->erp->ConcatSQL($lieferschein_link).", + ".$app->erp->FormatDate("lh.datum").", + s.id + "; + + $sql_tables = " seriennummern s INNER JOIN artikel a ON s.artikel = a.id - LEFT JOIN - lieferschein_position lp ON lp.id = s.lieferscheinpos - LEFT JOIN - lieferschein l ON l.id = lp.lieferschein - LEFT JOIN - adresse ad ON ad.id = l.adresse + LEFT JOIN ( + SELECT DISTINCT + slp.seriennummer, + a.id adresse, + a.name adresse_name, + l.datum, + l.id lieferschein, + l.belegnr + FROM + seriennummern_lieferschein_position slp + INNER JOIN lieferschein_position lp ON + lp.id = slp.lieferschein_position + INNER JOIN lieferschein l ON + l.id = lp.lieferschein + INNER JOIN adresse a ON + a.id = l.adresse + ORDER BY + l.datum + DESC + , + l.id + DESC + ) lh ON lh.seriennummer = s.id "; $artikel_id = $app->User->GetParameter('seriennummern_artikel_id'); $where = "(a.id = '".$artikel_id."' OR '".$artikel_id."' = '')"; + $count = "SELECT COUNT(DISTINCT s.id) FROM ".$sql_tables." WHERE ".$where; // Toggle filters $app->Tpl->Add('JQUERYREADY', "$('#verfuegbar').click( function() { fnFilterColumn1( 0 ); } );"); - $app->Tpl->Add('JQUERYREADY', "$('#versendet').click( function() { fnFilterColumn2( 0 ); } );"); + $app->Tpl->Add('JQUERYREADY', "$('#ausgelagert').click( function() { fnFilterColumn2( 0 ); } );"); + $app->Tpl->Add('JQUERYREADY', "$('#versendet').click( function() { fnFilterColumn3( 0 ); } );"); - for ($r = 1;$r <= 2;$r++) { + for ($r = 1;$r <= 3;$r++) { $app->Tpl->Add('JAVASCRIPT', ' function fnFilterColumn' . $r . ' ( i ) { @@ -116,17 +144,27 @@ class Seriennummern { $more_data2 = $app->Secure->GetGET("more_data2"); if ($more_data2 == 1) { - $where .= " AND s.lieferscheinpos <> 0"; + $where .= " AND s.eingelagert = 0"; } else { } - $count = "SELECT count(DISTINCT s.id) FROM seriennummern s LEFT JOIN artikel a on a.id = s.artikel WHERE $where"; -// $groupby = ""; + $more_data3 = $app->Secure->GetGET("more_data3"); + if ($more_data3 == 1) { + $where .= " AND lh.seriennummer IS NOT NULL"; + } else { + } + + $groupby = "GROUP BY s.id"; + + $sql = "SELECT SQL_CALC_FOUND_ROWS ".$sql_columns." FROM ".$sql_tables; + +// echo($sql." WHERE ".$where." ".$groupby); +// echo($count); break; case "seriennummern_artikel_list": $allowed['seriennummern_artikel_list'] = array('list'); - $heading = array('','', 'Nummer', 'Artikel', 'Lagermenge', 'Nummern verfügbar', 'Nummern ausgeliefert', 'Nummern gesamt', 'Menü',''); + $heading = array('','', 'Artikel-Nr.', 'Artikel', 'Lagermenge', 'Nummern verfügbar', 'Nummern ausgeliefert', 'Nummern gesamt', 'Menü',''); $width = array('1%','1%','10%'); // Fill out manually later // columns that are aligned right (numbers etc) @@ -139,7 +177,7 @@ class Seriennummern { $defaultorder = 1; $defaultorderdesc = 0; $aligncenter = array(); - $alignright = array(); + $alignright = array(5,6,7,8,9); $numbercols = array(); $sumcol = array(); @@ -168,8 +206,8 @@ class Seriennummern { CONCAT('',a.nummer,'') as nummer, a.name_de, ".$app->erp->FormatMenge('auf_lager.anzahl').", - SUM(if(s.eingelagert <> 0,1,0)), - SUM(if(s.lieferscheinpos <> 0,1,0)), + SUM(if(s.eingelagert = 1,1,0)), + SUM(if(s.eingelagert = 0,1,0)), SUM(if(s.id IS NULL,0,1)), ".$app->erp->ConcatSQL($menu_link).", a.id @@ -192,12 +230,15 @@ class Seriennummern { a.id ) auf_lager ON auf_lager.id = a.id LEFT JOIN - seriennummern s ON s.artikel = a.id + seriennummern s ON s.artikel = a.id "; $where = "a.seriennummern <> 'keine' AND a.seriennummern <> ''"; - $count = "SELECT count(DISTINCT a.id) FROM artikel a WHERE $where"; $groupby = "GROUP BY a.id"; + $count = "SELECT count(DISTINCT a.id) FROM artikel a WHERE ".$where; + +// echo($sql." WHERE ".$where." ".$groupby); +// echo($count); break; case "seriennummern_lieferscheine_list": @@ -206,7 +247,7 @@ class Seriennummern { $width = array('1%','1%','10%'); // Fill out manually later // columns that are aligned right (numbers etc) - // $alignright = array(4,5,6,7,8); + $alignright = array(6,7,8,9); $findcols = array('l.id','l.id', 'l.belegnr', 'l.datum', 'adr.name', 'null', 'null', 'null', 'null', 'null'); $searchsql = array('l.belegnr'); @@ -214,7 +255,6 @@ class Seriennummern { $defaultorder = 1; $defaultorderdesc = 0; $aligncenter = array(); - $alignright = array(); $numbercols = array(); $sumcol = array(); @@ -230,31 +270,48 @@ class Seriennummern { '', ); + $lieferschein_link = array( + '', + ['sql' => 'l.belegnr'], + '', + ); + $sql = "SELECT SQL_CALC_FOUND_ROWS l.id, $dropnbox, - l.belegnr, + ".$app->erp->ConcatSQL($lieferschein_link).", ".$app->erp->FormatDate("l.datum").", adr.name, - ".$app->erp->FormatMengeFuerFormular("SUM(menge)").", - ".$app->erp->FormatMengeFuerFormular("COUNT(s.id)").", - ".$app->erp->FormatMengeFuerFormular("SUM(menge)-COUNT(s.id)").", + ".$app->erp->FormatMengeFuerFormular("menge").", + SUM(if(slp.id IS NULL,0,1)), + ".$app->erp->FormatMengeFuerFormular("menge-SUM(if(slp.id IS NULL,0,1))").", ".$app->erp->ConcatSQL($menu_link).", l.id FROM lieferschein_position lp + LEFT JOIN seriennummern_lieferschein_position slp + ON slp.lieferschein_position = lp.id INNER JOIN lieferschein l ON l.id = lp.lieferschein INNER JOIN artikel a ON a.id = lp.artikel INNER JOIN adresse adr ON adr.id = l.adresse - LEFT JOIN seriennummern s ON - lp.id = s.lieferscheinpos "; $where = "(a.seriennummern <> 'keine') AND (l.datum >= (SELECT MIN(datum) FROM seriennummern WHERE artikel = a.id))"; - $count = ""; + $count = "SELECT COUNT(DISTINCT lp.lieferschein) FROM + lieferschein_position lp + LEFT JOIN seriennummern_lieferschein_position slp + ON slp.lieferschein_position = lp.id + INNER JOIN lieferschein l ON + l.id = lp.lieferschein + INNER JOIN artikel a ON + a.id = lp.artikel + "." WHERE ".$where; + $groupby = "GROUP BY l.id"; break; } @@ -299,9 +356,32 @@ class Seriennummern { } } + function seriennummern_delivery_note_check_and_message($lieferschein_id) { + + $check_delivery_notes = $this->seriennummern_check_delivery_notes($lieferschein_id); + if (!empty($check_delivery_notes)) { + $lieferschein_minus_id_links = array(); + $lieferschein_plus_id_links = array(); + foreach ($check_delivery_notes as $lieferschein_id) { + if ($lieferschein_id['anzahl_nummern'] < $lieferschein_id['menge']) { + $lieferschein_minus_id_links[] = ''.$lieferschein_id['nummer'].''; + } + else if ($lieferschein_id['anzahl_nummern'] > $lieferschein_id['menge']) { + $lieferschein_plus_id_links[] = ''.$lieferschein_id['nummer'].''; + } + } + if (!empty($lieferschein_minus_id_links)) { + $this->app->YUI->Message('warning','Seriennummern fehlen für Lieferschein: '.implode(', ',$lieferschein_minus_id_links)); + } + if (!empty($lieferschein_plus_id_links)) { + $this->app->YUI->Message('warning','Seriennummern Überschuss für Lieferschein: '.implode(', ',$lieferschein_plus_id_links)); + } + } + } + function seriennummern_nummern_list() { - $this->seriennummern_menu(); + $this->seriennummern_menu(); // For transfer to tablesearch $artikel_id = $this->app->Secure->GetGET('artikel'); @@ -342,6 +422,7 @@ class Seriennummern { } $this->seriennummern_check_and_message($artikel_id); + $this->seriennummern_delivery_note_check_and_message(null); $this->app->YUI->TableSearch('TAB1', 'seriennummern_list', "show", "", "", basename(__FILE__), __CLASS__); @@ -351,6 +432,7 @@ class Seriennummern { function seriennummern_artikel_list() { $this->seriennummern_menu(); $this->seriennummern_check_and_message(null); + $this->seriennummern_delivery_note_check_and_message(null); $this->app->YUI->TableSearch('TAB1', 'seriennummern_artikel_list', "show", "", "", basename(__FILE__), __CLASS__); @@ -360,6 +442,7 @@ class Seriennummern { function seriennummern_lieferscheine_list() { $this->seriennummern_menu(); $this->seriennummern_check_and_message(null); + $this->seriennummern_delivery_note_check_and_message(null); $this->app->YUI->TableSearch('TAB1', 'seriennummern_lieferscheine_list', "show", "", "", basename(__FILE__), __CLASS__); @@ -369,11 +452,11 @@ class Seriennummern { public function seriennummern_delete() { $id = (int) $this->app->Secure->GetGET('id'); - if ($this->app->DB->Select("SELECT id FROM `seriennummern` WHERE `id` = '{$id}' AND `lieferscheinpos` = 0")) { - $this->app->DB->Delete("DELETE FROM `seriennummern` WHERE `id` = '{$id}' AND `lieferscheinpos` = 0"); + if (!$this->app->DB->Select("SELECT id FROM `seriennummern_lieferschein_position` WHERE `seriennummer` = '{$id}'")) { + $this->app->DB->Delete("DELETE FROM `seriennummern` WHERE `id` = '{$id}'"); $this->app->Tpl->addMessage('error', 'Der Eintrag wurde gelöscht'); } else { - $this->app->Tpl->addMessage('error', 'Der Eintrag kann nicht gelöscht werden!'); + $this->app->Tpl->addMessage('error', 'Der Eintrag kann nicht gelöscht werden da eine Lieferscheinzuordnung existiert!'); } $this->seriennummern_nummern_list(); } @@ -382,12 +465,14 @@ class Seriennummern { $this->app->erp->MenuEintrag("index.php?module=seriennummern&action=list", "Zurück zur Übersicht"); $artikel_id = (int) $this->app->Secure->GetGET('artikel'); + $lieferschein_id = (int) $this->app->Secure->GetGET('lieferschein'); $artikel = $this->app->DB->SelectRow("SELECT name_de, nummer FROM artikel WHERE id ='".$artikel_id."'"); $this->app->Tpl->SetText('KURZUEBERSCHRIFT1','Erfassen'); $this->app->Tpl->SetText('KURZUEBERSCHRIFT2',$artikel['name_de']." (Artikel ".$artikel['nummer'].")"); + $allowold = $this->app->Secure->GetPOST('allowold'); $submit = $this->app->Secure->GetPOST('submit'); $seriennummern = array(); @@ -403,6 +488,8 @@ class Seriennummern { break; case 'speichern': $seriennummern_not_written = array(); + $seriennummern_already_exist = array(); + $seriennummern_old_not_allowed = array(); foreach ($seriennummern as $seriennummer) { $seriennummer = trim($seriennummer); @@ -411,18 +498,40 @@ class Seriennummern { continue; } - $sql = "INSERT INTO seriennummern (seriennummer, artikel, logdatei, eingelagert) VALUES ('".$this->app->DB->real_escape_string($seriennummer)."', '".$artikel_id."', CURRENT_TIMESTAMP, 1)"; - try { - $this->app->DB->Insert($sql); - } catch (mysqli_sql_exception $e) { - $error = true; - $seriennummern_not_written[] = $seriennummer; - } + $sql = "SELECT id, eingelagert FROM seriennummern WHERE seriennummer = '".$this->app->DB->real_escape_string($seriennummer)."' AND artikel = '".$artikel_id."'"; + $check_existing = $this->app->DB->SelectRow($sql); + + if (empty($check_existing)) { // New serial + $sql = "INSERT INTO seriennummern (seriennummer, artikel, logdatei, eingelagert) VALUES ('".$this->app->DB->real_escape_string($seriennummer)."', '".$artikel_id."', CURRENT_TIMESTAMP, 1)"; + try { + $this->app->DB->Insert($sql); + } catch (mysqli_sql_exception $e) { + $error = true; + $seriennummern_not_written[] = $seriennummer; + } + } else { + if ($check_existing['eingelagert']) { // Old serial, already here + $seriennummern_already_exist[] = $seriennummer; + } else { // Old serial, returning + if ($allowold) { + $sql = "UPDATE seriennummern SET eingelagert = 1, logdatei = CURRENT_TIMESTAMP WHERE seriennummer = '".$this->app->DB->real_escape_string($seriennummer)."' AND artikel = '".$artikel_id."'"; + $this->app->DB->Update($sql); + } else { + $seriennummern_old_not_allowed[] = $seriennummer; + } + } + } } - if ($error) { - $this->app->Tpl->addMessage('error', 'Einige Seriennummern konnten nicht gespeichert werden.'); + if (!empty($seriennummern_already_exist)) { + $this->app->Tpl->addMessage('error', 'Seriennummern existieren bereits: '.implode(', ',$seriennummern_already_exist)); } - $seriennummern = $seriennummern_not_written; + if (!empty($seriennummern_old_not_allowed)) { + $this->app->Tpl->addMessage('error', 'Seriennummern bereits ausgeliefert: '.implode(', ',$seriennummern_old_not_allowed)); + } + if (!empty($seriennummern_not_written)) { + $this->app->Tpl->addMessage('error', 'Seriennummern konnten nicht gespeichert werden: '.implode(', ',$seriennummern_not_written)); + } + $seriennummern = array_merge($seriennummern_not_written, $seriennummern_already_exist, $seriennummern_old_not_allowed); break; case 'assistent': $praefix = $this->app->Secure->GetPOST('praefix'); @@ -508,11 +617,9 @@ class Seriennummern { LEFT JOIN( SELECT artikel, - COUNT(id) anzahl + SUM(if(eingelagert,1,0)) anzahl FROM seriennummern - WHERE - lieferscheinpos = 0 GROUP BY artikel ) nummern_verfuegbar @@ -530,29 +637,35 @@ class Seriennummern { * Check if all delivery notes have serials * Return array of delivery note positions and head information */ - public function seriennummern_check_deliver_notes($lieferschein_id = null) : array { + public function seriennummern_check_delivery_notes($lieferschein_id = null) : array { $sql = " - SELECT - l.id lieferschein, - l.datum, - l.belegnr lieferschein_belegnr, - lp.id lieferschein_position, - a.nummer, - menge, - COUNT(s.id) anzahl_nummern, - GROUP_CONCAT(s.seriennummer) - FROM - lieferschein_position lp - INNER JOIN lieferschein l ON - l.id = lp.lieferschein - INNER JOIN artikel a ON - a.id = lp.artikel - LEFT JOIN seriennummern s ON - lp.id = s.lieferscheinpos - WHERE (l.id = '".$lieferschein_id."' OR '".$lieferschein_id."' = '') - GROUP BY - lp.id - HAVING menge > anzahl_nummern + SELECT SQL_CALC_FOUND_ROWS + l.id, + l.belegnr nummer, + menge, + SUM(IF(slp.id IS NULL, 0, 1)) menge_nummern + FROM + lieferschein_position lp + LEFT JOIN seriennummern_lieferschein_position slp ON + slp.lieferschein_position = lp.id + INNER JOIN lieferschein l ON + l.id = lp.lieferschein + INNER JOIN artikel a ON + a.id = lp.artikel + WHERE + (a.seriennummern <> 'keine') AND( + l.datum >=( + SELECT + MIN(datum) + FROM + seriennummern + WHERE + artikel = a.id + ) + ) AND (l.id = '".$lieferschein_id."' OR '".$lieferschein_id."' = '') + GROUP BY + l.id + HAVING menge > menge_nummern "; $result = $this->app->DB->SelectArr($sql); @@ -617,8 +730,8 @@ class Seriennummern { * Check if numbers need to be entered after stock removal, if yes, create notification */ public function seriennummern_check_and_message_delivery_note_removed(int $lieferschein_id) { - $check_deliver_notes = $this->seriennummern_check_deliver_notes($lieferschein_id); - if (!empty($check_deliver_notes)) { + $check_delivery_notes = $this->seriennummern_check_delivery_notes($lieferschein_id); + if (!empty($check_delivery_notes)) { $this->seriennummern_create_notification_lieferschein($lieferschein_id, 'enter', 'Seriennummern','Bitte Seriennummern für Lieferschein erfassen','Zur Eingabe'); } }