diff --git a/system/autoload/Message.php b/system/autoload/Message.php index 1911d6b7..e2b06294 100644 --- a/system/autoload/Message.php +++ b/system/autoload/Message.php @@ -172,17 +172,43 @@ class Message $msg = str_replace('[[plan]]', $package, $msg); $msg = str_replace('[[package]]', $package, $msg); $msg = str_replace('[[price]]', Lang::moneyFormat($price), $msg); + // Calculate bills and additional costs list($bills, $add_cost) = User::getBills($customer['id']); + + // Initialize note and total variables + $note = ""; + $total = $price; + + // Add bills to the note if there are any additional costs if ($add_cost != 0) { - $note = ""; foreach ($bills as $k => $v) { - $note .= $k . " : " . Lang::moneyFormat($v) . "\n"; + $note .= $k . " : " . Lang::moneyFormat($v) . "\n"; } - $note .= "Total : " . Lang::moneyFormat($add_cost + $price) . "\n"; - $msg = str_replace('[[bills]]', $note, $msg); - } else { - $msg = str_replace('[[bills]]', '', $msg); + $total += $add_cost; } + + // Calculate tax + $tax = 0; + $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no'; + if ($tax_enable === 'yes') { + $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; + + $tax_rate = ($tax_rate_setting === 'custom') ? $custom_tax_rate : $tax_rate_setting; + $tax = Package::tax($price, $tax_rate); + + if ($tax != 0) { + $note .= "Tax : " . Lang::moneyFormat($tax) . "\n"; + $total += $tax; + } + } + + // Add total to the note + $note .= "Total : " . Lang::moneyFormat($total) . "\n"; + + // Replace placeholders in the message + $msg = str_replace('[[bills]]', $note, $msg); + if ($ds) { $msg = str_replace('[[expired_date]]', Lang::dateAndTimeFormat($ds['expiration'], $ds['time']), $msg); } else { @@ -205,6 +231,7 @@ class Message $msg = str_replace('[[payment_link]]', '', $msg); } } + if ( !empty($customer['phonenumber']) && strlen($customer['phonenumber']) > 5 diff --git a/system/controllers/customers.php b/system/controllers/customers.php index 96188b68..e791563e 100644 --- a/system/controllers/customers.php +++ b/system/controllers/customers.php @@ -176,6 +176,19 @@ switch ($action) { $channel = $admin['fullname']; $cust = User::_info($id_customer); $plan = ORM::for_table('tbl_plans')->find_one($b['plan_id']); + $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; + } list($bills, $add_cost) = User::getBills($id_customer); if ($using == 'balance' && $config['enable_balance'] == 'yes') { if (!$cust) { @@ -184,7 +197,7 @@ switch ($action) { if (!$plan) { r2(U . 'plan/recharge', 'e', Lang::T('Plan not found')); } - if ($cust['balance'] < ($plan['price'] + $add_cost)) { + if ($cust['balance'] < ($plan['price'] + $add_cost + $tax)) { r2(U . 'plan/recharge', 'e', Lang::T('insufficient balance')); } $gateway = 'Recharge Balance'; @@ -199,6 +212,9 @@ switch ($action) { $usings[] = Lang::T('Cash'); } $abills = User::getAttributes("Bill"); + if ($tax_enable === 'yes') { + $ui->assign('tax', $tax); + } $ui->assign('usings', $usings); $ui->assign('abills', $abills); $ui->assign('bills', $bills); diff --git a/system/controllers/plan.php b/system/controllers/plan.php index 617cf443..ccc5ceda 100644 --- a/system/controllers/plan.php +++ b/system/controllers/plan.php @@ -101,6 +101,26 @@ switch ($action) { $cust = User::_info($id_customer); $plan = ORM::for_table('tbl_plans')->find_one($planId); 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); + } else { + $tax = 0; + } + // Tax calculation stop + $total_cost = $plan['price'] + $add_cost + $tax; + if ($using == 'balance' && $config['enable_balance'] == 'yes') { if (!$cust) { r2(U . 'plan/recharge', 'e', Lang::T('Customer not found')); @@ -108,7 +128,7 @@ switch ($action) { if (!$plan) { r2(U . 'plan/recharge', 'e', Lang::T('Plan not found')); } - if ($cust['balance'] < ($plan['price'] + $add_cost)) { + if ($cust['balance'] < $total_cost) { r2(U . 'plan/recharge', 'e', Lang::T('insufficient balance')); } $gateway = 'Recharge Balance'; @@ -121,6 +141,9 @@ switch ($action) { $usings = array_filter(array_unique($usings)); if (count($usings) == 0) { $usings[] = Lang::T('Cash'); + } + if ($tax_enable === 'yes') { + $ui->assign('tax', $tax); } $ui->assign('usings', $usings); $ui->assign('bills', $bills); @@ -146,6 +169,8 @@ switch ($action) { $planId = _post('plan'); $using = _post('using'); $stoken = _post('stoken'); + + $plan = ORM::for_table('tbl_plans')->find_one($planId); if (!empty(App::getTokenValue($stoken))) { $username = App::getTokenValue($stoken); @@ -165,15 +190,35 @@ switch ($action) { $channel = $admin['fullname']; $cust = User::_info($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); + } else { + $tax = 0; + } + // Tax calculation stop + $total_cost = $plan['price'] + $add_cost + $tax; + 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); if (!$cust) { r2(U . 'plan/recharge', 'e', Lang::T('Customer not found')); } if (!$plan) { r2(U . 'plan/recharge', 'e', Lang::T('Plan not found')); } - if ($cust['balance'] < ($plan['price'] + $add_cost)) { + if ($cust['balance'] < $total_cost) { r2(U . 'plan/recharge', 'e', Lang::T('insufficient balance')); } $gateway = 'Recharge Balance'; @@ -185,7 +230,7 @@ switch ($action) { } if (Package::rechargeUser($id_customer, $server, $planId, $gateway, $channel)) { if ($using == 'balance') { - Balance::min($cust['id'], $plan['price'] + $add_cost); + Balance::min($cust['id'], $total_cost); } $in = ORM::for_table('tbl_transactions')->where('username', $cust['username'])->order_by_desc('id')->find_one(); Package::createInvoice($in); diff --git a/ui/ui/recharge-confirm.tpl b/ui/ui/recharge-confirm.tpl index e9355f68..ac3ecfe7 100644 --- a/ui/ui/recharge-confirm.tpl +++ b/ui/ui/recharge-confirm.tpl @@ -74,6 +74,10 @@