From a907a9fa3fd56514f9fc99c82e1cfef462c46139 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Sun, 4 Aug 2024 22:05:35 +0200 Subject: [PATCH] seriennummern zwischenstand --- www/pages/ajax.php | 24 +- www/pages/content/seriennummern_enter.tpl | 286 ++++++++++-------- .../seriennummern_lieferschein_enter.tpl | 197 ++++++++++++ www/pages/seriennummern.php | 239 ++++++++++++--- 4 files changed, 571 insertions(+), 175 deletions(-) create mode 100644 www/pages/content/seriennummern_lieferschein_enter.tpl diff --git a/www/pages/ajax.php b/www/pages/ajax.php index f3826b9b..87ebf0f2 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -2610,7 +2610,29 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku break; case "seriennummerverfuegbar": $artikel = (int)$this->app->Secure->GetGET('artikel'); - $arr = $this->app->DB->SelectArr("SELECT seriennummer FROM seriennummern WHERE lieferschein = 0 AND seriennummer LIKE '%$term%' AND artikel = '$artikel' LIMIT 20"); + $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 + LEFT JOIN + seriennummern_lieferschein_position slp ON slp.seriennummer = s.id + WHERE + s.eingelagert = 1 + AND slp.id IS NULL + 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']; diff --git a/www/pages/content/seriennummern_enter.tpl b/www/pages/content/seriennummern_enter.tpl index 2ccc0531..3858223a 100644 --- a/www/pages/content/seriennummern_enter.tpl +++ b/www/pages/content/seriennummern_enter.tpl @@ -10,105 +10,155 @@ -->
[MESSAGE] -
+ [FORMHANDLEREVENT]
-
-
-
-
- {|Seriennummern erfassen Artikel [ARTIKELNUMMER] [ARTIKEL]|} - - - - - - - - - - - - - - - - - -
- {|Lagermenge|}: - - -
- {|Seriennummern verfügbar|}: - - -
- {|Seriennummern fehlen|}: - - -
- {|Seriennummer scannen|}: - - -
-
-
-
+
-
-
- {|Seriennummernassistent|} - - - - - - - - - - - - - - - - - - - - - -
- {|Letzte Seriennummer|}: - - -
- {|Präfix|}: - - -
- {|Start|}: - - -
- {|Postfix|}: - - -
- {|Anzahl|}: - - -
-
+
+
+ {|Lieferscheinpositionen|} + [LIEFERSCHEINPOSITIONEN] +
-
+
+
+
+
+
+
+
+
+ {|Seriennummern erfassen [LEGEND]|} + + + + + + + + + + + + + + + + + + + + + +
+ {|Lagermenge|}: + + +
+ {|Seriennummern verfügbar|}: + + +
+ {|Seriennummern fehlen|}: + + +
+ {|Seriennummer scannen|}: + + +
+ {|Seriennummer wählen|}: + + +
+
+
+
+
+
+
+
+
+
+
+ {|Seriennummernassistent|} + + + + + + + + + + + + + + + + + + + + + +
+ {|Letzte Seriennummer|}: + + +
+ {|Präfix|}: + + +
+ {|Start|}: + + +
+ {|Postfix|}: + + +
+ {|Anzahl|}: + + +
+
+
+
+
+
+
+
+
+
+
+ {|Gewählte Seriennummern|} + + + + + +
+ {|Seriennummern|}: + + + Liste der Seriennummern, 1 pro Zeile +
+
+
+
+
+
+
+
-
+
{|Aktionen|} - +
- -
@@ -118,55 +168,29 @@
-
-
-
-
-
-
-
-
-
-
- {|Gewählte Seriennummern|} - - - - - -
- {|Seriennummern|}: - - - Liste der Seriennummern, 1 pro Zeile -
-
-
-
-
-
-
- {|Aktionen|} - - + + + + +
{|Ausgelieferte erlauben|}
+ +
- +
-
-
-
-
+ +
+
+
- + diff --git a/www/pages/content/seriennummern_lieferschein_enter.tpl b/www/pages/content/seriennummern_lieferschein_enter.tpl new file mode 100644 index 00000000..672c4941 --- /dev/null +++ b/www/pages/content/seriennummern_lieferschein_enter.tpl @@ -0,0 +1,197 @@ +
+ + +
+ [MESSAGE] +
+ [FORMHANDLEREVENT] +
+
+
+
+
+ {|Seriennummern erfassen [LEGEND]|} + + + + + + + + + + + + + + + + + + + + + +
+ {|Lagermenge|}: + + +
+ {|Seriennummern verfügbar|}: + + +
+ {|Seriennummern fehlen|}: + + +
+ {|Seriennummer scannen|}: + + +
+ {|Seriennummer wählen|}: + + +
+
+
+
+
+
+
+ {|Seriennummernassistent|} + + + + + + + + + + + + + + + + + + + + + +
+ {|Letzte Seriennummer|}: + + +
+ {|Präfix|}: + + +
+ {|Start|}: + + +
+ {|Postfix|}: + + +
+ {|Anzahl|}: + + +
+
+
+
+
+
+
+ {|Aktionen|} + + + + + + + +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ {|Gewählte Seriennummern|} + + + + + +
+ {|Seriennummern|}: + + + Liste der Seriennummern, 1 pro Zeile +
+
+
+
+
+
+
+ {|Aktionen|} + + + + + + + + + + +
+ {|Ausgelieferte erlauben|} +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ {|Lieferscheinpositionen|} + [LIEFERSCHEINPOSITIONEN] +
+
+
+
+
+
+
+
+ diff --git a/www/pages/seriennummern.php b/www/pages/seriennummern.php index a71748e2..08a0173e 100644 --- a/www/pages/seriennummern.php +++ b/www/pages/seriennummern.php @@ -21,6 +21,7 @@ class Seriennummern { $this->app->ActionHandler("lieferscheine_list", "seriennummern_lieferscheine_list"); $this->app->ActionHandler("enter", "seriennummern_enter"); $this->app->ActionHandler("delete", "seriennummern_delete"); + $this->app->ActionHandler("minidetail", "seriennummern_minidetail"); $this->app->DefaultActionHandler("list"); $this->app->ActionHandlerListen($app); } @@ -310,6 +311,88 @@ class Seriennummern { "." WHERE ".$where; $groupby = "GROUP BY l.id"; + break; + case "seriennummern_lieferschein_positionen": + $allowed['seriennummern_artikel_list'] = array('list'); + $heading = array('','','Position', 'Artikel-Nr.', 'Artikel', 'Menge', 'Nummern zugeordnet', 'Nummern fehlen', 'Menü',''); + $width = array('1%','1%','10%','10%','20%'); // Fill out manually later + + $lieferschein_id = $app->User->GetParameter('seriennummern_lieferschein_id'); + + // columns that are aligned right (numbers etc) + $alignright = array(6,7,8,9); + + $findcols = array('lp.id','lp.id','lp.sort','a.nummer', 'a.name_de', 'null', 'null', 'null', 'null', 'null', 'null'); + $searchsql = array('l.belegnr'); + + $moreinfo = true; // Allow drop down details +// $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails + $menucol = 1; // Set id col for moredata/menu + + $defaultorder = 1; + $defaultorderdesc = 0; + $aligncenter = array(); + $numbercols = array(); + $sumcol = array(); + + $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; + + //$menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; + + $menu_link = array( + '', + '', + '', + ); + + $lieferschein_link = array( + '', + ['sql' => 'l.belegnr'], + '', + ); + + $sql = "SELECT SQL_CALC_FOUND_ROWS + lp.id, + $dropnbox, + lp.sort, + a.nummer, + a.name_de, + ".$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 + "; + + $where = "(a.seriennummern <> 'keine') AND (l.id = '".$lieferschein_id."')"; + $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 lp.id"; + +// echo($sql." WHERE ".$where." ".$groupby); + break; } @@ -422,7 +505,7 @@ class Seriennummern { $this->seriennummern_delivery_note_check_and_message(null); $this->app->YUI->TableSearch('TAB1', 'seriennummern_list', "show", "", "", basename(__FILE__), __CLASS__); - + $this->app->Tpl->Parse('PAGE', "seriennummern_nummern_list.tpl"); } @@ -461,29 +544,46 @@ class Seriennummern { function seriennummern_enter() { $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'].")"); + $task = ""; + + $artikel_id = (int) $this->app->Secure->GetGET('artikel'); + if (!empty($artikel_id)) { + $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'].")"); + $this->app->Tpl->SetText('LEGEND',$artikel['name_de']." (Artikel ".$artikel['nummer'].")"); + $task = "artikel"; + } + + $lieferschein_id = (int) $this->app->Secure->GetGET('lieferschein'); + if (!empty($lieferschein_id)) { + $this->app->User->SetParameter('seriennummern_lieferschein_id', $lieferschein_id); + $lieferschein = $this->app->DB->SelectRow("SELECT belegnr FROM lieferschein WHERE id ='".$lieferschein_id."'"); + $this->app->Tpl->SetText('KURZUEBERSCHRIFT1','Erfassen'); + $this->app->Tpl->SetText('KURZUEBERSCHRIFT2','Lieferschein '.$lieferschein['belegnr']); + $this->app->Tpl->SetText('LEGEND','Lieferschein '.$lieferschein['belegnr']); + $task = "lieferschein"; + } $allowold = $this->app->Secure->GetPOST('allowold'); $submit = $this->app->Secure->GetPOST('submit'); $seriennummern = array(); - $seriennummern_text = $this->app->Secure->GetPOST('seriennummern'); $seriennummern = explode('\n',str_replace(['\r'],'',$seriennummern_text)); switch ($submit) { case 'hinzufuegen': - $eingabe = $this->app->Secure->GetPOST('eingabeneu'); + $eingabescan = $this->app->Secure->GetPOST('eingabescan'); + $eingabe = $this->app->Secure->GetPOST('eingabe'); if (!empty($eingabe)) { $seriennummern[] = $eingabe; } + if (!empty($eingabescan)) { + $seriennummern[] = $eingabescan; + } break; - case 'speichern': + case 'einlagern': $seriennummern_not_written = array(); $seriennummern_already_exist = array(); $seriennummern_old_not_allowed = array(); @@ -543,42 +643,82 @@ class Seriennummern { } break; - } - + } $seriennummern = array_unique($seriennummern); - $check_seriennummern = $this->seriennummern_check_serials($artikel_id); - $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.'); - } + switch ($task) { + case 'artikel': + $check_seriennummern = $this->seriennummern_check_serials($artikel_id); + $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.'); + } - if ($anzahl_fehlt < 0) { - $anzahl_fehlt = 0; + if ($anzahl_fehlt < 0) { + $anzahl_fehlt = 0; + } + + $letzte_seriennummer = (string) $this->app->DB->Select("SELECT seriennummer FROM seriennummern WHERE artikel = '".$artikel_id."' ORDER BY id DESC LIMIT 1"); + $regex_result = array(preg_match('/(.*?)(\d+)(?!.*\d)(.*)/', $letzte_seriennummer, $matches)); + $this->app->Tpl->Set('LETZTE', $letzte_seriennummer); + $this->app->Tpl->Set('PRAEFIX', $matches[1]); + $this->app->Tpl->Set('START', $matches[2]+1); + $this->app->Tpl->Set('POSTFIX', $matches[3]); + + $this->app->Tpl->Set('ANZAHL', $anzahl_fehlt); + + $this->app->Tpl->Set('ARTIKELNUMMER', ''.$check_seriennummern['nummer'].''); + + $this->app->Tpl->Set('ARTIKEL', $check_seriennummern['name']); + $this->app->Tpl->Set('ANZLAGER', $check_seriennummern['menge_auf_lager']); + $this->app->Tpl->Set('ANZVORHANDEN', $check_seriennummern['menge_nummern']); + $this->app->Tpl->Set('ANZFEHLT', $anzahl_fehlt); + $this->app->Tpl->Set('SERIENNUMMERN', implode("\n",$seriennummern)); + + break; + case 'lieferschein': + $this->app->Tpl->Set('ARTIKEL_HIDDEN', "hidden"); + $this->app->Tpl->Set('LIEFERSCHEINNUMMER', ''.$lieferschein['belegnr'].''); + + $artikel_lieferschein = $this->app->DB->SelectArr("SELECT artikel FROM lieferschein_position WHERE lieferschein = '".$lieferschein_id."'"); + + $sql = " + SELECT + DISTINCT s.seriennummer + FROM + seriennummern s + LEFT JOIN + seriennummern_lieferschein_position slp ON slp.seriennummer = s.id + WHERE + s.artikel IN ('".implode("','",array_column($artikel_lieferschein,'artikel'))."') + AND s.eingelagert = 1 + AND slp.id IS NULL + ORDER BY s.id ASC + LIMIT 1 + "; + + $letzte_seriennummer = (string) $this->app->DB->Select($sql); + + $regex_result = array(preg_match('/(.*?)(\d+)(?!.*\d)(.*)/', $letzte_seriennummer, $matches)); + $this->app->Tpl->Set('LETZTE', $letzte_seriennummer); + $this->app->Tpl->Set('PRAEFIX', $matches[1]); + $this->app->Tpl->Set('START', $matches[2]); + $this->app->Tpl->Set('POSTFIX', $matches[3]); + + $this->app->YUI->TableSearch('LIEFERSCHEINPOSITIONEN', 'seriennummern_lieferschein_positionen', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->YUI->AutoComplete("eingabe", "seriennummerverfuegbar",0,"&lieferschein=$lieferschein_id"); + + $this->app->Tpl->Set('SERIENNUMMERN', implode("\n",$seriennummern)); + + break; + default: + exit(); + break; } - $letzte_seriennummer = (string) $this->app->DB->Select("SELECT seriennummer FROM seriennummern WHERE artikel = '".$artikel_id."' ORDER BY id DESC LIMIT 1"); - $regex_result = array(preg_match('/(.*?)(\d+)(?!.*\d)(.*)/', $letzte_seriennummer, $matches)); - - $this->app->Tpl->Set('LETZTE', $letzte_seriennummer); - - $this->app->Tpl->Set('PRAEFIX', $matches[1]); - $this->app->Tpl->Set('START', $matches[2]+1); - $this->app->Tpl->Set('POSTFIX', $matches[3]); - - $this->app->Tpl->Set('ANZAHL', $anzahl_fehlt); - - $this->app->Tpl->Set('ARTIKELNUMMER', ''.$check_seriennummern['nummer'].''); - $this->app->Tpl->Set('ARTIKEL', $check_seriennummern['name']); - $this->app->Tpl->Set('ANZLAGER', $check_seriennummern['menge_auf_lager']); - $this->app->Tpl->Set('ANZVORHANDEN', $check_seriennummern['menge_nummern']); - $this->app->Tpl->Set('ANZFEHLT', $anzahl_fehlt); - $this->app->Tpl->Set('SERIENNUMMERN', implode("\n",$seriennummern)); - - $this->app->YUI->AutoComplete("eingabe", "seriennummerverfuegbar",0,"&artikel=$artikel_id"); $this->app->Tpl->Parse('PAGE', "seriennummern_enter.tpl"); } @@ -732,5 +872,18 @@ class Seriennummern { $this->seriennummern_create_notification_lieferschein($lieferschein_id, 'enter', 'Seriennummern','Bitte Seriennummern für Lieferschein erfassen','Zur Eingabe'); } } - - } + + public function seriennummern_minidetail($parsetarget='',$menu=true) { + $id = $this->app->Secure->GetGET('id'); + + if($parsetarget=='') + { + $tmp = new EasyTable($this->app); + $tmp->Query("SELECT s.seriennummer FROM seriennummern s INNER JOIN seriennummern_lieferschein_position slp ON slp.seriennummer = s.id WHERE slp.lieferschein_position ='$id' ",0,""); + $tmp->DisplayNew('TAB1',"Seriennummern","noAction"); + + $this->app->Tpl->Output('emptytab.tpl'); + $this->app->ExitXentral(); + } + } +}