feat: add batch name filter to voucher management and enhance search functionality in the UI

This commit is contained in:
Focuslinkstech 2025-04-20 19:35:25 +01:00
parent c9b67c5480
commit abc847cf55
2 changed files with 97 additions and 15 deletions

View file

@ -438,6 +438,9 @@ switch ($action) {
$customer = _req('customer'); $customer = _req('customer');
$plan = _req('plan'); $plan = _req('plan');
$status = _req('status'); $status = _req('status');
$batch_name = _req('batch_name');
$ui->assign('batch_name', $batch_name);
$ui->assign('router', $router); $ui->assign('router', $router);
$ui->assign('customer', $customer); $ui->assign('customer', $customer);
$ui->assign('status', $status); $ui->assign('status', $status);
@ -463,6 +466,10 @@ switch ($action) {
$query->where('tbl_voucher.user', $customer); $query->where('tbl_voucher.user', $customer);
} }
if (!empty($batch_name)) {
$query->where('tbl_voucher.batch_name', $batch_name);
}
$append_url = "&search=" . urlencode($search) . "&router=" . urlencode($router) . "&customer=" . urlencode($customer) . "&plan=" . urlencode($plan) . "&status=" . urlencode($status); $append_url = "&search=" . urlencode($search) . "&router=" . urlencode($router) . "&customer=" . urlencode($customer) . "&plan=" . urlencode($plan) . "&status=" . urlencode($status);
// option customers // option customers
@ -478,7 +485,7 @@ switch ($action) {
if ($search != '') { if ($search != '') {
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
$query->where_like('tbl_voucher.code', '%' . $search . '%'); $query->where_like('tbl_voucher.code', "%$search%");
} else if ($admin['user_type'] == 'Agent') { } else if ($admin['user_type'] == 'Agent') {
$sales = []; $sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray(); $sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
@ -487,7 +494,7 @@ switch ($action) {
} }
$sales[] = $admin['id']; $sales[] = $admin['id'];
$query->where_in('generated_by', $sales) $query->where_in('generated_by', $sales)
->where_like('tbl_voucher.code', '%' . $search . '%'); ->where_like('tbl_voucher.code', "%$search%");
} }
} else { } else {
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
@ -501,7 +508,7 @@ switch ($action) {
$query->where_in('generated_by', $sales); $query->where_in('generated_by', $sales);
} }
} }
$d = $query->find_many(); $d = Paginator::findMany($query, ["search" => $search], 10, $append_url);
// extract admin // extract admin
$admins = []; $admins = [];
foreach ($d as $k) { foreach ($d as $k) {
@ -525,7 +532,13 @@ switch ($action) {
} }
} }
$ui->assign('xheader', '<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.3/css/jquery.dataTables.min.css">'); $batches = ORM::for_table('tbl_voucher')
->select('batch_name')
->distinct()
->where_not_equal('batch_name', '')
->order_by_desc('created_at')
->find_many();
$ui->assign('batches', $batches);
$ui->assign('admins', $admins); $ui->assign('admins', $admins);
$ui->assign('d', $d); $ui->assign('d', $d);
$ui->assign('search', $search); $ui->assign('search', $search);

View file

