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 {
'',
- '',
+ '',
''
);
@@ -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');
+ }
+ }
+
}