fixed tax logic
This commit is contained in:
Focuslinkstech 2024-05-17 14:47:12 +01:00
parent 55d344febe
commit ea51fa24d0
4 changed files with 106 additions and 68 deletions

View File

@ -148,9 +148,6 @@ switch ($action) {
r2(U . "voucher/invoice/"); r2(U . "voucher/invoice/");
die(); die();
} }
if($user['status'] != 'Active'){
_alert(Lang::T('This account status').' : '.Lang::T($user['status']),'danger', "");
}
$plan = ORM::for_table('tbl_plans')->where('enabled', '1')->find_one($routes['3']); $plan = ORM::for_table('tbl_plans')->where('enabled', '1')->find_one($routes['3']);
if (empty($plan)) { if (empty($plan)) {
r2(U . "order/package", 'e', Lang::T("Plan Not found")); r2(U . "order/package", 'e', Lang::T("Plan Not found"));
@ -163,30 +160,48 @@ switch ($action) {
} else { } else {
$router_name = $plan['routers']; $router_name = $plan['routers'];
} }
list($bills, $add_cost) = User::getBills($id_customer); list($bills, $add_cost) = User::getBills($id_customer);
if ($plan && $plan['enabled'] && $user['balance'] >= $plan['price']) {
// Tax calculation start
$tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
$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;
if ($tax_rate_setting === 'custom') {
$tax_rate = $custom_tax_rate;
} else {
$tax_rate = $tax_rate_setting;
}
if ($tax_enable === 'yes') {
$tax = Package::tax($plan['price'], $tax_rate);
} else {
$tax = 0;
}
// Tax calculation stop
if ($plan && $plan['enabled'] && $user['balance'] >= $plan['price'] + $tax) {
if (Package::rechargeUser($user['id'], $router_name, $plan['id'], 'Customer', 'Balance')) { if (Package::rechargeUser($user['id'], $router_name, $plan['id'], 'Customer', 'Balance')) {
// if success, then get the balance // if success, then get the balance
Balance::min($user['id'], $plan['price'] + $add_cost); Balance::min($user['id'], $plan['price'] + $add_cost + $tax);
App::setToken($_GET['stoken'], "success"); App::setToken($_GET['stoken'], "success");
r2(U . "voucher/invoice/", 's', Lang::T("Success to buy package")); r2(U . "voucher/invoice/", 's', Lang::T("Success to buy package"));
} else { } else {
r2(U . "order/package", 'e', Lang::T("Failed to buy package")); r2(U . "order/package", 'e', Lang::T("Failed to buy package"));
Message::sendTelegram("Buy Package with Balance Failed\n\n#u$c[username] #buy \n" . $plan['name_plan'] . Message::sendTelegram("Buy Package with Balance Failed\n\n#u$c[username] #buy \n" . $plan['name_plan'] .
"\nRouter: " . $router_name . "\nRouter: " . $router_name .
"\nPrice: " . $p['price']); "\nPrice: " . $plan['price'] + $tax);
} }
} else { } else {
r2(U . "home", 'e', 'Plan is not exists'); r2(U . "home", 'e', 'Plan is not exists');
} }
break; break;
case 'send': case 'send':
if ($config['enable_balance'] != 'yes') { if ($config['enable_balance'] != 'yes') {
r2(U . "order/package", 'e', Lang::T("Balance not enabled")); r2(U . "order/package", 'e', Lang::T("Balance not enabled"));
} }
if($user['status'] != 'Active'){
_alert(Lang::T('This account status').' : '.Lang::T($user['status']),'danger', "");
}
$ui->assign('_title', Lang::T('Buy for friend')); $ui->assign('_title', Lang::T('Buy for friend'));
$ui->assign('_system_menu', 'package'); $ui->assign('_system_menu', 'package');
$plan = ORM::for_table('tbl_plans')->find_one($routes['3']); $plan = ORM::for_table('tbl_plans')->find_one($routes['3']);
@ -201,6 +216,27 @@ switch ($action) {
} else { } else {
$router_name = $plan['routers']; $router_name = $plan['routers'];
} }
$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;
if ($tax_rate_setting === 'custom') {
$tax_rate = $custom_tax_rate;
} else {
$tax_rate = $tax_rate_setting;
}
$tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
if ($tax_enable === 'yes') {
$tax = Package::tax($plan['price'], $tax_rate);
$ui->assign('tax', $tax);
} else {
$tax = 0;
}
// Add tax to plan price
$plan['price'] += $tax;
if (isset($_POST['send']) && $_POST['send'] == 'plan') { if (isset($_POST['send']) && $_POST['send'] == 'plan') {
$target = ORM::for_table('tbl_customers')->where('username', _post('username'))->find_one(); $target = ORM::for_table('tbl_customers')->where('username', _post('username'))->find_one();
list($bills, $add_cost) = User::getBills($target['id']); list($bills, $add_cost) = User::getBills($target['id']);
@ -209,6 +245,7 @@ switch ($action) {
$ui->assign('add_cost', $add_cost); $ui->assign('add_cost', $add_cost);
$plan['price'] += $add_cost; $plan['price'] += $add_cost;
} }
if (!$target) { if (!$target) {
r2(U . 'home', 'd', Lang::T('Username not found')); r2(U . 'home', 'd', Lang::T('Username not found'));
} }
@ -269,15 +306,22 @@ switch ($action) {
$d->save(); $d->save();
r2(U . "order/view/$trx_id", 's', Lang::T("Success to send package")); r2(U . "order/view/$trx_id", 's', Lang::T("Success to send package"));
} else { } else {
r2(U . "order/package", 'e', Lang::T("Failed to Send package")); $errorMessage = "Send Package with Balance Failed\n\n#u$user[username] #send \n" . $plan['name_plan'] .
Message::sendTelegram("Send Package with Balance Failed\n\n#u$user[username] #send \n" . $plan['name_plan'] .
"\nRouter: " . $router_name . "\nRouter: " . $router_name .
"\nPrice: " . $plan['price']); "\nPrice: " . $plan['price'];
if ($tax_enable === 'yes') {
$errorMessage .= "\nTax: " . $tax;
}
r2(U . "order/package", 'e', Lang::T("Failed to Send package"));
Message::sendTelegram($errorMessage);
} }
} }
$ui->assign('username', $_GET['u']); $ui->assign('username', $_GET['u']);
$ui->assign('router', $router_name); $ui->assign('router', $router_name);
$ui->assign('plan', $plan); $ui->assign('plan', $plan);
$ui->assign('tax', $tax);
$ui->display('user-sendPlan.tpl'); $ui->display('user-sendPlan.tpl');
break; break;
case 'gateway': case 'gateway':
@ -328,9 +372,6 @@ switch ($action) {
} else if (!empty($gateway)) { } else if (!empty($gateway)) {
$_SESSION['gateway'] = $gateway; $_SESSION['gateway'] = $gateway;
} }
if($user['status'] != 'Active'){
_alert(Lang::T('This account status').' : '.Lang::T($user['status']),'danger', "");
}
if (empty($gateway)) { if (empty($gateway)) {
r2(U . 'order/gateway/' . $routes[2] . '/' . $routes[3], 'w', Lang::T("Please select Payment Gateway")); r2(U . 'order/gateway/' . $routes[2] . '/' . $routes[3], 'w', Lang::T("Please select Payment Gateway"));
} }
@ -368,9 +409,23 @@ switch ($action) {
} }
} }
$add_cost = 0; $add_cost = 0;
$tax = 0;
if ($router['name'] != 'balance') { if ($router['name'] != 'balance') {
list($bills, $add_cost) = User::getBills($id_customer); list($bills, $add_cost) = User::getBills($id_customer);
} }
// Tax calculation start
$tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
$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;
if ($tax_rate_setting === 'custom') {
$tax_rate = $custom_tax_rate;
} else {
$tax_rate = $tax_rate_setting;
}
if ($tax_enable === 'yes') {
$tax = Package::tax($plan['price'], $tax_rate);
}
// Tax calculation stop
if (empty($id)) { if (empty($id)) {
$d = ORM::for_table('tbl_payment_gateway')->create(); $d = ORM::for_table('tbl_payment_gateway')->create();
$d->username = $user['username']; $d->username = $user['username'];
@ -383,12 +438,12 @@ switch ($action) {
// Postpaid price from field // Postpaid price from field
$add_inv = User::getAttribute("Invoice", $id_customer); $add_inv = User::getAttribute("Invoice", $id_customer);
if (empty($add_inv) or $add_inv == 0) { if (empty($add_inv) or $add_inv == 0) {
$d->price = ($plan['price'] + $add_cost); $d->price = ($plan['price'] + $add_cost + $tax);
} else { } else {
$d->price = ($add_inv + $add_cost); $d->price = ($add_inv + $add_cost + $tax);
} }
} else { } else {
$d->price = ($plan['price'] + $add_cost); $d->price = ($plan['price'] + $add_cost + $tax);
} }
//$d->price = ($plan['price'] + $add_cost); //$d->price = ($plan['price'] + $add_cost);
$d->created_date = date('Y-m-d H:i:s'); $d->created_date = date('Y-m-d H:i:s');
@ -406,12 +461,12 @@ switch ($action) {
// Postpaid price from field // Postpaid price from field
$add_inv = User::getAttribute("Invoice", $id_customer); $add_inv = User::getAttribute("Invoice", $id_customer);
if (empty($add_inv) or $add_inv == 0) { if (empty($add_inv) or $add_inv == 0) {
$d->price = ($plan['price'] + $add_cost); $d->price = ($plan['price'] + $add_cost + $tax);
} else { } else {
$d->price = ($add_inv + $add_cost); $d->price = ($add_inv + $add_cost + $tax);
} }
} else { } else {
$d->price = ($plan['price'] + $add_cost); $d->price = ($plan['price'] + $add_cost + $tax);
} }
//$d->price = ($plan['price'] + $add_cost); //$d->price = ($plan['price'] + $add_cost);
$d->created_date = date('Y-m-d H:i:s'); $d->created_date = date('Y-m-d H:i:s');