@ -14,6 +14,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="panel panel-hovered mb20 panel-primary"> <div class="panel panel-hovered mb20 panel-primary">
<div class="panel-heading"> <div class="panel-heading">
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])} {if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
@ -26,7 +27,84 @@
{/if} {/if}
&nbsp; &nbsp;
</div> </div>
<div class="panel-body" style="margin-left: 10px;">
<form id="voucher-search-form" method="post" action="{Text::url('')}plan/voucher/" class="form-horizontal">
<div class="row">
<div class="col-md-2 col-sm-6 col-xs-12 form-group">
<div class="input-group">
<input type="text" name="search" class="form-control" placeholder="{Lang::T('Code Voucher')}"
value="{$search}" autocomplete="off" data-toggle="tooltip" title="{Lang::T('Search by voucher code')}">
</div>
</div>
<div class="col-md-2 col-sm-6 col-xs-12 form-group">
<div class="input-group">
<select class="form-control select2" id="router" name="router" data-placeholder="{Lang::T('Location')}">
<option value=""></option>
{foreach $routers as $r}
<option value="{$r}" {if $router eq $r}selected{/if}>{$r}</option>
{/foreach}
</select>
</div>
</div>
<div class="col-md-2 col-sm-6 col-xs-12 form-group">
<div class="input-group">
<select class="form-control select2" id="batch_name" name="batch_name" data-placeholder="{Lang::T('Batch')}">
<option value=""></option>
{foreach $batches as $batch}
<option value="{$batch.batch_name}" {if $batch_name eq $batch.batch_name}selected{/if}>
{$batch.batch_name}
</option>
{/foreach}
</select>
</div>
</div>
<div class="col-md-2 col-sm-6 col-xs-12 form-group">
<div class="input-group">
<select class="form-control select2" id="plan" name="plan" data-placeholder="{Lang::T('Plan Name')}">
<option value=""></option>
{foreach $plans as $p}
<option value="{$p['id']}" {if $plan eq $p['id']}selected{/if}>{$p['name_plan']}</option>
{/foreach}
</select>
</div>
</div>
<div class="col-md-2 col-sm-6 col-xs-12 form-group">
<div class="input-group">
<select class="form-control" id="status" name="status">
<option value="">{Lang::T('Status')}</option>
<option value="1" {if $status eq 1}selected{/if}>{Lang::T('Used')}</option>
<option value="0" {if $status eq 0}selected{/if}>{Lang::T('Not Used')}</option>
</select>
</div>
</div>
<div class="col-md-2 col-sm-6 col-xs-12 form-group">
<div class="input-group">
<select class="form-control select2" id="customer" name="customer" data-placeholder="{Lang::T('Customer')}">
<option value=""></option>
{foreach $customers as $c}
<option value="{$c['user']}" {if $customer eq $c['user']}selected{/if}>{$c['user']}</option>
{/foreach}
</select>
</div>
</div>
<div class="col-md-2 col-sm-6 col-xs-12 form-group">
<div class="btn-group btn-group-justified" role="group">
<div class="btn-group" role="group">
<button type="submit" class="btn btn-success btn-block" data-toggle="tooltip" title="{Lang::T('Search')}">
<i class="fa fa-search"></i> <span class="hidden-xs">{Lang::T('Search')}</span>
</button>
</div>
<div class="btn-group" role="group">
<a href="{Text::url('')}plan/voucher/" class="btn btn-warning btn-block"
data-toggle="tooltip" title="{Lang::T('Reset Search')}">
<i class="fa fa-undo"></i> <span class="hidden-xs">{Lang::T('Reset')}</span>
</a>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="table-responsive"> <div class="table-responsive">
<div style="margin-left: 5px; margin-right: 5px;">&nbsp; <div style="margin-left: 5px; margin-right: 5px;">&nbsp;
<table id="datatable" class="table table-bordered table-striped table-condensed"> <table id="datatable" class="table table-bordered table-striped table-condensed">
@ -94,7 +172,6 @@
{/foreach} {/foreach}
</tbody> </tbody>
</table> </table>
<br>
<div class="row" style="padding: 5px"> <div class="row" style="padding: 5px">
<div class="col-lg-3 col-lg-offset-9"> <div class="col-lg-3 col-lg-offset-9">
<div class="btn-group btn-group-justified" role="group"> <div class="btn-group btn-group-justified" role="group">
@ -107,14 +184,11 @@
</div> </div>
</div> </div>
</div> </div>
{include file="pagination.tpl"}
<br> <br>
</div> </div>
</div> </div>
</div> </div>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<script type="text/javascript" charset="utf8"
src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
<script> <script>
function deleteVouchers(voucherIds) { function deleteVouchers(voucherIds) {
if (voucherIds.length > 0) { if (voucherIds.length > 0) {
@ -208,9 +282,4 @@
} }
}); });
</script> </script>
<script>
new DataTable('#datatable');
</script>
{include file="sections/footer.tpl"} {include file="sections/footer.tpl"}