Added Filter to Order/Index

This commit is contained in:
Frank Schubert
2021-09-07 20:10:56 +02:00
parent 9a70044d7b
commit a421a11104
5 changed files with 245 additions and 23 deletions
+79 -9
View File
@@ -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");
+71 -14
View File
@@ -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;