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'} -
-
{Lang::T('Buy Balance Plans')}
-
- {foreach $plans_balance as $plan} -
-
-
{$plan['name_plan']}
-
-
- - - - - - - -
{Lang::T('Price')}{Lang::moneyFormat($plan['price'])} - {if !empty($plan['price_old'])} - {Lang::moneyFormat($plan['price_old'])} - {/if} -
-
-
- +
+
{Lang::T('Buy Balance Plans')}
+
+ {foreach $plans_balance as $plan} +
+
+
{$plan['name_plan']}
+
+
+ + + + + + + +
{Lang::T('Price')}{Lang::moneyFormat($plan['price'])} + {if !empty($plan['price_old'])} + {Lang::moneyFormat($plan['price_old'])} + {/if} +
- {/foreach} + +
+
+ {/foreach} +
+
+ +
+
{Lang::T('Custom Balance')}
+
+
+ + + + + + +
+
+
+
+ +
+
+
+
{/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')}