diff --git a/system/autoload/Balance.php b/system/autoload/Balance.php index 99595f23..2b3713d2 100644 --- a/system/autoload/Balance.php +++ b/system/autoload/Balance.php @@ -1,20 +1,71 @@ where('id', $id_customer)->find_one(); + $c->balance = $amount + $c['balance']; + $c->save(); } - public static function transfer($customer, $phoneTarget){ - + public static function transfer($id_customer, $phoneTarget, $amount) + { + global $config; + if ($config['allow_balance_transfer'] == 'yes') { + if(Balance::min($id_customer, $amount)){ + if(Balance::plusByPhone($phoneTarget, $amount)){ + return true; + }else{ + Balance::plus($id_customer, $amount); + return false; + } + }else{ + return false; + } + }else{ + return false; + } } - public static function pay($customer, $amount, $note){ - + public static function min($id_customer, $amount) + { + $c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one(); + if ($c && $c['balance'] >= $amount) { + $c->balance = $amount - $c['balance']; + $c->save(); + return true; + } else { + return false; + } } -} \ No newline at end of file + + public static function plusByPhone($phone_customer, $amount) + { + $c = ORM::for_table('tbl_customers')->where('username', $phone_customer)->find_one(); + if($c){ + $c->balance = $amount + $c['balance']; + $c->save(); + return true; + } + return false; + } + + public static function minByPhone($phone_customer, $amount) + { + $c = ORM::for_table('tbl_customers')->where('username', $phone_customer)->find_one(); + if ($c && $c['balance'] >= $amount) { + $c->balance = $amount - $c['balance']; + $c->save(); + return true; + } else { + return false; + } + } +} diff --git a/system/autoload/Package.php b/system/autoload/Package.php index 1764f7a6..26e1a5cc 100644 --- a/system/autoload/Package.php +++ b/system/autoload/Package.php @@ -30,6 +30,49 @@ class Package $c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one(); $p = ORM::for_table('tbl_plans')->where('id', $plan_id)->where('enabled', '1')->find_one(); + + if ($router_name == 'balance') { + // insert table transactions + $inv = "INV-" . _raid(5); + $t = ORM::for_table('tbl_transactions')->create(); + $t->invoice = $inv; + $t->username = $c['username']; + $t->plan_name = $p['name_plan']; + $t->price = $p['price']; + $t->recharged_on = $date_only; + $t->expiration = $date_only; + $t->time = $time; + $t->method = "$gateway - $channel"; + $t->routers = $router_name; + $t->type = "Balance"; + $t->save(); + + Balance::plus($id_customer, $p['price']); + + $textInvoice = $_notifmsg['invoice_balance']; + $textInvoice = str_replace('[[company_name]]', $_c['CompanyName'], $textInvoice); + $textInvoice = str_replace('[[address]]', $_c['address'], $textInvoice); + $textInvoice = str_replace('[[phone]]', $_c['phone'], $textInvoice); + $textInvoice = str_replace('[[invoice]]', $inv, $textInvoice); + $textInvoice = str_replace('[[date]]', date($_c['date_format'], strtotime($date_only)) . " " . $time, $textInvoice); + $textInvoice = str_replace('[[payment_gateway]]', $_c['gateway'], $textInvoice); + $textInvoice = str_replace('[[payment_channel]]', $_c['channel'], $textInvoice); + $textInvoice = str_replace('[[type]]', 'Balance', $textInvoice); + $textInvoice = str_replace('[[plan_name]]', $p['name_plan'], $textInvoice); + $textInvoice = str_replace('[[plan_price]]', $_c['currency_code'] . " " . number_format($p['price'], 2, $_c['dec_point'], $_c['thousands_sep']), $textInvoice); + $textInvoice = str_replace('[[user_name]]', $c['username'], $textInvoice); + $textInvoice = str_replace('[[user_password]]', $c['password'], $textInvoice); + + if ($_c['user_notification_payment'] == 'sms') { + Message::sendSMS($c['phonenumber'], $textInvoice); + } else if ($_c['user_notification_payment'] == 'wa') { + Message::sendWhatsapp($c['phonenumber'], $textInvoice); + } + + return true; + } + + $b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one(); $mikrotik = Mikrotik::info($router_name); @@ -202,17 +245,16 @@ class Package $textInvoice = str_replace('[[company_name]]', $_c['CompanyName'], $textInvoice); $textInvoice = str_replace('[[address]]', $_c['address'], $textInvoice); $textInvoice = str_replace('[[phone]]', $_c['phone'], $textInvoice); - $textInvoice = str_replace('[[invoice]]', $_c['CompanyName'], $textInvoice); $textInvoice = str_replace('[[invoice]]', $in['invoice'], $textInvoice); - $textInvoice = str_replace('[[date]]', $date_now, $textInvoice); + $textInvoice = str_replace('[[date]]', date($_c['date_format'], strtotime($date_now)) . " " . $time, $textInvoice); $textInvoice = str_replace('[[payment_gateway]]', $_c['gateway'], $textInvoice); $textInvoice = str_replace('[[payment_channel]]', $_c['channel'], $textInvoice); $textInvoice = str_replace('[[type]]', $in['type'], $textInvoice); $textInvoice = str_replace('[[plan_name]]', $in['plan_name'], $textInvoice); - $textInvoice = str_replace('[[plan_price]]', $_c['currency_code'] . " ". number_format($in['price'], 2, $_c['dec_point'], $_c['thousands_sep']), $textInvoice); + $textInvoice = str_replace('[[plan_price]]', $_c['currency_code'] . " " . number_format($in['price'], 2, $_c['dec_point'], $_c['thousands_sep']), $textInvoice); $textInvoice = str_replace('[[user_name]]', $in['username'], $textInvoice); $textInvoice = str_replace('[[user_password]]', $c['password'], $textInvoice); - $textInvoice = str_replace('[[expired_date]]', date($_c['date_format'], strtotime($in['expiration'])) . " ".$in['time'], $textInvoice); + $textInvoice = str_replace('[[expired_date]]', date($_c['date_format'], strtotime($in['expiration'])) . " " . $in['time'], $textInvoice); if ($_c['user_notification_payment'] == 'sms') { Message::sendSMS($c['phonenumber'], $textInvoice); diff --git a/system/controllers/order.php b/system/controllers/order.php index 016c2c4c..d1098e27 100644 --- a/system/controllers/order.php +++ b/system/controllers/order.php @@ -35,9 +35,13 @@ switch ($action) { $ui->assign('_title', 'Order Plan'); $ui->assign('_system_menu', 'package'); $routers = ORM::for_table('tbl_routers')->find_many(); - $plans = ORM::for_table('tbl_plans')->where('enabled', '1')->find_many(); + $plans_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('type', 'PPPOE')->find_many(); + $plans_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('type', 'Hotspot')->find_many(); + $plans_balance = ORM::for_table('tbl_plans')->where('enabled', '1')->where('type', 'Balance')->find_many(); $ui->assign('routers', $routers); - $ui->assign('plans', $plans); + $ui->assign('plans_pppoe', $plans_pppoe); + $ui->assign('plans_hotspot', $plans_hotspot); + $ui->assign('plans_balance', $plans_balance); run_hook('customer_view_order_plan'); #HOOK $ui->display('user-orderPlan.tpl'); break; @@ -118,12 +122,16 @@ switch ($action) { run_hook('customer_buy_plan'); #HOOK include 'system/paymentgateway/' . $config['payment_gateway'] . '.php'; call_user_func($config['payment_gateway'] . '_validate_config'); - - $router = ORM::for_table('tbl_routers')->where('enabled', '1')->find_one($routes['2'] * 1); - $plan = ORM::for_table('tbl_plans')->where('enabled', '1')->find_one($routes['3'] * 1); - if (empty($router) || empty($plan)) { - r2(U . $back, 'e', Lang::T("Plan Not found")); + if ($routes['2'] != '0') { + $router = ORM::for_table('tbl_routers')->where('enabled', '1')->find_one($routes['2']); + if (empty($router) || empty($plan)) { + r2(U . $back, 'e', Lang::T("Plan Not found")); + } + }else{ + $router['id'] = 0; + $router['name'] = 'balance'; } + $plan = ORM::for_table('tbl_plans')->where('enabled', '1')->find_one($routes['3']); $d = ORM::for_table('tbl_payment_gateway') ->where('username', $user['username']) ->where('status', 1) @@ -172,5 +180,5 @@ switch ($action) { } break; default: - $ui->display('404.tpl'); + r2(U . "order/package/", 's',''); } diff --git a/system/lan/english/common.lan.php b/system/lan/english/common.lan.php index 5fdd9f37..b03853b9 100644 --- a/system/lan/english/common.lan.php +++ b/system/lan/english/common.lan.php @@ -355,4 +355,7 @@ $_L['User_Cannot_change_this_only_admin_if_it_Empty_it_will_use_user_password'] $_L['Invoice_Balance_Message'] = 'Invoice Balance Message'; $_L['Invoice_Notification_Payment'] = 'Invoice Notification Payment'; $_L['Balance_Notification_Payment'] = 'Balance Notification Payment'; -$_L['Balance_Plans'] = 'Balance Plans'; +$_L['Balance_Plans'] = 'Balance Plans'; +$_L['Buy_Balance'] = 'Buy Balance?'; +$_L['Price'] = 'Price'; +$_L['Validity'] = 'Validity'; diff --git a/system/uploads/notifications.default.json b/system/uploads/notifications.default.json index 3cf8179c..9731b244 100644 --- a/system/uploads/notifications.default.json +++ b/system/uploads/notifications.default.json @@ -1,8 +1,8 @@ { - "user_notification_expired_text": "Hello [[name]],\r\nyour internet package [[package]] has been expired.", - "invoice_paid": "*[[company_name]]*\r\n[[address]]\r\n[[phone]]\r\n\r\n\r\nINVOICE: *[[invoice]]*\r\nDate : [[date]]\r\n[[payment_gateway]] [[payment_channel]]\r\n\r\n\r\nType : *[[type]]*\r\nPackage : *[[plan_name]]*\r\nPrice : *[[plan_price]]*\r\n\r\nUsername : *[[user_name]]*\r\nPassword : ***********\r\n\r\nExpired : *[[expired_date]]*\r\n\r\n\r\nThank you...", - "invoice_balance": "*[[company_name]]*\r\n[[address]]\r\n[[phone]]\r\n\r\n\r\nINVOICE: *[[invoice]]*\r\nDate : [[date]]\r\n[[payment_gateway]] [[payment_channel]]\r\n\r\n\r\nType : *[[type]]*\r\nPackage : *[[plan_name]]*\r\nPrice : *[[plan_price]]*\r\n\r\nUsername : *[[user_name]]*\r\nPassword : ***********\r\n\r\nTransaction Date : *[[trx_date]]*\r\n\r\n\r\nThank you...", + "user_notification_expired_text": "Hello [[name]], your internet package [[package]] has been expired.", "reminder_7_day": "Hello *[[name]]*, \r\nyour internet package *[[package]]* will be expired in 7 days.", "reminder_3_day": "Hello *[[name]]*, \r\nyour internet package *[[package]]* will be expired in 3 days.", - "reminder_1_day": "Hello *[[name]]*,\r\n your internet package *[[package]]* will be expired tomorrow." + "reminder_1_day": "Hello *[[name]]*,\r\n your internet package *[[package]]* will be expired tomorrow.", + "invoice_paid": "*[[company_name]]*\r\n[[address]]\r\n[[phone]]\r\n\r\n\r\nINVOICE: *[[invoice]]*\r\nDate : [[date]]\r\n[[payment_gateway]] [[payment_channel]]\r\n\r\n\r\nType : *[[type]]*\r\nPackage : *[[plan_name]]*\r\nPrice : *[[plan_price]]*\r\n\r\nUsername : *[[user_name]]*\r\nPassword : ***********\r\n\r\nExpired : *[[expired_date]]*\r\n\r\n\r\nThank you...", + "invoice_balance": "*[[company_name]]*\r\n[[address]]\r\n[[phone]]\r\n\r\n\r\nINVOICE: *[[invoice]]*\r\nDate : [[date]]\r\n[[payment_gateway]] [[payment_channel]]\r\n\r\n\r\nType : *[[type]]*\r\nPackage : *[[plan_name]]*\r\nPrice : *[[plan_price]]*\r\n\r\nThank you..." } diff --git a/ui/ui/app-notifications.tpl b/ui/ui/app-notifications.tpl index ce66edbc..baed6f1b 100644 --- a/ui/ui/app-notifications.tpl +++ b/ui/ui/app-notifications.tpl @@ -90,9 +90,9 @@
- + rows="20">{Lang::htmlspecialchars($_json['invoice_balance'])}

[[company_name]] Your Company Name at Settings.
diff --git a/ui/ui/user-orderPlan.tpl b/ui/ui/user-orderPlan.tpl index 6b790f77..2bd2fa7c 100644 --- a/ui/ui/user-orderPlan.tpl +++ b/ui/ui/user-orderPlan.tpl @@ -5,49 +5,115 @@

{Lang::T('Order Internet Package')}
+
+
{Lang::T('Balance Plans')}
+
+ {foreach $plans_balance as $plan} +
+
+
{$plan['name_plan']}
+
+ + + + + + + +
{Lang::T('Price')}{Lang::moneyFormat($plan['price'])}
+
+
+ Buy +
+
+
+ {/foreach} +
+
{foreach $routers as $router}
-
{$router['name']}
+
{$router['name']}
{if $router['description'] != ''}
{$router['description']}
{/if} - -
- {foreach $plans as $plan} - {if $router['name'] eq $plan['routers']} -
-
-
{$plan['name_plan']}
-
- - - - - - - - - - - - - - - -
{Lang::T('Type')}{$plan['type']}
Price{$plan['price']}
Validity{$plan['validity']} {$plan['validity_unit']}
-
-
- Buy + {if count($plans_hotspot)>0} +
Hotspot
+
+ {foreach $plans_hotspot as $plan} + {if $router['name'] eq $plan['routers']} +
+
+
{$plan['name_plan']}
+
+ + + + + + + + + + + + + + + +
{Lang::T('Type')}{$plan['type']}
{Lang::T('Price')}{Lang::moneyFormat($plan['price'])}
{Lang::T('Validity')}{$plan['validity']} {$plan['validity_unit']}
+
+
+ Buy +
-
- {/if} - {/foreach} -
+ {/if} + {/foreach} +
+ {/if} + {if count($plans_pppoe)>0} +
PPPOE
+
+ {foreach $plans_pppoe as $plan} + {if $router['name'] eq $plan['routers']} +
+
+
{$plan['name_plan']}
+
+ + + + + + + + + + + + + + + +
{Lang::T('Type')}{$plan['type']}
{Lang::T('Price')}{Lang::moneyFormat($plan['price'])}
{Lang::T('Validity')}{$plan['validity']} {$plan['validity_unit']}
+
+
+ Buy +
+
+
+ {/if} + {/foreach} +
+ {/if}
{/foreach}
diff --git a/ui/ui/user-orderView.tpl b/ui/ui/user-orderView.tpl index 5373a6eb..48c2006a 100644 --- a/ui/ui/user-orderView.tpl +++ b/ui/ui/user-orderView.tpl @@ -3,31 +3,37 @@
-
+
-
-
-
{$router['name']}
-
- {$router['description']} + {if $plan['type']!='Balance'} +
+
+
{$router['name']}
+
+ {$router['description']} +
-
+ {/if}
- + - + {if $trx['status']==2} - + {/if} @@ -36,58 +42,61 @@ - + - {if $plan['type'] eq 'Hotspot'} - - - - - {if $plan['typebp'] eq 'Limited'} - {if $plan['limit_type'] eq 'Time_Limit' or $plan['limit_type'] eq 'Both_Limit'} - - - - - {/if} - {if $plan['limit_type'] eq 'Data_Limit' or $plan['limit_type'] eq 'Both_Limit'} - - - - + {if $plan['type']!='Balance'} + {if $plan['type'] eq 'Hotspot'} + + + + + {if $plan['typebp'] eq 'Limited'} + {if $plan['limit_type'] eq 'Time_Limit' or $plan['limit_type'] eq 'Both_Limit'} + + + + + {/if} + {if $plan['limit_type'] eq 'Data_Limit' or $plan['limit_type'] eq 'Both_Limit'} + + + + + {/if} {/if} {/if} + + + + + + + + {/if} - - - - - - - -
{Lang::T('Status')}{if $trx['status']==1}{Lang::T('UNPAID')}{elseif $trx['status']==2}{Lang::T('PAID')}{elseif $trx['status']==3}{Lang::T('FAILED')}{elseif $trx['status']==4}{Lang::T('CANCELED')}{else}{Lang::T('UNKNOWN')}{/if}{if $trx['status']==1}{Lang::T('UNPAID')}{elseif $trx['status']==2}{Lang::T('PAID')}{elseif $trx['status']==3}{Lang::T('FAILED')}{elseif $trx['status']==4}{Lang::T('CANCELED')}{else}{Lang::T('UNKNOWN')}{/if} +
{Lang::T('expired')}{date($_c['date_format'], strtotime($trx['expired_date']))} {date('H:i', strtotime($trx['expired_date']))} {date($_c['date_format'], strtotime($trx['expired_date']))} + {date('H:i', strtotime($trx['expired_date']))}
{Lang::T('Paid Date')}{date($_c['date_format'], strtotime($trx['paid_date']))} {date('H:i', strtotime($trx['paid_date']))} {date($_c['date_format'], strtotime($trx['paid_date']))} + {date('H:i', strtotime($trx['paid_date']))}
{$_L['Plan_Price']}{$plan['price']}{Lang::moneyFormat($plan['price'])}
{Lang::T('Type')} {$plan['type']}
{Lang::T('Plan_Type')}{Lang::T($plan['typebp'])}
{Lang::T('Time_Limit')}{$ds['time_limit']} {$ds['time_unit']}
{Lang::T('Data_Limit')}{$ds['data_limit']} {$ds['data_unit']}
{Lang::T('Plan_Type')}{Lang::T($plan['typebp'])}
{Lang::T('Time_Limit')}{$ds['time_limit']} {$ds['time_unit']}
{Lang::T('Data_Limit')}{$ds['data_limit']} {$ds['data_unit']}
{$_L['Plan_Validity']}{$plan['validity']} {$plan['validity_unit']}
{$_L['Bandwidth_Plans']}{$bandw['name_bw']}
{$bandw['rate_down']}{$bandw['rate_down_unit']}/{$bandw['rate_up']}{$bandw['rate_up_unit']} +
{$_L['Plan_Validity']}{$plan['validity']} {$plan['validity_unit']}
{$_L['Bandwidth_Plans']}{$bandw['name_bw']}
{$bandw['rate_down']}{$bandw['rate_down_unit']}/{$bandw['rate_up']}{$bandw['rate_up_unit']}
{if $trx['status']==1} {/if}
-{include file="sections/user-footer.tpl"} +{include file="sections/user-footer.tpl"} \ No newline at end of file