diff --git a/database/struktur.sql b/database/struktur.sql
index 2b0475e9..ff2d9243 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/phpwf/plugins/class.templateparser.php b/phpwf/plugins/class.templateparser.php
index c7e55f3d..8e1def44 100644
--- a/phpwf/plugins/class.templateparser.php
+++ b/phpwf/plugins/class.templateparser.php
@@ -365,9 +365,13 @@ class TemplateParser {
echo '
';
}
}
- function SetText($_var, $_value)
- {
- $this->VARARRAY[$_var]= $this->htmlspecialchars($_value);
+ function SetText($_var, $_value, $html = false)
+ {
+ if(!$html)
+ {
+ $_value = $this->htmlspecialchars($_value);
+ }
+ $this->VARARRAY[$_var]= $_value;
}
function AddText($_var,$_value, $variable = false){
diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json
index 0b440a32..e42e187e 100644
--- a/upgrade/data/db_schema.json
+++ b/upgrade/data/db_schema.json
@@ -91440,12 +91440,12 @@
"Comment": ""
},
{
- "Field": "adresse",
- "Type": "int(11)",
+ "Field": "datum",
+ "Type": "datetime",
"Collation": null,
"Null": "NO",
"Key": "",
- "Default": null,
+ "Default": "current_timestamp()",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
@@ -91473,34 +91473,12 @@
"Comment": ""
},
{
- "Field": "lieferung",
- "Type": "date",
+ "Field": "eingelagert",
+ "Type": "int(1)",
"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,
+ "Default": 0,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
@@ -91528,6 +91506,76 @@
"Comment": ""
}
],
+ "keys": [
+ {
+ "Key_name": "PRIMARY",
+ "Index_type": "BTREE",
+ "columns": [
+ "id"
+ ],
+ "Non_unique": ""
+ },
+ {
+ "Key_name": "seriennummer_artikel",
+ "Index_type": "BTREE",
+ "columns": [
+ "seriennummer",
+ "artikel"
+ ],
+ "Non_unique": "UNIQUE"
+ }
+ ]
+ },
+ {
+ "name": "seriennummern_beleg_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": "beleg_typ",
+ "Type": "varchar(30)",
+ "Collation": "utf8mb3_general_ci",
+ "Null": "NO",
+ "Key": "",
+ "Default": null,
+ "Extra": "",
+ "Privileges": "select,insert,update,references",
+ "Comment": ""
+ },
+ {
+ "Field": "beleg_position",
+ "Type": "int(11)",
+ "Collation": null,
+ "Null": "NO",
+ "Key": "",
+ "Default": null,
+ "Extra": "",
+ "Privileges": "select,insert,update,references",
+ "Comment": ""
+ }
+ ],
"keys": [
{
"Key_name": "PRIMARY",
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index c0030167..a98adc2c 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,45 @@ 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 SeriennummernCheckBenachrichtigung(int $artikel_id) {
+ $obj = $this->LoadModul('seriennummern');
+ return($obj->seriennummern_check_and_notification_stock_added($artikel_id));
+ }
+
+ function SeriennummernCheckLieferscheinBenachrichtigung(int $lieferschein_id) {
+ $obj = $this->LoadModul('seriennummern');
+ 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)
@@ -2904,7 +2937,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
}
if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id']))
{
- $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
+// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
@@ -2931,7 +2964,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
}
if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id']))
{
- $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
+// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
@@ -2957,7 +2990,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
}
if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id']))
{
- $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
+// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
@@ -2966,7 +2999,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
}else{
if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id']))
{
- $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
+// Xentral Legacy $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1");
}elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){
$this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1");
}
@@ -3545,6 +3578,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
}
$this->RunHook('erpapi_lieferschein_auslagern', 1, $lieferschein);
+ $this->SeriennummernCheckLieferscheinWarnung($lieferschein, true);
$this->LieferscheinProtokoll($lieferschein,"Lieferschein ausgelagert");
}
}
@@ -20507,6 +20541,8 @@ function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert,
}
$this->RunHook('LagerEinlagern_after',7, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid);
+
+ $this->SeriennummernCheckBenachrichtigung($artikel);
}
function CreateLagerPlatzInhaltVPE($artikel, $menge, $gewicht, $laenge, $breite, $hoehe, $menge2 = 0, $gewicht2 = 0, $laenge2 = 0, $breite2 = 0, $hoehe2 = 0)
@@ -39630,7 +39666,7 @@ function Firmendaten($field,$projekt="")
}
return $sipuid;
}
-}
+} // END erpAPI
function parse_csv($str,$parse_split_parameter="")
diff --git a/www/lib/dokumente/class.briefpapier.php b/www/lib/dokumente/class.briefpapier.php
index 135e07de..4b94bc48 100644
--- a/www/lib/dokumente/class.briefpapier.php
+++ b/www/lib/dokumente/class.briefpapier.php
@@ -307,6 +307,36 @@ class Briefpapier extends SuperFPDF {
public function GetChargeMHDSNString($type,$doctype,$doctypeid,$posid, $returnSimpleString = false)
{
+
+
+ switch ($type) {
+ case 'sn':
+ $sql = "SELECT
+ s.seriennummer
+ FROM
+ seriennummern s
+ INNER JOIN
+ seriennummern_beleg_position slp ON slp.beleg_typ = 'lieferschein' AND slp.seriennummer = s.id
+ WHERE
+ slp.beleg_position = $posid
+ ";
+ $values = (array) $this->app->DB->SelectArr($sql);
+ return(implode(', ',array_column($values,'seriennummer')));
+ break;
+ }
+
+ if(!empty($values)){
+ if($returnSimpleString) {
+ return implode(', ', $values);
+ }
+ return implode("\r\n",$values);
+ }
+ return '';
+
+
+// XENTRAL Legacy
+/*
+
$lieferschein_posid = 0;
$auftrag_position_id = 0;
$lieferschein = 0;
@@ -560,6 +590,7 @@ class Briefpapier extends SuperFPDF {
return implode("\r\n",$tmp_string);
}
return '';
+*/
}
function CheckPosition($value,$doctype,$doctypeid,$posid)
@@ -3306,6 +3337,10 @@ class Briefpapier extends SuperFPDF {
}
}
+ // OpenXE Seriennummern
+
+
+
if(!empty($this->doctype) && !empty($this->id) && strpos($item['desc'], '{') !== false) {
$item['desc'] = $this->app->erp->ParseUserVars($this->doctype, $this->id ,$item['desc']);
}
diff --git a/www/pages/ajax.php b/www/pages/ajax.php
index c57e5204..410d715b 100644
--- a/www/pages/ajax.php
+++ b/www/pages/ajax.php
@@ -2608,6 +2608,35 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$newarr[] = $arr[$i]['name'];
}
break;
+ case "seriennummerverfuegbar":
+ $artikel = (int)$this->app->Secure->GetGET('artikel');
+ $lieferschein = (int)$this->app->Secure->GetGET('lieferschein');
+
+ $sql = "
+ SELECT DISTINCT
+ s.seriennummer
+ FROM
+ seriennummern s
+ INNER JOIN
+ lieferschein_position lp ON lp.artikel = s.artikel
+ WHERE
+ s.eingelagert = 1
+ AND s.seriennummer LIKE '%$term%'
+ AND (s.artikel = '$artikel' OR '$artikel' = '0')
+ LIMIT 20
+ ";
+
+ //echo($sql);
+
+ $arr = $this->app->DB->SelectArr($sql);
+
+ $carr = !empty($arr)?count($arr):0;
+ for($i = 0; $i < $carr; $i++) {
+ $newarr[] = $arr[$i]['seriennummer'];
+ }
+ break;
+
+ break;
case "artikelmengeinbeleg":
$beleg = $this->app->Secure->GetGet('beleg');
$belegid = $this->app->Secure->GetGet('id');
diff --git a/www/pages/artikel.php b/www/pages/artikel.php
index 1d201002..21baba30 100644
--- a/www/pages/artikel.php
+++ b/www/pages/artikel.php
@@ -7204,6 +7204,9 @@ class Artikel extends GenArtikel {
$this->app->erp->MenuEintrag("index.php?module=artikel&action=lager&id=$id",'Lager');
}
+ if ($tmp[0]['seriennummern'] <> 'keine') {
+ $this->app->erp->MenuEintrag("index.php?module=seriennummern&action=nummern_list&artikel=$id&from=artikel",'Seriennummern');
+ }
if($tmp[0]['mindesthaltbarkeitsdatum']=='1' && $tmp[0]['chargenverwaltung']<=0)
{
diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php
index 1cc654cd..27d0e000 100644
--- a/www/pages/auftrag.php
+++ b/www/pages/auftrag.php
@@ -5795,6 +5795,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/content/einlagern.tpl b/www/pages/content/einlagern.tpl
index b39ec8be..9f7449a9 100644
--- a/www/pages/content/einlagern.tpl
+++ b/www/pages/content/einlagern.tpl
@@ -24,8 +24,6 @@
[SHOWCHRSTART]