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 System')} +
+
+
+ +
+ +
+

{Lang::T('Tax will be calculated in Internet Plan Price')}

+
+
+ +
+ +
+

{Lang::T('Tax Rates in percentage')}

+
+ + +
+ {*
+ {if $_c['enable_tax'] == 'yes'} + {if $_c['tax_rate'] == 'custom'} +

{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} +
diff --git a/ui/ui/balance-edit.tpl b/ui/ui/balance-edit.tpl index 4ca8bd8e..a8bc0ecf 100644 --- a/ui/ui/balance-edit.tpl +++ b/ui/ui/balance-edit.tpl @@ -32,6 +32,16 @@
+ {if $_c['enable_tax'] == 'yes'} + {if $_c['tax_rate'] == 'custom'} +

{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} +
diff --git a/ui/ui/customers.tpl b/ui/ui/customers.tpl index 4926ee92..fd4d6c76 100644 --- a/ui/ui/customers.tpl +++ b/ui/ui/customers.tpl @@ -106,7 +106,9 @@ $j(document).ready(function () { $j('#customerTable').DataTable({ - "pagingType": "full_numbers" + "pagingType": "full_numbers", + "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ], + "pageLength": 5 }); }); diff --git a/ui/ui/hotspot-add.tpl b/ui/ui/hotspot-add.tpl index f09ab264..cccb342c 100644 --- a/ui/ui/hotspot-add.tpl +++ b/ui/ui/hotspot-add.tpl @@ -114,6 +114,16 @@
+ {if $_c['enable_tax'] == 'yes'} + {if $_c['tax_rate'] == 'custom'} +

{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} +
diff --git a/ui/ui/hotspot-edit.tpl b/ui/ui/hotspot-edit.tpl index 1e502239..4ce93f3d 100644 --- a/ui/ui/hotspot-edit.tpl +++ b/ui/ui/hotspot-edit.tpl @@ -133,6 +133,16 @@
+ {if $_c['enable_tax'] == 'yes'} + {if $_c['tax_rate'] == 'custom'} +

{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} +
diff --git a/ui/ui/pppoe-add.tpl b/ui/ui/pppoe-add.tpl index ea5a9c52..110d6e09 100644 --- a/ui/ui/pppoe-add.tpl +++ b/ui/ui/pppoe-add.tpl @@ -64,6 +64,15 @@
+ {if $_c['enable_tax'] == 'yes'} + {if $_c['tax_rate'] == 'custom'} +

{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}
diff --git a/ui/ui/pppoe-edit.tpl b/ui/ui/pppoe-edit.tpl index 8edd5753..c3e423bf 100644 --- a/ui/ui/pppoe-edit.tpl +++ b/ui/ui/pppoe-edit.tpl @@ -68,6 +68,16 @@
+ {if $_c['enable_tax'] == 'yes'} + {if $_c['tax_rate'] == 'custom'} +

{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} +