Merge pull request #135 from pro-cms/master

Added Business/Personal System
This commit is contained in:
iBNu Maksum 2024-03-19 09:46:16 +07:00 committed by GitHub
commit 393a1195a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 190 additions and 102 deletions

3
.gitignore vendored
View File

@ -38,4 +38,5 @@ system/lan/**
!system/lan/spanish.json !system/lan/spanish.json
!system/lan/turkish.json !system/lan/turkish.json
!system/lan/english.json !system/lan/english.json
!system/lan/country.json !system/lan/country.json
*.zip

View File

@ -29,6 +29,7 @@ CREATE TABLE `tbl_customers` (
`coordinates` VARCHAR(50) NOT NULL DEFAULT '6.465422, 3.406448' COMMENT 'Latitude and Longitude coordinates', `coordinates` VARCHAR(50) NOT NULL DEFAULT '6.465422, 3.406448' COMMENT 'Latitude and Longitude coordinates',
`balance` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT 'For Money Deposit', `balance` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT 'For Money Deposit',
`service_type` ENUM('Hotspot','PPPoE','Others') DEFAULT 'Others' COMMENT 'For selecting user type', `service_type` ENUM('Hotspot','PPPoE','Others') DEFAULT 'Others' COMMENT 'For selecting user type',
`account_type` ENUM('Business', 'Personal') DEFAULT 'Personal' COMMENT 'For selecting account type',
`auto_renewal` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Auto renewall using balance', `auto_renewal` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Auto renewall using balance',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_login` datetime DEFAULT NULL `last_login` datetime DEFAULT NULL
@ -80,26 +81,27 @@ CREATE TABLE `tbl_payment_gateway` (
DROP TABLE IF EXISTS `tbl_plans`; DROP TABLE IF EXISTS `tbl_plans`;
CREATE TABLE `tbl_plans` ( CREATE TABLE `tbl_plans` (
`id` int(10) NOT NULL, `id` int(10) NOT NULL,
`name_plan` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `name_plan` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`id_bw` int(10) NOT NULL, `id_bw` int(10) NOT NULL,
`price` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `price` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`type` enum('Hotspot','PPPOE','Balance') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `type` enum('Hotspot','PPPOE','Balance') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`typebp` enum('Unlimited','Limited') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `typebp` enum('Unlimited','Limited') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`limit_type` enum('Time_Limit','Data_Limit','Both_Limit') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `limit_type` enum('Time_Limit','Data_Limit','Both_Limit') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`time_limit` int(10) UNSIGNED DEFAULT NULL, `time_limit` int(10) UNSIGNED DEFAULT NULL,
`time_unit` enum('Mins','Hrs') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `time_unit` enum('Mins','Hrs') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`data_limit` int(10) UNSIGNED DEFAULT NULL, `data_limit` int(10) UNSIGNED DEFAULT NULL,
`data_unit` enum('MB','GB') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `data_unit` enum('MB','GB') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`validity` int(10) NOT NULL, `validity` int(10) NOT NULL,
`validity_unit` enum('Mins','Hrs','Days','Months','Period') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `validity_unit` enum('Mins','Hrs','Days','Months','Period') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`shared_users` int(10) DEFAULT NULL, `shared_users` int(10) DEFAULT NULL,
`routers` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `routers` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`is_radius` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 is radius', `is_radius` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 is radius',
`pool` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `pool` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`pool_expired` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `pool_expired` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0 disabled\r\n', `enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0 disabled',
`allow_purchase` enum('yes','no') DEFAULT 'yes' COMMENT 'allow to show package in buy package page' `allow_purchase` enum('yes','no') DEFAULT 'yes' COMMENT 'allow to show package in buy package page',
`plan_type` ENUM('Business', 'Personal') DEFAULT 'Personal' COMMENT 'For switching plan according to user type'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
DROP TABLE IF EXISTS `tbl_pool`; DROP TABLE IF EXISTS `tbl_pool`;
@ -318,4 +320,4 @@ ALTER TABLE `tbl_bandwidth` ADD `burst` VARCHAR(128) NOT NULL DEFAULT '' AFTER `
ALTER TABLE `tbl_transactions` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`; ALTER TABLE `tbl_transactions` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`;
ALTER TABLE `tbl_user_recharges` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`; ALTER TABLE `tbl_user_recharges` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`;
ALTER TABLE `tbl_plans` CHANGE `allow_purchase` `prepaid` ENUM('yes','no') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'yes' COMMENT 'is prepaid'; ALTER TABLE `tbl_plans` CHANGE `allow_purchase` `prepaid` ENUM('yes','no') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'yes' COMMENT 'is prepaid';
ALTER TABLE `tbl_transactions` ADD `note` VARCHAR(256) NOT NULL DEFAULT '' COMMENT 'for note' AFTER `type`; ALTER TABLE `tbl_transactions` ADD `note` VARCHAR(256) NOT NULL DEFAULT '' COMMENT 'for note' AFTER `type`;

BIN
phpnuxbill.zip Normal file

Binary file not shown.

View File

@ -12,7 +12,7 @@ $ui->assign('_system_menu', 'customers');
$action = $routes['1']; $action = $routes['1'];
$ui->assign('_admin', $admin); $ui->assign('_admin', $admin);
if (empty($action)) { if (empty ($action)) {
$action = 'list'; $action = 'list';
} }
@ -96,8 +96,8 @@ 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");
} }
$id_customer = $routes['2']; $id_customer = $routes['2'];
$plan_id = $routes['3']; $plan_id = $routes['3'];
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('plan_id', $plan_id)->find_one(); $b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('plan_id', $plan_id)->find_one();
if ($b) { if ($b) {
$gateway = 'Recharge'; $gateway = 'Recharge';
@ -138,8 +138,8 @@ switch ($action) {
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
_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");
} }
$id_customer = $routes['2']; $id_customer = $routes['2'];
$plan_id = $routes['3']; $plan_id = $routes['3'];
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('plan_id', $plan_id)->find_one(); $b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('plan_id', $plan_id)->find_one();
if ($b) { if ($b) {
$p = ORM::for_table('tbl_plans')->where('id', $b['plan_id'])->find_one(); $p = ORM::for_table('tbl_plans')->where('id', $b['plan_id'])->find_one();
@ -169,7 +169,7 @@ switch ($action) {
r2(U . 'customers/view/' . $id_customer, 'e', 'Cannot find active plan'); r2(U . 'customers/view/' . $id_customer, 'e', 'Cannot find active plan');
break; break;
case 'sync': case 'sync':
$id_customer = $routes['2']; $id_customer = $routes['2'];
$bs = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('status', 'on')->findMany(); $bs = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('status', 'on')->findMany();
if ($bs) { if ($bs) {
$routers = []; $routers = [];
@ -198,7 +198,7 @@ switch ($action) {
case 'viewu': case 'viewu':
$customer = ORM::for_table('tbl_customers')->where('username', $routes['2'])->find_one(); $customer = ORM::for_table('tbl_customers')->where('username', $routes['2'])->find_one();
case 'view': case 'view':
$id = $routes['2']; $id = $routes['2'];
run_hook('view_customer'); #HOOK run_hook('view_customer'); #HOOK
if (!$customer) { if (!$customer) {
$customer = ORM::for_table('tbl_customers')->find_one($id); $customer = ORM::for_table('tbl_customers')->find_one($id);
@ -210,9 +210,9 @@ switch ($action) {
$customFields = ORM::for_table('tbl_customers_fields') $customFields = ORM::for_table('tbl_customers_fields')
->where('customer_id', $customer['id']) ->where('customer_id', $customer['id'])
->find_many(); ->find_many();
$v = $routes['3']; $v = $routes['3'];
if (empty($v)) { if (empty ($v)) {
$v = 'activation'; $v = 'activation';
} }
if ($v == 'order') { if ($v == 'order') {
@ -250,7 +250,7 @@ switch ($action) {
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) { if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) {
_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");
} }
$id = $routes['2']; $id = $routes['2'];
run_hook('edit_customer'); #HOOK run_hook('edit_customer'); #HOOK
$d = ORM::for_table('tbl_customers')->find_one($id); $d = ORM::for_table('tbl_customers')->find_one($id);
// Fetch the Customers Attributes values from the tbl_customers_fields table // Fetch the Customers Attributes values from the tbl_customers_fields table
@ -270,7 +270,7 @@ switch ($action) {
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
_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");
} }
$id = $routes['2']; $id = $routes['2'];
run_hook('delete_customer'); #HOOK run_hook('delete_customer'); #HOOK
$d = ORM::for_table('tbl_customers')->find_one($id); $d = ORM::for_table('tbl_customers')->find_one($id);
if ($d) { if ($d) {
@ -309,7 +309,8 @@ switch ($action) {
} catch (Throwable $e) { } catch (Throwable $e) {
} }
try { try {
if ($c) $c->delete(); if ($c)
$c->delete();
} catch (Exception $e) { } catch (Exception $e) {
} catch (Throwable $e) { } catch (Throwable $e) {
} }
@ -328,6 +329,7 @@ switch ($action) {
$address = _post('address'); $address = _post('address');
$phonenumber = _post('phonenumber'); $phonenumber = _post('phonenumber');
$service_type = _post('service_type'); $service_type = _post('service_type');
$account_type = _post('account_type');
$coordinates = _post('coordinates'); $coordinates = _post('coordinates');
//post Customers Attributes //post Customers Attributes
$custom_field_names = (array) $_POST['custom_field_name']; $custom_field_names = (array) $_POST['custom_field_name'];
@ -356,6 +358,7 @@ switch ($action) {
$d->password = $password; $d->password = $password;
$d->pppoe_password = $pppoe_password; $d->pppoe_password = $pppoe_password;
$d->email = $email; $d->email = $email;
$d->account_type = $account_type;
$d->fullname = $fullname; $d->fullname = $fullname;
$d->address = $address; $d->address = $address;
$d->created_by = $admin['id']; $d->created_by = $admin['id'];
@ -367,13 +370,13 @@ switch ($action) {
// Retrieve the customer ID of the newly created customer // Retrieve the customer ID of the newly created customer
$customerId = $d->id(); $customerId = $d->id();
// Save Customers Attributes details // Save Customers Attributes details
if (!empty($custom_field_names) && !empty($custom_field_values)) { if (!empty ($custom_field_names) && !empty ($custom_field_values)) {
$totalFields = min(count($custom_field_names), count($custom_field_values)); $totalFields = min(count($custom_field_names), count($custom_field_values));
for ($i = 0; $i < $totalFields; $i++) { for ($i = 0; $i < $totalFields; $i++) {
$name = $custom_field_names[$i]; $name = $custom_field_names[$i];
$value = $custom_field_values[$i]; $value = $custom_field_values[$i];
if (!empty($name)) { if (!empty ($name)) {
$customField = ORM::for_table('tbl_customers_fields')->create(); $customField = ORM::for_table('tbl_customers_fields')->create();
$customField->customer_id = $customerId; $customField->customer_id = $customerId;
$customField->field_name = $name; $customField->field_name = $name;
@ -391,6 +394,7 @@ switch ($action) {
case 'edit-post': case 'edit-post':
$username = Lang::phoneFormat(_post('username')); $username = Lang::phoneFormat(_post('username'));
$fullname = _post('fullname'); $fullname = _post('fullname');
$account_type = _post('account_type');
$password = _post('password'); $password = _post('password');
$pppoe_password = _post('pppoe_password'); $pppoe_password = _post('pppoe_password');
$email = _post('email'); $email = _post('email');
@ -425,8 +429,8 @@ switch ($action) {
} }
$oldusername = $d['username']; $oldusername = $d['username'];
$oldPppoePassword = $d['password']; $oldPppoePassword = $d['password'];
$oldPassPassword = $d['pppoe_password']; $oldPassPassword = $d['pppoe_password'];
$userDiff = false; $userDiff = false;
$pppoeDiff = false; $pppoeDiff = false;
$passDiff = false; $passDiff = false;
@ -454,6 +458,7 @@ switch ($action) {
$d->pppoe_password = $pppoe_password; $d->pppoe_password = $pppoe_password;
$d->fullname = $fullname; $d->fullname = $fullname;
$d->email = $email; $d->email = $email;
$d->account_type = $account_type;
$d->address = $address; $d->address = $address;
$d->phonenumber = $phonenumber; $d->phonenumber = $phonenumber;
$d->service_type = $service_type; $d->service_type = $service_type;
@ -464,7 +469,7 @@ switch ($action) {
// Update Customers Attributes values in tbl_customers_fields table // Update Customers Attributes values in tbl_customers_fields table
foreach ($customFields as $customField) { foreach ($customFields as $customField) {
$fieldName = $customField['field_name']; $fieldName = $customField['field_name'];
if (isset($_POST['custom_fields'][$fieldName])) { if (isset ($_POST['custom_fields'][$fieldName])) {
$customFieldValue = $_POST['custom_fields'][$fieldName]; $customFieldValue = $_POST['custom_fields'][$fieldName];
$customField->set('field_value', $customFieldValue); $customField->set('field_value', $customFieldValue);
$customField->save(); $customField->save();
@ -472,7 +477,7 @@ switch ($action) {
} }
// Add new Customers Attributess // Add new Customers Attributess
if (isset($_POST['custom_field_name']) && isset($_POST['custom_field_value'])) { if (isset ($_POST['custom_field_name']) && isset ($_POST['custom_field_value'])) {
$newCustomFieldNames = $_POST['custom_field_name']; $newCustomFieldNames = $_POST['custom_field_name'];
$newCustomFieldValues = $_POST['custom_field_value']; $newCustomFieldValues = $_POST['custom_field_value'];
@ -495,7 +500,7 @@ switch ($action) {
} }
// Delete Customers Attributess // Delete Customers Attributess
if (isset($_POST['delete_custom_fields'])) { if (isset ($_POST['delete_custom_fields'])) {
$fieldsToDelete = $_POST['delete_custom_fields']; $fieldsToDelete = $_POST['delete_custom_fields'];
foreach ($fieldsToDelete as $fieldName) { foreach ($fieldsToDelete as $fieldName) {
// Delete the Customers Attributes with the given field name // Delete the Customers Attributes with the given field name
@ -525,7 +530,7 @@ switch ($action) {
Mikrotik::removeHotspotActiveUser($client, $d['username']); Mikrotik::removeHotspotActiveUser($client, $d['username']);
} else { } else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
if (!empty($d['pppoe_password'])) { if (!empty ($d['pppoe_password'])) {
Mikrotik::setPpoeUser($client, $c['username'], $d['pppoe_password']); Mikrotik::setPpoeUser($client, $c['username'], $d['pppoe_password']);
} else { } else {
Mikrotik::setPpoeUser($client, $c['username'], $password); Mikrotik::setPpoeUser($client, $c['username'], $password);

View File

@ -47,26 +47,27 @@ switch ($action) {
} }
$ui->assign('_title', 'Order Plan'); $ui->assign('_title', 'Order Plan');
$ui->assign('_system_menu', 'package'); $ui->assign('_system_menu', 'package');
if (!empty($_SESSION['nux-router'])) { if (!empty ($_SESSION['nux-router'])) {
$account_type = $user['account_type'];
if ($_SESSION['nux-router'] == 'radius') { if ($_SESSION['nux-router'] == 'radius') {
$radius_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many(); $radius_pppoe = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where('is_radius', 1)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many();
$radius_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many(); $radius_hotspot = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where('is_radius', 1)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many();
} else { } else {
$routers = ORM::for_table('tbl_routers')->where('id', $_SESSION['nux-router'])->find_many(); $routers = ORM::for_table('tbl_routers')->where('id', $_SESSION['nux-router'])->find_many();
$rs = []; $rs = [];
foreach ($routers as $r) { foreach ($routers as $r) {
$rs[] = $r['name']; $rs[] = $r['name'];
} }
$plans_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many(); $plans_pppoe = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many();
$plans_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many(); $plans_hotspot = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many();
} }
} else { } else {
$radius_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many(); $radius_pppoe = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where('is_radius', 1)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many();
$radius_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many(); $radius_hotspot = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where('is_radius', 1)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many();
$routers = ORM::for_table('tbl_routers')->find_many(); $routers = ORM::for_table('tbl_routers')->find_many();
$plans_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 0)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many(); $plans_pppoe = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where('is_radius', 0)->where('type', 'PPPOE')->where('prepaid', 'yes')->find_many();
$plans_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 0)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many(); $plans_hotspot = ORM::for_table('tbl_plans')->where('plan_type', $account_type)->where('enabled', '1')->where('is_radius', 0)->where('type', 'Hotspot')->where('prepaid', 'yes')->find_many();
} }
$ui->assign('routers', $routers); $ui->assign('routers', $routers);
$ui->assign('radius_pppoe', $radius_pppoe); $ui->assign('radius_pppoe', $radius_pppoe);
@ -84,7 +85,7 @@ switch ($action) {
run_hook('custome run_hook('custome
r_find_unpaid'); #HOOK r_find_unpaid'); #HOOK
if ($d) { if ($d) {
if (empty($d['pg_url_payment'])) { if (empty ($d['pg_url_payment'])) {
r2(U . "order/buy/" . $trx['routers_id'] . '/' . $trx['plan_id'], 'w', Lang::T("Checking payment")); r2(U . "order/buy/" . $trx['routers_id'] . '/' . $trx['plan_id'], 'w', Lang::T("Checking payment"));
} else { } else {
r2(U . "order/view/" . $d['id'] . '/check/', 's', Lang::T("You have unpaid transaction")); r2(U . "order/view/" . $d['id'] . '/check/', 's', Lang::T("You have unpaid transaction"));
@ -100,11 +101,11 @@ switch ($action) {
->find_one($trxid); ->find_one($trxid);
run_hook('customer_view_payment'); #HOOK run_hook('customer_view_payment'); #HOOK
// jika tidak ditemukan, berarti punya orang lain // jika tidak ditemukan, berarti punya orang lain
if (empty($trx)) { if (empty ($trx)) {
r2(U . "order/package", 'w', Lang::T("Payment not found")); r2(U . "order/package", 'w', Lang::T("Payment not found"));
} }
// jika url kosong, balikin ke buy // jika url kosong, balikin ke buy
if (empty($trx['pg_url_payment'])) { if (empty ($trx['pg_url_payment'])) {
r2(U . "order/buy/" . (($trx['routers_id'] == 0) ? $trx['routers'] : $trx['routers_id']) . '/' . $trx['plan_id'], 'w', Lang::T("Checking payment")); r2(U . "order/buy/" . (($trx['routers_id'] == 0) ? $trx['routers'] : $trx['routers_id']) . '/' . $trx['plan_id'], 'w', Lang::T("Checking payment"));
} }
if ($routes['3'] == 'check') { if ($routes['3'] == 'check') {
@ -125,7 +126,7 @@ switch ($action) {
->where('username', $user['username']) ->where('username', $user['username'])
->find_one($trxid); ->find_one($trxid);
} }
if (empty($trx)) { if (empty ($trx)) {
r2(U . "order/package", 'e', Lang::T("Transaction Not found")); r2(U . "order/package", 'e', Lang::T("Transaction Not found"));
} }
$router = Mikrotik::info($trx['routers']); $router = Mikrotik::info($trx['routers']);
@ -146,7 +147,7 @@ switch ($action) {
r2(U . "order/package", 'e', Lang::T("Balance not enabled")); r2(U . "order/package", 'e', Lang::T("Balance not enabled"));
} }
$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"));
} }
if (!$plan['enabled']) { if (!$plan['enabled']) {
@ -180,7 +181,7 @@ switch ($action) {
$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']);
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"));
} }
if (!$plan['enabled']) { if (!$plan['enabled']) {
@ -191,10 +192,10 @@ switch ($action) {
} else { } else {
$router_name = $plan['routers']; $router_name = $plan['routers'];
} }
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']);
if (!empty($add_cost)) { if (!empty ($add_cost)) {
$ui->assign('bills', $bills); $ui->assign('bills', $bills);
$ui->assign('add_cost', $add_cost); $ui->assign('add_cost', $add_cost);
$plan['price'] += $add_cost; $plan['price'] += $add_cost;
@ -289,7 +290,7 @@ switch ($action) {
$ui->display('user-selectGateway.tpl'); $ui->display('user-selectGateway.tpl');
break; break;
} else { } else {
if (empty($pgs[0])) { if (empty ($pgs[0])) {
sendTelegram("Payment Gateway not set, please set it in Settings"); sendTelegram("Payment Gateway not set, please set it in Settings");
_log(Lang::T("Payment Gateway not set, please set it in Settings")); _log(Lang::T("Payment Gateway not set, please set it in Settings"));
r2(U . "home", 'e', Lang::T("Failed to create Transaction..")); r2(U . "home", 'e', Lang::T("Failed to create Transaction.."));
@ -299,12 +300,12 @@ switch ($action) {
} }
case 'buy': case 'buy':
$gateway = _post('gateway'); $gateway = _post('gateway');
if (empty($gateway) && !empty($_SESSION['gateway'])) { if (empty ($gateway) && !empty ($_SESSION['gateway'])) {
$gateway = $_SESSION['gateway']; $gateway = $_SESSION['gateway'];
} else if (!empty($gateway)) { } else if (!empty ($gateway)) {
$_SESSION['gateway'] = $gateway; $_SESSION['gateway'] = $gateway;
} }
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"));
} }
run_hook('customer_buy_plan'); #HOOK run_hook('customer_buy_plan'); #HOOK
@ -321,7 +322,7 @@ switch ($action) {
$router['name'] = 'balance'; $router['name'] = 'balance';
} }
$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($router) || empty($plan)) { if (empty ($router) || empty ($plan)) {
r2(U . "order/package", 'e', Lang::T("Plan Not found")); r2(U . "order/package", 'e', Lang::T("Plan Not found"));
} }
$d = ORM::for_table('tbl_payment_gateway') $d = ORM::for_table('tbl_payment_gateway')
@ -344,7 +345,7 @@ switch ($action) {
if ($router['name'] != 'balance') { if ($router['name'] != 'balance') {
list($bills, $add_cost) = User::getBills($id_customer); list($bills, $add_cost) = User::getBills($id_customer);
} }
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'];
$d->gateway = $gateway; $d->gateway = $gateway;
@ -352,16 +353,16 @@ switch ($action) {
$d->plan_name = $plan['name_plan']; $d->plan_name = $plan['name_plan'];
$d->routers_id = $router['id']; $d->routers_id = $router['id'];
$d->routers = $router['name']; $d->routers = $router['name'];
if ($plan['validity_unit'] == 'Period') { if ($plan['validity_unit'] == 'Period') {
// 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);
} else {
$d->price = ($add_inv + $add_cost);
}
} else {
$d->price = ($plan['price'] + $add_cost); $d->price = ($plan['price'] + $add_cost);
} else {
$d->price = ($add_inv + $add_cost);
}
} else {
$d->price = ($plan['price'] + $add_cost);
} }
//$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');
@ -375,16 +376,16 @@ switch ($action) {
$d->plan_name = $plan['name_plan']; $d->plan_name = $plan['name_plan'];
$d->routers_id = $router['id']; $d->routers_id = $router['id'];
$d->routers = $router['name']; $d->routers = $router['name'];
if ($plan['validity_unit'] == 'Period') { if ($plan['validity_unit'] == 'Period') {
// 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);
} else {
$d->price = ($add_inv + $add_cost);
}
} else {
$d->price = ($plan['price'] + $add_cost); $d->price = ($plan['price'] + $add_cost);
} else {
$d->price = ($add_inv + $add_cost);
}
} else {
$d->price = ($plan['price'] + $add_cost);
} }
//$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

@ -12,7 +12,7 @@ $action = $routes['1'];
$ui->assign('_admin', $admin); $ui->assign('_admin', $admin);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
_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");
} }
use PEAR2\Net\RouterOS; use PEAR2\Net\RouterOS;
@ -60,7 +60,7 @@ switch ($action) {
$rate = $plan['rate_up'] . $unitup . "/" . $plan['rate_down'] . $unitdown; $rate = $plan['rate_up'] . $unitup . "/" . $plan['rate_down'] . $unitdown;
Mikrotik::addHotspotPlan($client, $plan['name_plan'], $plan['shared_users'], $rate); Mikrotik::addHotspotPlan($client, $plan['name_plan'], $plan['shared_users'], $rate);
$log .= "DONE : $plan[name_plan], $plan[shared_users], $rate<br>"; $log .= "DONE : $plan[name_plan], $plan[shared_users], $rate<br>";
if (!empty($plan['pool_expired'])) { if (!empty ($plan['pool_expired'])) {
Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $plan['pool_expired'], $plan['pool_expired']); Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $plan['pool_expired'], $plan['pool_expired']);
$log .= "DONE Expired : EXPIRED NUXBILL $plan[pool_expired]<br>"; $log .= "DONE Expired : EXPIRED NUXBILL $plan[pool_expired]<br>";
} }
@ -105,7 +105,7 @@ switch ($action) {
$rate = $plan['rate_up'] . $unitup . "/" . $plan['rate_down'] . $unitdown; $rate = $plan['rate_up'] . $unitup . "/" . $plan['rate_down'] . $unitdown;
Mikrotik::addPpoePlan($client, $plan['name_plan'], $plan['pool'], $rate); Mikrotik::addPpoePlan($client, $plan['name_plan'], $plan['pool'], $rate);
$log .= "DONE : $plan[name_plan], $plan[pool], $rate<br>"; $log .= "DONE : $plan[name_plan], $plan[pool], $rate<br>";
if (!empty($plan['pool_expired'])) { if (!empty ($plan['pool_expired'])) {
Mikrotik::setPpoePlan($client, 'EXPIRED NUXBILL ' . $plan['pool_expired'], $plan['pool_expired'], '512K/512K'); Mikrotik::setPpoePlan($client, 'EXPIRED NUXBILL ' . $plan['pool_expired'], $plan['pool_expired'], '512K/512K');
$log .= "DONE Expired : EXPIRED NUXBILL $plan[pool_expired]<br>"; $log .= "DONE Expired : EXPIRED NUXBILL $plan[pool_expired]<br>";
} }
@ -142,7 +142,7 @@ switch ($action) {
break; break;
case 'edit': case 'edit':
$id = $routes['2']; $id = $routes['2'];
$d = ORM::for_table('tbl_plans')->find_one($id); $d = ORM::for_table('tbl_plans')->find_one($id);
if ($d) { if ($d) {
$ui->assign('d', $d); $ui->assign('d', $d);
@ -158,7 +158,7 @@ switch ($action) {
break; break;
case 'delete': case 'delete':
$id = $routes['2']; $id = $routes['2'];
$d = ORM::for_table('tbl_plans')->find_one($id); $d = ORM::for_table('tbl_plans')->find_one($id);
if ($d) { if ($d) {
@ -185,6 +185,7 @@ switch ($action) {
case 'add-post': case 'add-post':
$name = _post('name'); $name = _post('name');
$plan_type = _post('plan_type'); //Personal / Business
$radius = _post('radius'); $radius = _post('radius');
$typebp = _post('typebp'); $typebp = _post('typebp');
$limit_type = _post('limit_type'); $limit_type = _post('limit_type');
@ -213,7 +214,7 @@ switch ($action) {
if ($name == '' or $id_bw == '' or $price == '' or $validity == '') { if ($name == '' or $id_bw == '' or $price == '' or $validity == '') {
$msg .= Lang::T('All field is required') . '<br>'; $msg .= Lang::T('All field is required') . '<br>';
} }
if (empty($radius)) { if (empty ($radius)) {
if ($routers == '') { if ($routers == '') {
$msg .= Lang::T('All field is required') . '<br>'; $msg .= Lang::T('All field is required') . '<br>';
} }
@ -251,6 +252,7 @@ switch ($action) {
$d->price = $price; $d->price = $price;
$d->type = 'Hotspot'; $d->type = 'Hotspot';
$d->typebp = $typebp; $d->typebp = $typebp;
$d->plan_type = $plan_type;
$d->limit_type = $limit_type; $d->limit_type = $limit_type;
$d->time_limit = $time_limit; $d->time_limit = $time_limit;
$d->time_unit = $time_unit; $d->time_unit = $time_unit;
@ -259,7 +261,7 @@ switch ($action) {
$d->validity = $validity; $d->validity = $validity;
$d->validity_unit = $validity_unit; $d->validity_unit = $validity_unit;
$d->shared_users = $sharedusers; $d->shared_users = $sharedusers;
if (!empty($radius)) { if (!empty ($radius)) {
$d->is_radius = 1; $d->is_radius = 1;
$d->routers = ''; $d->routers = '';
} else { } else {
@ -279,7 +281,7 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers); $mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addHotspotPlan($client, $name, $sharedusers, $rate); Mikrotik::addHotspotPlan($client, $name, $sharedusers, $rate);
if (!empty($pool_expired)) { if (!empty ($pool_expired)) {
Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired); Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired);
} }
} }
@ -295,6 +297,7 @@ switch ($action) {
case 'edit-post': case 'edit-post':
$id = _post('id'); $id = _post('id');
$name = _post('name'); $name = _post('name');
$plan_type = _post('plan_type');
$id_bw = _post('id_bw'); $id_bw = _post('id_bw');
$typebp = _post('typebp'); $typebp = _post('typebp');
$price = _post('price'); $price = _post('price');
@ -354,7 +357,7 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers); $mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::setHotspotPlan($client, $name, $sharedusers, $rate); Mikrotik::setHotspotPlan($client, $name, $sharedusers, $rate);
if (!empty($pool_expired)) { if (!empty ($pool_expired)) {
Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired); Mikrotik::setHotspotExpiredPlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired);
} }
} }
@ -367,6 +370,7 @@ switch ($action) {
$d->time_limit = $time_limit; $d->time_limit = $time_limit;
$d->time_unit = $time_unit; $d->time_unit = $time_unit;
$d->data_limit = $data_limit; $d->data_limit = $data_limit;
$d->plan_type = $plan_type;
$d->data_unit = $data_unit; $d->data_unit = $data_unit;
$d->validity = $validity; $d->validity = $validity;
$d->validity_unit = $validity_unit; $d->validity_unit = $validity_unit;
@ -414,7 +418,7 @@ switch ($action) {
case 'pppoe-edit': case 'pppoe-edit':
$ui->assign('_title', Lang::T('PPPOE Plans')); $ui->assign('_title', Lang::T('PPPOE Plans'));
$id = $routes['2']; $id = $routes['2'];
$d = ORM::for_table('tbl_plans')->find_one($id); $d = ORM::for_table('tbl_plans')->find_one($id);
if ($d) { if ($d) {
$ui->assign('d', $d); $ui->assign('d', $d);
@ -435,7 +439,7 @@ switch ($action) {
break; break;
case 'pppoe-delete': case 'pppoe-delete':
$id = $routes['2']; $id = $routes['2'];
$d = ORM::for_table('tbl_plans')->find_one($id); $d = ORM::for_table('tbl_plans')->find_one($id);
if ($d) { if ($d) {
@ -461,6 +465,7 @@ switch ($action) {
case 'pppoe-add-post': case 'pppoe-add-post':
$name = _post('name_plan'); $name = _post('name_plan');
$plan_type = _post('plan_type');
$radius = _post('radius'); $radius = _post('radius');
$id_bw = _post('id_bw'); $id_bw = _post('id_bw');
$price = _post('price'); $price = _post('price');
@ -484,7 +489,7 @@ switch ($action) {
if ($name == '' or $id_bw == '' or $price == '' or $validity == '' or $pool == '') { if ($name == '' or $id_bw == '' or $price == '' or $validity == '' or $pool == '') {
$msg .= Lang::T('All field is required') . '<br>'; $msg .= Lang::T('All field is required') . '<br>';
} }
if (empty($radius)) { if (empty ($radius)) {
if ($routers == '') { if ($routers == '') {
$msg .= Lang::T('All field is required') . '<br>'; $msg .= Lang::T('All field is required') . '<br>';
} }
@ -520,10 +525,11 @@ switch ($action) {
$d->name_plan = $name; $d->name_plan = $name;
$d->id_bw = $id_bw; $d->id_bw = $id_bw;
$d->price = $price; $d->price = $price;
$d->plan_type = $plan_type;
$d->validity = $validity; $d->validity = $validity;
$d->validity_unit = $validity_unit; $d->validity_unit = $validity_unit;
$d->pool = $pool; $d->pool = $pool;
if (!empty($radius)) { if (!empty ($radius)) {
$d->is_radius = 1; $d->is_radius = 1;
$d->routers = ''; $d->routers = '';
} else { } else {
@ -543,7 +549,7 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers); $mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addPpoePlan($client, $name, $pool, $rate); 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'); Mikrotik::setPpoePlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired, '512K/512K');
} }
} }
@ -556,6 +562,7 @@ switch ($action) {
case 'edit-pppoe-post': case 'edit-pppoe-post':
$id = _post('id'); $id = _post('id');
$plan_type = _post('plan_type');
$name = _post('name_plan'); $name = _post('name_plan');
$id_bw = _post('id_bw'); $id_bw = _post('id_bw');
$price = _post('price'); $price = _post('price');
@ -611,7 +618,7 @@ switch ($action) {
$mikrotik = Mikrotik::info($routers); $mikrotik = Mikrotik::info($routers);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::setPpoePlan($client, $name, $pool, $rate); 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'); Mikrotik::setPpoePlan($client, 'EXPIRED NUXBILL ' . $pool_expired, $pool_expired, '512K/512K');
} }
} }
@ -619,6 +626,7 @@ switch ($action) {
$d->name_plan = $name; $d->name_plan = $name;
$d->id_bw = $id_bw; $d->id_bw = $id_bw;
$d->price = $price; $d->price = $price;
$d->plan_type = $plan_type;
$d->validity = $validity; $d->validity = $validity;
$d->validity_unit = $validity_unit; $d->validity_unit = $validity_unit;
$d->routers = $routers; $d->routers = $routers;
@ -657,14 +665,14 @@ switch ($action) {
break; break;
case 'balance-edit': case 'balance-edit':
$ui->assign('_title', Lang::T('Balance Plans')); $ui->assign('_title', Lang::T('Balance Plans'));
$id = $routes['2']; $id = $routes['2'];
$d = ORM::for_table('tbl_plans')->find_one($id); $d = ORM::for_table('tbl_plans')->find_one($id);
$ui->assign('d', $d); $ui->assign('d', $d);
run_hook('view_edit_balance'); #HOOK run_hook('view_edit_balance'); #HOOK
$ui->display('balance-edit.tpl'); $ui->display('balance-edit.tpl');
break; break;
case 'balance-delete': case 'balance-delete':
$id = $routes['2']; $id = $routes['2'];
$d = ORM::for_table('tbl_plans')->find_one($id); $d = ORM::for_table('tbl_plans')->find_one($id);
if ($d) { if ($d) {

View File

@ -95,6 +95,16 @@
</select> </select>
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-md-3 control-label">{Lang::T('Account Type')}</label>
<div class="col-md-9">
<select class="form-control" id="service_type" name="service_type">
<option value="Personal" {if $d['account_type'] eq 'Personal' }selected{/if}>Personal
</option>
<option value="Business" {if $d['account_type'] eq 'Business' }selected{/if}>Business</option>
</select>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -98,6 +98,17 @@
</select> </select>
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-md-3 control-label">{Lang::T('Account Type')}</label>
<div class="col-md-9">
<select class="form-control" id="account_type" name="account_type">
<option value="Personal" {if $d['account_type'] eq 'Personal' }selected{/if}>Personal
</option>
<option value="Business" {if $d['account_type'] eq 'Business' }selected{/if}>Business</option>
</select>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -37,6 +37,7 @@
<thead> <thead>
<tr> <tr>
<th>{Lang::T('Username')}</th> <th>{Lang::T('Username')}</th>
<th>{Lang::T('Account Type')}</th>
<th>{Lang::T('Full Name')}</th> <th>{Lang::T('Full Name')}</th>
<th>{Lang::T('Balance')}</th> <th>{Lang::T('Balance')}</th>
<th>{Lang::T('Phone Number')}</th> <th>{Lang::T('Phone Number')}</th>
@ -52,6 +53,7 @@
<tr> <tr>
<td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'" <td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'"
style="cursor:pointer;">{$ds['username']}</td> style="cursor:pointer;">{$ds['username']}</td>
<td>{$ds['account_type']}</td>
<td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'" <td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'"
style="cursor: pointer;">{$ds['fullname']}</td> style="cursor: pointer;">{$ds['fullname']}</td>
<td>{Lang::moneyFormat($ds['balance'])}</td> <td>{Lang::moneyFormat($ds['balance'])}</td>

View File

@ -20,6 +20,14 @@
<input type="radio" name="prepaid" onclick="postPaid()" value="no"> Postpaid <input type="radio" name="prepaid" onclick="postPaid()" value="no"> Postpaid
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Plan Type')}</label>
<div class="col-md-10">
<input type="radio" name="plan_type" value="Personal" checked> Personal
<input type="radio" name="plan_type" value="Business"> Business
</div>
</div>
{if $_c['radius_enable']} {if $_c['radius_enable']}
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">Radius</label> <label class="col-md-2 control-label">Radius</label>

View File

@ -14,6 +14,8 @@
<input type="radio" name="enabled" value="0" {if $d['enabled'] == 0}checked{/if}> Disable <input type="radio" name="enabled" value="0" {if $d['enabled'] == 0}checked{/if}> Disable
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Type')}</label> <label class="col-md-2 control-label">{Lang::T('Type')}</label>
<div class="col-md-10"> <div class="col-md-10">
@ -24,6 +26,19 @@
{if $d['prepaid'] == no}checked{/if}> Postpaid {if $d['prepaid'] == no}checked{/if}> Postpaid
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Plan Type')}</label>
<div class="col-md-10">
<input type="radio" name="plan_type" value="Personal"
{if $d['plan_type'] == 'Personal'}checked{/if}>
Personal
<input type="radio" name="plan_type" value="Business"
{if $d['plan_type'] == 'Business'}checked{/if}> Business
</div>
</div>
{if $_c['radius_enable'] and $d['is_radius']} {if $_c['radius_enable'] and $d['is_radius']}
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">Radius</label> <label class="col-md-2 control-label">Radius</label>

View File

@ -53,7 +53,8 @@
<tr {if $ds['enabled'] != 1}class="danger" title="disabled" <tr {if $ds['enabled'] != 1}class="danger" title="disabled"
{elseif $ds['prepaid'] != 'yes'}class="warning" title="Postpaid" {/if}> {elseif $ds['prepaid'] != 'yes'}class="warning" title="Postpaid" {/if}>
<td class="headcol">{$ds['name_plan']}</td> <td class="headcol">{$ds['name_plan']}</td>
<td>{$ds['typebp']}</td> <td>{$ds['plan_type']}</td>
<td>{$ds['typebp']}</td>
<td>{$ds['name_bw']}</td> <td>{$ds['name_bw']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td> <td>{Lang::moneyFormat($ds['price'])}</td>
<td>{$ds['time_limit']} {$ds['time_unit']}</td> <td>{$ds['time_limit']} {$ds['time_unit']}</td>

View File

@ -45,6 +45,7 @@
<tr> <tr>
<th>{Lang::T('Username')}</th> <th>{Lang::T('Username')}</th>
<th>{Lang::T('Plan Name')}</th> <th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Plan Type')}</th>
<th>{Lang::T('Type')}</th> <th>{Lang::T('Type')}</th>
<th>{Lang::T('Created On')}</th> <th>{Lang::T('Created On')}</th>
<th>{Lang::T('Expires On')}</th> <th>{Lang::T('Expires On')}</th>
@ -59,6 +60,7 @@
<td><a href="{$_url}customers/viewu/{$ds['username']}">{$ds['username']}</a></td> <td><a href="{$_url}customers/viewu/{$ds['username']}">{$ds['username']}</a></td>
<td>{$ds['namebp']}</td> <td>{$ds['namebp']}</td>
<td>{$ds['type']}</td> <td>{$ds['type']}</td>
<td>{$ds['plan_type']}</td>
<td>{Lang::dateAndTimeFormat($ds['recharged_on'],$ds['recharged_time'])}</td> <td>{Lang::dateAndTimeFormat($ds['recharged_on'],$ds['recharged_time'])}</td>
<td>{Lang::dateAndTimeFormat($ds['expiration'],$ds['time'])}</td> <td>{Lang::dateAndTimeFormat($ds['expiration'],$ds['time'])}</td>
<td>{$ds['method']}</td> <td>{$ds['method']}</td>

View File

@ -20,6 +20,15 @@
<input type="radio" name="prepaid" onclick="postPaid()" value="no"> Postpaid <input type="radio" name="prepaid" onclick="postPaid()" value="no"> Postpaid
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Plan Type')}</label>
<div class="col-md-10">
<input type="radio" name="plan_type" value="Personal" checked> Personal
<input type="radio" name="plan_type" value="Business"> Business
</div>
</div>
{if $_c['radius_enable']} {if $_c['radius_enable']}
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">Radius</label> <label class="col-md-2 control-label">Radius</label>

View File

@ -22,6 +22,17 @@
<input type="radio" name="prepaid" onclick="postPaid()" value="no" {if $d['prepaid'] == no}checked{/if}> Postpaid <input type="radio" name="prepaid" onclick="postPaid()" value="no" {if $d['prepaid'] == no}checked{/if}> Postpaid
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Plan Type')}</label>
<div class="col-md-10">
<input type="radio" name="plan_type" value="Personal"
{if $d['plan_type'] == 'Personal'}checked{/if}>
Personal
<input type="radio" name="plan_type" value="Business"
{if $d['plan_type'] == 'Business'}checked{/if}> Business
</div>
</div>
{if $_c['radius_enable'] and $d['is_radius']} {if $_c['radius_enable'] and $d['is_radius']}
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">Radius</label> <label class="col-md-2 control-label">Radius</label>

View File

@ -36,6 +36,7 @@
<thead> <thead>
<tr> <tr>
<th>{Lang::T('Plan Name')}</th> <th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Plan Type')}</th>
<th>{Lang::T('Bandwidth Plans')}</th> <th>{Lang::T('Bandwidth Plans')}</th>
<th>{Lang::T('Plan Price')}</th> <th>{Lang::T('Plan Price')}</th>
<th>{Lang::T('Plan Validity')}</th> <th>{Lang::T('Plan Validity')}</th>
@ -51,6 +52,7 @@
<tr {if $ds['enabled'] != 1}class="danger" title="disabled" <tr {if $ds['enabled'] != 1}class="danger" title="disabled"
{elseif $ds['prepaid'] != 'yes'}class="warning" title="Postpaid" {/if}> {elseif $ds['prepaid'] != 'yes'}class="warning" title="Postpaid" {/if}>
<td>{$ds['name_plan']}</td> <td>{$ds['name_plan']}</td>
<td>{$ds['plan_type']}</td>
<td>{$ds['name_bw']}</td> <td>{$ds['name_bw']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td> <td>{Lang::moneyFormat($ds['price'])}</td>
<td>{$ds['validity']} {$ds['validity_unit']}</td> <td>{$ds['validity']} {$ds['validity_unit']}</td>