Added pagination to Pipework and Linework

This commit is contained in:
Frank Schubert
2021-09-14 20:42:12 +02:00
parent bd8f1609e6
commit 4809a5d6f1
8 changed files with 264 additions and 84 deletions

View File

@@ -1,3 +1,6 @@
<?php
//var_dump($pagination);exit;
?>
<?php include(realpath(dirname(__FILE__)."/../")."/header.php"); ?>
<?php $wftype = "term"; ?>
@@ -98,14 +101,42 @@
<div class="card">
<div class="card-body mb-3">
<h4 class="header-title mb-3">Auftragsliste nach Netzgebiet</h4>
<h4 class="header-title">Auftragsliste nach Netzgebiet</h4>
<?php if($pagination['maxItems'] > $pagination['count']): ?>
<nav>
<ul class="pagination justify-content-center mb-1">
<li class="page-item <?=($pagination['start'] - $pagination['count'] < 0) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework")?>" tabindex="-1">Erste</a>
</li>
<li class="page-item <?=($pagination['start'] - $pagination['count'] < 0) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => $pagination['start'] - $pagination['count'], "filter" => $filter])?>" tabindex="-1">Zurück</a>
</li>
<?php for($i = 0; $i < ($pagination['maxItems'] / $pagination['count']); $i++): ?>
<li class="page-item <?=($pagination['start'] == $i*$pagination['count']) ? "disabled font-weight-bold" : ""?>"><a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => $i*$pagination['count'], "filter" => $filter])?>"><?=$i+1?></a></li>
<?php endfor; ?>
<li class="page-item <?=($pagination['maxItems'] / ($pagination['start'] + $pagination['count']) < 1) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => $pagination['start'] + $pagination['count'], "filter" => $filter])?>">Vor</a>
</li>
<li class="page-item <?=($pagination['maxItems'] / ($pagination['start'] + $pagination['count']) < 1) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => ($pagination['maxItems'] - $pagination['maxItems'] % $pagination['count']), "filter" => $filter])?>">Letzte</a>
</li>
</ul>
</nav>
<?php endif; ?>
<div class="pagination justify-content-center">
<?php if($pagination['maxItems']): ?>
Leitungsbauaufträge <?=$pagination['start']+1?> bis <?=($pagination['start'] + $pagination['count'] > $pagination['maxItems']) ? $pagination['maxItems'] : $pagination['start'] + $pagination['count']?> von <?=$pagination['maxItems']?>
<?php else: ?>
Keine Leitungsbauaufträge gefunden
<?php endif; ?>
</div>
<?php if(is_array($networks) && count($networks)): ?>
<?php foreach($networks as $networkname => $terminations): ?>
<?php if(!count($terminations)) continue; ?>
<h4><?=$networkname?></h4>
<table class="table workflow-table">
<table class="table workflow-table mb-2">
<?php $bcount = 0; foreach($terminations as $term): ?>
<?php
$rowspan = 1;
@@ -217,6 +248,36 @@
<?php $bcount++; endforeach; ?>
</table>
<?php endforeach; ?>
<?php if($pagination['maxItems'] > $pagination['count']): ?>
<div class="pagination justify-content-center mb-1">
<?php if($pagination['maxItems']): ?>
Leitungsbauaufträge <?=$pagination['start']+1?> bis <?=($pagination['start'] + $pagination['count'] > $pagination['maxItems']) ? $pagination['maxItems'] : $pagination['start'] + $pagination['count']?> von <?=$pagination['maxItems']?>
<?php else: ?>
Keine Leitungsbauaufträge gefunden
<?php endif; ?>
</div>
<nav>
<ul class="pagination justify-content-center">
<li class="page-item <?=($pagination['start'] - $pagination['count'] < 0) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework")?>" tabindex="-1">Erste</a>
</li>
<li class="page-item <?=($pagination['start'] - $pagination['count'] < 0) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => $pagination['start'] - $pagination['count'], "filter" => $filter])?>" tabindex="-1">Zurück</a>
</li>
<?php for($i = 0; $i < ($pagination['maxItems'] / $pagination['count']); $i++): ?>
<li class="page-item <?=($pagination['start'] == $i*$pagination['count']) ? "disabled font-weight-bold" : ""?>"><a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => $i*$pagination['count'], "filter" => $filter])?>"><?=$i+1?></a></li>
<?php endfor; ?>
<li class="page-item <?=($pagination['maxItems'] / ($pagination['start'] + $pagination['count']) < 1) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => $pagination['start'] + $pagination['count'], "filter" => $filter])?>">Vor</a>
</li>
<li class="page-item <?=($pagination['maxItems'] / ($pagination['start'] + $pagination['count']) < 1) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl("Linework","Index",['s' => ($pagination['maxItems'] - $pagination['maxItems'] % $pagination['count']), "filter" => $filter])?>">Letzte</a>
</li>
</ul>
</nav>
<?php endif; ?>
<?php else: ?>
<i>Keine Bauaufträge gefunden</i>
<?php endif; ?>

