From a421a11104b363e37b743af4e71ad0f67e6ffaad Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Tue, 7 Sep 2021 20:10:56 +0200 Subject: [PATCH] Added Filter to Order/Index --- Layout/default/Order/Index.php | 70 +++++++++++++++ .../NetworkAddress/NetworkAddressModel.php | 1 + application/Order/OrderController.php | 88 +++++++++++++++++-- application/Order/OrderModel.php | 85 +++++++++++++++--- application/User/User.php | 24 +++++ 5 files changed, 245 insertions(+), 23 deletions(-) diff --git a/Layout/default/Order/Index.php b/Layout/default/Order/Index.php index 99334aecb..98d984db9 100644 --- a/Layout/default/Order/Index.php +++ b/Layout/default/Order/Index.php @@ -19,6 +19,74 @@
+
+
+

Filter

+ +
"> +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + +
+
+
+ + ">Filter zurücksetzen +
+
+
+ +
+
+ +
@@ -30,6 +98,7 @@ + @@ -41,6 +110,7 @@ +
Kunde Adresse
id?> terminations) && count($order->terminations)): ?> terminations[0]->status->code >= TT_TERMSTATUS_CONNECTED): ?> diff --git a/application/NetworkAddress/NetworkAddressModel.php b/application/NetworkAddress/NetworkAddressModel.php index 753bce567..c5e7652cc 100644 --- a/application/NetworkAddress/NetworkAddressModel.php +++ b/application/NetworkAddress/NetworkAddressModel.php @@ -84,6 +84,7 @@ class NetworkAddressModel { $db = FronkDB::singleton(); $where = self::getSqlFilter($filter); + mfLoghandler::singleton()->debug($where); $res = $db->select("NetworkAddress", "*", "$where ORDER BY `type`"); if($db->num_rows($res)) { while($data = $db->fetch_object($res)) { diff --git a/application/Order/OrderController.php b/application/Order/OrderController.php index e9e23dbca..aa63ffd72 100644 --- a/application/Order/OrderController.php +++ b/application/Order/OrderController.php @@ -17,31 +17,101 @@ class OrderController extends mfBaseController { protected function indexAction() { $this->layout()->setTemplate("Order/Index"); //$this->layout()->set("orders", OrderModel::getAll()); + $filter = []; + + $this->layout->set("filter", $this->request->filter); + if($this->request->filter) { + $filter = $this->getPreparedFilter($this->request->filter); + } + $my_networks = []; if($this->me->is("Admin")) { - $this->layout()->set("orders", OrderModel::getAll()); + $my_networks = NetworkModel::getAll(); + $this->layout()->set("mynetworks", $my_networks); + + if(!count($filter)) { + $this->layout()->set("orders", OrderModel::getAll()); + return true; + } + + if($filter['network_id']) { + //$this->layout()->set("orders", OrderModel::search(['network_id' => $filter['network_id']])); + $my_networks[] = new Network($filter['network_id']); + } } else { - $orders = []; - //var_dump($this->me->my_networks);exit; - foreach($this->me->my_networks as $network) { - foreach(OrderModel::byNetwork($network->id) as $order) { - if(!array_key_exists($order->id, $orders)) { - $orders[$order->id] = $order; + $my_networks = $this->me->myNetworks("salespartner"); + if(array_key_exists("network_id", $filter)) { + $use_filter_network = false; + + foreach($my_networks as $mn) { + if($mn->id == $filter['network_id']) { + $use_filter_network = true; + continue; } } + + if($use_filter_network) { + $my_networks = []; + $my_networks[] = new Network($filter['network_id']); + } + + } + $this->layout()->set("mynetworks", $this->me->my_networks); + } + unset($filter['network_id']); + + // get Orders in my networks + + $orders = []; + //var_dump($this->me->my_networks);exit; + foreach($my_networks as $network) { + $order_search = [ + 'network_id' => $network->id + ]; + + if(is_array($filter) && count($filter)) { + foreach($filter as $name => $value) { + $order_search[$name] = $value; + } } + foreach(OrderModel::search($order_search) as $order) { + if(!array_key_exists($order->id, $orders)) { + $orders[$order->id] = $order; + } + } + } + + if(!count($filter)) { foreach(OrderModel::search(['create_by' => $this->me->id]) as $order) { if(!array_key_exists($order->id, $orders)) { $orders[$order->id] = $order; } } - - $this->layout()->set("orders", $orders); } + + $this->layout()->set("orders", $orders); } + private function getPreparedFilter($filter) { + $new_filter = []; + + if(is_numeric($filter['networksection_id']) && $filter['networksection_id']) { + $section = new Networksection($filter['networksection_id']); + if($section->id) { + $filter['network_id'] = $section->network_id; + } + } + + foreach($filter as $name => $value) { + $new_filter[$name] = $value; + } + + return $new_filter; + } + + protected function addAction() { // TODO: filter by network permissions $this->layout()->setTemplate("Order/Form"); diff --git a/application/Order/OrderModel.php b/application/Order/OrderModel.php index b59f85d40..22fa7321c 100644 --- a/application/Order/OrderModel.php +++ b/application/Order/OrderModel.php @@ -91,6 +91,19 @@ class OrderModel { return null; } + public static function byProduct($filter) { + + + + $sql = "SELECT Order.id as order_id, * FROM `Order` + LEFT JOIN OrderProduct ON (OrderProduct.order_id = `Order`.id) + LEFT JOIN Product ON (Product.id = OrderProduct.product_id) + WHERE + GROUP BY `Order`.id + + "; + } + public static function byNetwork($network_id) { if(!is_numeric($network_id) || !$network_id) { return false; @@ -124,31 +137,28 @@ class OrderModel { $db = FronkDB::singleton(); $where = self::getSqlFilter($filter); - $have = []; - $sql = "SELECT `Order`.* FROM `Order`, OrderProduct + /*$sql = "SELECT `Order`.* FROM `Order`, OrderProduct WHERE OrderProduct.order_id = `Order`.id AND $where GROUP BY OrderProduct.order_id ORDER BY id - "; + ";*/ + $sql = "SELECT `Order`.id as order_id, `Order`.* FROM `Order` + LEFT JOIN OrderProduct ON (OrderProduct.order_id = `Order`.id) + LEFT JOIN Product ON (Product.id = OrderProduct.product_id) + LEFT JOIN Termination ON (Termination.id = OrderProduct.termination_id) + LEFT JOIN Building ON (Building.id = Termination.building_id) + WHERE $where + GROUP BY `Order`.id"; + //var_dump($sql);exit; + mfLoghandler::singleton()->debug($sql); $res = $db->query($sql); if($db->num_rows($res)) { while($data = $db->fetch_object($res)) { $items[] = new Order($data); - $have[] = $data->id; } } - if(count($have)) { - $res = $db->select("Order", "*", "$where AND id NOT IN (".implode(",", $have).") ORDER BY id"); - } else { - $res = $db->select("Order", "*", "$where ORDER BY id"); - } - if($db->num_rows($res)) { - while($data = $db->fetch_object($res)) { - $items[] = new Order($data); - } - } return $items; } @@ -178,7 +188,54 @@ class OrderModel { } } + if(array_key_exists("productgroup_id", $filter)) { + $productgroup_id = $filter['productgroup_id']; + if(is_numeric($productgroup_id)) { + $where .= " AND Product.productgroup_id=$productgroup_id"; + } + } + if(array_key_exists("termination_id", $filter)) { + $termination_id = $filter['termination_id']; + if(is_numeric($termination_id)) { + $where .= " AND Product.termination_id=$termination_id"; + } + } + + if(array_key_exists("network_id", $filter)) { + $network_id = $filter['network_id']; + if(is_numeric($network_id)) { + $where .= " AND Building.network_id=$network_id"; + } + } + + if(array_key_exists("building_networksection_id", $filter)) { + $networksection_id = $filter['building_networksection_id']; + if(is_numeric($networksection_id)) { + $where .= " AND Building.networksection_id=$networksection_id"; + } + } + + if(array_key_exists("building_code", $filter)) { + $code = FronkDB::singleton()->escape($filter['building_code']); + if($code) { + $where .= " AND Building.code LIKE '%$code%'"; + } + } + + if(array_key_exists("building_status_id", $filter)) { + $building_status_id = $filter['building_status_id']; + if(is_numeric($building_status_id)) { + $where .= " AND Building.status_id=$building_status_id"; + } + } + + if(array_key_exists("building_street", $filter)) { + $street = FronkDB::singleton()->escape($filter['building_street']); + if($street) { + $where .= " AND Building.street LIKE '%$street%'"; + } + } //var_dump($filter, $where);exit; return $where; diff --git a/application/User/User.php b/application/User/User.php index f0fdfe6cc..ea280c4d7 100644 --- a/application/User/User.php +++ b/application/User/User.php @@ -170,6 +170,30 @@ class User extends mfBaseModel { return $this->$name; } + public function myNetworks($type) { + $typenets = []; + $my_networks = $this->getProperty("my_networks"); + + //var_dump($my_networks);exit; + + foreach($my_networks as $net) { + //var_dump($net);exit; + $address_id = $this->address_id; + if($this->getProperty("address")->parent_id) { + $address_id = $this->getProperty("address")->parent_id; + } + $found = NetworkaddressModel::search(['network_id' => $net->id, "addresstype" => [$type], 'address_id' => $address_id]); + //var_dump($found);exit; + if($found) { + $this->log->debug("allowed net: ".$net->id); + $typenets[] = $net; + } + + } + + //var_dump($typenets);exit; + return $typenets; + } private function getMyNetworks() { if(!$this->id) {