From 4f7eb4049bfe24294735e7b446320c4466686903 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Mon, 16 Oct 2023 21:22:21 +0200 Subject: [PATCH] versandpakete initial --- .../module_creator_php_template.txt | 10 +- upgrade/data/db_schema.json | 125 ++++ www/lib/class.erpapi.php | 10 +- www/lib/class.versanddienstleister.php | 40 +- www/pages/ajax.php | 11 +- www/pages/content/versandpakete_add.tpl | 80 +++ www/pages/content/versandpakete_edit.tpl | 108 ++++ .../content/versandpakete_lieferscheine.tpl | 10 + www/pages/content/versandpakete_list.tpl | 10 + www/pages/lieferschein.php | 24 + www/pages/versandpakete.php | 604 ++++++++++++++++++ www/themes/new/images/sidebar/logistik.svg | 6 + 12 files changed, 1024 insertions(+), 14 deletions(-) create mode 100644 www/pages/content/versandpakete_add.tpl create mode 100644 www/pages/content/versandpakete_edit.tpl create mode 100644 www/pages/content/versandpakete_lieferscheine.tpl create mode 100644 www/pages/content/versandpakete_list.tpl create mode 100644 www/pages/versandpakete.php create mode 100644 www/themes/new/images/sidebar/logistik.svg diff --git a/tools/module_creator/module_creator_php_template.txt b/tools/module_creator/module_creator_php_template.txt index 4aad87da..b5548497 100644 --- a/tools/module_creator/module_creator_php_template.txt +++ b/tools/module_creator/module_creator_php_template.txt @@ -42,7 +42,10 @@ class PLACEHOLDER_MODULECLASSNAME { $defaultorder = 1; $defaultorderdesc = 0; - $dropnbox = "PLACEHOLDER_DROPNBOX"; + $dropnbox = "PLACEHOLDER_DROPNBOX"; + +// $moreinfo = true; // Allow drop down details +// $menucol = 11; // Set id col for moredata/menu $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; @@ -118,6 +121,8 @@ class PLACEHOLDER_MODULECLASSNAME { // Add checks here + // $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form? + $columns = "id, "; $values = "$id, "; $update = ""; @@ -166,6 +171,9 @@ class PLACEHOLDER_MODULECLASSNAME { $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email); $this->app->Tpl->Add('EMAIL', $email); $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); + + $this->app->YUI->AutoComplete("artikel", "artikelnummer"); + */ // $this->SetInput($input); diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index bd8e12c8..3578f8f2 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -112662,6 +112662,76 @@ } ] }, + { + "name": "versandpaket_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": "versandpaket", + "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": "" + }, + { + "Field": "menge", + "Type": "decimal(14,4)", + "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": "" + }, + { + "Key_name": "versandpaket_lieferschein_position", + "Index_type": "BTREE", + "columns": [ + "versandpaket", + "lieferschein_position" + ], + "Non_unique": "UNIQUE" + } + ] + }, { "name": "versandarten", "collation": "utf8mb3_general_ci", @@ -112849,6 +112919,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "datum", + "Type": "datetime", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "current_timestamp()", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "versand", "Type": "int(11)", @@ -112871,6 +112952,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "lieferschein_ohne_pos", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "tracking", "Type": "varchar(255)", @@ -112882,6 +112974,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "tracking_link", + "Type": "text", + "Collation": "utf8mb3_general_ci", + "Null": "NO", + "Key": "", + "Default": "", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "versender", "Type": "varchar(255)", @@ -112914,6 +113017,28 @@ "Extra": "", "Privileges": "select,insert,update,references", "Comment": "" + }, + { + "Field": "status", + "Type": "varchar(64)", + "Collation": "utf8mb3_general_ci", + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, + { + "Field": "usereditid", + "Type": "int(11)", + "Collation": null, + "Null": "YES", + "Key": "MUL", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" } ], "keys": [ diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 07f9cf5a..98f95e71 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -13233,7 +13233,6 @@ function SendPaypalFromAuftrag($auftrag, $test = false) //value muss hier vom format ueberprueft werden $dbformat = 0; if(!$fromform) { - $dbformat = 1; $id = $value; if($id > 0){ $abkuerzung = $this->app->DB->Select("SELECT belegnr as name FROM $table WHERE id='$id' LIMIT 1"); @@ -13241,13 +13240,16 @@ function SendPaypalFromAuftrag($auftrag, $test = false) $abkuerzung = ''; } } else { - $dbformat = 0; $abkuerzung = $value; $tmp = explode(' ', trim($value)); $tmp = reset($tmp); - //$id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$rest' AND geloescht=0 LIMIT 1"); $id = $this->app->DB->Select("SELECT id FROM $table WHERE belegnr='$tmp' AND belegnr!='' LIMIT 1"); - if($id <=0) $id=0; + if ($id <=0) { + $id=0; + $abkuerzung = ''; + } else { + $abkuerzung = $tmp; + } } // wenn ziel datenbank diff --git a/www/lib/class.versanddienstleister.php b/www/lib/class.versanddienstleister.php index 44743e27..0debe90d 100644 --- a/www/lib/class.versanddienstleister.php +++ b/www/lib/class.versanddienstleister.php @@ -378,11 +378,41 @@ abstract class Versanddienstleister if ($json->submit == 'print') { $result = $this->CreateShipment($json, $address); if ($result->Success) { - $sql = "INSERT INTO versand - (adresse, lieferschein, versandunternehmen, gewicht, tracking, tracking_link, anzahlpakete) - VALUES - ({$address['addressId']}, {$address['lieferscheinId']}, '$this->type', - '$json->weight', '$result->TrackingNumber', '$result->TrackingUrl', 1)"; +/* $sql = "INSERT INTO versand + ( + adresse, + lieferschein, + versandunternehmen, + gewicht, + tracking, + tracking_link, + anzahlpakete + ) + VALUES + ( + {$address['addressId']}, + {$address['lieferscheinId']}, + '$this->type', + '$json->weight', + '$result->TrackingNumber', + '$result->TrackingUrl', + 1 + )";*/ + $sql = "INSERT INTO versandpakete + ( + lieferschein_ohne_pos, + gewicht, + tracking, + tracking_link + ) + VALUES + ( + {$address['lieferscheinId']}, + '$json->weight', + '$result->TrackingNumber', + '$result->TrackingUrl' + )"; + $this->app->DB->Insert($sql); $filename = $this->app->erp->GetTMP() . join('_', [$this->type, 'Label', $result->TrackingNumber]) . '.pdf'; diff --git a/www/pages/ajax.php b/www/pages/ajax.php index 192fcfc4..6587512f 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -1597,11 +1597,14 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku if($artikel_freitext1_suche) { $felder[] = 'art.freifeld1'; + } else { + $artikel_freitext1_suche = 'true'; } - $subwhere = $this->AjaxFilterWhere($termorig,$felder); - $arr = $this->app->DB->SelectArr("SELECT CONCAT(art.nummer,' ',art.name_de) as name FROM artikel art + $subwhere = $this->AjaxFilterWhere($termorig,$felder); + $sql = "SELECT CONCAT(art.nummer,' ',art.name_de) as name FROM artikel art INNER JOIN $doctype"."_position ap ON ap.artikel = art.id AND $doctype = '$doctypeid' - WHERE art.geloescht=0 AND ($artikel_freitext1_suche) AND art.geloescht=0 AND art.intern_gesperrt!=1 LIMIT 20"); + WHERE art.geloescht=0 AND ($artikel_freitext1_suche) AND art.geloescht=0 AND art.intern_gesperrt!=1 LIMIT 20"; + $arr = $this->app->DB->SelectArr($sql); $carr = !empty($arr)?count($arr):0; for($i = 0; $i < $carr; $i++) { $newarr[] = $arr[$i]['name']; @@ -2479,7 +2482,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '".$kunde[0]."' AND kundennummer <> '' LIMIT 1"); } $beleg = str_replace('kunden','',$filtername); - $arr = $this->app->DB->SelectArr("SELECT CONCAT(id,' ',if(belegnr <> '',belegnr,'ENTWURF'),' ',kundennummer,' ',name) as name FROM $beleg WHERE (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR kundennummer LIKE '$%term%') AND (status = 'angelegt' OR status = 'freigegeben') + $arr = $this->app->DB->SelectArr("SELECT CONCAT(belegnr,' ',kundennummer,' ',name) as name FROM $beleg WHERE (belegnr <> '') AND (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR kundennummer LIKE '$%term%') AND (status = 'angelegt' OR status = 'freigegeben') ".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')." ORDER by belegnr LIMIT 20"); $carr = !empty($arr)?count($arr):0; diff --git a/www/pages/content/versandpakete_add.tpl b/www/pages/content/versandpakete_add.tpl new file mode 100644 index 00000000..ef23eee1 --- /dev/null +++ b/www/pages/content/versandpakete_add.tpl @@ -0,0 +1,80 @@ +
+ +
+ [MESSAGE] +
+ [FORMHANDLEREVENT] +
+
+
+
+
+ {|Hinzufügen von Artikeln aus Lieferschein [LIEFERSCHEIN] zu Versandpaket Nr. [ID]|} + + + + + + + + + +
+ {|Artikel|}: + + +
+ {|Menge|}: + + +
+
+
+
+
+
+
+ {|Aktionen|} + + + + +
+
+
+
+
+
+
+
+
+
+
+ {|Lieferscheininhalt|} + [LIEFERSCHEININHALT] +
+
+
+
+
+
+
+
+
+
+ {|Paketinhalt|} + [PAKETINHALT] +
+
+
+
+
+ +
+
+
+
+
+ diff --git a/www/pages/content/versandpakete_edit.tpl b/www/pages/content/versandpakete_edit.tpl new file mode 100644 index 00000000..bdcd4eef --- /dev/null +++ b/www/pages/content/versandpakete_edit.tpl @@ -0,0 +1,108 @@ +
+ +
+ [MESSAGE] + [FORMHANDLEREVENT] +
+
+
+
+
+
+ {|Versandpaket Nr. [ID] vom [DATUM] für Adresse '[ADRESSE]'|} + + + + + + + + + + + + + + + + + + + + + +
+ {|Status|}: + + +
+ {|Versender|}: + + +
+ {|Tracking|}: + + +
+ {|Gewicht Kg|}: + + +
+ {|Bemerkung|}: + + +
+
+
+
+
+
+
+ {|Artikel aus Lieferschein hinzufügen|} + + + + + +
+ {|Lieferschein|}: + + +
+
+
+
+
+
+
+ {|Aktionen|} + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {|Paketinhalt|} + [PAKETINHALT] +
+
+
+
+
+
+
+ diff --git a/www/pages/content/versandpakete_lieferscheine.tpl b/www/pages/content/versandpakete_lieferscheine.tpl new file mode 100644 index 00000000..394c103a --- /dev/null +++ b/www/pages/content/versandpakete_lieferscheine.tpl @@ -0,0 +1,10 @@ +
+ +
+ [MESSAGE] + [TAB1] + [TAB1NEXT] +
+
diff --git a/www/pages/content/versandpakete_list.tpl b/www/pages/content/versandpakete_list.tpl new file mode 100644 index 00000000..394c103a --- /dev/null +++ b/www/pages/content/versandpakete_list.tpl @@ -0,0 +1,10 @@ +
+ +
+ [MESSAGE] + [TAB1] + [TAB1NEXT] +
+
diff --git a/www/pages/lieferschein.php b/www/pages/lieferschein.php index 6c7fdaf2..a5141680 100644 --- a/www/pages/lieferschein.php +++ b/www/pages/lieferschein.php @@ -960,6 +960,7 @@ class Lieferschein extends GenLieferschein $this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']); +/* $tracking = $this->app->DB->SelectArr("SELECT if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''), if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''), @@ -1018,7 +1019,30 @@ class Lieferschein extends GenLieferschein if (!is_null($tmp)) { $this->app->Tpl->Set('TRACKING',implode(', ',$tmp)); } +*/ + $sql = "SELECT SQL_CALC_FOUND_ROWS + v.tracking as tracking, + v.tracking_link + FROM + versandpakete v + LEFT JOIN + versandpaket_lieferschein_position vlp ON v.id = vlp.versandpaket + LEFT JOIN + lieferschein_position lp ON lp.id = vlp.lieferschein_position + LEFT JOIN + lieferschein l ON lp.lieferschein = l.id + WHERE l.id = ".$id." OR v.lieferschein_ohne_pos = ".$id." + GROUP BY + v.tracking + "; + $tracking = $this->app->DB->SelectArr($sql); + $tracking_list = array(); + foreach ($tracking as $single_tracking) { + $tracking_list[] = ''.$single_tracking['tracking'].''; + } + + $this->app->Tpl->Set('TRACKING',implode(', ',$tracking_list)); $returnOrders = (array)$this->app->DB->SelectArr( sprintf( diff --git a/www/pages/versandpakete.php b/www/pages/versandpakete.php new file mode 100644 index 00000000..e29187e9 --- /dev/null +++ b/www/pages/versandpakete.php @@ -0,0 +1,604 @@ + 0 + "; + + function __construct($app, $intern = false) { + $this->app = $app; + if ($intern) + return; + + $this->app->ActionHandlerInit($this); + $this->app->ActionHandler("list", "versandpakete_list"); + $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("lieferscheine", "versandpakete_lieferscheine"); + $this->app->ActionHandler("delete", "versandpakete_delete"); + $this->app->ActionHandler("minidetail", "versandpakete_minidetail"); + $this->app->DefaultActionHandler("list"); + $this->app->ActionHandlerListen($app); + } + + public function Install() { + /* Fill out manually later */ + } + + static function TableSearch(&$app, $name, $erlaubtevars) { + switch ($name) { + case "versandpakete_list": + $allowed['versandpakete_list'] = array('list'); + $heading = array('','', 'Paket-Nr.','Datum','Adresse', 'Lieferschein', 'Tracking', 'Versender', 'Gewicht', 'Bemerkung', 'Status', '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('v.id','v.id','v.id','a.name','l.belegnr','v.tracking', 'v.versender', 'v.gewicht', 'v.bemerkung', 'v.status'); + $searchsql = array('v.versand', 'v.nr', 'v.tracking', 'v.versender', 'v.gewicht', 'v.bemerkung', 'v.status'); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; + + $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; + $menucol = 11; + $moreinfo = true; // Allow drop down details + + $sql = "SELECT SQL_CALC_FOUND_ROWS + v.id, + $dropnbox, + v.id, + ".$app->erp->FormatDateTimeShort('v.datum').", + a.name, + GROUP_CONCAT(DISTINCT l.belegnr SEPARATOR ', ') as lieferschein, + v.tracking, + v.versender, + v.gewicht, + v.bemerkung, + v.status, + v.id + FROM + versandpakete v + LEFT JOIN + (".self::SQL_VERSANDPAKETE_LIEFERSCHEIN.") vl ON v.id = vl.versandpaket + LEFT JOIN + lieferschein l on vl.lieferschein = l.id + LEFT JOIN + adresse a on a.id = l.adresse + "; + + $where = ""; +// $count = "SELECT count(DISTINCT id) FROM versandpakete v WHERE $where"; + $groupby = "GROUP BY v.id"; + + break; + case "versandpakete_lieferscheine": + + $allowed['versandpakete_lieferscheine'] = array('lieferscheine'); + + $heading = array( 'Lieferschein', 'Adresse','Menge','Menge in Versandpaketen','Paket-Nr.', 'Paket erstellen'); + $width = array( '10%', '10%', '10%', '10%' ,'10%', '1%'); // Fill out manually later + + // columns that are aligned right (numbers etc) + // $alignright = array(4,5,6,7,8); + + $findcols = array('id','id'); + $searchsql = array('v.versand', 'v.nr', 'v.tracking', 'v.versender', 'v.gewicht', 'v.bemerkung', 'v.status'); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $menu = "Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\">"; + $menucol = 5; + + $paket_link = array( + '', + ['sql' => 'versandpaket'], + '' + ); + + $sql = " + SELECT + id, + CONCAT('',belegnr,''), + name, + ".$app->erp->FormatMenge("SUM(lmenge)")." as lmenge, + ".$app->erp->FormatMenge("SUM(vmenge)")." as vmenge, + pakete, + id + FROM + ( + SELECT + l.id, + l.belegnr, + l.name, + lp.menge lmenge, + SUM(vlp.menge) vmenge, + GROUP_CONCAT(".$app->erp->ConcatSQL($paket_link)." SEPARATOR ', ') as pakete + FROM + lieferschein l + INNER JOIN lieferschein_position lp ON lp.lieferschein = l.id + LEFT JOIN versandpaket_lieferschein_position vlp ON vlp.lieferschein_position = lp.id + LEFT JOIN versandpakete v ON vlp.versandpaket = v.id + WHERE + l.belegnr <> '' AND l.versendet <> 1 AND (v.status IS NULL OR v.status != '".self::VERSANDPAKETE_STATUS_STORNIERT."') + GROUP BY lp.id + ) l_mengen + "; + + $where = ""; +// $count = "SELECT count(DISTINCT id) FROM versandpakete v WHERE $where"; + $groupby = "GROUP BY id"; + + break; + case "versandpakete_paketinhalt_list": + + $id = (int) $app->Secure->GetGET('id'); + + $allowed['versandpakete_paketinhalt_list'] = array('list'); + $heading = array('Lieferschein','Pos', 'Artikel', 'Artikel-Nr.','Menge Lieferschein', 'Menge Paket', 'Menü'); + $width = array('10%','10%','10%'); // Fill out manually later + + // columns that are aligned right (numbers etc) + // $alignright = array(4,5,6,7,8); + + $findcols = array('lp.id','v.id','v.id','a.name','l.belegnr','v.tracking', 'v.versender', 'v.gewicht', 'v.bemerkung', 'v.status'); + $searchsql = array('v.versand', 'v.nr', 'v.tracking', 'v.versender', 'v.gewicht', 'v.bemerkung', 'v.status'); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $menu = "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"; + $menucol = 6; + + $lieferschein_link = array( + '', + ['sql' => 'l.belegnr'], + '' + ); + + $sql = "SELECT SQL_CALC_FOUND_ROWS + lp.id, + ".$app->erp->ConcatSQL($lieferschein_link)." as lieferschein, + lp.sort, + a.name_de, + a.nummer, + ".$app->erp->FormatMenge('lp.menge')." as l_menge, + ".$app->erp->FormatMenge('SUM(vlp.menge)')." as v_menge, + vlp.id + FROM + versandpakete v + INNER JOIN versandpaket_lieferschein_position vlp ON + v.id = vlp.versandpaket + INNER JOIN lieferschein_position lp ON + vlp.lieferschein_position = lp.id + INNER JOIN lieferschein l ON + lp.lieferschein = l.id + INNER JOIN artikel a ON + lp.artikel = a.id + "; + + $where = "v.id =".$id; +// $count = "SELECT count(DISTINCT id) FROM versandpakete v WHERE $where"; + $groupby = "GROUP BY lp.id"; + break; + case "versandpakete_lieferschein_paket_list": + + $lieferschein_id = $app->User->GetParameter('versandpakete_lieferschein'); + + $allowed['versandpakete_lieferschein_paket_list'] = array('list'); + $heading = array('Pos', 'Artikel', 'Artikel-Nr.','Menge Lieferschein', 'Menge in Versandpaketen', 'Paket-Nr.', 'Menü'); + $width = array('10%','10%','10%'); // Fill out manually later + + // columns that are aligned right (numbers etc) + // $alignright = array(4,5,6,7,8); + + $findcols = array('lp.id','lp.id'); + $searchsql = array('v.versand', 'v.nr', 'v.tracking', 'v.versender', 'v.gewicht', 'v.bemerkung', 'v.status'); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $menu = ""; + $menucol = 6; + + $paket_link = array( + '', + ['sql' => 'vlp.versandpaket'], + '' + ); + + $sql = "SELECT SQL_CALC_FOUND_ROWS + vlp.id, + lp.sort, + a.name_de, + a.nummer, + ".$app->erp->FormatMenge('lp.menge')." as l_menge, + ".$app->erp->FormatMenge('SUM(vlp.menge)')." as v_menge, + ".$app->erp->ConcatSQL($paket_link).", + vlp.id + FROM lieferschein l + INNER JOIN lieferschein_position lp ON + lp.lieferschein = l.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 =".$lieferschein_id; +// $count = "SELECT count(DISTINCT id) FROM versandpakete v WHERE $where"; +// $groupby = "GROUP BY lp.id"; + $groupby = "GROUP BY lp.id"; + break; + } + + $erg = false; + + foreach ($erlaubtevars as $k => $v) { + if (isset($$v)) { + $erg[$v] = $$v; + } + } + return $erg; + } + + function versandpakete_menu() { + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=list", "Übersicht"); + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=lieferscheine", "Offene Lieferscheine"); + $this->app->erp->MenuEintrag("index.php?module=versandpakete&action=create", "Neu anlegen"); + $this->app->erp->MenuEintrag("index.php", "Zurück"); + } + + function versandpakete_list() { + $this->versandpakete_menu(); + $this->app->YUI->TableSearch('TAB1', 'versandpakete_list', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "versandpakete_list.tpl"); + } + + function versandpakete_lieferscheine() { + $this->versandpakete_menu(); + $this->app->YUI->TableSearch('TAB1', 'versandpakete_lieferscheine', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "versandpakete_lieferscheine.tpl"); + } + + public function versandpakete_delete() { + $id = (int) $this->app->Secure->GetGET('id'); + + $this->app->DB->Delete("UPDATE `versandpakete` SET status='".self::VERSANDPAKETE_STATUS_STORNIERT."' WHERE `id` = '{$id}'"); + $this->app->Tpl->Set('MESSAGE', "
Der Eintrag wurde storniert.
"); + + $this->versandpakete_list(); + } + + /* + * Edit versandpakete item + * If id is empty, create a new one + */ + + function versandpakete_edit() { + + $this->versandpakete_menu(); + + $id = $this->app->Secure->GetGET('id'); + + // Check if other users are editing this id + if($this->app->erp->DisableModul('versandpakete',$id)) + { + return; + } + + $this->app->Tpl->Set('ID', $id); + $input = $this->GetInput(); + $submit = $this->app->Secure->GetPOST('submit'); + + if (empty($id)) { + // New item + $id = 'NULL'; + $input['status'] = self::VERSANDPAKETE_STATUS_NEU; + $input['versender'] = $this->app->User->GetName(); + } + + switch ($submit) { + case 'speichern': + // Write to database + // Add checks here + $columns = "id, "; + $values = "$id, "; + $update = ""; + $fix = ""; + foreach ($input as $key => $value) { + $columns = $columns.$fix.$key; + $values = $values.$fix."'".$value."'"; + $update = $update.$fix.$key." = '$value'"; + + $fix = ", "; + } + $sql = "INSERT INTO versandpakete (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; + $this->app->DB->Insert($sql); + $id = $this->app->DB->GetInsertId(); + if ($id == 'NULL') { + $msg = $this->app->erp->base64_url_encode("
Das Element wurde erfolgreich angelegt.
"); + header("Location: index.php?module=versandpakete&action=edit&id=".$id."&msg=$msg"); + } else { + $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); + } + break; + } + + // Load values again from database + $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; + $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS v.id, $dropnbox, ".$this->app->erp->FormatDate('datum')." as datum, v.versand, v.nr, v.tracking, v.versender, v.gewicht, v.bemerkung, v.status, v.id FROM versandpakete v"." WHERE id=$id"); + + foreach ($result[0] as $key => $value) { + $this->app->Tpl->Set(strtoupper($key), $value); + } + + // Check for only one delivery adress + $this->app->YUI->AutoComplete("lieferschein", "lieferschein"); + $sql = "SELECT DISTINCT a.name, l.adresse FROM (".self::SQL_VERSANDPAKETE_LIEFERSCHEIN.") vpl INNER JOIN lieferschein l ON vpl.lieferschein = l.id INNER JOIN adresse a ON l.adresse = a.id WHERE vpl.versandpaket = ".$id; + $adress_check = $this->app->DB->SelectArr($sql); + if (!empty($adress_check)) { + if (count($adress_check) != 1) { + // More than one adress for the packet -> error + } else { + $this->app->Tpl->Set('ADRESSE', $adress_check[0]['name']); + $this->app->YUI->AutoComplete("lieferschein", "kundenlieferschein",0,"&adresse=".$adress_check[0]['adresse']); + } + } + + $sql = "SELECT lieferschein_ohne_pos FROM versandpakete WHERE id = ".$id; + $lieferschein_ohne_pos = $this->app->DB->SelectArr($sql); + + if (!empty($lieferschein_ohne_pos[0]['lieferschein_ohne_pos'])) { + $this->app->Tpl->Set('LIEFERSCHEIN_ADD_POS_HIDDEN', 'hidden'); + } + if ($result[0]['status'] != self::VERSANDPAKETE_STATUS_NEU) { + $this->app->Tpl->Set('LIEFERSCHEIN_ADD_POS_HIDDEN', 'hidden'); + $this->app->Tpl->Set('LIEFERSCHEIN_POS_HIDDEN', 'hidden'); + } + + $this->app->YUI->TableSearch('PAKETINHALT', 'versandpakete_paketinhalt_list', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "versandpakete_edit.tpl"); + } + + function versandpakete_add() { + + $this->versandpakete_menu(); + + $id = $this->app->Secure->GetGET('id'); + if (empty($id)) { + $lieferschein = $this->app->Secure->GetGET('lieferschein'); + if (empty($lieferschein)) { + $msg = $this->app->erp->base64_url_encode("
Kein Lieferschein angegeben.
"); + header("Location: index.php?module=versandpakete&action=list&msg=$msg"); + } else { + $lieferschein_belegnr = $this->app->erp->ReplaceLieferschein(false, $lieferschein, false); // Parameters: Target db?, value, from form? + /* Create new paket and add the given lieferschein */ + $sql = "INSERT INTO versandpakete (status) VALUES ('".self::VERSANDPAKETE_STATUS_NEU."')"; + $this->app->DB->Insert($sql); + $id = $this->app->DB->GetInsertId(); + } + } else { // $id not empty + $lieferschein_input = $this->app->Secure->GetPOST('lieferschein'); + $lieferschein = $this->app->erp->ReplaceLieferschein(true, $lieferschein_input, true); // Parameters: Target db?, value, from form? + $lieferschein_belegnr = $this->app->erp->ReplaceLieferschein(false, $lieferschein_input, true); // Parameters: Target db?, value, from form? + if (empty($lieferschein_input)) { + $msg = $this->app->erp->base64_url_encode("
Kein Lieferschein angegeben.
"); + header("Location: index.php?module=versandpakete&action=edit&id=".$id."&msg=$msg"); + } + } + + // Check if other users are editing this id + if($this->app->erp->DisableModul('versandpakete',$id)) + { + return; + } + + $artikel_input = $this->app->Secure->GetPOST('artikel'); + $artikel = $this->app->erp->ReplaceArtikel(true, $artikel_input,true); // Parameters: Target db?, value, from form? + + $menge = $this->app->Secure->GetPOST('menge'); + $this->app->Tpl->Set('ID', $id); + $input = $this->GetInput(); + $submit = $this->app->Secure->GetPOST('submit'); + + // Check Status + $sql = "SELECT status FROM versandpakete WHERE id = ".$id." LIMIT 1"; + $result = $this->app->DB->SelectArr($sql); + if ($result[0]['status'] != self::VERSANDPAKETE_STATUS_NEU) { + return; + } + + switch ($submit) { + case 'hinzufuegen': + + if ($menge <= 0) { + $msg = "
Falsche Mengenangabe.
"; + break; + } + + // Find a matching lieferschein_position + $sql = "SELECT + lp.id AS lp_id, + MAX(lp.menge) AS lp_menge, + SUM(vlp.menge) AS v_menge + FROM lieferschein_position lp + LEFT JOIN versandpaket_lieferschein_position vlp ON vlp.lieferschein_position = lp.id + WHERE lp.lieferschein = ".$lieferschein." AND lp.artikel = ".$artikel." + GROUP BY lp.id + "; + + $lieferschein_positionen = $this->app->DB->SelectArr($sql); + if (empty($lieferschein_positionen)) { + $msg = "
Keine passende Lieferscheinposition gefunden.
"; + break; + } + + $buchmenge_gesamt = 0; + + foreach($lieferschein_positionen as $lieferschein_position) { + $restmenge = $lieferschein_position['lp_menge']-$lieferschein_position['v_menge']; + $buchmenge = $menge; + if ($restmenge <= 0) { + continue; + } + if ($menge > $restmenge) { + $buchmenge = $restmenge; + $menge -= $buchmenge; + } + + $sql = "INSERT INTO versandpaket_lieferschein_position (versandpaket, lieferschein_position, menge) VALUES (".$id.",".$lieferschein_position['lp_id'].",".$buchmenge.") ON DUPLICATE KEY UPDATE menge = '".$buchmenge."'"; + + $this->app->DB->Insert($sql); + $buchmenge_gesamt += $buchmenge; + } + + if ($menge != $buchmenge_gesamt) { + $msg = "
Menge wurde angepasst auf ".$buchmenge_gesamt.".
"; + } + + break; + case 'lieferschein_komplett_hinzufuegen': + // Find all lieferschein_position + $sql = "SELECT + lp.id AS lp_id, + MAX(lp.menge) AS lp_menge, + SUM(vlp.menge) AS v_menge + FROM lieferschein_position lp + LEFT JOIN versandpaket_lieferschein_position vlp ON vlp.lieferschein_position = lp.id + WHERE lp.lieferschein = ".$lieferschein." + GROUP BY lp.id + "; + + $lieferschein_positionen = $this->app->DB->SelectArr($sql); + if (empty($lieferschein_positionen)) { + $msg = "
Keine passende Lieferscheinposition gefunden.
"; + break; + } + + foreach($lieferschein_positionen as $lieferschein_position) { + $buchmenge = $lieferschein_position['lp_menge']-$lieferschein_position['v_menge']; + $sql = "INSERT INTO versandpaket_lieferschein_position (versandpaket, lieferschein_position, menge) VALUES (".$id.",".$lieferschein_position['lp_id'].",".$buchmenge.") ON DUPLICATE KEY UPDATE menge = '".$buchmenge."'"; + $this->app->DB->Insert($sql); + } + break; + } + + $this->app->Tpl->Set('LIEFERSCHEIN', $lieferschein_belegnr); + $this->app->Tpl->Set('LIEFERSCHEIN_ID', $lieferschein); + $this->app->Tpl->Set('VERSANDPAKET_ID', $id); + + $this->app->YUI->AutoComplete("artikel", "artikelnummerbeleg",0,"&doctype=lieferschein&doctypeid=".$lieferschein); + + // For transfer to tablesearch + $this->app->User->SetParameter('versandpakete_lieferschein', $lieferschein); + $this->app->User->SetParameter('versandpakete_versandpaket', $id); + + $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->Parse('PAGE', "versandpakete_add.tpl"); + } + + + function versandpakete_minidetail() { + $id = $this->app->Secure->GetGET('id'); + $table = new EasyTable($this->app); + $table->Query("SELECT SQL_CALC_FOUND_ROWS + l.belegnr as Lieferschein, + lp.sort as Pos, + a.name_de as Artikel, + a.nummer as `Artikel-Nr.`, + ".$this->app->erp->FormatMenge('lp.menge')." as `Menge Lieferschein`, + ".$this->app->erp->FormatMenge('SUM(vlp.menge)')." as `Menge Paket` + FROM + versandpakete v + INNER JOIN versandpaket_lieferschein_position vlp ON + v.id = vlp.versandpaket + INNER JOIN lieferschein_position lp ON + vlp.lieferschein_position = lp.id + INNER JOIN lieferschein l ON + lp.lieferschein = l.id + INNER JOIN artikel a ON + lp.artikel = a.id + WHERE vlp.versandpaket = ".$id." + GROUP BY + l.belegnr, lp.id + ORDER BY l.belegnr, lp.sort + "); + $table->DisplayNew('TABLE', 'Menge Paket', 'noAction'); + $this->app->Tpl->Output('table.tpl'); + $this->app->ExitXentral(); + } + + /** + * Get all paramters from html form and save into $input + */ + public function GetInput(): array { + $input = array(); + //$input['EMAIL'] = $this->app->Secure->GetPOST('email'); + + $input['versand'] = $this->app->Secure->GetPOST('versand'); + $input['nr'] = $this->app->Secure->GetPOST('nr'); + $input['tracking'] = $this->app->Secure->GetPOST('tracking'); + $input['versender'] = $this->app->Secure->GetPOST('versender'); + $input['gewicht'] = $this->app->Secure->GetPOST('gewicht'); + $input['bemerkung'] = $this->app->Secure->GetPOST('bemerkung'); + $input['status'] = $this->app->Secure->GetPOST('status'); + + return $input; + } + + /* + * Set all fields in the page corresponding to $input + */ + function SetInput($input) { + // $this->app->Tpl->Set('EMAIL', $input['email']); + + $this->app->Tpl->Set('VERSAND', $input['versand']); + $this->app->Tpl->Set('NR', $input['nr']); + $this->app->Tpl->Set('TRACKING', $input['tracking']); + $this->app->Tpl->Set('VERSENDER', $input['versender']); + $this->app->Tpl->Set('GEWICHT', $input['gewicht']); + $this->app->Tpl->Set('BEMERKUNG', $input['bemerkung']); + $this->app->Tpl->Set('STATUS', $input['status']); + + } + +} diff --git a/www/themes/new/images/sidebar/logistik.svg b/www/themes/new/images/sidebar/logistik.svg new file mode 100644 index 00000000..75bfc36f --- /dev/null +++ b/www/themes/new/images/sidebar/logistik.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file