View File

@@ -100,6 +100,34 @@
<div class="card-body mb-3">
<h4 class="header-title mb-3">Auftragsliste nach Netzgebiet</h4>
<?php if($pagination['maxItems'] > $pagination['count']): ?>
<nav>
<ul class="pagination justify-content-center mb-1">
<li class="page-item <?=($pagination['start'] - $pagination['count'] < 0) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl($Mod)?>" tabindex="-1">Erste</a>
</li>
<li class="page-item <?=($pagination['start'] - $pagination['count'] < 0) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl($Mod,"Index",['s' => $pagination['start'] - $pagination['count'], "filter" => $filter])?>" tabindex="-1">Zurück</a>
</li>
<?php for($i = 0; $i < ($pagination['maxItems'] / $pagination['count']); $i++): ?>
<li class="page-item <?=($pagination['start'] == $i*$pagination['count']) ? "disabled font-weight-bold" : ""?>"><a class="page-link" href="<?=$this->getUrl($Mod,"Index",['s' => $i*$pagination['count'], "filter" => $filter])?>"><?=$i+1?></a></li>
<?php endfor; ?>
<li class="page-item <?=($pagination['maxItems'] / ($pagination['start'] + $pagination['count']) < 1) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl($Mod,"Index",['s' => $pagination['start'] + $pagination['count'], "filter" => $filter])?>">Vor</a>
</li>
<li class="page-item <?=($pagination['maxItems'] / ($pagination['start'] + $pagination['count']) < 1) ? "disabled" : ""?>">
<a class="page-link" href="<?=$this->getUrl($Mod,"Index",['s' => ($pagination['maxItems'] - $pagination['maxItems'] % $pagination['count']), "filter" => $filter])?>">Letzte</a>
</li>
</ul>
</nav>
<?php endif; ?>
<div class="pagination justify-content-center">
<?php if($pagination['maxItems']): ?>
Leitungsbauaufträge <?=$pagination['start']+1?> bis <?=($pagination['start'] + $pagination['count'] > $pagination['maxItems']) ? $pagination['maxItems'] : $pagination['start'] + $pagination['count']?> von <?=$pagination['maxItems']?>
<?php else: ?>
Keine Leitungsbauaufträge gefunden
<?php endif; ?>
</div>
<?php if(is_array($networks) && count($networks)): ?>
<?php foreach($networks as $networkname => $buildings): ?>
@@ -140,13 +168,13 @@
<?php $i = 0; foreach($building->workflowitems as $item): ?>
<?php if($i==0): ?>
<?php if($item->type == "delimiter"): ?>
<tr class="workflow-header"><th colspan='<?=$building_wf_colspan?>'><?=$item->label?></th></tr><tr>
<tr class="workflow-header"><th colspan='<?=$wfColspan?>'><?=$item->label?></th></tr><tr>
<?php else: ?>
<tr>
<?php endif; ?>
<?php else: ?>
<?php if($item->type == "delimiter"): ?>
</tr><tr class="workflow-header"><th colspan='<?=$building_wf_colspan?>'><?=$item->label?></th></tr><tr>
</tr><tr class="workflow-header"><th colspan='<?=$wfColspan?>'><?=$item->label?></th></tr><tr>
<?php else: ?>
<?php include(realpath(dirname(__FILE__)."/../")."/Workflow/form.php"); ?>
<?php endif; ?>
@@ -158,7 +186,7 @@
<td colspan="3">
<label class="form-label">Kommentar</label> <textarea class="form-control" style="height:100%" form="wf-building-<?=$building->id?>" name="workflow_comment" id="workflow_comment_<?=$building->id?>"><?=$building->workflow_comment?></textarea>
</td>
<td colspan="<?=$building_wf_colspan - 3?>">
<td colspan="<?=$wfColspan - 3?>">
<h5>Dokumente</h5>
<table class="table-sm">
<?php $i=0; foreach($building->files as $file): ?>

View File

@@ -1,4 +1,4 @@
<td class="workflow-item wfitem-<?=$item->type?> wfitem-width-<?=$item->width?>" <?=($item->width > 1) ? "colspan='".$item->width."'" : ""?> style="width: <?=$this->commaToDot(round(100 / $termination_wf_colspan, 2) * $item->width)?>%">
<td class="workflow-item wfitem-<?=$item->type?> wfitem-width-<?=$item->width?>" <?=($item->width > 1) ? "colspan='".$item->width."'" : ""?> style="width: <?=$this->commaToDot(round(100 / $wfColspan, 2) * $item->width)?>%">
<?php if($item->type != "gps"): ?>
<label class="form-label" for="wfitem_<?=$item->name?>_<?=$$wftype->id?>">
<?=($item->label) ? $item->label : "&nbsp;"?>

