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 = "
";
@@ -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 @@
+
+
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]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 = "";
+ $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