diff --git a/system/controllers/services.php b/system/controllers/services.php
index 88f4f2d7..20844dc0 100644
--- a/system/controllers/services.php
+++ b/system/controllers/services.php
@@ -60,7 +60,7 @@ switch ($action) {
$rate = $plan['rate_up'] . $unitup . "/" . $plan['rate_down'] . $unitdown;
Mikrotik::addHotspotPlan($client, $plan['name_plan'], $plan['shared_users'], $rate);
$log .= "DONE : $plan[name_plan], $plan[shared_users], $rate
";
- if (!empty ($plan['pool_expired'])) {
+ if (!empty($plan['pool_expired'])) {
Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $plan['pool_expired'], $plan['pool_expired']);
$log .= "DONE Expired : EXPIRED NUXBILL $plan[pool_expired]
";
}
@@ -105,7 +105,7 @@ switch ($action) {
$rate = $plan['rate_up'] . $unitup . "/" . $plan['rate_down'] . $unitdown;
Mikrotik::addPpoePlan($client, $plan['name_plan'], $plan['pool'], $rate);
$log .= "DONE : $plan[name_plan], $plan[pool], $rate
";
- if (!empty ($plan['pool_expired'])) {
+ if (!empty($plan['pool_expired'])) {
Mikrotik::setPpoePlan($client, 'EXPIRED NUXBILL ' . $plan['pool_expired'], $plan['pool_expired'], '512K/512K');
$log .= "DONE Expired : EXPIRED NUXBILL $plan[pool_expired]
";
}
@@ -120,7 +120,7 @@ switch ($action) {
$name = _post('name');
if ($name != '') {
$query = ORM::for_table('tbl_bandwidth')->join('tbl_plans', array('tbl_bandwidth.id', '=', 'tbl_plans.id_bw'))->where('tbl_plans.type', 'Hotspot')->where_like('tbl_plans.name_plan', '%' . $name . '%');
- $d = Paginator::findMany($query, ['name'=> $name]);
+ $d = Paginator::findMany($query, ['name' => $name]);
} else {
$query = ORM::for_table('tbl_bandwidth')->join('tbl_plans', array('tbl_bandwidth.id', '=', 'tbl_plans.id_bw'))->where('tbl_plans.type', 'Hotspot');
$d = Paginator::findMany($query);
@@ -213,7 +213,7 @@ switch ($action) {
if ($name == '' or $id_bw == '' or $price == '' or $validity == '') {
$msg .= Lang::T('All field is required') . '
';
}
- if (empty ($radius)) {
+ if (empty($radius)) {
if ($routers == '') {
$msg .= Lang::T('All field is required') . '
';
}
@@ -245,10 +245,41 @@ switch ($action) {
$radiusRate = $b['rate_up'] . $radup . '/' . $b['rate_down'] . $raddown;
$rate = trim($rate . " " . $b['burst']);
+ // Check if tax is enabled in config
+ $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
+
+ // Default tax rate
+ $default_tax_rate = 0.01; // Default tax rate 1%
+
+ // Check if tax rate is set to custom in config
+ $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : $default_tax_rate;
+
+ // Check if tax rate is custom
+ if ($tax_rate_setting === 'custom') {
+ // Check if custom tax rate is set in config
+ $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : $default_tax_rate;
+ // Convert custom tax rate to decimal
+ $custom_tax_rate_decimal = $custom_tax_rate / 100;
+ $tax_rate = $custom_tax_rate_decimal;
+ } else {
+ // Use tax rate
+ $tax_rate = $tax_rate_setting;
+ }
+
+
+ // Calculate the new price with tax if tax is enabled
+ if ($tax_enable === 'yes') {
+ $price_with_tax = $price + ($price * $tax_rate);
+ } else {
+ // If tax is not enabled, use the original price
+ $price_with_tax = $price;
+ }
+
+ // Create new plan
$d = ORM::for_table('tbl_plans')->create();
$d->name_plan = $name;
$d->id_bw = $id_bw;
- $d->price = $price;
+ $d->price = $price_with_tax; // Set price with or without tax based on configuration
$d->type = 'Hotspot';
$d->typebp = $typebp;
$d->plan_type = $plan_type;
@@ -260,7 +291,7 @@ switch ($action) {
$d->validity = $validity;
$d->validity_unit = $validity_unit;
$d->shared_users = $sharedusers;
- if (!empty ($radius)) {
+ if (!empty($radius)) {
$d->is_radius = 1;
$d->routers = '';
} else {
@@ -280,7 +311,7 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addHotspotPlan($client, $name, $sharedusers, $rate);
- if (!empty ($pool_expired)) {
+ if (!empty($pool_expired)) {
Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired);
}
}
@@ -356,14 +387,44 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::setHotspotPlan($client, $name, $sharedusers, $rate);
- if (!empty ($pool_expired)) {
+ if (!empty($pool_expired)) {
Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired);
}
}
+ // Check if tax is enabled in config
+ $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
+
+ // Default tax rate
+ $default_tax_rate = 0.01; // Default tax rate 1%
+
+ // Check if tax rate is set to custom in config
+ $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : $default_tax_rate;
+
+ // Check if tax rate is custom
+ if ($tax_rate_setting === 'custom') {
+ // Check if custom tax rate is set in config
+ $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : $default_tax_rate;
+ // Convert custom tax rate to decimal
+ $custom_tax_rate_decimal = $custom_tax_rate / 100;
+ $tax_rate = $custom_tax_rate_decimal;
+ } else {
+ // Use tax rate
+ $tax_rate = $tax_rate_setting;
+ }
+
+
+ // Calculate the new price with tax if tax is enabled
+ if ($tax_enable === 'yes') {
+ $price_with_tax = $price + ($price * $tax_rate);
+ } else {
+ // If tax is not enabled, use the original price
+ $price_with_tax = $price;
+ }
+
$d->name_plan = $name;
$d->id_bw = $id_bw;
- $d->price = $price;
+ $d->price = $price_with_tax; // Set price with or without tax based on configuration
$d->typebp = $typebp;
$d->limit_type = $limit_type;
$d->time_limit = $time_limit;
@@ -487,7 +548,7 @@ switch ($action) {
if ($name == '' or $id_bw == '' or $price == '' or $validity == '' or $pool == '') {
$msg .= Lang::T('All field is required') . '
';
}
- if (empty ($radius)) {
+ if (empty($radius)) {
if ($routers == '') {
$msg .= Lang::T('All field is required') . '
';
}
@@ -518,16 +579,47 @@ switch ($action) {
$radiusRate = $b['rate_up'] . $radup . '/' . $b['rate_down'] . $raddown;
$rate = trim($rate . " " . $b['burst']);
+ // Check if tax is enabled in config
+ $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
+
+ // Default tax rate
+ $default_tax_rate = 0.01; // Default tax rate 1%
+
+ // Check if tax rate is set to custom in config
+ $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : $default_tax_rate;
+
+ // Check if tax rate is custom
+ if ($tax_rate_setting === 'custom') {
+ // Check if custom tax rate is set in config
+ $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : $default_tax_rate;
+ // Convert custom tax rate to decimal
+ $custom_tax_rate_decimal = $custom_tax_rate / 100;
+ $tax_rate = $custom_tax_rate_decimal;
+ } else {
+ // Use tax rate
+ $tax_rate = $tax_rate_setting;
+ }
+
+
+ // Calculate the new price with tax if tax is enabled
+ if ($tax_enable === 'yes') {
+ $price_with_tax = $price + ($price * $tax_rate);
+ } else {
+ // If tax is not enabled, use the original price
+ $price_with_tax = $price;
+ }
+
+
$d = ORM::for_table('tbl_plans')->create();
$d->type = 'PPPOE';
$d->name_plan = $name;
$d->id_bw = $id_bw;
- $d->price = $price;
+ $d->price = $price_with_tax;
$d->plan_type = $plan_type;
$d->validity = $validity;
$d->validity_unit = $validity_unit;
$d->pool = $pool;
- if (!empty ($radius)) {
+ if (!empty($radius)) {
$d->is_radius = 1;
$d->routers = '';
} else {
@@ -547,7 +639,7 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addPpoePlan($client, $name, $pool, $rate);
- if (!empty ($pool_expired)) {
+ if (!empty($pool_expired)) {
Mikrotik::setPpoePlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired, '512K/512K');
}
}
@@ -616,14 +708,44 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::setPpoePlan($client, $name, $pool, $rate);
- if (!empty ($pool_expired)) {
+ if (!empty($pool_expired)) {
Mikrotik::setPpoePlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired, '512K/512K');
}
}
+ // Check if tax is enabled in config
+ $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
+
+ // Default tax rate
+ $default_tax_rate = 0.01; // Default tax rate 1%
+
+ // Check if tax rate is set to custom in config
+ $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : $default_tax_rate;
+
+ // Check if tax rate is custom
+ if ($tax_rate_setting === 'custom') {
+ // Check if custom tax rate is set in config
+ $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : $default_tax_rate;
+ // Convert custom tax rate to decimal
+ $custom_tax_rate_decimal = $custom_tax_rate / 100;
+ $tax_rate = $custom_tax_rate_decimal;
+ } else {
+ // Use tax rate
+ $tax_rate = $tax_rate_setting;
+ }
+
+
+ // Calculate the new price with tax if tax is enabled
+ if ($tax_enable === 'yes') {
+ $price_with_tax = $price + ($price * $tax_rate);
+ } else {
+ // If tax is not enabled, use the original price
+ $price_with_tax = $price;
+ }
+
$d->name_plan = $name;
$d->id_bw = $id_bw;
- $d->price = $price;
+ $d->price = $price_with_tax;
$d->plan_type = $plan_type;
$d->validity = $validity;
$d->validity_unit = $validity_unit;
@@ -700,8 +822,37 @@ switch ($action) {
}
run_hook('edit_ppoe'); #HOOK
if ($msg == '') {
+ // Check if tax is enabled in config
+ $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
+
+ // Default tax rate
+ $default_tax_rate = 0.01; // Default tax rate 1%
+
+ // Check if tax rate is set to custom in config
+ $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : $default_tax_rate;
+
+ // Check if tax rate is custom
+ if ($tax_rate_setting === 'custom') {
+ // Check if custom tax rate is set in config
+ $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : $default_tax_rate;
+ // Convert custom tax rate to decimal
+ $custom_tax_rate_decimal = $custom_tax_rate / 100;
+ $tax_rate = $custom_tax_rate_decimal;
+ } else {
+ // Use tax rate
+ $tax_rate = $tax_rate_setting;
+ }
+
+
+ // Calculate the new price with tax if tax is enabled
+ if ($tax_enable === 'yes') {
+ $price_with_tax = $price + ($price * $tax_rate);
+ } else {
+ // If tax is not enabled, use the original price
+ $price_with_tax = $price;
+ }
$d->name_plan = $name;
- $d->price = $price;
+ $d->price = $price_with_tax;
$d->enabled = $enabled;
$d->prepaid = 'yes';
$d->save();
@@ -730,11 +881,43 @@ switch ($action) {
}
run_hook('add_ppoe'); #HOOK
if ($msg == '') {
+
+ // Check if tax is enabled in config
+ $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no';
+
+ // Default tax rate
+ $default_tax_rate = 0.01; // Default tax rate 1%
+
+ // Check if tax rate is set to custom in config
+ $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : $default_tax_rate;
+
+ // Check if tax rate is custom
+ if ($tax_rate_setting === 'custom') {
+ // Check if custom tax rate is set in config
+ $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : $default_tax_rate;
+ // Convert custom tax rate to decimal
+ $custom_tax_rate_decimal = $custom_tax_rate / 100;
+ $tax_rate = $custom_tax_rate_decimal;
+ } else {
+ // Use tax rate
+ $tax_rate = $tax_rate_setting;
+ }
+
+
+ // Calculate the new price with tax if tax is enabled
+ if ($tax_enable === 'yes') {
+ $price_with_tax = $price + ($price * $tax_rate);
+ } else {
+ // If tax is not enabled, use the original price
+ $price_with_tax = $price;
+ }
+
+
$d = ORM::for_table('tbl_plans')->create();
$d->type = 'Balance';
$d->name_plan = $name;
$d->id_bw = 0;
- $d->price = $price;
+ $d->price = $price_with_tax;
$d->validity = 0;
$d->validity_unit = 'Months';
$d->routers = '';
diff --git a/system/controllers/settings.php b/system/controllers/settings.php
index ad978029..d4ed3ad1 100644
--- a/system/controllers/settings.php
+++ b/system/controllers/settings.php
@@ -119,7 +119,7 @@ switch ($action) {
die();
}
}
- // save all settings
+ // Save all settings including tax system
foreach ($_POST as $key => $value) {
$d = ORM::for_table('tbl_appconfig')->where('setting', $key)->find_one();
if ($d) {
@@ -133,6 +133,33 @@ switch ($action) {
}
}
+ // 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
$checks = ['hide_mrc', 'hide_tms', 'hide_aui', 'hide_al', 'hide_uet', 'hide_vs', 'hide_pg'];
foreach ($checks as $check) {
diff --git a/ui/ui/app-settings.tpl b/ui/ui/app-settings.tpl
index d0541ae0..e655d039 100644
--- a/ui/ui/app-settings.tpl
+++ b/ui/ui/app-settings.tpl
@@ -553,6 +553,69 @@
{Lang::T('The method which OTP will be sent to user')}
+ +{Lang::T('Tax will be calculated in Internet Plan Price')}
+{Lang::T('Tax Rates in percentage')}
+{number_format($_c['custom_tax_rate'], 2)} % {Lang::T('Tax Rates + will be added')}
+ {else} +{number_format($_c['tax_rate'] * 100, 2)} % {Lang::T('Tax Rates + will be added')}
+ {/if} + {/if} +{number_format($_c['custom_tax_rate'], 2)} % {Lang::T('Tax Rates + will be added')}
+ {else} +{number_format($_c['tax_rate'] * 100, 2)} % {Lang::T('Tax Rates + will be added')}
+ {/if} + {/if} +{number_format($_c['custom_tax_rate'], 2)} % {Lang::T('Tax Rates + will be added')}
+ {else} +{number_format($_c['tax_rate'] * 100, 2)} % {Lang::T('Tax Rates + will be added')}
+ {/if} + {/if} +{number_format($_c['custom_tax_rate'], 2)} % {Lang::T('Tax Rates + will be added')}
+ {else} +{number_format($_c['tax_rate'] * 100, 2)} % {Lang::T('Tax Rates + will be added')}
+ {/if} + {/if} +{number_format($_c['custom_tax_rate'], 2)} % {Lang::T('Tax Rates + will be added')}
+ {else} +{number_format($_c['tax_rate'] * 100, 2)} % {Lang::T('Tax Rates + will be added')}
+ {/if} + {/if}{number_format($_c['custom_tax_rate'], 2)} % {Lang::T('Tax Rates + will be added')}
+ {else} +{number_format($_c['tax_rate'] * 100, 2)} % {Lang::T('Tax Rates + will be added')}
+ {/if} + {/if} +