View File

@@ -80,7 +80,26 @@ class BuildingModel {
}
public static function search($filter) {
public static function count($filter) {
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$sql = "SELECT COUNT(*) as cnt FROM Building
LEFT JOIN Buildingtype ON (Buildingtype.id = Building.type_id)
LEFT JOIN Buildingstatus ON (Buildingstatus.id = Building.status_id)
WHERE $where
";
$res = $db->query($sql);
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
return $data->cnt;
}
return 0;
}
public static function search($filter, $limit = false) {
$items = [];
$db = FronkDB::singleton();
@@ -89,7 +108,16 @@ class BuildingModel {
LEFT JOIN Buildingtype ON (Buildingtype.id = Building.type_id)
LEFT JOIN Buildingstatus ON (Buildingstatus.id = Building.status_id)
WHERE $where
ORDER BY network_id,pop_id,street,zip,city";
ORDER BY network_id, pop_id, street, zip, city";
if(is_array($limit) && count($limit)) {
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
} elseif(is_numeric($count)) {
$sql .= " LIMIT ".$limit['count'];
}
}
$res = $db->query($sql);
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
@@ -107,6 +135,8 @@ class BuildingModel {
$network_id = $filter['network_id'];
if(is_numeric($network_id)) {
$where .= " AND Building.network_id=$network_id";
} elseif(is_array($network_id) && count($network_id)) {
$where .= " AND Building.network_id IN (". implode(",", $network_id).")";
}
}

View File

@@ -17,13 +17,21 @@ class LineworkController extends mfBaseController {
protected function indexAction() {
$this->layout()->setTemplate("Linework/Index");
$filter = [];
$this->layout->set("filter", $this->request->filter);
if($this->request->filter) {
$filter = $this->getPreparedFilter($this->request->filter);
}
// pagination defaults
$pagination = [];
$pagination['start'] = 0;
$pagination['count'] = 5;
$pagination['maxItems'] = 0;
if(is_numeric($this->request->s)) {
$pagination['start'] = intval($this->request->s);
}
//var_dump($pagination);exit;
$my_networks = [];
// get allowed networks
@@ -56,40 +64,43 @@ class LineworkController extends mfBaseController {
unset($filter['network_id']);
// get Buildings in networks
$networks = [];
$my_network_ids = [];
$terminations = [];
foreach($my_networks as $network) {
if(!array_key_exists($network->name, $networks)) {
$networks[$network->name] = [];
}
$termination_search = [
"network_id" => $network->id,
"workflow_finished" => 0
];
$my_network_ids[] = $network->id;
}
$termination_search = [
"network_id" => $my_network_ids,
"workflow_finished" => 0
];
if(is_array($filter) && count($filter)) {
foreach($filter as $name => $value) {
$termination_search[$name] = $value;
}
//$building_search = array_merge($building_search, $filter);
if(is_array($filter) && count($filter)) {
foreach($filter as $name => $value) {
$termination_search[$name] = $value;
}
if($this->me->is("lineworker") && !$this->me->is(["Admin","pipeplanner", "lineplanner","netowner"])) {
$this->log->debug("is lineworker");
$termination_search["lineworker_id"] = ($this->me->address->parent_id) ? $this->me->address->parent_id : $this->me->address_id;
if(!count($filter)) {
$termination_search["status_id"] = 3;
}
}
if($this->me->is("lineworker") && !$this->me->is(["Admin","pipeplanner", "lineplanner","netowner"])) {
$this->log->debug("is lineworker");
$termination_search["lineworker_id"] = ($this->me->address->parent_id) ? $this->me->address->parent_id : $this->me->address_id;
if(!count($filter)) {
$termination_search["status_id"] = 3;
}
foreach(TerminationModel::search($termination_search) as $b) {
if(!array_key_exists($b->id, $networks[$network->name])) {
$networks[$network->name][$b->id] = $b;
}
}
$networks = [];
$pagination['maxItems'] = TerminationModel::count($termination_search);
foreach(TerminationModel::search($termination_search, $pagination) as $term) {
if(!array_key_exists($term->network->name, $networks)) {
$networks[$term->network->name] = [];
}
if(!array_key_exists($term->id, $networks[$term->network->name])) {
$networks[$term->network->name][$term->id] = $term;
}
}
@@ -112,12 +123,11 @@ class LineworkController extends mfBaseController {
$i += ($wfitem->width) ? $wfitem->width : 1;
}
}
//var_dump($item_colspan);exit;
$this->layout()->set("termination_wf_colspan", $item_colspan);
$this->layout()->set("networks", $networks);
//var_dump(reset(reset($networks))->workflowitems);exit;
$this->layout()->set("wfColspan", $item_colspan);
$this->layout()->set("networks", $networks);
$this->layout()->set("pagination", $pagination);
}
private function getPreparedFilter($filter) {

View File

@@ -18,11 +18,20 @@ class PipeworkController extends mfBaseController {
$this->layout()->setTemplate("Pipework/Index");
$this->layout->set("filter", $this->request->filter);
if($this->request->filter) {
$filter = $this->getPreparedFilter($this->request->filter);
}
// pagination defaults
$pagination = [];
$pagination['start'] = 0;
$pagination['count'] = 5;
$pagination['maxItems'] = 0;
if(is_numeric($this->request->s)) {
$pagination['start'] = intval($this->request->s);
}
$my_networks = [];
// get allowed networks
@@ -55,40 +64,43 @@ class PipeworkController extends mfBaseController {
unset($filter['network_id']);
// get Buildings in networks
$my_network_ids = [];
$networks = [];
foreach($my_networks as $network) {
if(!array_key_exists($network->name, $networks)) {
$networks[$network->name] = [];
}
$my_network_ids[] = $network->id;
}
$building_search = [
"network_id" => $network->id,
"workflow_finished" => 0
];
$building_search = [
"network_id" => $my_network_ids,
"workflow_finished" => 0
];
if(is_array($filter) && count($filter)) {
foreach($filter as $name => $value) {
$building_search[$name] = $value;
}
//$building_search = array_merge($building_search, $filter);
if(is_array($filter) && count($filter)) {
foreach($filter as $name => $value) {
$building_search[$name] = $value;
}
if($this->me->is("pipeworker") && !$this->me->is(["Admin","pipeplanner","netowner"])) {
$this->log->debug("is pipeworker");
$building_search["pipeworker_id"] = ($this->me->address->parent_id) ? $this->me->address->parent_id : $this->me->address_id;
if(!count($filter)) {
$building_search["status_id"] = 3;
}
//$building_search = array_merge($building_search, $filter);
}
if($this->me->is("pipeworker") && !$this->me->is(["Admin","pipeplanner","netowner"])) {
$this->log->debug("is pipeworker");
$building_search["pipeworker_id"] = ($this->me->address->parent_id) ? $this->me->address->parent_id : $this->me->address_id;
if(!count($filter)) {
$building_search["status_id"] = 3;
}
foreach(BuildingModel::search($building_search) as $b) {
if(!array_key_exists($b->id, $networks[$network->name])) {
$networks[$network->name][$b->id] = $b;
}
}
$pagination['maxItems'] = BuildingModel::count($building_search);
foreach(BuildingModel::search($building_search, $pagination) as $b) {
if(!array_key_exists($b->network->name, $networks)) {
$networks[$b->network->name] = [];
}
if(!array_key_exists($b->id, $networks[$b->network->name])) {
$networks[$b->network->name][$b->id] = $b;
}
}
@@ -108,8 +120,9 @@ class PipeworkController extends mfBaseController {
$i++;
}
//var_dump($item_colspan);exit;
$this->layout()->set("building_wf_colspan", $item_colspan);
$this->layout()->set("wfColspan", $item_colspan);
$this->layout()->set("networks", $networks);
$this->layout()->set("pagination", $pagination);
//var_dump(reset(reset($networks))->workflowitems);exit;

View File

@@ -73,7 +73,25 @@ class TerminationModel {
}
public static function search($filter) {
public static function count($filter) {
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$sql = "SELECT COUNT(*) as cnt FROM Termination
LEFT JOIN Building ON (Building.id = Termination.building_id)
LEFT JOIN Terminationstatus ON (Terminationstatus.id = Termination.status_id)
WHERE $where
";
$res = $db->query($sql);
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
return $data->cnt;
}
return 0;
}
public static function search($filter, $limit = false) {
$items = [];
$db = FronkDB::singleton();
@@ -82,9 +100,17 @@ class TerminationModel {
LEFT JOIN Building ON (Building.id = Termination.building_id)
LEFT JOIN Terminationstatus ON (Terminationstatus.id = Termination.status_id)
WHERE $where
ORDER BY code
ORDER BY Building.network_id, code
";
if(is_array($limit) && count($limit)) {
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
} elseif(is_numeric($count)) {
$sql .= " LIMIT ".$limit['count'];
}
}
$res = $db->query($sql);
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {

View File

@@ -63,7 +63,6 @@
border-top: none;
min-width: 138px;
max-width: 138px;
}
.workflow-table tr {
@@ -100,14 +99,27 @@
}
@media (min-width: 2560px) {
.workflow-table .workflow-item {
min-width: 138px;
width: auto;
}
.workflow-table .workflow-item select {
min-width: 100%;
width: 100%;
}
.workflow-item input[type=text] {
min-width: 100%;
width: 100%;
}
}
.pagination a {
color: #00acc1;
}