Added Filter to Order/Index
This commit is contained in:
@@ -19,6 +19,74 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body mb-3">
|
||||
<h4 class="header-title mb-3">Filter</h4>
|
||||
|
||||
<form method="get" action="<?=self::getUrl("Order")?>">
|
||||
<div class="row">
|
||||
<div class="col-1">
|
||||
<label class="form-label" for="filter_network_id">Netzgebiet</label>
|
||||
<select name="filter[network_id]" id="filter_network_id" class="form-control">
|
||||
<option></option>
|
||||
<?php foreach($mynetworks as $fnet): ?>
|
||||
<option value="<?=$fnet->id?>" <?=($filter['network_id'] == $fnet->id) ? "selected='selected'" : ""?>><?=$fnet->name?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-1">
|
||||
<label class="form-label" for="filter_building_networksection_id">Bauabschnitt</label>
|
||||
<select name="filter[building_networksection_id]" id="filter_building_networksection_id" class="form-control">
|
||||
<option></option>
|
||||
<?php foreach($mynetworks as $fnet): ?>
|
||||
<?php if(is_array($fnet->sections) && count($fnet->sections)): ?>
|
||||
<optgroup label="<?=$fnet->name?>">
|
||||
<?php foreach($fnet->sections as $section): ?>
|
||||
<option value="<?=$section->id?>" <?=($filter['building_networksection_id'] == $section->id) ? "selected='selected'" : ""?>><?=$section->name?></option>
|
||||
<?php endforeach; ?>
|
||||
</optgroup>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-2">
|
||||
<label class="form-label" for="filter_status_id">Objektstatus</label>
|
||||
<select name="filter[building_status_id]" id="filter_building_status_id" class="form-control">
|
||||
<option></option>
|
||||
<?php foreach(BuildingstatusModel::getAll() as $status): ?>
|
||||
<option value="<?=$status->id?>" <?=($filter['building_status_id'] == $status->id) ? "selected='selected'" : ""?>><?=$status->code?> - <?=__($status->name."-b")?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-1">
|
||||
<label class="form-label" for="filter_building_code">Objekt ID</label>
|
||||
<input type="text" class="form-control" name="filter[building_code]" id="filter_building_code" value="<?=$filter['building_code']?>" />
|
||||
</div>
|
||||
|
||||
<div class="col-2">
|
||||
<label class="form-label" for="filter_building_street">Straße</label>
|
||||
<input type="text" class="form-control" name="filter[building_street]" id="filter_building_street" value="<?=$filter['building_street']?>" />
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="row mt-2">
|
||||
<div class="col">
|
||||
<button type="submit" class="btn btn-primary">Filter anwenden</button>
|
||||
<a class="btn btn-secondary" href="<?=self::getUrl("Order")?>">Filter zurücksetzen</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body mb-3">
|
||||
<div class="float-left">
|
||||
@@ -30,6 +98,7 @@
|
||||
|
||||
<table class="table table-striped table-hover">
|
||||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th>Kunde</th>
|
||||
<th>Adresse</th>
|
||||
@@ -41,6 +110,7 @@
|
||||
</tr>
|
||||
<?php foreach($orders as $order): ?>
|
||||
<tr>
|
||||
<td><?=$order->id?></td>
|
||||
<td>
|
||||
<?php if(is_array($order->terminations) && count($order->terminations)): ?>
|
||||
<?php if($order->terminations[0]->status->code >= TT_TERMSTATUS_CONNECTED): ?>
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user