View File

@ -132,34 +132,6 @@ switch ($action) {
$d->save(); $d->save();
} }
} }
// Handle tax system separately
$enable_tax = isset($_POST['enable_tax']) ? $_POST['enable_tax'] : 'no';
$tax_rate = isset($_POST['tax_rate']) ? $_POST['tax_rate'] : '0.01'; // Default tax rate 1%
// Save or update tax system settings
$d_tax_enable = ORM::for_table('tbl_appconfig')->where('setting', 'enable_tax')->find_one();
if ($d_tax_enable) {
$d_tax_enable->value = $enable_tax;
$d_tax_enable->save();
} else {
$d_tax_enable = ORM::for_table('tbl_appconfig')->create();
$d_tax_enable->setting = 'enable_tax';
$d_tax_enable->value = $enable_tax;
$d_tax_enable->save();
}
$d_tax_rate = ORM::for_table('tbl_appconfig')->where('setting', 'tax_rate')->find_one();
if ($d_tax_rate) {
$d_tax_rate->value = $tax_rate;
$d_tax_rate->save();
} else {
$d_tax_rate = ORM::for_table('tbl_appconfig')->create();
$d_tax_rate->setting = 'tax_rate';
$d_tax_rate->value = $tax_rate;
$d_tax_rate->save();
}
//checkbox //checkbox
$checks = ['hide_mrc', 'hide_tms', 'hide_aui', 'hide_al', 'hide_uet', 'hide_vs', 'hide_pg']; $checks = ['hide_mrc', 'hide_tms', 'hide_aui', 'hide_al', 'hide_uet', 'hide_vs', 'hide_pg'];
foreach ($checks as $check) { foreach ($checks as $check) {

View File

@ -604,7 +604,7 @@
</div> </div>
</div> </div>
{* <div class="panel-heading"> <div class="panel-heading">
<div class="btn-group pull-right"> <div class="btn-group pull-right">
<button class="btn btn-primary btn-xs" title="save" type="submit"> <button class="btn btn-primary btn-xs" title="save" type="submit">
<span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span> <span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span>
@ -666,7 +666,7 @@
</div> </div>
<p class="help-block col-md-4">{Lang::T('Enter the custom tax rate (e.g., 3.75 for 3.75%)')}</p> <p class="help-block col-md-4">{Lang::T('Enter the custom tax rate (e.g., 3.75 for 3.75%)')}</p>
</div> </div>
</div> *} </div>
{* <div class="panel-heading" id="envato"> {* <div class="panel-heading" id="envato">
<div class="btn-group pull-right"> <div class="btn-group pull-right">

View File

@ -24,9 +24,18 @@
<td>{Lang::moneyFormat($add_cost)}</td> <td>{Lang::moneyFormat($add_cost)}</td>
</tr> </tr>
{/if} {/if}
{if $tax > 0}
<tr> <tr>
<td>{Lang::T('Price')}{if $add_cost>0}<small> + {Lang::T('Additional Cost')}{/if}</td> <td>{Lang::T('Tax')}</td>
<td style="font-size: large; font-weight:bolder; font-family: 'Courier New', Courier, monospace; ">{Lang::moneyFormat($plan['price'])}</td> <td>{Lang::moneyFormat($tax)}</td>
</tr>
{/if}
<tr>
<td>{Lang::T('Price')}{if $add_cost>0}<small> + {Lang::T('Additional Cost')}{/if}{if
$tax>0}<small> + {Lang::T('Tax')}{/if}</td>
<td
style="font-size: large; font-weight:bolder; font-family: 'Courier New', Courier, monospace; ">
{Lang::moneyFormat($plan['price'])}</td>
</tr> </tr>
<tr> <tr>
<td>{Lang::T('Validity')}</td> <td>{Lang::T('Validity')}</td>
@ -39,15 +48,17 @@
<form method="post" onsubmit="return askConfirm()" role="form"> <form method="post" onsubmit="return askConfirm()" role="form">
<div class="form-group"> <div class="form-group">
<div class="col-sm-9"> <div class="col-sm-9">
<input type="text" id="username" name="username" class="form-control" required value="{$username}" <input type="text" id="username" name="username" class="form-control" required
placeholder="{Lang::T('Username')}"> value="{$username}" placeholder="{Lang::T('Username')}">
</div> </div>
<div class="form-group col-sm-3" align="center"> <div class="form-group col-sm-3" align="center">
<button class="btn btn-success btn-block" id="sendBtn" type="submit" name="send" onclick="return confirm('{Lang::T("Are You Sure?")}')" <button class="btn btn-success btn-block" id="sendBtn" type="submit" name="send"
value="plan"><i class="glyphicon glyphicon-send"></i></button> onclick="return confirm('{Lang::T(" Are You Sure?")}')" value="plan"><i
class="glyphicon glyphicon-send"></i></button>
</div> </div>
</div> </div>
<p class="help-block text-center">{Lang::T('If your friend have Additional Cost, you will pay for that too')}</p> <p class="help-block text-center">{Lang::T('If your friend have Additional Cost, you will pay for
that too')}</p>
</form> </form>
</div> </div>
</div> </div>