Merge pull request #371 from Focuslinkstech/Development

Development
This commit is contained in:
iBNu Maksum 2024-12-26 18:47:25 +07:00 committed by GitHub
commit 86407f731b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 266 additions and 71 deletions

View File

@ -51,7 +51,7 @@ switch ($action) {
require_once $dvc; require_once $dvc;
if (method_exists($dvc, 'sync_customer')) { if (method_exists($dvc, 'sync_customer')) {
(new $p['device'])->sync_customer($c, $p); (new $p['device'])->sync_customer($c, $p);
}else{ } else {
(new $p['device'])->add_customer($c, $p); (new $p['device'])->add_customer($c, $p);
} }
} else { } else {
@ -106,24 +106,24 @@ switch ($action) {
$plan = ORM::for_table('tbl_plans')->find_one($planId); $plan = ORM::for_table('tbl_plans')->find_one($planId);
list($bills, $add_cost) = User::getBills($id_customer); list($bills, $add_cost) = User::getBills($id_customer);
// Tax calculation start // Tax calculation start
$tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no'; $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
$tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : null; $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : null;
$custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : null; $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : null;
if ($tax_rate_setting === 'custom') { if ($tax_rate_setting === 'custom') {
$tax_rate = $custom_tax_rate; $tax_rate = $custom_tax_rate;
} else { } else {
$tax_rate = $tax_rate_setting; $tax_rate = $tax_rate_setting;
} }
if ($tax_enable === 'yes') { if ($tax_enable === 'yes') {
$tax = Package::tax($plan['price'], $tax_rate); $tax = Package::tax($plan['price'], $tax_rate);
} else { } else {
$tax = 0; $tax = 0;
} }
// Tax calculation stop // Tax calculation stop
$total_cost = $plan['price'] + $add_cost + $tax; $total_cost = $plan['price'] + $add_cost + $tax;
if ($using == 'balance' && $config['enable_balance'] == 'yes') { if ($using == 'balance' && $config['enable_balance'] == 'yes') {
if (!$cust) { if (!$cust) {
@ -146,7 +146,7 @@ switch ($action) {
if (count($usings) == 0) { if (count($usings) == 0) {
$usings[] = Lang::T('Cash'); $usings[] = Lang::T('Cash');
} }
if ($tax_enable === 'yes') { if ($tax_enable === 'yes') {
$ui->assign('tax', $tax); $ui->assign('tax', $tax);
} }
$ui->assign('usings', $usings); $ui->assign('usings', $usings);
@ -172,12 +172,12 @@ switch ($action) {
$server = _post('server'); $server = _post('server');
$planId = _post('plan'); $planId = _post('plan');
$using = _post('using'); $using = _post('using');
$stoken = _post('stoken'); $svoucher = _post('svoucher');
$plan = ORM::for_table('tbl_plans')->find_one($planId); $plan = ORM::for_table('tbl_plans')->find_one($planId);
if (!empty(App::getTokenValue($stoken))) { if (!empty(App::getVoucherValue($svoucher))) {
$username = App::getTokenValue($stoken); $username = App::getVoucherValue($svoucher);
$in = ORM::for_table('tbl_transactions')->where('username', $username)->order_by_desc('id')->find_one(); $in = ORM::for_table('tbl_transactions')->where('username', $username)->order_by_desc('id')->find_one();
Package::createInvoice($in); Package::createInvoice($in);
$ui->display('invoice.tpl'); $ui->display('invoice.tpl');
@ -195,24 +195,24 @@ switch ($action) {
$cust = User::_info($id_customer); $cust = User::_info($id_customer);
list($bills, $add_cost) = User::getBills($id_customer); list($bills, $add_cost) = User::getBills($id_customer);
// Tax calculation start // Tax calculation start
$tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no'; $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
$tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : null; $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : null;
$custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : null; $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : null;
if ($tax_rate_setting === 'custom') { if ($tax_rate_setting === 'custom') {
$tax_rate = $custom_tax_rate; $tax_rate = $custom_tax_rate;
} else { } else {
$tax_rate = $tax_rate_setting; $tax_rate = $tax_rate_setting;
} }
if ($tax_enable === 'yes') { if ($tax_enable === 'yes') {
$tax = Package::tax($plan['price'], $tax_rate); $tax = Package::tax($plan['price'], $tax_rate);
} else { } else {
$tax = 0; $tax = 0;
} }
// Tax calculation stop // Tax calculation stop
$total_cost = $plan['price'] + $add_cost + $tax; $total_cost = $plan['price'] + $add_cost + $tax;
if ($using == 'balance' && $config['enable_balance'] == 'yes') { if ($using == 'balance' && $config['enable_balance'] == 'yes') {
//$plan = ORM::for_table('tbl_plans')->find_one($planId); //$plan = ORM::for_table('tbl_plans')->find_one($planId);
@ -238,7 +238,7 @@ switch ($action) {
} }
$in = ORM::for_table('tbl_transactions')->where('username', $cust['username'])->order_by_desc('id')->find_one(); $in = ORM::for_table('tbl_transactions')->where('username', $cust['username'])->order_by_desc('id')->find_one();
Package::createInvoice($in); Package::createInvoice($in);
App::setToken($stoken, $cust['username']); App::setVoucher($svoucher, $cust['username']);
$ui->display('invoice.tpl'); $ui->display('invoice.tpl');
_log('[' . $admin['username'] . ']: ' . 'Recharge ' . $cust['username'] . ' [' . $in['plan_name'] . '][' . Lang::moneyFormat($in['price']) . ']', $admin['user_type'], $admin['id']); _log('[' . $admin['username'] . ']: ' . 'Recharge ' . $cust['username'] . ' [' . $in['plan_name'] . '][' . Lang::moneyFormat($in['price']) . ']', $admin['user_type'], $admin['id']);
} else { } else {
@ -277,7 +277,7 @@ switch ($action) {
$ui->assign('content', $content); $ui->assign('content', $content);
} else { } else {
$id = _post('id'); $id = _post('id');
if(empty($id)) { if (empty($id)) {
$id = $routes['2']; $id = $routes['2'];
} }
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one(); $d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
@ -425,7 +425,7 @@ switch ($action) {
$ui->assign('_system_menu', 'cards'); $ui->assign('_system_menu', 'cards');
$query = ORM::for_table('tbl_plans') $query = ORM::for_table('tbl_plans')
->left_outer_join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan')); ->inner_join('tbl_voucher', ['tbl_plans.id', '=', 'tbl_voucher.id_plan']);
if (!empty($router)) { if (!empty($router)) {
$query->where('tbl_voucher.routers', $router); $query->where('tbl_voucher.routers', $router);
@ -552,7 +552,7 @@ switch ($action) {
$pagebreak = _post('pagebreak'); $pagebreak = _post('pagebreak');
$limit = _post('limit'); $limit = _post('limit');
$vpl = _post('vpl'); $vpl = _post('vpl');
$selected_datetime = _post('selected_datetime'); $selected_datetime = _post('selected_datetime');
if (empty($vpl)) { if (empty($vpl)) {
$vpl = 3; $vpl = 3;
} }
@ -617,11 +617,11 @@ switch ($action) {
$v = $v->where_in('generated_by', $sales)->find_many(); $v = $v->where_in('generated_by', $sales)->find_many();
$vc = $vc->where_in('generated_by', $sales)->count(); $vc = $vc->where_in('generated_by', $sales)->count();
} }
if (!empty($selected_datetime)) { if (!empty($selected_datetime)) {
$v = ORM::for_table('tbl_voucher') $v = ORM::for_table('tbl_voucher')
->where('created_at', $selected_datetime) ->where('created_at', $selected_datetime)
->find_many(); ->find_many();
} }
$template = file_get_contents("pages/Voucher.html"); $template = file_get_contents("pages/Voucher.html");
$template = str_replace('[[company_name]]', $config['CompanyName'], $template); $template = str_replace('[[company_name]]', $config['CompanyName'], $template);
@ -634,14 +634,14 @@ switch ($action) {
$ui->assign('plans', $plans); $ui->assign('plans', $plans);
$ui->assign('limit', $limit); $ui->assign('limit', $limit);
$ui->assign('planid', $planid); $ui->assign('planid', $planid);
$createdate = ORM::for_table('tbl_voucher') $createdate = ORM::for_table('tbl_voucher')
->select_expr('DISTINCT created_at', 'created_datetime') ->select_expr('DISTINCT created_at', 'created_datetime')
->where_not_equal('created_at', '0') ->where_not_equal('created_at', '0')
->order_by_desc('created_at') ->order_by_desc('created_at')
->find_array(); ->find_array();
$ui->assign('createdate', $createdate); $ui->assign('createdate', $createdate);
$voucher = []; $voucher = [];
$n = 1; $n = 1;
@ -658,7 +658,7 @@ switch ($action) {
$ui->assign('voucher', $voucher); $ui->assign('voucher', $voucher);
$ui->assign('vc', $vc); $ui->assign('vc', $vc);
$ui->assign('selected_datetime', $selected_datetime); $ui->assign('selected_datetime', $selected_datetime);
//for counting pagebreak //for counting pagebreak
$ui->assign('jml', 0); $ui->assign('jml', 0);
@ -669,6 +669,7 @@ switch ($action) {
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) { if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard"); _alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
} }
$type = _post('type'); $type = _post('type');
$plan = _post('plan'); $plan = _post('plan');
$voucher_format = _post('voucher_format'); $voucher_format = _post('voucher_format');
@ -676,18 +677,21 @@ switch ($action) {
$server = _post('server'); $server = _post('server');
$numbervoucher = _post('numbervoucher'); $numbervoucher = _post('numbervoucher');
$lengthcode = _post('lengthcode'); $lengthcode = _post('lengthcode');
$printNow = _post('print_now', 'no');
$msg = ''; $msg = '';
if ($type == '' or $plan == '' or $server == '' or $numbervoucher == '' or $lengthcode == '') { if (empty($type) || empty($plan) || empty($server) || empty($numbervoucher) || empty($lengthcode)) {
$msg .= Lang::T('All field is required') . '<br>'; $msg .= Lang::T('All fields are required') . '<br>';
} }
if (Validator::UnsignedNumber($numbervoucher) == false) { if (!Validator::UnsignedNumber($numbervoucher)) {
$msg .= 'The Number of Vouchers must be a number' . '<br>'; $msg .= 'The Number of Vouchers must be a number' . '<br>';
} }
if (Validator::UnsignedNumber($lengthcode) == false) { if (!Validator::UnsignedNumber($lengthcode)) {
$msg .= 'The Length Code must be a number' . '<br>'; $msg .= 'The Length Code must be a number' . '<br>';
} }
if ($msg == '') { if ($msg == '') {
// Update or create voucher prefix
if (!empty($prefix)) { if (!empty($prefix)) {
$d = ORM::for_table('tbl_appconfig')->where('setting', 'voucher_prefix')->find_one(); $d = ORM::for_table('tbl_appconfig')->where('setting', 'voucher_prefix')->find_one();
if ($d) { if ($d) {
@ -700,11 +704,14 @@ switch ($action) {
$d->save(); $d->save();
} }
} }
run_hook('create_voucher'); #HOOK
run_hook('create_voucher'); // HOOK
$vouchers = []; $vouchers = [];
$newVoucherIds = [];
if ($voucher_format == 'numbers') { if ($voucher_format == 'numbers') {
if (strlen($lengthcode) < 6) { if ($lengthcode < 6) {
$msg .= 'The Length Code must be a more than 6 for numbers' . '<br>'; $msg .= 'The Length Code must be more than 6 for numbers' . '<br>';
} }
$vouchers = generateUniqueNumericVouchers($numbervoucher, $lengthcode); $vouchers = generateUniqueNumericVouchers($numbervoucher, $lengthcode);
} else { } else {
@ -724,12 +731,47 @@ switch ($action) {
$d->type = $type; $d->type = $type;
$d->routers = $server; $d->routers = $server;
$d->id_plan = $plan; $d->id_plan = $plan;
$d->code = $prefix . $code; $d->code = "$prefix$code";
$d->user = '0'; $d->user = '0';
$d->status = '0'; $d->status = '0';
$d->generated_by = $admin['id']; $d->generated_by = $admin['id'];
$d->save(); $d->save();
$newVoucherIds[] = $d->id();
} }
if ($printNow == 'yes' && count($newVoucherIds) > 0) {
$template = file_get_contents("pages/Voucher.html");
$template = str_replace('[[company_name]]', $config['CompanyName'], $template);
$vouchersToPrint = ORM::for_table('tbl_voucher')
->left_outer_join('tbl_plans', ['tbl_plans.id', '=', 'tbl_voucher.id_plan'])
->where_in('tbl_voucher.id', $newVoucherIds)
->find_many();
$voucherHtmls = [];
$n = 1;
foreach ($vouchersToPrint as $vs) {
$temp = $template;
$temp = str_replace('[[qrcode]]', '<img src="qrcode/?data=' . $vs['code'] . '">', $temp);
$temp = str_replace('[[price]]', Lang::moneyFormat($vs['price']), $temp);
$temp = str_replace('[[voucher_code]]', $vs['code'], $temp);
$temp = str_replace('[[plan]]', $vs['name_plan'], $temp);
$temp = str_replace('[[counter]]', $n, $temp);
$voucherHtmls[] = $temp;
$n++;
}
$vc = count($voucherHtmls);
$ui->assign('voucher', $voucherHtmls);
$ui->assign('vc', $vc);
$ui->assign('jml', 0);
$ui->assign('from_id', 0);
$ui->assign('vpl', '3');
$ui->assign('pagebreak', '12');
$ui->display('print-voucher.tpl');
}
if ($numbervoucher == 1) { if ($numbervoucher == 1) {
r2(U . 'plan/voucher-view/' . $d->id(), 's', Lang::T('Create Vouchers Successfully')); r2(U . 'plan/voucher-view/' . $d->id(), 's', Lang::T('Create Vouchers Successfully'));
} }
@ -740,6 +782,43 @@ switch ($action) {
} }
break; break;
case 'voucher-delete-many':
header('Content-Type: application/json');
$admin = Admin::_info();
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
echo json_encode(['status' => 'error', 'message' => Lang::T('You do not have permission to access this page')]);
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$voucherIds = json_decode($_POST['voucherIds'], true);
if (is_array($voucherIds) && !empty($voucherIds)) {
$voucherIds = array_map('intval', $voucherIds);
try {
ORM::for_table('tbl_voucher')
->where_in('id', $voucherIds)
->delete_many();
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => Lang::T('Failed to delete vouchers.')]);
exit;
}
// Return success response
echo json_encode(['status' => 'success', 'message' => Lang::T("Vouchers Deleted Successfully.")]);
exit;
} else {
echo json_encode(['status' => 'error', 'message' => Lang::T("Invalid or missing voucher IDs.")]);
exit;
}
} else {
echo json_encode(['status' => 'error', 'message' => Lang::T("Invalid request method.")]);
}
break;
case 'voucher-view': case 'voucher-view':
$id = $routes[2]; $id = $routes[2];
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
@ -865,17 +944,17 @@ switch ($action) {
$amount = _post('amount'); $amount = _post('amount');
$plan = _post('id_plan'); $plan = _post('id_plan');
$note = _post('note'); $note = _post('note');
$stoken = _req('stoken'); $svoucher = _req('svoucher');
$c = ORM::for_table('tbl_customers')->find_one($user); $c = ORM::for_table('tbl_customers')->find_one($user);
if (App::getTokenValue($stoken)) { if (App::getVoucherValue($svoucher)) {
$in = ORM::for_table('tbl_transactions')->find_one(App::getTokenValue($stoken)); $in = ORM::for_table('tbl_transactions')->find_one(App::getVoucherValue($svoucher));
Package::createInvoice($in); Package::createInvoice($in);
$ui->display('invoice.tpl'); $ui->display('invoice.tpl');
die(); die();
} }
run_hook('deposit_customer'); #HOOK run_hook('deposit_customer'); #HOOK
if (!empty($user) && strlen($amount)>0 && $amount != 0) { if (!empty($user) && strlen($amount) > 0 && $amount != 0) {
$plan = []; $plan = [];
$plan['name_plan'] = Lang::T('Balance'); $plan['name_plan'] = Lang::T('Balance');
$plan['price'] = $amount; $plan['price'] = $amount;
@ -883,21 +962,21 @@ switch ($action) {
if ($trxId > 0) { if ($trxId > 0) {
$in = ORM::for_table('tbl_transactions')->find_one($trxId); $in = ORM::for_table('tbl_transactions')->find_one($trxId);
Package::createInvoice($in); Package::createInvoice($in);
if (!empty($stoken)) { if (!empty($svoucher)) {
App::setToken($stoken, $trxId); App::setVoucher($svoucher, $trxId);
} }
$ui->display('invoice.tpl'); $ui->display('invoice.tpl');
} else { } else {
r2(U . 'plan/refill', 'e', "Failed to refill account"); r2(U . 'plan/refill', 'e', "Failed to refill account");
} }
}else if (!empty($user) && !empty($plan)) { } else if (!empty($user) && !empty($plan)) {
$p = ORM::for_table('tbl_plans')->find_one($plan); $p = ORM::for_table('tbl_plans')->find_one($plan);
$trxId = Package::rechargeBalance($c, $p, "Deposit", $admin['fullname'], $note); $trxId = Package::rechargeBalance($c, $p, "Deposit", $admin['fullname'], $note);
if ($trxId > 0) { if ($trxId > 0) {
$in = ORM::for_table('tbl_transactions')->find_one($trxId); $in = ORM::for_table('tbl_transactions')->find_one($trxId);
Package::createInvoice($in); Package::createInvoice($in);
if (!empty($stoken)) { if (!empty($svoucher)) {
App::setToken($stoken, $trxId); App::setVoucher($svoucher, $trxId);
} }
$ui->display('invoice.tpl'); $ui->display('invoice.tpl');
} else { } else {
@ -910,8 +989,8 @@ switch ($action) {
case 'extend': case 'extend':
$id = $routes[2]; $id = $routes[2];
$days = $routes[3]; $days = $routes[3];
$stoken = $_GET['stoken']; $svoucher = $_GET['svoucher'];
if (App::getTokenValue($stoken)) { if (App::getVoucherValue($svoucher)) {
r2(U . 'plan', 's', "Extend already done"); r2(U . 'plan', 's', "Extend already done");
} }
$tur = ORM::for_table('tbl_user_recharges')->find_one($id); $tur = ORM::for_table('tbl_user_recharges')->find_one($id);
@ -924,7 +1003,7 @@ switch ($action) {
//expired //expired
$expiration = date('Y-m-d', strtotime(" +$days day")); $expiration = date('Y-m-d', strtotime(" +$days day"));
} }
App::setToken($stoken, $id); App::setVoucher($svoucher, $id);
$c = ORM::for_table('tbl_customers')->findOne($tur['customer_id']); $c = ORM::for_table('tbl_customers')->findOne($tur['customer_id']);
if ($c) { if ($c) {
$p = ORM::for_table('tbl_plans')->find_one($tur['plan_id']); $p = ORM::for_table('tbl_plans')->find_one($tur['plan_id']);

View File

@ -71,6 +71,14 @@
<input type="text" class="form-control" name="lengthcode" value="12"> <input type="text" class="form-control" name="lengthcode" value="12">
</div> </div>
</div> </div>
<div class="form-group">
<label for="inputSkills" class="col-sm-2 control-label">{Lang::T('Print Now')}</label>
<div class="col-sm-10">
<input type="checkbox" id="print_now" name="print_now" class="iCheck" value="yes">
</div>
</div>
<div class="form-group"> <div class="form-group">
<div class="col-lg-offset-2 col-lg-10"> <div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success" onclick="return ask(this, 'Continue the Voucher creation process?')" type="submit">{Lang::T('Generate')}</button> <button class="btn btn-success" onclick="return ask(this, 'Continue the Voucher creation process?')" type="submit">{Lang::T('Generate')}</button>

View File

@ -90,6 +90,7 @@
<table id="datatable" class="table table-bordered table-striped table-condensed"> <table id="datatable" class="table table-bordered table-striped table-condensed">
<thead> <thead>
<tr> <tr>
<th><input type="checkbox" id="select-all"></th>
<th>ID</th> <th>ID</th>
<th>{Lang::T('Type')}</th> <th>{Lang::T('Type')}</th>
<th>{Lang::T('Routers')}</th> <th>{Lang::T('Routers')}</th>
@ -97,7 +98,7 @@
<th>{Lang::T('Code Voucher')}</th> <th>{Lang::T('Code Voucher')}</th>
<th>{Lang::T('Status Voucher')}</th> <th>{Lang::T('Status Voucher')}</th>
<th>{Lang::T('Customer')}</th> <th>{Lang::T('Customer')}</th>
<th>{Lang::T('Create Date')}</th> <th>{Lang::T('Create Date')}</th>
<th>{Lang::T('Used Date')}</th> <th>{Lang::T('Used Date')}</th>
<th>{Lang::T('Generated By')}</th> <th>{Lang::T('Generated By')}</th>
<th>{Lang::T('Manage')}</th> <th>{Lang::T('Manage')}</th>
@ -106,6 +107,7 @@
<tbody> <tbody>
{foreach $d as $ds} {foreach $d as $ds}
<tr {if $ds['status'] eq '1' }class="danger" {/if}> <tr {if $ds['status'] eq '1' }class="danger" {/if}>
<td><input type="checkbox" name="voucher_ids[]" value="{$ds['id']}"></td>
<td>{$ds['id']}</td> <td>{$ds['id']}</td>
<td>{$ds['type']}</td> <td>{$ds['type']}</td>
<td>{$ds['routers']}</td> <td>{$ds['routers']}</td>
@ -120,7 +122,7 @@
<td>{if $ds['user'] eq '0'} - <td>{if $ds['user'] eq '0'} -
{else}<a href="{$_url}customers/viewu/{$ds['user']}">{$ds['user']}</a> {else}<a href="{$_url}customers/viewu/{$ds['user']}">{$ds['user']}</a>
{/if}</td> {/if}</td>
<td>{if $ds['created_at']}{Lang::dateTimeFormat($ds['created_at'])}{/if}</td> <td>{if $ds['created_at']}{Lang::dateTimeFormat($ds['created_at'])}{/if}</td>
<td>{if $ds['used_date']}{Lang::dateTimeFormat($ds['used_date'])}{/if}</td> <td>{if $ds['used_date']}{Lang::dateTimeFormat($ds['used_date'])}{/if}</td>
<td>{if $ds['generated_by']} <td>{if $ds['generated_by']}
<a <a
@ -145,6 +147,112 @@
</table> </table>
</div> </div>
</div> </div>
{include file="pagination.tpl"}
</div> </div>
<div class="row" style="padding: 5px">
<div class="col-lg-3 col-lg-offset-9">
<div class="btn-group btn-group-justified" role="group">
<div class="btn-group" role="group">
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
<button id="deleteSelectedVouchers" class="btn btn-danger">{Lang::T('Delete
Selected')}</button>
{/if}
</div>
</div>
</div>
</div>
{include file="pagination.tpl"}
<script>
function deleteVouchers(voucherIds) {
if (voucherIds.length > 0) {
Swal.fire({
title: 'Are you sure?',
text: 'You won\'t be able to revert this!',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Yes, delete it!',
cancelButtonText: 'Cancel'
}).then((result) => {
if (result.isConfirmed) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '{$_url}plan/voucher-delete-many', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function () {
if (xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
if (response.status === 'success') {
Swal.fire({
title: 'Deleted!',
text: response.message,
icon: 'success',
confirmButtonText: 'OK'
}).then(() => {
location.reload(); // Reload the page after confirmation
});
} else {
Swal.fire({
title: 'Error!',
text: response.message,
icon: 'error',
confirmButtonText: 'OK'
});
}
} else {
Swal.fire({
title: 'Error!',
text: 'Failed to delete vouchers. Please try again.',
icon: 'error',
confirmButtonText: 'OK'
});
}
};
xhr.send('voucherIds=' + JSON.stringify(voucherIds));
}
});
} else {
Swal.fire({
title: 'Error!',
text: 'No vouchers selected to delete.',
icon: 'error',
confirmButtonText: 'OK'
});
}
}
// Example usage for selected vouchers
document.getElementById('deleteSelectedVouchers').addEventListener('click', function () {
var selectedVouchers = [];
document.querySelectorAll('input[name="voucher_ids[]"]:checked').forEach(function (checkbox) {
selectedVouchers.push(checkbox.value);
});
if (selectedVouchers.length > 0) {
deleteVouchers(selectedVouchers);
} else {
Swal.fire({
title: 'Error!',
text: 'Please select at least one voucher to delete.',
icon: 'error',
confirmButtonText: 'OK'
});
}
});
document.querySelectorAll('.delete-voucher').forEach(function (button) {
button.addEventListener('click', function () {
var voucherId = this.getAttribute('data-id');
deleteVouchers([voucherId]);
});
});
// Select or deselect all checkboxes
document.getElementById('select-all').addEventListener('change', function () {
var checkboxes = document.querySelectorAll('input[name="voucher_ids[]"]');
for (var checkbox of checkboxes) {
checkbox.checked = this.checked;
}
});
</script>
{include file="sections/footer.tpl"} {include file="sections/footer.tpl"}