add search and pagination at Customer maps, fix query
This commit is contained in:
parent
980af58eb1
commit
b6fde35eb6
@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## 2024.4.29
|
||||||
|
|
||||||
|
- Maps Pagination
|
||||||
|
- Maps Search
|
||||||
|
- Fix extend logic
|
||||||
|
- Fix logic customer recharge to not delete when customer not change the plan
|
||||||
|
|
||||||
## 2024.4.23
|
## 2024.4.23
|
||||||
|
|
||||||
- Fix Pagination Voucher
|
- Fix Pagination Voucher
|
||||||
|
@ -20,7 +20,6 @@ class Paginator
|
|||||||
}
|
}
|
||||||
$url .= '&p=';
|
$url .= '&p=';
|
||||||
$totalReq = $query->count();
|
$totalReq = $query->count();
|
||||||
$next = $page + 1;
|
|
||||||
$lastpage = ceil($totalReq / $per_page);
|
$lastpage = ceil($totalReq / $per_page);
|
||||||
$lpm1 = $lastpage - 1;
|
$lpm1 = $lastpage - 1;
|
||||||
$limit = $per_page;
|
$limit = $per_page;
|
||||||
|
@ -17,8 +17,14 @@ if (empty($action)) {
|
|||||||
|
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
case 'customer':
|
case 'customer':
|
||||||
|
if(!empty(_req('search'))){
|
||||||
$c = ORM::for_table('tbl_customers')->find_many();
|
$search = _req('search');
|
||||||
|
$query = ORM::for_table('tbl_customers')->whereRaw("coordinates != '' AND fullname LIKE '%$search%' OR username LIKE '%$search%' OR email LIKE '%$search%' OR phonenumber LIKE '%$search%'")->order_by_desc('fullname');
|
||||||
|
$c = Paginator::findMany($query, ['search' => $search], 50);
|
||||||
|
}else{
|
||||||
|
$query = ORM::for_table('tbl_customers')->where_not_equal('coordinates','');
|
||||||
|
$c = Paginator::findMany($query, ['search'=>''], 50);
|
||||||
|
}
|
||||||
$customerData = [];
|
$customerData = [];
|
||||||
|
|
||||||
foreach ($c as $customer) {
|
foreach ($c as $customer) {
|
||||||
@ -34,7 +40,7 @@ switch ($action) {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$ui->assign('search', $search);
|
||||||
$ui->assign('customers', $customerData);
|
$ui->assign('customers', $customerData);
|
||||||
$ui->assign('xheader', '<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css">');
|
$ui->assign('xheader', '<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css">');
|
||||||
$ui->assign('_title', Lang::T('Customer Geo Location Information'));
|
$ui->assign('_title', Lang::T('Customer Geo Location Information'));
|
||||||
|
@ -1,58 +1,65 @@
|
|||||||
{include file="sections/header.tpl"}
|
{include file="sections/header.tpl"}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<div class="panel panel-hovered mb20 panel-primary">
|
<div class="panel panel-hovered mb20 panel-primary">
|
||||||
<div class="panel-heading">{Lang::T('Bandwidth Plans')}</div>
|
<div class="panel-heading">{Lang::T('Bandwidth Plans')}</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
|
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<form id="site-search" method="post" action="{$_url}bandwidth/list/">
|
<form id="site-search" method="post" action="{$_url}bandwidth/list/">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon">
|
<div class="input-group-addon">
|
||||||
<span class="fa fa-search"></span>
|
<span class="fa fa-search"></span>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" name="name" class="form-control" placeholder="{Lang::T('Search by Name')}...">
|
<input type="text" name="name" class="form-control"
|
||||||
<div class="input-group-btn">
|
placeholder="{Lang::T('Search by Name')}...">
|
||||||
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
|
<div class="input-group-btn">
|
||||||
</div>
|
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<a href="{$_url}bandwidth/add" class="btn btn-primary btn-block"><i class="ion ion-android-add"> </i> {Lang::T('New Bandwidth')}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered table-condensed table-striped table_mobile">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>{Lang::T('Bandwidth Name')}</th>
|
|
||||||
<th>{Lang::T('Rate')}</th>
|
|
||||||
<th>{Lang::T('Burst')}</th>
|
|
||||||
<th>{Lang::T('Manage')}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{foreach $d as $ds}
|
|
||||||
<tr>
|
|
||||||
<td>{$ds['name_bw']}</td>
|
|
||||||
<td>{$ds['rate_down']} {$ds['rate_down_unit']} / {$ds['rate_up']} {$ds['rate_up_unit']}</td>
|
|
||||||
<td>{$ds['burst']}</td>
|
|
||||||
<td>
|
|
||||||
<a href="{$_url}bandwidth/edit/{$ds['id']}" class="btn btn-sm btn-warning">{Lang::T('Edit')}</a>
|
|
||||||
<a href="{$_url}bandwidth/delete/{$ds['id']}" id="{$ds['id']}" class="btn btn-danger btn-sm" onclick="return confirm('{Lang::T('Delete')}?')" ><i class="glyphicon glyphicon-trash"></i></a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{/foreach}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
{include file="pagination.tpl"}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<a href="{$_url}bandwidth/add" class="btn btn-primary btn-block"><i class="ion ion-android-add">
|
||||||
|
</i> {Lang::T('New Bandwidth')}</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered table-condensed table-striped table_mobile">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{Lang::T('Bandwidth Name')}</th>
|
||||||
|
<th>{Lang::T('Rate')}</th>
|
||||||
|
<th>{Lang::T('Burst')}</th>
|
||||||
|
<th>{Lang::T('Manage')}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{foreach $d as $ds}
|
||||||
|
<tr>
|
||||||
|
<td>{$ds['name_bw']}</td>
|
||||||
|
<td>{$ds['rate_down']} {$ds['rate_down_unit']} / {$ds['rate_up']} {$ds['rate_up_unit']}
|
||||||
|
</td>
|
||||||
|
<td>{$ds['burst']}</td>
|
||||||
|
<td>
|
||||||
|
<a href="{$_url}bandwidth/edit/{$ds['id']}"
|
||||||
|
class="btn btn-sm btn-warning">{Lang::T('Edit')}</a>
|
||||||
|
<a href="{$_url}bandwidth/delete/{$ds['id']}" id="{$ds['id']}"
|
||||||
|
class="btn btn-danger btn-sm"
|
||||||
|
onclick="return confirm('{Lang::T('Delete')}?')"><i
|
||||||
|
class="glyphicon glyphicon-trash"></i></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/foreach}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{include file="pagination.tpl"}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{include file="sections/footer.tpl"}
|
{include file="sections/footer.tpl"}
|
@ -1,8 +1,24 @@
|
|||||||
{include file="sections/header.tpl"}
|
{include file="sections/header.tpl"}
|
||||||
|
|
||||||
<!-- Map container div -->
|
|
||||||
|
|
||||||
<div id="map" class="well" style="width: '100%'; height: 78vh; margin: 20px auto"></div>
|
<form id="site-search" method="post" action="{$_url}map/customer/">
|
||||||
|
<input type="hidden" name="_route" value="map/customer">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">
|
||||||
|
<span class="fa fa-search"></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" name="search" class="form-control" value="{$search}"
|
||||||
|
placeholder="{Lang::T('Search')}...">
|
||||||
|
<div class="input-group-btn">
|
||||||
|
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- Map container div -->
|
||||||
|
<div id="map" class="well" style="width: '100%'; height: 70vh; margin: 20px auto"></div>
|
||||||
|
|
||||||
|
{include file="pagination.tpl"}
|
||||||
|
|
||||||
{literal}
|
{literal}
|
||||||
<script>
|
<script>
|
||||||
@ -29,31 +45,31 @@
|
|||||||
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors © <a href="https://carto.com/attributions">CARTO</a>',
|
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors © <a href="https://carto.com/attributions">CARTO</a>',
|
||||||
subdomains: 'abcd',
|
subdomains: 'abcd',
|
||||||
maxZoom: 20
|
maxZoom: 20
|
||||||
}).addTo(map);
|
}).addTo(map);
|
||||||
|
|
||||||
customers.forEach(function(customer) {
|
customers.forEach(function(customer) {
|
||||||
var name = customer.id;
|
var name = customer.id;
|
||||||
var name = customer.name;
|
var name = customer.name;
|
||||||
var info = customer.info;
|
var info = customer.info;
|
||||||
var direction = customer.direction;
|
var direction = customer.direction;
|
||||||
var coordinates = customer.coordinates;
|
var coordinates = customer.coordinates;
|
||||||
var balance = customer.balance;
|
var balance = customer.balance;
|
||||||
var address = customer.address;
|
var address = customer.address;
|
||||||
|
|
||||||
// Create a popup for the marker
|
// Create a popup for the marker
|
||||||
var popupContent = "<strong>Name</strong>: " + name + "<br>" +
|
var popupContent = "<strong>Name</strong>: " + name + "<br>" +
|
||||||
"<strong>Info</strong>: " + info + "<br>" +
|
"<strong>Info</strong>: " + info + "<br>" +
|
||||||
"<strong>Balance</strong>: " + balance + "<br>" +
|
"<strong>Balance</strong>: " + balance + "<br>" +
|
||||||
"<strong>Address</strong>: " + address + "<br>" +
|
"<strong>Address</strong>: " + address + "<br>" +
|
||||||
"<a href='{/literal}{$_url}{literal}customers/view/"+ customer.id +"'>More Info</a> • " +
|
"<a href='{/literal}{$_url}{literal}customers/view/"+ customer.id +"'>More Info</a> • " +
|
||||||
"<a href='https://www.google.com/maps/dir//" + direction + "' target='maps'>Get Direction</a><br>";
|
"<a href='https://www.google.com/maps/dir//" + direction + "' target='maps'>Get Direction</a><br>";
|
||||||
|
|
||||||
// Add marker to map
|
// Add marker to map
|
||||||
var marker = L.marker(JSON.parse(coordinates)).addTo(group);
|
var marker = L.marker(JSON.parse(coordinates)).addTo(group);
|
||||||
marker.bindTooltip(name, { permanent: true }).bindPopup(popupContent);
|
marker.bindTooltip(name, { permanent: true }).bindPopup(popupContent);
|
||||||
});
|
});
|
||||||
|
|
||||||
map.fitBounds(group.getBounds());
|
map.fitBounds(group.getBounds());
|
||||||
}
|
}
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
getLocation();
|
getLocation();
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "2024.4.23"
|
"version": "2024.4.29"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user