diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index 58a89a4d..c06f3ab2 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -3642,7 +3642,7 @@ class YUI { $lieferschein_kein = "app->Conf->WFconf['defaulttheme']}/images/summe_stop.png\" title=\"Kein Lieferschein\" border=\"0\" style=\"margin-right:1px\">"; $lieferschein_ohne_pos = "app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" title=\"Lieferschein ohne Positionen\" border=\"0\" style=\"margin-right:1px\">"; $lieferschein_voll = "app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" title=\"Lieferschein vollständig\" border=\"0\" style=\"margin-right:1px\">"; - $lieferschein_teil = "app->Conf->WFconf['defaulttheme']}/images/lagergo_stop.png\" title=\"Lieferschein teilweise\" border=\"0\" style=\"margin-right:1px\">"; + $lieferschein_teil = "app->Conf->WFconf['defaulttheme']}/images/lagergo_teil.png\" title=\"Lieferschein teilweise\" border=\"0\" style=\"margin-right:1px\">"; $versendet = "app->Conf->WFconf['defaulttheme']}/images/liefersperrego.png\" title=\"Versendet\" border=\"0\" style=\"margin-right:1px\">"; $versendet_nicht = "app->Conf->WFconf['defaulttheme']}/images/liefersperrestop.png\" title=\"Nicht versendet\" border=\"0\" style=\"margin-right:1px\">"; @@ -3693,10 +3693,10 @@ class YUI { } function IconsSQL_lieferung() { - $lieferschein_kein = "app->Conf->WFconf['defaulttheme']}/images/summe_stop.png\" title=\"Kein Lieferschein\" border=\"0\" style=\"margin-right:1px\">"; + $lieferschein_kein = "app->Conf->WFconf['defaulttheme']}/images/lagerstop.png\" title=\"Keine Artikel\" border=\"0\" style=\"margin-right:1px\">"; $lieferschein_ohne_pos = "app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" title=\"Lieferschein ohne Positionen\" border=\"0\" style=\"margin-right:1px\">"; - $lieferschein_voll = "app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" title=\"Lieferschein vollständig\" border=\"0\" style=\"margin-right:1px\">"; - $lieferschein_teil = "app->Conf->WFconf['defaulttheme']}/images/lagergo_stop.png\" title=\"Lieferschein teilweise\" border=\"0\" style=\"margin-right:1px\">"; + $lieferschein_voll = "app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" title=\"Artikel vollständig\" border=\"0\" style=\"margin-right:1px\">"; + $lieferschein_teil = "app->Conf->WFconf['defaulttheme']}/images/lagergo_stop.png\" title=\"Artikel teilweise\" border=\"0\" style=\"margin-right:1px\">"; $versendet = "app->Conf->WFconf['defaulttheme']}/images/liefersperrego.png\" title=\"Versendet\" border=\"0\" style=\"margin-right:1px\">"; $versendet_nicht = "app->Conf->WFconf['defaulttheme']}/images/liefersperrestop.png\" title=\"Nicht versendet\" border=\"0\" style=\"margin-right:1px\">"; diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index b9ba007f..dae90b63 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -7110,7 +7110,7 @@ title: 'Abschicken', $navarray['menu']['admin'][++$menu]['first'] = array('Logistik','lager','list'); $navarray['menu']['admin'][$menu]['sec'][] = array('Wareneingang','wareneingang','list'); $navarray['menu']['admin'][$menu]['sec'][] = array('Lieferschein','lieferschein','list'); - $navarray['menu']['admin'][$menu]['sec'][] = array('Versand','versandpakete','list'); + $navarray['menu']['admin'][$menu]['sec'][] = array('Versand','versandpakete','lieferungen'); $navarray['menu']['admin'][$menu]['sec'][] = array('Lagerverwaltung','lager','list'); if($this->ModulVorhanden('lagermobil')) { $navarray['menu']['admin'][$menu]['sec'][] = array('Mobile Lagerverwaltung','lagermobil','list'); diff --git a/www/pages/content/versandpakete_lieferung.tpl b/www/pages/content/versandpakete_lieferung.tpl new file mode 100644 index 00000000..78a322f1 --- /dev/null +++ b/www/pages/content/versandpakete_lieferung.tpl @@ -0,0 +1,50 @@ +
+ +
+
+
+
+
+
+ {|Lieferung [BELEGNR]|} +
+
+
+
+
+ [MESSAGE] +
+
+
+
+
+ [TAB1] +
+ + Stapelverarbeitung + + + + +
{|Status|}:
 alle markieren 
+
+
+
+
+
+
+ [TAB1NEXT] +
+
+ + diff --git a/www/pages/versandpakete.php b/www/pages/versandpakete.php index 3a2d4f81..94ebacb2 100644 --- a/www/pages/versandpakete.php +++ b/www/pages/versandpakete.php @@ -28,6 +28,16 @@ class Versandpakete { lieferschein_ohne_pos <> 0 "; + const SQL_VERSANDPAKETE_LIEFERSCHEIN_WITH_POS = " + SELECT DISTINCT + versandpaket, + lieferschein + FROM + versandpaket_lieferschein_position vlp + INNER JOIN lieferschein_position lp ON + vlp.lieferschein_position = lp.id + "; + function __construct($app, $intern = false) { $this->app = $app; if ($intern) @@ -38,7 +48,8 @@ class Versandpakete { $this->app->ActionHandler("create", "versandpakete_edit"); // This automatically adds a "New" button $this->app->ActionHandler("edit", "versandpakete_edit"); $this->app->ActionHandler("add", "versandpakete_add"); - $this->app->ActionHandler("pakete", "versandpakete_pakete"); + $this->app->ActionHandler("lieferungen", "versandpakete_lieferungen"); + $this->app->ActionHandler("lieferung", "versandpakete_lieferung"); $this->app->ActionHandler("stapelverarbeitung", "versandpakete_stapelverarbeitung"); $this->app->ActionHandler("paketmarke", "versandpakete_paketmarke"); $this->app->ActionHandler("delete", "versandpakete_delete"); @@ -54,16 +65,23 @@ class Versandpakete { } static function TableSearch(&$app, $name, $erlaubtevars) { + $lieferschein_filter = null; switch ($name) { + case "lieferung_versandpakete_list": + $lieferschein_filter = $app->User->GetParameter('versandpakete_lieferschein_filter'); + if ($lieferschein_filter) { + $lieferschein_filter_where = "WHERE lieferschein = ".$lieferschein_filter; + } + // break omitted intentionally case "versandpakete_list": $allowed['versandpakete_list'] = array('list'); - $heading = array('', '', 'Paket-Nr.','Datum','Adresse', 'Lieferschein', 'Versandart', 'Tracking', 'Menge auf Lieferscheinen', 'Menge', 'Gewicht','Versender', 'Bemerkung', 'Status', 'Monitor', 'Menü'); - $width = array( '1%','1%','1%', '1%', '10%', '1%', '2%', '2%', '1%', '1%', '1%', '2%', '10%', '1%', '1%', '1%'); + $heading = array('', '', 'Paket-Nr.','Datum','Adresse', 'Lieferschein', 'Versandart', 'Tracking', 'Menge auf Lieferscheinen', 'Menge', 'Gewicht','Versender', 'Bemerkung', 'Status', 'Monitor', 'Menü', ''); + $width = array( '1%','1%','1%', '1%', '10%', '1%', '2%', '2%', '1%', '1%', '1%', '2%', '10%', '1%', '1%', '1%', '1%'); // columns that are aligned right (numbers etc) // $alignright = array(4,5,6,7,8); - $findcols = array('id','id','id','datum','name','if (lieferscheine IS NULL, lieferscheine_ohne_pos, lieferscheine)','versandart','tracking','lmenge','vmenge','gewicht','versender','bemerkung','status','id','id'); + $findcols = array('id','id','id','datum','name','lieferscheine','versandart','tracking','lmenge','vmenge','gewicht','versender','bemerkung','status','id','id'); $searchsql = array('name', 'if (lieferscheine IS NULL, lieferscheine_ohne_pos, lieferscheine)', 'tracking', 'bemerkung'); $defaultorder = 1; @@ -72,10 +90,23 @@ class Versandpakete { $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; - $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; + $menu = ""; $menucol = 1; $moreinfo = true; // Allow drop down details + $menu_link = array( + '', + "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">", + '', + " 'id'], + "\");>" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" + ); + $lieferschein_link = array( ' 'v.tracking_link'], + ['sql' => 'tracking_link'], '">', - ['sql' => 'v.tracking'], + ['sql' => 'tracking'], '' - ); + ); - $sql = "SELECT SQL_CALC_FOUND_ROWS - id, - $dropnbox, - id, - datum_format, - if (lieferscheine IS NULL,alop_name,name) as name, - if (lieferscheine IS NULL, lieferscheine_ohne_pos, lieferscheine) as belegnr, - versandart, + $sql_lieferschein_mengen = " + SELECT + l.id, + l.belegnr, + l.adresse, + l.name, + SUM(lp.menge) lmenge + FROM + lieferschein_position lp + INNER JOIN + lieferschein l ON l.id = lp.lieferschein + INNER JOIN + artikel a ON a.id = lp.artikel + WHERE + a.lagerartikel + GROUP BY l.id + "; + + $sql_pakete_zu_lieferschein = " + SELECT + v.id, + v.datum, + v.lieferschein_ohne_pos, + v.versandart, + v.tracking_link, + v.tracking, + v.gewicht, + v.versender, + v.bemerkung, + v.status, + lp.lieferschein, + SUM(vlp.menge) AS vmenge + FROM + versandpakete v + LEFT JOIN + versandpaket_lieferschein_position vlp ON vlp.versandpaket = v.id + LEFT JOIN + lieferschein_position lp ON vlp.lieferschein_position = lp.id + GROUP BY v.id, lp.lieferschein + "; + + $sql = " + SELECT SQL_CALC_FOUND_ROWS + id, + ".$dropnbox.", + id id2, + ".$app->erp->FormatDateShort("datum").", + name, + lieferscheine, + versandart, + ".$app->erp->ConcatSQL($tracking_link)." AS tracking, + lmenge, + vmenge, + gewicht, + versender, + bemerkung, + status, + ".$app->YUI->IconsSQL_versandpaket()." icons, + ".$app->erp->ConcatSQL($menu_link)." AS paket_edit, + id, + id + FROM ( + SELECT + v.id, + v.datum, + if(lop.id IS NOT NULL,lop.name,l.name) AS name, + if(lop.id IS NOT NULL,".$app->erp->ConcatSQL($lieferschein_ohne_pos_link).", GROUP_CONCAT(".$app->erp->ConcatSQL($lieferschein_link)." SEPARATOR ', ')) AS lieferscheine, + v.versandart, + tracking, tracking_link, - lmenge, - vmenge, - gewicht, - versender, - bemerkung, - status, - ".$app->YUI->IconsSQL_versandpaket().", - id, - datum - FROM - ( - SELECT - v.id, - ".$app->erp->FormatDateShort('v.datum')." AS datum_format, - v.datum, - a.name, - alop.name alop_name, - GROUP_CONCAT(DISTINCT ".$app->erp->ConcatSQL($lieferschein_link)." SEPARATOR ', ') as lieferscheine, - v.lieferschein_ohne_pos, - GROUP_CONCAT(DISTINCT ".$app->erp->ConcatSQL($lieferschein_ohne_pos_link)." SEPARATOR ', ') as lieferscheine_ohne_pos, - ".$app->erp->FormatUCfirst('v.versandart')." as versandart, - ".$app->erp->ConcatSQL($tracking_link)." as tracking_link, - tracking, - ".$app->erp->FormatMenge('SUM(lp.menge)')." as lmenge, - ".$app->erp->FormatMenge('SUM(vlp.menge)')." AS vmenge, - v.gewicht, - v.versender, - v.bemerkung, - v.status - FROM - versandpakete v - LEFT JOIN - versandpaket_lieferschein_position vlp ON vlp.versandpaket = v.id - LEFT JOIN - lieferschein_position lp ON vlp.lieferschein_position = lp.id - LEFT JOIN - lieferschein l ON lp.lieferschein = l.id - LEFT JOIN - adresse a ON a.id = l.adresse - LEFT JOIN - lieferschein lop ON v.lieferschein_ohne_pos = lop.id - LEFT JOIN - adresse alop ON lop.adresse = alop.id - GROUP BY v.id - ) temp - "; + ".$app->erp->FormatMenge("SUM(l.lmenge)")." AS lmenge, + ".$app->erp->FormatMenge("SUM(v.vmenge)")." AS vmenge, + v.gewicht, + v.versender, + v.bemerkung, + v.status, + lieferschein_ohne_pos + FROM + (".$sql_pakete_zu_lieferschein.") AS v + LEFT JOIN + (".$sql_lieferschein_mengen.") as l + ON v.lieferschein = l.id + LEFT JOIN + lieferschein lop ON lop.id = v.lieferschein_ohne_pos + ".$lieferschein_filter_where." + GROUP BY + v.id + ) final + "; - $where = "((status IN ('neu', 'versendet')"; - // Toggle filters - $app->Tpl->Add('JQUERYREADY', "$('#geschlossene').click( function() { fnFilterColumn1( 0 ); } );"); - $app->Tpl->Add('JQUERYREADY', "$('#stornierte').click( function() { fnFilterColumn2( 0 ); } );"); + if (!$lieferschein_filter) { + $where = "((status IN ('neu', 'versendet')"; + // Toggle filters + $app->Tpl->Add('JQUERYREADY', "$('#geschlossene').click( function() { fnFilterColumn1( 0 ); } );"); + $app->Tpl->Add('JQUERYREADY', "$('#stornierte').click( function() { fnFilterColumn2( 0 ); } );"); - for ($r = 1;$r <= 2;$r++) { - $app->Tpl->Add('JAVASCRIPT', ' - function fnFilterColumn' . $r . ' ( i ) - { - if(oMoreData' . $r . $name . '==1) - oMoreData' . $r . $name . ' = 0; - else - oMoreData' . $r . $name . ' = 1; + for ($r = 1;$r <= 2;$r++) { + $app->Tpl->Add('JAVASCRIPT', ' + function fnFilterColumn' . $r . ' ( i ) + { + if(oMoreData' . $r . $name . '==1) + oMoreData' . $r . $name . ' = 0; + else + oMoreData' . $r . $name . ' = 1; - $(\'#' . $name . '\').dataTable().fnFilter( - \'\', - i, - 0,0 - ); - } - '); - } + $(\'#' . $name . '\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } - $more_data1 = $app->Secure->GetGET("more_data1"); - if ($more_data1 == 1) { - $where .= " OR status IN ('abgeschlossen'))"; + $more_data1 = $app->Secure->GetGET("more_data1"); + if ($more_data1 == 1) { + $where .= " OR status IN ('abgeschlossen'))"; + } else { + $where .= " )"; + } + + $more_data2 = $app->Secure->GetGET("more_data2"); + if ($more_data2 == 1) { + $where .= " OR status IN ('storniert'))"; + } + else { + $where .= " )"; + } + // END Toggle filters + + } else { - $where .= " )"; + $where = "1"; } - $more_data2 = $app->Secure->GetGET("more_data2"); - if ($more_data2 == 1) { - $where .= " OR status IN ('storniert'))"; - } - else { - $where .= " )"; - } - // END Toggle filters - - $count = "SELECT count(DISTINCT id) FROM versandpakete v"; + $count = "SELECT count(DISTINCT id) FROM versandpakete v WHERE ".$where; $groupby = ""; break; @@ -204,13 +275,13 @@ class Versandpakete { $allowed['versandpakete_lieferscheine'] = array('lieferscheine'); - $heading = array('', '', 'Lieferschein', 'Adresse','Menge','Menge in Versandpaketen','Monitor','Paket erstellen'); - $width = array( '1%','1%', '10%', '10%', '10%', '10%' ,'1%', '1%'); // Fill out manually later + $heading = array('', '', 'Lieferschein', 'Adresse','Menge','Menge in Versandpaketen','Monitor','Pakete','Paket erstellen'); + $width = array( '1%','1%', '10%', '10%', '10%', '10%', '1%', '1%', '1%'); // Fill out manually later // columns that are aligned right (numbers etc) // $alignright = array(4,5,6,7,8); - $findcols = array('id','id','belegnr','name','lmenge','vmenge','(alle_versendet+alle_abgeschlossen*2)','id'); + $findcols = array('id','id','belegnr','name','lmenge','vmenge','(alle_versendet+alle_abgeschlossen*2)','id','id'); $searchsql = array('belegnr','name'); $defaultorder = 1; @@ -220,9 +291,9 @@ class Versandpakete { $menucol = 1; $moreinfoaction = "lieferschein"; $moreinfo = true; // Allow drop down details - $aligncenter = [5,6,7,8]; + $aligncenter = [5,6,7,8,9,10]; - $menu = "Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">"; + $menu = "Conf->WFconf['defaulttheme']}/images/add.png\" border=\"0\">"; $sql_lieferschein_position = " SELECT @@ -272,8 +343,9 @@ class Versandpakete { CONCAT('',belegnr,''), name, ".$app->erp->FormatMenge("lmenge").", - ".$app->erp->FormatMenge("vmenge").", + ".$app->erp->FormatMenge("vmenge").", ".$app->YUI->IconsSQL_lieferung().", + CONCAT('Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">'), id, alle_abgeschlossen FROM ( @@ -314,7 +386,7 @@ class Versandpakete { } $more_data2 = $app->Secure->GetGET("more_data2"); if ($more_data2 == 1) { - $where .= " AND (alle_versendet)"; + $where .= " AND (alle_versendet | eins_versendet)"; } else { } @@ -462,13 +534,11 @@ class Versandpakete { } function versandpakete_menu() { - $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=list", "Lieferungen"); - $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=pakete", "Versandpakete"); - $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=create", "Neu anlegen"); + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=lieferungen", "Lieferungen"); + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=list", "Versandpakete"); } - function versandpakete_pakete() { - $this->versandpakete_menu(); + function versandpakete_status_select() { // Status select $options_text = ""; foreach (self::STATUS as $status) @@ -476,6 +546,12 @@ class Versandpakete { $options_text .= ""; } $this->app->Tpl->Set('STATUS_OPTIONS', $options_text); + } + + function versandpakete_list() { + $this->versandpakete_menu(); + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=create", "Neu anlegen"); + $this->versandpakete_status_select(); $this->app->YUI->TableSearch('TAB1', 'versandpakete_list', "show", "", "", basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', "versandpakete_list.tpl"); } @@ -501,12 +577,48 @@ class Versandpakete { $this->versandpakete_list(); } - function versandpakete_list() { + function versandpakete_lieferungen() { $this->versandpakete_menu(); $this->app->YUI->TableSearch('TAB1', 'versandpakete_lieferscheine', "show", "", "", basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', "versandpakete_lieferungen.tpl"); } + function versandpakete_lieferung() { + $lieferschein_filter = (int) $this->app->Secure->GetGET('id'); + $this->versandpakete_menu(); + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=add&lieferschein=".$lieferschein_filter, "Neu anlegen"); + $this->app->User->SetParameter('versandpakete_lieferschein_filter',$lieferschein_filter); + $this->versandpakete_status_select(); + + $sql = "SELECT + versandpaket, + belegnr, + l.name + FROM + versandpaket_lieferschein_position vlp + INNER JOIN + lieferschein_position lp ON lp.id = vlp.lieferschein_position + INNER JOIN + lieferschein l ON l.id = lp.lieferschein + WHERE l.id = ".$lieferschein_filter." LIMIT 1"; + + $info = $this->app->DB->SelectArr($sql); + + $this->app->Tpl->Set('BELEGNR', $info[0]['belegnr']); + + $this->app->Tpl->SetText('KURZUEBERSCHRIFT2', $info[0]['name']." Lieferung ".$info[0]['belegnr']); + + if ($this->versandpakete_check_completion($info[0]['versandpaket'])) { + $this->app->Tpl->addMessage('success', 'Lieferung vollständig in Paketen.', false, 'MESSAGE'); + } + else { + $this->app->Tpl->addMessage('info', 'Lieferung unvollständig.', false, 'MESSAGE'); + } + + $this->app->YUI->TableSearch('TAB1', 'lieferung_versandpakete_list', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "versandpakete_lieferung.tpl"); + } + public function versandpakete_delete() { $id = (int) $this->app->Secure->GetGET('id'); @@ -533,10 +645,14 @@ class Versandpakete { function versandpakete_edit() { + $id = $this->app->Secure->GetGET('id'); + $lieferung = $this->app->Secure->GetGET('lieferung'); + + if ($lieferung) { + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=lieferung&id=".$lieferung, "Zurück"); + } $this->versandpakete_menu(); - $id = $this->app->Secure->GetGET('id'); - // Check if other users are editing this id if($this->app->erp->DisableModul('versandpakete',$id)) { @@ -696,6 +812,13 @@ class Versandpakete { $icons = $this->app->DB->SelectArr($sql); $this->app->Tpl->Set('ICONS', $icons[0]['icons']); + if ($this->versandpakete_check_completion($id)) { + $this->app->Tpl->addMessage('success', 'Lieferung vollständig in Paketen.', false, 'MESSAGE'); + } + else { + $this->app->Tpl->addMessage('info', 'Lieferung unvollständig.', false, 'MESSAGE'); + } + $this->app->YUI->TableSearch('PAKETINHALT', 'versandpakete_paketinhalt_list', "show", "", "", basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', "versandpakete_edit.tpl"); } @@ -780,16 +903,14 @@ class Versandpakete { foreach($lieferschein_positionen as $lieferschein_position) { $restmenge = $lieferschein_position['lp_menge']-$lieferschein_position['v_menge']; - if ($restmenge <= 0) { + if ($restmenge <= 0 || $menge <= 0) { continue; } - if ($menge > $restmenge) { $buchmenge = $restmenge; } else { $buchmenge = $menge; - } - + } $buchmenge_gesamt += $buchmenge; $menge -= $buchmenge; @@ -825,14 +946,21 @@ class Versandpakete { $msg = "
Keine passende Lieferscheinposition gefunden.
"; break; } - + $buchmenge_gesamt = 0; foreach($lieferschein_positionen as $lieferschein_position) { - $buchmenge = $lieferschein_position['lp_menge']-$lieferschein_position['v_menge']; + $buchmenge = $lieferschein_position['lp_menge']-$lieferschein_position['v_menge']; + if ($buchmenge <= 0) { + continue; + } + $buchmenge_gesamt += $buchmenge; $sql = "INSERT INTO versandpaket_lieferschein_position (versandpaket, lieferschein_position, menge) VALUES (".$id.",".$lieferschein_position['lp_id'].",".$buchmenge.") ON DUPLICATE KEY UPDATE menge = menge+'".$buchmenge."'"; $this->app->DB->Insert($sql); } - $msg = $this->app->erp->base64_url_encode("
Lieferschein hinzugefügt.
"); - header("Location: index.php?module=versandpakete&action=edit&id=".$id."&msg=$msg"); + + if ($buchmenge_gesamt > 0) { + $msg = $this->app->erp->base64_url_encode("
Lieferschein hinzugefügt.
"); + header("Location: index.php?module=versandpakete&action=edit&id=".$id."&msg=$msg"); + } break; } @@ -846,12 +974,94 @@ class Versandpakete { $this->app->User->SetParameter('versandpakete_lieferschein', $lieferschein); $this->app->User->SetParameter('versandpakete_versandpaket', $id); + if ($this->versandpakete_check_completion($id)) { + $this->app->Tpl->addMessage('success', 'Lieferung vollständig in Paketen.', false, 'MESSAGE'); + } + else { + $this->app->Tpl->addMessage('info', 'Lieferung unvollständig.', false, 'MESSAGE'); + } + $this->app->YUI->TableSearch('LIEFERSCHEININHALT', 'versandpakete_lieferschein_paket_list', "show", "", "", basename(__FILE__), __CLASS__); $this->app->YUI->TableSearch('PAKETINHALT', 'versandpakete_paketinhalt_list', "show", "", "", basename(__FILE__), __CLASS__); - $this->app->Tpl->Set('MESSAGE', $msg); + $this->app->Tpl->Add('MESSAGE', $msg); $this->app->Tpl->Parse('PAGE', "versandpakete_add.tpl"); } + function versandpakete_check_completion($id) : bool { + $sql_lieferschein = " + SELECT DISTINCT + lieferschein + FROM + versandpaket_lieferschein_position vlp + INNER JOIN lieferschein_position lp ON vlp.lieferschein_position = lp.id + WHERE versandpaket = ".$id; + + $sql_lieferschein_mengen = " + SELECT + belegnr, + lp.id lieferschein_position, + menge lmenge + FROM + lieferschein_position lp + INNER JOIN + artikel a ON a.id = lp.artikel + INNER JOIN + lieferschein l on l.id = lp.lieferschein + INNER JOIN + (".$sql_lieferschein.") lieferschein_filter + ON lieferschein_filter.lieferschein = lp.lieferschein + WHERE + a.lagerartikel + GROUP BY + lp.id + "; + + // Check completion + $sql_versandmengen = " + SELECT + v.id versandpaket, + lieferschein_position, + SUM(menge) vmenge + FROM + versandpaket_lieferschein_position vlp + INNER JOIN + versandpakete v ON v.id = vlp.versandpaket + WHERE + v.status <> 'storniert' + GROUP BY + lieferschein_position + "; + + $sql_intermediate = " + SELECT + vmengen.versandpaket, + GROUP_CONCAT(DISTINCT lmengen.belegnr SEPARATOR ', ') lieferscheine, + SUM(lmenge) lmenge, + SUM(vmenge) vmenge + FROM + (".$sql_lieferschein_mengen.") lmengen + LEFT JOIN + (".$sql_versandmengen.") vmengen + ON lmengen.lieferschein_position = vmengen.lieferschein_position + "; + + $sql = " + SELECT + *, + ".$this->app->YUI->IconsSQL_versandpaket()." icons + FROM + (".$sql_intermediate.") final INNER JOIN versandpakete v ON v.id = final.versandpaket + "; + + $completion = $this->app->DB->SelectArr($sql); + + if (!empty($completion)) { + if ($completion[0]['lmenge'] == $completion[0]['vmenge']) { + return(true); + } + } + return(false); + } function versandpakete_minidetail() { $id = $this->app->Secure->GetGET('id'); @@ -905,8 +1115,9 @@ class Versandpakete { FROM lieferschein l INNER JOIN lieferschein_position lp ON lp.lieferschein = l.id - INNER JOIN versandpaket_lieferschein_position vlp ON vlp.lieferschein_position = lp.id - WHERE l.id = ".$id." + INNER JOIN artikel a ON lp.artikel = a.id + LEFT JOIN versandpaket_lieferschein_position vlp ON vlp.lieferschein_position = lp.id + WHERE l.id = ".$id." AND a.lagerartikel GROUP BY lp.id" ); $table->DisplayNew('TABLE', 'Paket', 'noAction'); @@ -917,9 +1128,9 @@ class Versandpakete { function versandpakete_paketmarke() { - $this->versandpakete_menu(); $id = $this->app->Secure->GetGET('id'); $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=edit&id=".$id, "Zurück"); + $this->versandpakete_menu(); $this->app->Tpl->Set('TABTEXT',"Paketmarke"); diff --git a/www/themes/new/css/color3.css b/www/themes/new/css/color3.css index e847a0dc..f3c975c9 100644 --- a/www/themes/new/css/color3.css +++ b/www/themes/new/css/color3.css @@ -64,5 +64,6 @@ --error: #F05A5C; --error-color: #fff; --important: #68D4D0; - --success: #92EFB4; +/* --success: #92EFB4;*/ + --success: #2DCA73; } diff --git a/www/themes/new/css/styles.css b/www/themes/new/css/styles.css index b2cc3e3b..9c5dcab2 100644 --- a/www/themes/new/css/styles.css +++ b/www/themes/new/css/styles.css @@ -2961,7 +2961,6 @@ div.error > input[type=submit] { } .info, -.success, .error2 { background-color: var(--info); color: var(--info-color); @@ -2976,6 +2975,14 @@ div.error > input[type=submit] { background-size: 30px 30px; } +.success { + background-color: var(--success); + color: var(--info-color); + background-image: url('../images/info.png'); + background-size: 30px 30px; +} + + .pull-right { float: right !important; } @@ -3040,7 +3047,7 @@ div.error > input[type=submit] { #header div.headererror > input { padding: 5px; margin: 3px; - background-color: var(--info); + background-color: var(--success); color: var(--info-color); } diff --git a/www/themes/new/images/lagergo_stop_teil.png b/www/themes/new/images/lagergo_stop_teil.png new file mode 100644 index 00000000..c3d1cd01 Binary files /dev/null and b/www/themes/new/images/lagergo_stop_teil.png differ diff --git a/www/themes/new/images/lagergo_teil.png b/www/themes/new/images/lagergo_teil.png new file mode 100644 index 00000000..2f2c2e7b Binary files /dev/null and b/www/themes/new/images/lagergo_teil.png differ