diff --git a/system/autoload/Package.php b/system/autoload/Package.php
index 3b2547db..5b4add48 100644
--- a/system/autoload/Package.php
+++ b/system/autoload/Package.php
@@ -102,6 +102,10 @@ class Package
return self::rechargeBalance($c, $p, $gateway, $channel);
}
+ if ($router_name == 'Custom Balance') {
+ return self::rechargeCustomBalance($c, $p, $gateway, $channel);
+ }
+
/**
* 1 Customer only can have 1 PPPOE and 1 Hotspot Plan, 1 prepaid and 1 postpaid
*/
@@ -499,6 +503,71 @@ class Package
return $t->id();
}
+ public static function rechargeCustomBalance($customer, $plan, $gateway, $channel, $note = '')
+ {
+ global $admin, $config;
+ $plan = ORM::for_table('tbl_payment_gateway')
+ ->where('username', $customer['username'])
+ ->where('routers', 'Custom Balance')
+ ->where('status', '1')
+ ->find_one();
+ if (!$plan) {
+ return false;
+ }
+ // insert table transactions
+ $t = ORM::for_table('tbl_transactions')->create();
+ $t->invoice = $inv = "INV-" . Package::_raid();
+ $t->username = $customer['username'];
+ $t->plan_name = 'Custom Balance';
+ $t->price = $plan['price'];
+ $t->recharged_on = date("Y-m-d");
+ $t->recharged_time = date("H:i:s");
+ $t->expiration = date("Y-m-d");
+ $t->time = date("H:i:s");
+ $t->method = "$gateway - $channel";
+ $t->routers = 'balance';
+ $t->type = "Balance";
+ $t->note = $note;
+ if ($admin) {
+ $t->admin_id = ($admin['id']) ? $admin['id'] : '0';
+ } else {
+ $t->admin_id = '0';
+ }
+ $t->save();
+
+ $balance_before = $customer['balance'];
+ Balance::plus($customer['id'], $plan['price']);
+ $balance = $customer['balance'] + $plan['price'];
+
+ $textInvoice = Lang::getNotifText('invoice_balance');
+ $textInvoice = str_replace('[[company_name]]', $config['CompanyName'], $textInvoice);
+ $textInvoice = str_replace('[[address]]', $config['address'], $textInvoice);
+ $textInvoice = str_replace('[[phone]]', $config['phone'], $textInvoice);
+ $textInvoice = str_replace('[[invoice]]', $inv, $textInvoice);
+ $textInvoice = str_replace('[[date]]', Lang::dateTimeFormat(date("Y-m-d H:i:s")), $textInvoice);
+ $textInvoice = str_replace('[[trx_date]]', Lang::dateTimeFormat(date("Y-m-d H:i:s")), $textInvoice);
+ $textInvoice = str_replace('[[payment_gateway]]', $gateway, $textInvoice);
+ $textInvoice = str_replace('[[payment_channel]]', $channel, $textInvoice);
+ $textInvoice = str_replace('[[type]]', 'Balance', $textInvoice);
+ $textInvoice = str_replace('[[plan_name]]', $plan['name_plan'], $textInvoice);
+ $textInvoice = str_replace('[[plan_price]]', Lang::moneyFormat($plan['price']), $textInvoice);
+ $textInvoice = str_replace('[[name]]', $customer['fullname'], $textInvoice);
+ $textInvoice = str_replace('[[user_name]]', $customer['username'], $textInvoice);
+ $textInvoice = str_replace('[[user_password]]', $customer['password'], $textInvoice);
+ $textInvoice = str_replace('[[footer]]', $config['note'], $textInvoice);
+ $textInvoice = str_replace('[[balance_before]]', Lang::moneyFormat($balance_before), $textInvoice);
+ $textInvoice = str_replace('[[balance]]', Lang::moneyFormat($balance), $textInvoice);
+
+ if ($config['user_notification_payment'] == 'sms') {
+ Message::sendSMS($customer['phonenumber'], $textInvoice);
+ } else if ($config['user_notification_payment'] == 'wa') {
+ Message::sendWhatsapp($customer['phonenumber'], $textInvoice);
+ } else if ($config['user_notification_payment'] == 'email') {
+ Message::sendEmail($customer['email'], '[' . $config['CompanyName'] . '] ' . Lang::T("Invoice") . ' ' . $inv, $textInvoice);
+ }
+ return $t->id();
+ }
+
public static function _raid()
{
return ORM::for_table('tbl_transactions')->max('id') + 1;
diff --git a/system/controllers/order.php b/system/controllers/order.php
index adaaf826..12300af7 100644
--- a/system/controllers/order.php
+++ b/system/controllers/order.php
@@ -416,6 +416,16 @@ switch ($action) {
if ($tax_enable === 'yes') {
$ui->assign('tax', $tax);
}
+
+ if (_post('custom') == '1') {
+ if (_post('amount') > 0) {
+ $ui->assign('custom', '1');
+ $ui->assign('amount', _post('amount'));
+ } else {
+ r2(U . "order/balance", 'e', Lang::T("Please enter amount"));
+ }
+ }
+
$ui->assign('route2', $routes[2]);
$ui->assign('route3', $routes[3]);
$ui->assign('add_cost', $add_cost);
@@ -445,98 +455,140 @@ switch ($action) {
include $PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $gateway . '.php';
call_user_func($gateway . '_validate_config');
- $plan = ORM::for_table('tbl_plans')->where('enabled', '1')->find_one($routes['3']);
- if ($plan['is_radius'] == '1') {
- $router['id'] = 0;
- $router['name'] = 'radius';
- } else if ($routes['2'] > 0) {
- $router = ORM::for_table('tbl_routers')->where('enabled', '1')->find_one($routes['2']);
- } else {
- $router['id'] = 0;
- $router['name'] = 'balance';
- }
- if (empty($router) || empty($plan)) {
- r2(U . "order/package", 'e', Lang::T("Plan Not found"));
- }
- $d = ORM::for_table('tbl_payment_gateway')
- ->where('username', $user['username'])
- ->where('status', 1)
- ->find_one();
- if ($d) {
- if ($d['pg_url_payment']) {
- r2(U . "order/view/" . $d['id'], 'w', Lang::T("You already have unpaid transaction, cancel it or pay it."));
- } else {
- if ($gateway == $d['gateway']) {
- $id = $d['id'];
+ switch (_post('custom')) {
+ case '1':
+ $amount = _post('amount');
+ $amount = (float) $amount;
+
+ if ($amount <= 0) {
+ r2(U . "order/gateway/" . $routes[2] . '/' . $routes[3], 'w', Lang::T("Please enter amount"));
+ }
+
+ $d = ORM::for_table('tbl_payment_gateway')
+ ->where('username', $user['username'])
+ ->where('status', 1)
+ ->find_one();
+ if ($d) {
+ if ($d['pg_url_payment']) {
+ r2(U . "order/view/" . $d['id'], 'w', Lang::T("You already have unpaid transaction, cancel it or pay it."));
+ } else {
+ if ($gateway == $d['gateway']) {
+ $id = $d['id'];
+ } else {
+ $d->status = 4;
+ $d->save();
+ }
+ }
+ }
+ $d = ORM::for_table('tbl_payment_gateway')->create();
+ $d->username = $user['username'];
+ $d->gateway = $gateway;
+ $d->plan_id = 0;
+ $d->plan_name = 'Custom';
+ $d->routers_id = '0';
+ $d->routers = 'Custom Balance';
+ $d->price = $amount;
+ $d->created_date = date('Y-m-d H:i:s');
+ $d->status = 1;
+ $d->save();
+ $id = $d->id;
+ break;
+
+ default:
+ $plan = ORM::for_table('tbl_plans')->where('enabled', '1')->find_one($routes['3']);
+ if ($plan['is_radius'] == '1') {
+ $router['id'] = 0;
+ $router['name'] = 'radius';
+ } else if ($routes['2'] > 0) {
+ $router = ORM::for_table('tbl_routers')->where('enabled', '1')->find_one($routes['2']);
} else {
- $d->status = 4;
+ $router['id'] = 0;
+ $router['name'] = 'balance';
+ }
+ if (empty($router) || empty($plan)) {
+ r2(U . "order/package", 'e', Lang::T("Plan Not found"));
+ }
+ $d = ORM::for_table('tbl_payment_gateway')
+ ->where('username', $user['username'])
+ ->where('status', 1)
+ ->find_one();
+ if ($d) {
+ if ($d['pg_url_payment']) {
+ r2(U . "order/view/" . $d['id'], 'w', Lang::T("You already have unpaid transaction, cancel it or pay it."));
+ } else {
+ if ($gateway == $d['gateway']) {
+ $id = $d['id'];
+ } else {
+ $d->status = 4;
+ $d->save();
+ }
+ }
+ }
+ $add_cost = 0;
+ $tax = 0;
+ if ($router['name'] != 'balance') {
+ 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)) {
+ $d = ORM::for_table('tbl_payment_gateway')->create();
+ $d->username = $user['username'];
+ $d->gateway = $gateway;
+ $d->plan_id = $plan['id'];
+ $d->plan_name = $plan['name_plan'];
+ $d->routers_id = $router['id'];
+ $d->routers = $router['name'];
+ if ($plan['validity_unit'] == 'Period') {
+ // Postpaid price from field
+ $add_inv = User::getAttribute("Invoice", $id_customer);
+ if (empty($add_inv) or $add_inv == 0) {
+ $d->price = ($plan['price'] + $add_cost + $tax);
+ } else {
+ $d->price = ($add_inv + $add_cost + $tax);
+ }
+ } else {
+ $d->price = ($plan['price'] + $add_cost + $tax);
+ }
+ $d->created_date = date('Y-m-d H:i:s');
+ $d->status = 1;
+ $d->save();
+ $id = $d->id();
+ } else {
+ $d->username = $user['username'];
+ $d->gateway = $gateway;
+ $d->plan_id = $plan['id'];
+ $d->plan_name = $plan['name_plan'];
+ $d->routers_id = $router['id'];
+ $d->routers = $router['name'];
+ if ($plan['validity_unit'] == 'Period') {
+ // Postpaid price from field
+ $add_inv = User::getAttribute("Invoice", $id_customer);
+ if (empty($add_inv) or $add_inv == 0) {
+ $d->price = ($plan['price'] + $add_cost + $tax);
+ } else {
+ $d->price = ($add_inv + $add_cost + $tax);
+ }
+ } else {
+ $d->price = ($plan['price'] + $add_cost + $tax);
+ }
+ //$d->price = ($plan['price'] + $add_cost);
+ $d->created_date = date('Y-m-d H:i:s');
+ $d->status = 1;
$d->save();
}
- }
- }
- $add_cost = 0;
- $tax = 0;
- if ($router['name'] != 'balance') {
- 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)) {
- $d = ORM::for_table('tbl_payment_gateway')->create();
- $d->username = $user['username'];
- $d->gateway = $gateway;
- $d->plan_id = $plan['id'];
- $d->plan_name = $plan['name_plan'];
- $d->routers_id = $router['id'];
- $d->routers = $router['name'];
- if ($plan['validity_unit'] == 'Period') {
- // Postpaid price from field
- $add_inv = User::getAttribute("Invoice", $id_customer);
- if (empty($add_inv) or $add_inv == 0) {
- $d->price = ($plan['price'] + $add_cost + $tax);
- } else {
- $d->price = ($add_inv + $add_cost + $tax);
- }
- } else {
- $d->price = ($plan['price'] + $add_cost + $tax);
- }
- $d->created_date = date('Y-m-d H:i:s');
- $d->status = 1;
- $d->save();
- $id = $d->id();
- } else {
- $d->username = $user['username'];
- $d->gateway = $gateway;
- $d->plan_id = $plan['id'];
- $d->plan_name = $plan['name_plan'];
- $d->routers_id = $router['id'];
- $d->routers = $router['name'];
- if ($plan['validity_unit'] == 'Period') {
- // Postpaid price from field
- $add_inv = User::getAttribute("Invoice", $id_customer);
- if (empty($add_inv) or $add_inv == 0) {
- $d->price = ($plan['price'] + $add_cost + $tax);
- } else {
- $d->price = ($add_inv + $add_cost + $tax);
- }
- } else {
- $d->price = ($plan['price'] + $add_cost + $tax);
- }
- //$d->price = ($plan['price'] + $add_cost);
- $d->created_date = date('Y-m-d H:i:s');
- $d->status = 1;
- $d->save();
+ break;
}
if (!$id) {
r2(U . "order/package/" . $d['id'], 'e', Lang::T("Failed to create Transaction.."));
diff --git a/ui/ui/customer/orderBalance.tpl b/ui/ui/customer/orderBalance.tpl
index e9781f4c..9769a6e2 100644
--- a/ui/ui/customer/orderBalance.tpl
+++ b/ui/ui/customer/orderBalance.tpl
@@ -3,39 +3,64 @@
{if $_c['enable_balance'] == 'yes'}
-
-
-
- {foreach $plans_balance as $plan}
-
-
-
-
-
-
-
-
- {Lang::T('Price')} |
- {Lang::moneyFormat($plan['price'])}
- {if !empty($plan['price_old'])}
- {Lang::moneyFormat($plan['price_old'])}
- {/if}
- |
-
-
-
-
-
-
+
+
+
+ {foreach $plans_balance as $plan}
+
+
+
+
+
+
+
+
+ {Lang::T('Price')} |
+ {Lang::moneyFormat($plan['price'])}
+ {if !empty($plan['price_old'])}
+ {Lang::moneyFormat($plan['price_old'])}
+ {/if}
+ |
+
+
+
- {/foreach}
+
+
+
+ {/foreach}
+
+
{/if}
diff --git a/ui/ui/customer/selectGateway.tpl b/ui/ui/customer/selectGateway.tpl
index 02395ad1..40ddfa52 100644
--- a/ui/ui/customer/selectGateway.tpl
+++ b/ui/ui/customer/selectGateway.tpl
@@ -2,25 +2,26 @@
{if file_exists("$PAGES_PATH/Payment_Info.html")}
-
-
-
{Lang::T('Payment Info')}
-
{include file="$PAGES_PATH/Payment_Info.html"}
-
+
+
+
{Lang::T('Payment Info')}
+
{include file="$PAGES_PATH/Payment_Info.html"}
+
{/if}
-
+
{Lang::T('Available Payment Gateway')}