Merge pull request #13 from hotspotbilling/Development

From version 2023.8.1 need to run update twice or update Database in step 4
This commit is contained in:
iBNu Maksum 2023-08-16 13:49:41 +07:00 committed by GitHub
commit 2431aa2eb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
47 changed files with 446 additions and 617 deletions

View File

@ -2,6 +2,12 @@
# CHANGELOG # CHANGELOG
## 2023.8.16
- Admin Can Add Balance to Customer
- Show Balance in user
- Using Select2 for Dropdown
## 2023.8.15 ## 2023.8.15
- Fix PPPOE Delete Customer - Fix PPPOE Delete Customer

View File

@ -6,6 +6,8 @@
- Voucher Generator and Print - Voucher Generator and Print
- Self registration - Self registration
- User Balance
- Auto Renewal Package using Balance
- Multi Router Mikrotik - Multi Router Mikrotik
- Hotspot & PPPOE - Hotspot & PPPOE
- Easy Installation - Easy Installation

View File

@ -62,6 +62,7 @@ class Package
$textInvoice = str_replace('[[plan_price]]', $_c['currency_code'] . " " . number_format($p['price'], 2, $_c['dec_point'], $_c['thousands_sep']), $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_name]]', $c['username'], $textInvoice);
$textInvoice = str_replace('[[user_password]]', $c['password'], $textInvoice); $textInvoice = str_replace('[[user_password]]', $c['password'], $textInvoice);
$textInvoice = str_replace('[[footer]]', $_c['note'], $textInvoice);
if ($_c['user_notification_payment'] == 'sms') { if ($_c['user_notification_payment'] == 'sms') {
Message::sendSMS($c['phonenumber'], $textInvoice); Message::sendSMS($c['phonenumber'], $textInvoice);
@ -255,6 +256,7 @@ class Package
$textInvoice = str_replace('[[user_name]]', $in['username'], $textInvoice); $textInvoice = str_replace('[[user_name]]', $in['username'], $textInvoice);
$textInvoice = str_replace('[[user_password]]', $c['password'], $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);
$textInvoice = str_replace('[[footer]]', $_c['note'], $textInvoice);
if ($_c['user_notification_payment'] == 'sms') { if ($_c['user_notification_payment'] == 'sms') {
Message::sendSMS($c['phonenumber'], $textInvoice); Message::sendSMS($c['phonenumber'], $textInvoice);
@ -263,4 +265,40 @@ class Package
} }
return true; return true;
} }
public static function changeTo($username, $plan_id)
{
global $_c;
$c = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
$p = ORM::for_table('tbl_plans')->where('id', $plan_id)->where('enabled', '1')->find_one();
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $c['id'])->find_one();
$mikrotik = Mikrotik::info($p['routers']);
if ($p['type'] == 'Hotspot') {
if ($b) {
if (!$_c['radius_mode']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::addHotspotUser($client, $p, $c);
}
} else {
if (!$_c['radius_mode']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addHotspotUser($client, $p, $c);
}
}
} else {
if ($b) {
if (!$_c['radius_mode']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::addPpoeUser($client, $p, $c);
}
} else {
if (!$_c['radius_mode']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addPpoeUser($client, $p, $c);
}
}
}
}
} }

View File

@ -122,16 +122,16 @@ switch ($action) {
run_hook('customer_buy_plan'); #HOOK run_hook('customer_buy_plan'); #HOOK
include 'system/paymentgateway/' . $config['payment_gateway'] . '.php'; include 'system/paymentgateway/' . $config['payment_gateway'] . '.php';
call_user_func($config['payment_gateway'] . '_validate_config'); call_user_func($config['payment_gateway'] . '_validate_config');
if ($routes['2'] != '0') { if ($routes['2']>0) {
$router = ORM::for_table('tbl_routers')->where('enabled', '1')->find_one($routes['2']); $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{ }else{
$router['id'] = 0; $router['id'] = 0;
$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)) {
r2(U . "order/package", 'e', Lang::T("Plan Not found"));
}
$d = ORM::for_table('tbl_payment_gateway') $d = ORM::for_table('tbl_payment_gateway')
->where('username', $user['username']) ->where('username', $user['username'])
->where('status', 1) ->where('status', 1)

View File

@ -72,8 +72,6 @@ switch ($action) {
$type = _post('type'); $type = _post('type');
$server = _post('server'); $server = _post('server');
$plan = _post('plan'); $plan = _post('plan');
$date_now = date("Y-m-d H:i:s");
$date_only = date("Y-m-d"); $date_only = date("Y-m-d");
$time = date("H:i:s"); $time = date("H:i:s");
@ -83,212 +81,28 @@ switch ($action) {
} }
if ($msg == '') { if ($msg == '') {
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one(); if(Package::rechargeUser($id_customer, $server, $plan, "Recharge", $admin['fullname'])){
$p = ORM::for_table('tbl_plans')->where('id', $plan)->where('enabled', '1')->find_one(); $c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one(); $in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
$mikrotik = Mikrotik::info($server); $ui->assign('date', date("Y-m-d H:i:s"));
if($p['validity_unit']=='Months'){ $ui->display('invoice.tpl');
$date_exp = date("Y-m-d", strtotime('+'.$p['validity'].' month')); _log('[' . $admin['username'] . ']: ' . 'Recharge '.$c['username'].' ['.$in['plan_name'].']['.Lang::moneyFormat($in['price']).']', 'Admin', $admin['id']);
}else if($p['validity_unit']=='Days'){ }else{
$date_exp = date("Y-m-d", strtotime('+'.$p['validity'].' day')); r2(U . 'prepaid/recharge', 'e', "Failed to recharge account");
}else if($p['validity_unit']=='Hrs'){
$datetime = explode(' ',date("Y-m-d H:i:s", strtotime('+'.$p['validity'].' hour')));
$date_exp = $datetime[0];
$time = $datetime[1];
}else if($p['validity_unit']=='Mins'){
$datetime = explode(' ',date("Y-m-d H:i:s", strtotime('+'.$p['validity'].' minute')));
$date_exp = $datetime[0];
$time = $datetime[1];
} }
run_hook('recharge_customer'); #HOOK
if ($type == 'Hotspot') {
if ($b) {
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client,$c['username']);
Mikrotik::addHotspotUser($client,$p,$c);
}
$b->customer_id = $id_customer;
$b->username = $c['username'];
$b->plan_id = $plan;
$b->namebp = $p['name_plan'];
$b->recharged_on = $date_only;
$b->expiration = $date_exp;
$b->time = $time;
$b->status = "on";
$b->method = "admin";
$b->routers = $server;
$b->type = "Hotspot";
$b->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "admin";
$t->routers = $server;
$t->type = "Hotspot";
$t->save();
} else {
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addHotspotUser($client,$p,$c);
}
$d = ORM::for_table('tbl_user_recharges')->create();
$d->customer_id = $id_customer;
$d->username = $c['username'];
$d->plan_id = $plan;
$d->namebp = $p['name_plan'];
$d->recharged_on = $date_only;
$d->expiration = $date_exp;
$d->time = $time;
$d->status = "on";
$d->method = "admin";
$d->routers = $server;
$d->type = "Hotspot";
$d->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "admin";
$t->routers = $server;
$t->type = "Hotspot";
$t->save();
}
Message::sendTelegram( "$admin[fullname] #Recharge Voucher #Hotspot for #u$c[username]\n".$p['name_plan'].
"\nRouter: ".$server.
"\nPrice: ".$p['price']);
} else {
if ($b) {
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removePpoeUser($client,$c['username']);
Mikrotik::addPpoeUser($client,$p,$c);
}
$b->customer_id = $id_customer;
$b->username = $c['username'];
$b->plan_id = $plan;
$b->namebp = $p['name_plan'];
$b->recharged_on = $date_only;
$b->expiration = $date_exp;
$b->time = $time;
$b->status = "on";
$b->method = "admin";
$b->routers = $server;
$b->type = "PPPOE";
$b->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "admin";
$t->routers = $server;
$t->type = "PPPOE";
$t->save();
} else {
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addPpoeUser($client,$p,$c);
}
$d = ORM::for_table('tbl_user_recharges')->create();
$d->customer_id = $id_customer;
$d->username = $c['username'];
$d->plan_id = $plan;
$d->namebp = $p['name_plan'];
$d->recharged_on = $date_only;
$d->expiration = $date_exp;
$d->time = $time;
$d->status = "on";
$d->method = "admin";
$d->routers = $server;
$d->type = "PPPOE";
$d->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "admin";
$t->routers = $server;
$t->type = "PPPOE";
$t->save();
}
Message::sendTelegram( "$admin[fullname] #Recharge Voucher #PPPOE for #u$c[username]\n".$p['name_plan'].
"\nRouter: ".$server.
"\nPrice: ".$p['price']);
}
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
$msg = "*$config[CompanyName]*\n".
"$config[address]\n".
"$config[phone]\n".
"\n\n".
"INVOICE: *$in[invoice]*\n".
"$_L[Date] : $date_now\n".
"$_L[Sales] : $admin[fullname]\n".
"\n\n".
"$_L[Type] : *$in[type]*\n".
"$_L[Plan_Name] : *$in[plan_name]*\n".
"$_L[Plan_Price] : *$config[currency_code] ".number_format($in['price'],2,$config['dec_point'],$config['thousands_sep'])."*\n\n".
"$_L[Username] : *$in[username]*\n".
"$_L[Password] : **********\n\n".
"$_L[Created_On] :\n*".date($config['date_format'], strtotime($in['recharged_on']))."*\n".
"$_L[Expires_On] :\n*".date($config['date_format'], strtotime($in['expiration']))." $in[time]*\n".
"\n\n".
"$config[note]";
if ($_c['user_notification_payment'] == 'sms') {
Message::sendSMS($c['phonenumber'], $msg);
} else if ($_c['user_notification_payment'] == 'wa') {
Message::sendWhatsapp($c['phonenumber'], $msg);
}
$ui->assign('date', $date_now);
$ui->display('invoice.tpl');
} else { } else {
r2(U . 'prepaid/recharge', 'e', $msg); r2(U . 'prepaid/recharge', 'e', $msg);
} }
break; break;
case 'print': case 'print':
$date_now = date("Y-m-d H:i:s");
$id = _post('id'); $id = _post('id');
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one(); $d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
$ui->assign('d', $d); $ui->assign('d', $d);
$ui->assign('date', $date_now); $ui->assign('date', date("Y-m-d H:i:s"));
run_hook('print_invoice'); #HOOK run_hook('print_invoice'); #HOOK
$ui->display('invoice-print.tpl'); $ui->display('invoice-print.tpl');
break; break;
@ -328,6 +142,7 @@ switch ($action) {
} }
$d->delete(); $d->delete();
} }
_log('[' . $admin['username'] . ']: ' . 'Delete Plan for Customer '.$c['username'].' ['.$in['plan_name'].']['.Lang::moneyFormat($in['price']).']', 'Admin', $admin['id']);
r2(U . 'prepaid/list', 's', $_L['Delete_Successfully']); r2(U . 'prepaid/list', 's', $_L['Delete_Successfully']);
} }
break; break;
@ -352,7 +167,8 @@ switch ($action) {
$d->recharged_on = $recharged_on; $d->recharged_on = $recharged_on;
$d->expiration = $expiration; $d->expiration = $expiration;
$d->save(); $d->save();
//TODO set mikrotik for editedd plan Package::changeTo($username,$id_plan);
_log('[' . $admin['username'] . ']: ' . 'Edit Plan for Customer '.$d['username'].' to ['.$d['plan_name'].']['.Lang::moneyFormat($d['price']).']', 'Admin', $admin['id']);
r2(U . 'prepaid/list', 's', $_L['Updated_Successfully']); r2(U . 'prepaid/list', 's', $_L['Updated_Successfully']);
} else { } else {
r2(U . 'prepaid/edit/' . $id, 'e', $msg); r2(U . 'prepaid/edit/' . $id, 'e', $msg);
@ -526,7 +342,7 @@ switch ($action) {
case 'refill': case 'refill':
$ui->assign('xfooter', '<script type="text/javascript" src="ui/ui/scripts/form-elements.init.js"></script>'); $ui->assign('xfooter', '<script type="text/javascript" src="ui/ui/scripts/form-elements.init.js"></script>');
$ui->assign('_title', $_L['Refill_Account']);
$c = ORM::for_table('tbl_customers')->find_many(); $c = ORM::for_table('tbl_customers')->find_many();
$ui->assign('c', $c); $ui->assign('c', $c);
run_hook('view_refill'); #HOOK run_hook('view_refill'); #HOOK
@ -540,221 +356,50 @@ switch ($action) {
$v1 = ORM::for_table('tbl_voucher')->where('code', $code)->where('status', 0)->find_one(); $v1 = ORM::for_table('tbl_voucher')->where('code', $code)->where('status', 0)->find_one();
$c = ORM::for_table('tbl_customers')->find_one($user);
$p = ORM::for_table('tbl_plans')->find_one($v1['id_plan']);
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $user)->find_one();
$date_now = date("Y-m-d H:i:s");
$date_only = date("Y-m-d");
$time = date("H:i:s");
$mikrotik = Mikrotik::info($v1['routers']);
if($p['validity_unit']=='Months'){
$date_exp = date("Y-m-d", strtotime('+'.$p['validity'].' month'));
}else if($p['validity_unit']=='Days'){
$date_exp = date("Y-m-d", strtotime('+'.$p['validity'].' day'));
}else if($p['validity_unit']=='Hrs'){
$datetime = explode(' ',date("Y-m-d H:i:s", strtotime('+'.$p['validity'].' hour')));
$date_exp = $datetime[0];
$time = $datetime[1];
}else if($p['validity_unit']=='Mins'){
$datetime = explode(' ',date("Y-m-d H:i:s", strtotime('+'.$p['validity'].' minute')));
$date_exp = $datetime[0];
$time = $datetime[1];
}
run_hook('refill_customer'); #HOOK run_hook('refill_customer'); #HOOK
if ($v1) { if ($v1) {
if ($v1['type'] == 'Hotspot') { if(Package::rechargeUser($user, $v1['routers'], $v1['id_plan'], "Refill", "Voucher")){
if ($b) {
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client,$c['username']);
Mikrotik::addHotspotUser($client,$p,$c);
}
$b->customer_id = $user;
$b->username = $c['username'];
$b->plan_id = $v1['id_plan'];
$b->namebp = $p['name_plan'];
$b->recharged_on = $date_only;
$b->expiration = $date_exp;
$b->time = $time;
$b->status = "on";
$b->method = "voucher";
$b->routers = $v1['routers'];
$b->type = "Hotspot";
$b->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "voucher";
$t->routers = $v1['routers'];
$t->type = "Hotspot";
$t->save();
} else {
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addHotspotUser($client,$p,$c);
}
$d = ORM::for_table('tbl_user_recharges')->create();
$d->customer_id = $user;
$d->username = $c['username'];
$d->plan_id = $v1['id_plan'];
$d->namebp = $p['name_plan'];
$d->recharged_on = $date_only;
$d->expiration = $date_exp;
$d->time = $time;
$d->status = "on";
$d->method = "voucher";
$d->routers = $v1['routers'];
$d->type = "Hotspot";
$d->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "voucher";
$t->routers = $v1['routers'];
$t->type = "Hotspot";
$t->save();
}
$v1->status = "1"; $v1->status = "1";
$v1->user = $c['username']; $v1->user = $c['username'];
$v1->save(); $v1->save();
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
Message::sendTelegram( "$admin[fullname] #Refill #Voucher #Hotspot for #u$c[username]\n".$p['name_plan']. $in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
"\nCode: ".$code. $ui->assign('in', $in);
"\nRouter: ".$v1['routers']. $ui->assign('date', date("Y-m-d H:i:s"));
"\nPrice: ".$p['price']); $ui->display('invoice.tpl');
} else { }else{
if ($b) { r2(U . 'prepaid/refill', 'e', "Failed to refill account");
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removePpoeUser($client,$c['username']);
Mikrotik::addPpoeUser($client,$p,$c);
}
$b->customer_id = $user;
$b->username = $c['username'];
$b->plan_id = $v1['id_plan'];
$b->namebp = $p['name_plan'];
$b->recharged_on = $date_only;
$b->expiration = $date_exp;
$b->time = $time;
$b->status = "on";
$b->method = "voucher";
$b->routers = $v1['routers'];
$b->type = "PPPOE";
$b->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "voucher";
$t->routers = $v1['routers'];
$t->type = "PPPOE";
$t->save();
} else {
if(!$config['radius_mode']){
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addPpoeUser($client,$p,$c);
}
$d = ORM::for_table('tbl_user_recharges')->create();
$d->customer_id = $user;
$d->username = $c['username'];
$d->plan_id = $v1['id_plan'];
$d->namebp = $p['name_plan'];
$d->recharged_on = $date_only;
$d->expiration = $date_exp;
$d->time = $time;
$d->status = "on";
$d->method = "voucher";
$d->routers = $v1['routers'];
$d->type = "PPPOE";
$d->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-" . _raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "voucher";
$t->routers = $v1['routers'];
$t->type = "PPPOE";
$t->save();
}
$v1->status = "1";
$v1->user = $c['username'];
$v1->save();
Message::sendTelegram( "$admin[fullname] Refill #Voucher #PPPOE for #u$c[username]\n".$p['name_plan'].
"\nCode: ".$code.
"\nRouter: ".$v1['routers'].
"\nPrice: ".$p['price']);
} }
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
$msg = "*$config[CompanyName]*\n".
"$config[address]\n".
"$config[phone]\n".
"\n\n".
"INVOICE: *$in[invoice]*\n".
"$_L[Date] : $date_now\n".
"$_L[Sales] : $admin[fullname]\n".
"\n\n".
"$_L[Type] : *$in[type]*\n".
"$_L[Plan_Name] : *$in[plan_name]*\n".
"$_L[Plan_Price] : *$config[currency_code] ".number_format($in['price'],2,$config['dec_point'],$config['thousands_sep'])."*\n\n".
"$_L[Username] : *$in[username]*\n".
"$_L[Password] : **********\n\n".
"$_L[Created_On] :\n*".date($config['date_format'], strtotime($in['recharged_on']))."*\n".
"$_L[Expires_On] :\n*".date($config['date_format'], strtotime($in['expiration']))." $in[time]*\n".
"\n\n".
"$config[note]";
if ($_c['user_notification_payment'] == 'sms') {
Message::sendSMS($c['phonenumber'], $msg);
} else if ($_c['user_notification_payment'] == 'wa') {
Message::sendWhatsapp($c['phonenumber'], $msg);
}
$ui->assign('date', $date_now);
$ui->display('invoice.tpl');
} else { } else {
r2(U . 'prepaid/refill', 'e', $_L['Voucher_Not_Valid']); r2(U . 'prepaid/refill', 'e', $_L['Voucher_Not_Valid']);
} }
break; break;
case 'deposit':
$ui->assign('_title', Lang::T('Refill Balance'));
$ui->assign('c', ORM::for_table('tbl_customers')->find_many());
$ui->assign('p', ORM::for_table('tbl_plans')->where('enabled', '1')->where('type', 'Balance')->find_many());
run_hook('view_deposit'); #HOOK
$ui->display('deposit.tpl');
break;
case 'deposit-post':
$user = _post('id_customer');
$plan = _post('id_plan');
run_hook('deposit_customer'); #HOOK
if (!empty($user) && !empty($plan)) {
if(Package::rechargeUser($user, 'balance', $plan, "Deposit", $admin['fullname'])){
$c = ORM::for_table('tbl_customers')->where('id', $user)->find_one();
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
$ui->assign('date', date("Y-m-d H:i:s"));
$ui->display('invoice.tpl');
}else{
r2(U . 'prepaid/refill', 'e', "Failed to refill account");
}
} else {
r2(U . 'prepaid/refill', 'e', "All field is required");
}
break;
default: default:
echo 'action not defined'; echo 'action not defined';
} }

View File

@ -91,7 +91,7 @@ switch ($action) {
$data_limit = _post('data_limit'); $data_limit = _post('data_limit');
$data_unit = _post('data_unit'); $data_unit = _post('data_unit');
$id_bw = _post('id_bw'); $id_bw = _post('id_bw');
$price = _post('pricebp'); $price = _post('price');
$sharedusers = _post('sharedusers'); $sharedusers = _post('sharedusers');
$validity = _post('validity'); $validity = _post('validity');
$validity_unit = _post('validity_unit'); $validity_unit = _post('validity_unit');

View File

@ -363,3 +363,5 @@ $_L['Disable_auto_renewal'] = 'Disable auto renewal?';
$_L['Auto_Renewal_On'] = 'Auto Renewal On'; $_L['Auto_Renewal_On'] = 'Auto Renewal On';
$_L['Enable_auto_renewal'] = 'Enable auto renewal?'; $_L['Enable_auto_renewal'] = 'Enable auto renewal?';
$_L['Auto_Renewal_Off'] = 'Auto Renewal Off'; $_L['Auto_Renewal_Off'] = 'Auto Renewal Off';
$_L['Refill_Balance'] = 'Refill Balance';
$_L['Invoice_Footer'] = 'Invoice Footer';

View File

@ -3,6 +3,6 @@
"reminder_7_day": "Hello *[[name]]*, \r\nyour internet package *[[package]]* will be expired in 7 days.", "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_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_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\n[[footer]]",
"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..." "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\n====================\r\n[[footer]]"
} }

View File

@ -82,7 +82,8 @@
<b>[[plan_price]]</b> Internet Package Prices.<br> <b>[[plan_price]]</b> Internet Package Prices.<br>
<b>[[user_name]]</b> Username internet.<br> <b>[[user_name]]</b> Username internet.<br>
<b>[[user_password]]</b> User password.<br> <b>[[user_password]]</b> User password.<br>
<b>[[expired_date]]</b> Expired datetime. <b>[[expired_date]]</b> Expired datetime.<br>
<b>[[footer]]</b> Invoice Footer.
</p> </p>
</div> </div>
</div> </div>
@ -107,7 +108,8 @@
<b>[[plan_price]]</b> Internet Package Prices.<br> <b>[[plan_price]]</b> Internet Package Prices.<br>
<b>[[user_name]]</b> Username internet.<br> <b>[[user_name]]</b> Username internet.<br>
<b>[[user_password]]</b> User password.<br> <b>[[user_password]]</b> User password.<br>
<b>[[trx_date]]</b> Transaction datetime. <b>[[trx_date]]</b> Transaction datetime.<br>
<b>[[footer]]</b> Invoice Footer.
</p> </p>
</div> </div>
</div> </div>

View File

@ -247,6 +247,24 @@
add dst-host=tawk.to<br> add dst-host=tawk.to<br>
add dst-host=*.tawk.to</p> add dst-host=*.tawk.to</p>
</div> </div>
<div class="panel-heading">
<div class="btn-group pull-right">
<button class="btn btn-primary btn-xs" title="save" type="submit"><span
class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span></button>
</div>
{Lang::T('Invoice')}
</div>
<div class="panel-heading"></div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Invoice Footer')}</label>
<div class="col-md-6">
<textarea class="form-control" id="note" name="note"
rows="3">{Lang::htmlspecialchars($_c['note'])}</textarea>
<span class="help-block">{$_L['You_can_use_html_tag']}</span>
</div>
</div>
</div>
</div> </div>
<div class="panel-body"> <div class="panel-body">

View File

@ -10,9 +10,9 @@
<div class="box-footer"> <div class="box-footer">
<div class="btn-group btn-group-justified" role="group" aria-label="..."> <div class="btn-group btn-group-justified" role="group" aria-label="...">
<a href="https://github.com/hotspotbilling/phpnuxbill/discussions" target="_blank" <a href="https://github.com/hotspotbilling/phpnuxbill/discussions" target="_blank"
class="btn btn-primary btn-lg btn-block"><i class="ion ion-chatboxes"></i> Github class="btn btn-primary btn-sm btn-block"><i class="ion ion-chatboxes"></i> Github
Discussions</a> Discussions</a>
<a href="https://t.me/phpnuxbill" target="_blank" class="btn btn-primary btn-lg btn-block"><i <a href="https://t.me/phpnuxbill" target="_blank" class="btn btn-primary btn-sm btn-block"><i
class="ion ion-chatboxes"></i> Telegram Group</a> class="ion ion-chatboxes"></i> Telegram Group</a>
</div> </div>
</div> </div>
@ -28,7 +28,7 @@
</div> </div>
<div class="box-footer"> <div class="box-footer">
<a href="https://github.com/hotspotbilling/phpnuxbill/issues" target="_blank" <a href="https://github.com/hotspotbilling/phpnuxbill/issues" target="_blank"
class="btn btn-primary btn-lg btn-block"><i class="ion ion-chatboxes"></i> Give Feedback</a> class="btn btn-primary btn-sm btn-block"><i class="ion ion-chatboxes"></i> Give Feedback</a>
</div> </div>
</div> </div>
</div> </div>
@ -63,9 +63,9 @@
<div class="box-footer"> <div class="box-footer">
<div class="btn-group btn-group-justified" role="group" aria-label="..."> <div class="btn-group btn-group-justified" role="group" aria-label="...">
<a href="https://trakteer.id/ibnux" target="_blank" <a href="https://trakteer.id/ibnux" target="_blank"
class="btn btn-primary btn-lg btn-block">Trakteer</a> class="btn btn-primary btn-sm btn-block">Trakteer</a>
<a href="https://karyakarsa.com/ibnux/support" target="_blank" <a href="https://karyakarsa.com/ibnux/support" target="_blank"
class="btn btn-primary btn-lg btn-block">karyakarsa</a> class="btn btn-primary btn-sm btn-block">karyakarsa</a>
</div> </div>
</div> </div>
</div> </div>
@ -101,7 +101,7 @@
</table> </table>
</div> </div>
<div class="box-footer"> <div class="box-footer">
<a href="https://paypal.me/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Paypal</a> <a href="https://paypal.me/ibnux" target="_blank" class="btn btn-primary btn-sm btn-block">Paypal</a>
</div> </div>
</div> </div>
</div> </div>
@ -114,7 +114,7 @@
</div> </div>
<div class="box-body">$50 Paid Support<br>donation confirmation?<br>Or ask any Donation Alternative</div> <div class="box-body">$50 Paid Support<br>donation confirmation?<br>Or ask any Donation Alternative</div>
<div class="box-footer"> <div class="box-footer">
<a href="https://t.me/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Telegram</a> <a href="https://t.me/ibnux" target="_blank" class="btn btn-primary btn-sm btn-block">Telegram</a>
</div> </div>
</div> </div>
<div class="box box-primary box-hovered mb20 activities"> <div class="box box-primary box-hovered mb20 activities">
@ -126,7 +126,7 @@
</div> </div>
<div class="box-footer"> <div class="box-footer">
<a href="https://wa.nux.my.id/login" target="_blank" <a href="https://wa.nux.my.id/login" target="_blank"
class="btn btn-primary btn-lg btn-block">wa.nux.my.id</a> class="btn btn-primary btn-sm btn-block">wa.nux.my.id</a>
</div> </div>
</div> </div>
</div> </div>
@ -142,12 +142,24 @@
<div class="box-footer" id="latestVersion">ver</div> <div class="box-footer" id="latestVersion">ver</div>
<div class="box-footer"> <div class="box-footer">
<div class="btn-group btn-group-justified" role="group" aria-label="..."> <div class="btn-group btn-group-justified" role="group" aria-label="...">
<a href="./update.php" target="_blank" <a href="./update.php" target="_blank" class="btn btn-success btn-sm btn-block">Install Latest
class="btn btn-success btn-lg btn-block">Install Latest Version</a> Version</a>
<a href="https://github.com/hotspotbilling/phpnuxbill/archive/refs/heads/master.zip" target="_blank" <a href="https://github.com/hotspotbilling/phpnuxbill/archive/refs/heads/master.zip" target="_blank"
class="btn btn-warning btn-lg btn-block">Download Latest Version</a> class="btn btn-warning btn-sm btn-block">Download Latest Version</a>
</div> </div>
</div> </div>
<div class="box-footer">
<div class="btn-group btn-group-justified" role="group" aria-label="...">
<a href="./CHANGELOG.md" target="_blank" class="btn btn-default btn-sm btn-block">Current
Changelog</a>
<a href="https://github.com/hotspotbilling/phpnuxbill/blob/master/CHANGELOG.md" target="_blank"
class="btn btn-default btn-sm btn-block">Repo Changelog</a>
</div>
</div>
<div class="box-footer">
If you Download manual the update file, sometime update change database, after uploading, click this button to update database structure.
<a href="./update.php?step=4" class="btn btn-default btn-sm btn-block">Update Database</a>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -36,6 +36,7 @@
<tr> <tr>
<th>{$_L['Username']}</th> <th>{$_L['Username']}</th>
<th>{$_L['Full_Name']}</th> <th>{$_L['Full_Name']}</th>
<th>{Lang::T('Balance')}</th>
<th>{$_L['Phone_Number']}</th> <th>{$_L['Phone_Number']}</th>
<th>{$_L['Email']}</th> <th>{$_L['Email']}</th>
<th>{$_L['Created_On']}</th> <th>{$_L['Created_On']}</th>
@ -48,6 +49,7 @@
<tr> <tr>
<td>{$ds['username']}</td> <td>{$ds['username']}</td>
<td>{$ds['fullname']}</td> <td>{$ds['fullname']}</td>
<td>{Lang::moneyFormat($ds['balance'])}</td>
<td>{$ds['phonenumber']}</td> <td>{$ds['phonenumber']}</td>
<td>{$ds['email']}</td> <td>{$ds['email']}</td>
<td>{$ds['created_at']}</td> <td>{$ds['created_at']}</td>

47
ui/ui/deposit.tpl Normal file
View File

@ -0,0 +1,47 @@
{include file="sections/header.tpl"}
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{Lang::T('Refill Balance')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}prepaid/deposit-post">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Select_Account']}</label>
<div class="col-md-6">
<select id="personSelect" class="form-control select2" name="id_customer" style="width: 100%"
data-placeholder="{$_L['Select_Customer']}...">
<option></option>
{foreach $c as $cs}
<option value="{$cs['id']}">{$cs['username']} - {$cs['fullname']}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a href="{$_url}services/balance">{Lang::T('Balance Plans')}</a></label>
<div class="col-md-6">
<select id="planSelect" class="form-control select2" name="id_plan" style="width: 100%"
data-placeholder="{$_L['Select_Plans']}...">
<option></option>
{foreach $p as $pl}
<option value="{$pl['id']}">{$pl['name_plan']} - {Lang::moneyFormat($pl['price'])}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light"
type="submit">{$_L['Recharge']}</button>
Or <a href="{$_url}customers/list">{$_L['Cancel']}</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{include file="sections/footer.tpl"}

View File

@ -71,7 +71,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['BW_Name']}</label> <label class="col-md-2 control-label">{$_L['BW_Name']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control"> <select id="id_bw" name="id_bw" class="form-control select2">
<option value="">{$_L['Select_BW']}...</option> <option value="">{$_L['Select_BW']}...</option>
{foreach $d as $ds} {foreach $d as $ds}
<option value="{$ds['id']}">{$ds['name_bw']}</option> <option value="{$ds['id']}">{$ds['name_bw']}</option>
@ -84,7 +84,7 @@
<div class="col-md-6"> <div class="col-md-6">
<div class="input-group"> <div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span> <span class="input-group-addon">{$_c['currency_code']}</span>
<input type="number" class="form-control" name="pricebp" required> <input type="number" class="form-control" name="price" required>
</div> </div>
</div> </div>
</div> </div>
@ -112,7 +112,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Router_Name']}</label> <label class="col-md-2 control-label">{$_L['Router_Name']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="routers" name="routers" class="form-control"> <select id="routers" name="routers" class="form-control select2">
{foreach $r as $rs} {foreach $r as $rs}
<option value="{$rs['name']}">{$rs['name']}</option> <option value="{$rs['name']}">{$rs['name']}</option>
{/foreach} {/foreach}

View File

@ -72,7 +72,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['BW_Name']}</label> <label class="col-md-2 control-label">{$_L['BW_Name']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control"> <select id="id_bw" name="id_bw" class="form-control select2">
{foreach $b as $bs} {foreach $b as $bs}
<option value="{$bs['id']}" {if $d['id_bw'] eq $bs['id']} selected {/if}>{$bs['name_bw']}</option> <option value="{$bs['id']}" {if $d['id_bw'] eq $bs['id']} selected {/if}>{$bs['name_bw']}</option>
{/foreach} {/foreach}
@ -84,7 +84,7 @@
<div class="col-md-6"> <div class="col-md-6">
<div class="input-group"> <div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span> <span class="input-group-addon">{$_c['currency_code']}</span>
<input type="number" class="form-control" name="pricebp" value="{$d['price']}" required> <input type="number" class="form-control" name="price" value="{$d['price']}" required>
</div> </div>
</div> </div>
</div> </div>

View File

@ -44,7 +44,7 @@
<td>{$ds['name_plan']}</td> <td>{$ds['name_plan']}</td>
<td>{$ds['typebp']}</td> <td>{$ds['typebp']}</td>
<td>{$ds['name_bw']}</td> <td>{$ds['name_bw']}</td>
<td>{$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>
<td>{$ds['data_limit']} {$ds['data_unit']}</td> <td>{$ds['data_limit']} {$ds['data_unit']}</td>
<td>{$ds['validity']} {$ds['validity_unit']}</td> <td>{$ds['validity']} {$ds['validity_unit']}</td>

View File

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>{$_title}</title> <title>{$_title}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -7,52 +8,56 @@
<link href="ui/ui/styles/bootstrap.min.css" rel="stylesheet"> <link href="ui/ui/styles/bootstrap.min.css" rel="stylesheet">
<link rel="shortcut icon" type="image/x-icon" href="ui/ui/images/favicon.ico"> <link rel="shortcut icon" type="image/x-icon" href="ui/ui/images/favicon.ico">
<script type="text/javascript"> <script type="text/javascript">
function printpage() { function printpage() {
window.print(); window.print();
} }
</script> </script>
</head> </head>
<body topmargin="0" leftmargin="0" onload="printpage()"> <body topmargin="0" leftmargin="0" onload="printpage()">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<table width="200"> <table width="200">
<tr> <tr>
<td> <td>
<fieldset> <fieldset>
<center> <center>
<b>{$_c['CompanyName']}</b><br> <b>{$_c['CompanyName']}</b><br>
{$_c['address']}<br> {$_c['address']}<br>
{$_c['phone']}<br> {$_c['phone']}<br>
</center> </center>
============================================<br> ============================================<br>
INVOICE: <b>{$d['invoice']}</b> - {$_L['Date']} : {$date}<br> INVOICE: <b>{$d['invoice']}</b> - {$_L['Date']} : {$date}<br>
{$_L['Sales']} : {$_admin['fullname']}<br> {$_L['Sales']} : {$_admin['fullname']}<br>
============================================<br> ============================================<br>
{$_L['Type']} : <b>{$d['type']}</b><br> {$_L['Type']} : <b>{$d['type']}</b><br>
{$_L['Plan_Name']} : <b>{$d['plan_name']}</b><br> {$_L['Plan_Name']} : <b>{$d['plan_name']}</b><br>
{$_L['Plan_Price']} : <b>{$_c['currency_code']} {number_format($d['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</b><br> {$_L['Plan_Price']} : <b>{Lang::moneyFormat($in['price'])}</b><br>
<br> <br>
{$_L['Username']} : <b>{$d['username']}</b><br> {$_L['Username']} : <b>{$d['username']}</b><br>
{$_L['Password']} : **********<br> {$_L['Password']} : **********<br>
<br> {if $in['type'] != 'Balance'}
{$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($d['recharged_on']))}</b><br> <br>
{$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($d['expiration']))} {$d['time']}</b><br> {$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($d['recharged_on']))}</b><br>
============================================<br> {$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($d['expiration']))}
<center>{$_c['note']}</center> {$d['time']}</b><br>
</fieldset> {/if}
</td> ============================================<br>
</tr> <center>{$_c['note']}</center>
</table> </fieldset>
</td>
</tr>
</table>
</div>
</div> </div>
</div>
<script src="ui/ui/scripts/jquery-1.10.2.js"></script> <script src="ui/ui/scripts/jquery-1.10.2.js"></script>
<script src="ui/ui/scripts/bootstrap.min.js"></script> <script src="ui/ui/scripts/bootstrap.min.js"></script>
{if isset($xfooter)} {if isset($xfooter)}
{$xfooter} {$xfooter}
{/if} {/if}
</body> </body>
</html> </html>

View File

@ -1,48 +1,57 @@
{include file="sections/header.tpl"} {include file="sections/header.tpl"}
<div class="row"> <div class="row">
<div class="col-md-6 col-sm-12"> <div class="col-md-6 col-sm-12">
<div class="panel panel-hovered panel-primary panel-stacked mb30"> <div class="panel panel-hovered panel-primary panel-stacked mb30">
<div class="panel-heading">PRINT INVOICE</div> <div class="panel-heading">PRINT INVOICE</div>
<div class="panel-body"> <div class="panel-body">
<div class="well"> <div class="well">
<fieldset> <fieldset>
<center> <center>
<b>{$_c['CompanyName']}</b><br> <b>{$_c['CompanyName']}</b><br>
{$_c['address']}<br> {$_c['address']}<br>
{$_c['phone']}<br> {$_c['phone']}<br>
</center> </center>
====================================================<br> ====================================================<br>
INVOICE: <b>{$in['invoice']}</b> - {$_L['Date']} : {$date}<br> INVOICE: <b>{$in['invoice']}</b> - {$_L['Date']} : {$date}<br>
{$_L['Sales']} : {$_admin['fullname']}<br> {$_L['Sales']} : {$_admin['fullname']}<br>
====================================================<br> ====================================================<br>
{$_L['Type']} : <b>{$in['type']}</b><br> {$_L['Type']} : <b>{$in['type']}</b><br>
{$_L['Plan_Name']} : <b>{$in['plan_name']}</b><br> {$_L['Plan_Name']} : <b>{$in['plan_name']}</b><br>
{$_L['Plan_Price']} : <b>{$_c['currency_code']} {number_format($in['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</b><br> {$_L['Plan_Price']} : <b>{Lang::moneyFormat($in['price'])}</b><br>
<br> <br>
{$_L['Username']} : <b>{$in['username']}</b><br> {$_L['Username']} : <b>{$in['username']}</b><br>
{$_L['Password']} : **********<br> {$_L['Password']} : **********<br>
<br> {if $in['type'] != 'Balance'}
{$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($in['recharged_on']))}</b><br> <br>
{$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($in['expiration']))} {$in['time']}</b><br> {$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($in['recharged_on']))}</b><br>
=====================================================<br> {$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($in['expiration']))}
<center>{$_c['note']}</center> {$in['time']}</b><br>
</fieldset> {/if}
</div> =====================================================<br>
<form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank"> <center>{$_c['note']}</center>
<input type="hidden" name="id" value="{$in['id']}"> </fieldset>
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-print"></i> {$_L['Click_Here_to_Print']}</button> </div>
<a href="{$_url}prepaid/list" class="btn btn-primary"><i class="ion-reply-all"></i>{$_L['Finish']}</a> <form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank">
</form> <input type="hidden" name="id" value="{$in['id']}">
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-print"></i>
{$_L['Click_Here_to_Print']}</button>
<a href="{$_url}prepaid/list" class="btn btn-primary"><i
class="ion-reply-all"></i>{$_L['Finish']}</a>
</form>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
var s5_taf_parent = window.location; var s5_taf_parent = window.location;
function popup_print() {
window.open('print.php?page=<?php echo $_GET['act'];?>','page','toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=800,height=600,left=50,top=50,titlebar=yes') function popup_print() {
} window.open('print.php?page=<?php echo $_GET['
act '];?>', 'page',
'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=800,height=600,left=50,top=50,titlebar=yes'
)
}
</script> </script>
{include file="sections/footer.tpl"} {include file="sections/footer.tpl"}

View File

@ -22,7 +22,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Routers']}</label> <label class="col-md-2 control-label">{$_L['Routers']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="routers" name="routers" class="form-control"> <select id="routers" name="routers" class="form-control select2">
{foreach $r as $rs} {foreach $r as $rs}
<option value="{$rs['name']}">{$rs['name']}</option> <option value="{$rs['name']}">{$rs['name']}</option>
{/foreach} {/foreach}

View File

@ -24,7 +24,6 @@
<label class="col-md-2 control-label">{$_L['Routers']}</label> <label class="col-md-2 control-label">{$_L['Routers']}</label>
<div class="col-md-6"> <div class="col-md-6">
<input type="text" class="form-control" id="routers" name="routers" value="{$d['routers']}" readonly> <input type="text" class="form-control" id="routers" name="routers" value="{$d['routers']}" readonly>
</select>
</div> </div>
</div> </div>

View File

@ -26,7 +26,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['BW_Name']}</label> <label class="col-md-2 control-label">{$_L['BW_Name']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control"> <select id="id_bw" name="id_bw" class="form-control select2">
<option value="">{$_L['Select_BW']}...</option> <option value="">{$_L['Select_BW']}...</option>
{foreach $d as $ds} {foreach $d as $ds}
<option value="{$ds['id']}">{$ds['name_bw']}</option> <option value="{$ds['id']}">{$ds['name_bw']}</option>
@ -60,7 +60,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Router_Name']}</label> <label class="col-md-2 control-label">{$_L['Router_Name']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="routers" name="routers" class="form-control"> <select id="routers" name="routers" class="form-control select2">
<option value=''>{$_L['Select_Routers']}</option> <option value=''>{$_L['Select_Routers']}</option>
{foreach $r as $rs} {foreach $r as $rs}
<option value="{$rs['name']}">{$rs['name']}</option> <option value="{$rs['name']}">{$rs['name']}</option>
@ -72,7 +72,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Pool']}</label> <label class="col-md-2 control-label">{$_L['Pool']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="pool_name" name="pool_name" class="form-control"> <select id="pool_name" name="pool_name" class="form-control select2">
<option value=''>{$_L['Select_Pool']}</option> <option value=''>{$_L['Select_Pool']}</option>
</select> </select>
</div> </div>

View File

@ -27,7 +27,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['BW_Name']}</label> <label class="col-md-2 control-label">{$_L['BW_Name']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control"> <select id="id_bw" name="id_bw" class="form-control select2">
{foreach $b as $bs} {foreach $b as $bs}
<option value="{$bs['id']}" {if $d['id_bw'] eq $bs['id']} selected {/if}>{$bs['name_bw']}</option> <option value="{$bs['id']}" {if $d['id_bw'] eq $bs['id']} selected {/if}>{$bs['name_bw']}</option>
{/foreach} {/foreach}
@ -60,7 +60,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Pool']}</label> <label class="col-md-2 control-label">{$_L['Pool']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="pool_name" name="pool_name" class="form-control"> <select id="pool_name" name="pool_name" class="form-control select2">
{foreach $p as $ps} {foreach $p as $ps}
<option value="{$ps['pool_name']}" {if $d['pool_name'] eq $ps['pool_name']} selected {/if}>{$ps['pool_name']}</option> <option value="{$ps['pool_name']}" {if $d['pool_name'] eq $ps['pool_name']} selected {/if}>{$ps['pool_name']}</option>
{/foreach} {/foreach}

View File

@ -41,7 +41,7 @@
<tr {if $ds['enabled'] != 1}class="danger" title="disabled"{/if}> <tr {if $ds['enabled'] != 1}class="danger" title="disabled"{/if}>
<td>{$ds['name_plan']}</td> <td>{$ds['name_plan']}</td>
<td>{$ds['name_bw']}</td> <td>{$ds['name_bw']}</td>
<td>{$ds['price']}</td> <td>{Lang::moneyFormat($ds['price'])}</td>
<td>{$ds['validity']} {$ds['validity_unit']}</td> <td>{$ds['validity']} {$ds['validity_unit']}</td>
<td>{$ds['pool']}</td> <td>{$ds['pool']}</td>
<td>{$ds['routers']}</td> <td>{$ds['routers']}</td>

View File

@ -17,7 +17,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label> <label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="id_plan" name="id_plan" class="form-control"> <select id="id_plan" name="id_plan" class="form-control select2">
{foreach $p as $ps} {foreach $p as $ps}
<option value="{$ps['id']}" {if $d['plan_id'] eq $ps['id']} selected {/if}>{$ps['name_plan']}</option> <option value="{$ps['id']}" {if $d['plan_id'] eq $ps['id']} selected {/if}>{$ps['name_plan']}</option>
{/foreach} {/foreach}

View File

@ -38,7 +38,7 @@
<td>{$ds['username']}</td> <td>{$ds['username']}</td>
<td class="text-center">{$ds['plan_name']}</td> <td class="text-center">{$ds['plan_name']}</td>
<td class="text-center">{$ds['type']}</td> <td class="text-center">{$ds['type']}</td>
<td class="text-right">{$_c['currency_code']} {number_format($ds['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</td> <td class="text-right">{Lang::moneyFormat($ds['price'])}</td>
<td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td> <td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td>
<td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td> <td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td>
<td class="text-center">{$ds['method']}</td> <td class="text-center">{$ds['method']}</td>

View File

@ -38,7 +38,7 @@
<td>{$ds['username']}</td> <td>{$ds['username']}</td>
<td class="text-center">{$ds['plan_name']}</td> <td class="text-center">{$ds['plan_name']}</td>
<td class="text-center">{$ds['type']}</td> <td class="text-center">{$ds['type']}</td>
<td class="text-right">{$_c['currency_code']} {number_format($ds['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</td> <td class="text-right">{Lang::moneyFormat($ds['price'])}</td>
<td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td> <td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td>
<td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td> <td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td>
<td class="text-center">{$ds['method']}</td> <td class="text-center">{$ds['method']}</td>
@ -49,7 +49,7 @@
</div> </div>
<div class="clearfix text-right total-sum mb10"> <div class="clearfix text-right total-sum mb10">
<h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4> <h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4>
<h3 class="sum">{$_c['currency_code']} {number_format($dr,2,$_c['dec_point'],$_c['thousands_sep'])}</h3> <h3 class="sum">{Lang::moneyFormat($dr)}</h3>
</div> </div>
</div> </div>
<button type="button" id="actprint" class="btn btn-default btn-sm no-print">{$_L['Click_Here_to_Print']}</button> <button type="button" id="actprint" class="btn btn-default btn-sm no-print">{$_L['Click_Here_to_Print']}</button>

View File

@ -86,7 +86,7 @@
<td rowspan="5" width="1"><img src="qrcode/?data={$vs['code']}"></td> <td rowspan="5" width="1"><img src="qrcode/?data={$vs['code']}"></td>
</tr> </tr>
<tr> <tr>
<td valign="middle" align="center" style="font-size:25px">{$_c['currency_code']} {number_format($vs['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</td> <td valign="middle" align="center" style="font-size:25px">{Lang::moneyFormat($vs['price'])}</td>
</tr> </tr>
<tr> <tr>
<td valign="middle" align="center" style="font-size:20px">{$_L['Code_Voucher']}</td> <td valign="middle" align="center" style="font-size:20px">{$_L['Code_Voucher']}</td>

View File

@ -9,7 +9,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Select_Account']}</label> <label class="col-md-2 control-label">{$_L['Select_Account']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="personSelect" class="form-control" name="id_customer" style="width: 100%" data-placeholder="Select a customer..."> <select id="personSelect" class="form-control select2" name="id_customer" style="width: 100%" data-placeholder="Select a customer...">
<option></option> <option></option>
{foreach $c as $cs} {foreach $c as $cs}
{if $id eq $cs['id']} {if $id eq $cs['id']}
@ -31,7 +31,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Routers']}</label> <label class="col-md-2 control-label">{$_L['Routers']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="server" name="server" class="form-control"> <select id="server" name="server" class="form-control select2">
<option value=''>Select Routers</option> <option value=''>Select Routers</option>
</select> </select>
</div> </div>
@ -40,7 +40,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label> <label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="plan" name="plan" class="form-control"> <select id="plan" name="plan" class="form-control select2">
<option value=''>Select Plans</option> <option value=''>Select Plans</option>
</select> </select>
</div> </div>

View File

@ -9,7 +9,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Select_Account']}</label> <label class="col-md-2 control-label">{$_L['Select_Account']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="personSelect" class="form-control" name="id_customer" style="width: 100%" data-placeholder="{$_L['Select_Customer']}..."> <select id="personSelect" class="form-control select2" name="id_customer" style="width: 100%" data-placeholder="{$_L['Select_Customer']}...">
<option></option> <option></option>
{foreach $c as $cs} {foreach $c as $cs}
<option value="{$cs['id']}">{$cs['username']}</option> <option value="{$cs['id']}">{$cs['username']}</option>
@ -27,7 +27,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Routers']}</label> <label class="col-md-2 control-label">{$_L['Routers']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="server" name="server" class="form-control"> <select id="server" name="server" class="form-control select2">
<option value=''>{$_L['Select_Routers']}</option> <option value=''>{$_L['Select_Routers']}</option>
</select> </select>
</div> </div>
@ -36,7 +36,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label> <label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="plan" name="plan" class="form-control"> <select id="plan" name="plan" class="form-control select2">
<option value=''>{$_L['Select_Plans']}</option> <option value=''>{$_L['Select_Plans']}</option>
</select> </select>
</div> </div>

View File

@ -3,13 +3,13 @@
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12"> <div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30"> <div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Recharge_Account']}</div> <div class="panel-heading">{$_L['Refill_Account']}</div>
<div class="panel-body"> <div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}prepaid/refill-post"> <form class="form-horizontal" method="post" role="form" action="{$_url}prepaid/refill-post">
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Select_Account']}</label> <label class="col-md-2 control-label">{$_L['Select_Account']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="personSelect" class="form-control" name="id_customer" style="width: 100%" <select id="personSelect" class="form-control select2" name="id_customer" style="width: 100%"
data-placeholder="{$_L['Select_Customer']}..."> data-placeholder="{$_L['Select_Customer']}...">
<option></option> <option></option>
{foreach $c as $cs} {foreach $c as $cs}

View File

@ -44,31 +44,37 @@
<div class="panel-body"> <div class="panel-body">
<div class="form-container"> <div class="form-container">
<div class="form-group"> <div class="form-group">
<label>{$_L['Phone_Number']}</label> <label>{$_L['Phone_Number']}</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon" id="basic-addon1">+</span> {if $_c['country_code_phone']!= ''}
<span class="input-group-addon" id="basic-addon1">+</span>
{else}
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
{/if}
<input type="text" class="form-control" name="username" value="{$username}" <input type="text" class="form-control" name="username" value="{$username}"
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}"> placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>{Lang::T('SMS Verification Code')}</label> <label>{Lang::T('SMS Verification Code')}</label>
<input type="text" required class="form-control" id="otp_code" value="" <input type="text" required class="form-control" id="otp_code" value=""
placeholder="{Lang::T('Verification Code')}" name="otp_code"> placeholder="{Lang::T('Verification Code')}" name="otp_code">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>{$_L['Full_Name']}</label> <label>{$_L['Full_Name']}</label>
<input type="text" required class="form-control" id="fullname" value="{$fullname}" <input type="text" required class="form-control" id="fullname" value="{$fullname}"
name="fullname"> name="fullname">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>{$_L['Email']}</label> <label>{$_L['Email']}</label>
<input type="text" required class="form-control" placeholder="xxxxxx@xxx.xx" id="email" value="{$email}" <input type="text" required class="form-control" placeholder="xxxxxx@xxx.xx"
name="email"> id="email" value="{$email}" name="email">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>{$_L['Address']}</label> <label>{$_L['Address']}</label>
<input type="text" name="address" id="address" value="{$address}" class="form-control"> <input type="text" name="address" id="address" value="{$address}"
class="form-control">
</div> </div>
</div> </div>
</div> </div>
@ -80,12 +86,13 @@
<div class="panel-body"> <div class="panel-body">
<div class="form-container"> <div class="form-container">
<div class="form-group"> <div class="form-group">
<label>{$_L['Password']}</label> <label>{$_L['Password']}</label>
<input type="password" required class="form-control" id="password" name="password"> <input type="password" required class="form-control" id="password" name="password">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>{$_L['Confirm_Password']}</label> <label>{$_L['Confirm_Password']}</label>
<input type="password" required class="form-control" id="cpassword" name="cpassword"> <input type="password" required class="form-control" id="cpassword"
name="cpassword">
</div> </div>
<div class="btn-group btn-group-justified mb15"> <div class="btn-group btn-group-justified mb15">
<div class="btn-group"> <div class="btn-group">

View File

@ -51,7 +51,7 @@
</div> </div>
</div> </div>
</div> </div>
<form action="{$_url}register" method="post"> <form action="{$_url}register" method="post">
<div class="col-md-4"> <div class="col-md-4">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading">1. {$_L['Register_Member']}</div> <div class="panel-heading">1. {$_L['Register_Member']}</div>
@ -59,7 +59,12 @@
<div class="form-group"> <div class="form-group">
<label>{$_L['Phone_Number']}</label> <label>{$_L['Phone_Number']}</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon" id="basic-addon1">+</span> {if $_c['country_code_phone']!= ''}
<span class="input-group-addon" id="basic-addon1">+</span>
{else}
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
{/if}
<input type="text" class="form-control" name="username" <input type="text" class="form-control" name="username"
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}"> placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
</div> </div>

View File

@ -41,8 +41,7 @@
<td>{$ds['username']}</td> <td>{$ds['username']}</td>
<td>{$ds['type']}</td> <td>{$ds['type']}</td>
<td>{$ds['plan_name']}</td> <td>{$ds['plan_name']}</td>
<td class="text-right">{$_c['currency_code']} <td class="text-right">{Lang::moneyFormat($ds['price'])}</td>
{number_format($ds['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</td>
<td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td> <td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td>
<td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td> <td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td>
<td>{$ds['method']}</td> <td>{$ds['method']}</td>
@ -56,7 +55,7 @@
<div class="clearfix text-right total-sum mb10"> <div class="clearfix text-right total-sum mb10">
<h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4> <h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4>
<h3 class="sum">{$_c['currency_code']} {number_format($dr,2,$_c['dec_point'],$_c['thousands_sep'])}</h3> <h3 class="sum">{Lang::moneyFormat($dr)}</h3>
</div> </div>
<p class="text-center small text-info">{$_L['All_Transactions_at_Date']}: <p class="text-center small text-info">{$_L['All_Transactions_at_Date']}:
{date($_c['date_format'], strtotime($mdate))} {$mtime}</p> {date($_c['date_format'], strtotime($mdate))} {$mtime}</p>

View File

@ -52,8 +52,7 @@
<td>{$ds['username']}</td> <td>{$ds['username']}</td>
<td>{$ds['type']}</td> <td>{$ds['type']}</td>
<td>{$ds['plan_name']}</td> <td>{$ds['plan_name']}</td>
<td class="text-right">{$_c['currency_code']} <td class="text-right">{Lang::moneyFormat($ds['price'])}</td>
{number_format($ds['price'],0,$_c['dec_point'],$_c['thousands_sep'])}</td>
<td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td> <td>{date($_c['date_format'], strtotime($ds['recharged_on']))}</td>
<td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td> <td>{date($_c['date_format'], strtotime($ds['expiration']))} {$ds['time']}</td>
<td>{$ds['method']}</td> <td>{$ds['method']}</td>
@ -65,7 +64,7 @@
</div> </div>
<div class="clearfix text-right total-sum mb10"> <div class="clearfix text-right total-sum mb10">
<h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4> <h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4>
<h3 class="sum">{$_c['currency_code']} {number_format($dr,2,$_c['dec_point'],$_c['thousands_sep'])}</h3> <h3 class="sum">{Lang::moneyFormat($dr)}</h3>
</div> </div>
<p class="text-center small text-info">{$stype} [{date( $_c['date_format'], strtotime($fdate))} - <p class="text-center small text-info">{$stype} [{date( $_c['date_format'], strtotime($fdate))} -
{date( $_c['date_format'], strtotime($tdate))}]</p> {date( $_c['date_format'], strtotime($tdate))}]</p>

2
ui/ui/scripts/select2.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -14,10 +14,18 @@
<script src="ui/ui/scripts/plugins/select2.min.js"></script> <script src="ui/ui/scripts/plugins/select2.min.js"></script>
<script src="ui/ui/scripts/custom.js"></script> <script src="ui/ui/scripts/custom.js"></script>
<script src="ui/ui/scripts/select2.min.js"></script>
{if isset($xfooter)} {if isset($xfooter)}
{$xfooter} {$xfooter}
{/if} {/if}
{literal}
<script>
$(document).ready(function() {
$('.select2').select2({theme: "bootstrap"});
});
</script>
{/literal}
</body> </body>

View File

@ -15,7 +15,8 @@
<link rel="stylesheet" href="ui/ui/styles/adminlte.min.css"> <link rel="stylesheet" href="ui/ui/styles/adminlte.min.css">
<link rel="stylesheet" href="ui/ui/styles/skin-blue.min.css"> <link rel="stylesheet" href="ui/ui/styles/skin-blue.min.css">
<link rel="stylesheet" href="ui/ui/styles/select2.min.css" />
<link rel="stylesheet" href="ui/ui/styles/select2-bootstrap.min.css" />
<style> <style>
::-moz-selection { ::-moz-selection {
/* Code for Firefox */ /* Code for Firefox */
@ -27,6 +28,10 @@
color: red; color: red;
background: yellow; background: yellow;
} }
.select2-container .select2-selection--single .select2-selection__rendered {
margin-top: 0px !important;
}
</style> </style>
{if isset($xheader)} {if isset($xheader)}
@ -53,15 +58,15 @@
<li class="dropdown user user-menu"> <li class="dropdown user user-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="https://robohash.org/{$_admin['id']}?set=set3&size=100x100&bgset=bg1" <img src="https://robohash.org/{$_admin['id']}?set=set3&size=100x100&bgset=bg1"
onerror="this.src='system/uploads/admin.default.png'" onerror="this.src='system/uploads/admin.default.png'" class="user-image"
class="user-image" alt="Avatar"> alt="Avatar">
<span class="hidden-xs">{$_admin['fullname']}</span> <span class="hidden-xs">{$_admin['fullname']}</span>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li class="user-header"> <li class="user-header">
<img src="https://robohash.org/{$_admin['id']}?set=set3&size=100x100&bgset=bg1" <img src="https://robohash.org/{$_admin['id']}?set=set3&size=100x100&bgset=bg1"
onerror="this.src='system/uploads/admin.default.png'" onerror="this.src='system/uploads/admin.default.png'" class="img-circle"
class="img-circle" alt="Avatar"> alt="Avatar">
<p> <p>
{$_admin['fullname']} {$_admin['fullname']}
@ -73,11 +78,12 @@
<li class="user-body"> <li class="user-body">
<div class="row"> <div class="row">
<div class="col-xs-7 text-center text-sm"> <div class="col-xs-7 text-center text-sm">
<a href="{$_url}settings/change-password"><i class="ion ion-settings"></i> {$_L['Change_Password']}</a> <a href="{$_url}settings/change-password"><i class="ion ion-settings"></i>
{$_L['Change_Password']}</a>
</div> </div>
<div class="col-xs-5 text-center text-sm"> <div class="col-xs-5 text-center text-sm">
<a href="{$_url}settings/users-edit/{$_admin['id']}"> <a href="{$_url}settings/users-edit/{$_admin['id']}">
<i class="ion ion-person"></i> {$_L['My_Account']}</a> <i class="ion ion-person"></i> {$_L['My_Account']}</a>
</div> </div>
</div> </div>
</li> </li>
@ -139,6 +145,8 @@
{/if} {/if}
<li {if $_routes[1] eq 'recharge'}class="active" {/if}><a <li {if $_routes[1] eq 'recharge'}class="active" {/if}><a
href="{$_url}prepaid/recharge">{$_L['Recharge_Account']}</a></li> href="{$_url}prepaid/recharge">{$_L['Recharge_Account']}</a></li>
<li {if $_routes[1] eq 'deposit'}class="active" {/if}><a
href="{$_url}prepaid/deposit">{Lang::T('Refill Balance')}</a></li>
{$_MENU_PREPAID} {$_MENU_PREPAID}
</ul> </ul>
</li> </li>
@ -157,8 +165,8 @@
href="{$_url}services/pppoe">{$_L['PPPOE_Plans']}</a></li> href="{$_url}services/pppoe">{$_L['PPPOE_Plans']}</a></li>
<li {if $_routes[1] eq 'list'}class="active" {/if}><a <li {if $_routes[1] eq 'list'}class="active" {/if}><a
href="{$_url}bandwidth/list">{$_L['Bandwidth_Plans']}</a></li> href="{$_url}bandwidth/list">{$_L['Bandwidth_Plans']}</a></li>
<li {if $_routes[1] eq 'balance'}class="active" {/if}><a <li {if $_routes[1] eq 'balance'}class="active" {/if}><a
href="{$_url}services/balance">{Lang::T('Balance Plans')}</a></li> href="{$_url}services/balance">{Lang::T('Balance Plans')}</a></li>
{$_MENU_SERVICES} {$_MENU_SERVICES}
</ul> </ul>
</li> </li>
@ -217,7 +225,7 @@
</ul> </ul>
</li> </li>
{$_MENU_AFTER_PAGES} {$_MENU_AFTER_PAGES}
<li class="{if $_system_menu eq 'settings'}active{/if} treeview"> <li class="{if $_system_menu eq 'settings' || $_system_menu eq 'paymentgateway' }active{/if} treeview">
<a href="#"> <a href="#">
<i class="ion ion-gear-a"></i> <span>{$_L['Settings']}</span> <i class="ion ion-gear-a"></i> <span>{$_L['Settings']}</span>
<span class="pull-right-container"> <span class="pull-right-container">
@ -228,26 +236,25 @@
<li {if $_routes[1] eq 'app'}class="active" {/if}><a <li {if $_routes[1] eq 'app'}class="active" {/if}><a
href="{$_url}settings/app">{$_L['General_Settings']}</a></li> href="{$_url}settings/app">{$_L['General_Settings']}</a></li>
<li {if $_routes[1] eq 'localisation'}class="active" {/if}><a <li {if $_routes[1] eq 'localisation'}class="active" {/if}><a
href="{$_url}settings/localisation">{$_L['Localisation']}</a></li> href="{$_url}settings/localisation">{$_L['Localisation']}</a></li>
<li {if $_routes[1] eq 'notifications'}class="active" {/if}><a <li {if $_routes[1] eq 'notifications'}class="active" {/if}><a
href="{$_url}settings/notifications">{Lang::T('User Notification')}</a></li> href="{$_url}settings/notifications">{Lang::T('User Notification')}</a></li>
<li {if $_routes[1] eq 'users'}class="active" {/if}><a <li {if $_routes[1] eq 'users'}class="active" {/if}><a
href="{$_url}settings/users">{$_L['Administrator_Users']}</a></li> href="{$_url}settings/users">{$_L['Administrator_Users']}</a></li>
<li {if $_routes[1] eq 'dbstatus'}class="active" {/if}><a <li {if $_routes[1] eq 'dbstatus'}class="active" {/if}><a
href="{$_url}settings/dbstatus">{$_L['Backup_Restore']}</a></li> href="{$_url}settings/dbstatus">{$_L['Backup_Restore']}</a></li>
<li {if $_routes[1] eq 'dbstatus'}class="active" {/if}><a <li {if $_routes[0] eq 'pluginmanager'}class="active" {/if}>
href="{$_url}pluginmanager">{Lang::T('Plugin Manager')}</a></li> <a href="{$_url}pluginmanager">{Lang::T('Plugin Manager')}</a>
</li>
<li {if $_system_menu eq 'paymentgateway'}class="active" {/if}>
<a href="{$_url}paymentgateway">
<span class="text">{Lang::T('Payment Gateway')}</span>
</a>
</li>
{$_MENU_SETTINGS} {$_MENU_SETTINGS}
</ul> </ul>
</li> </li>
{$_MENU_AFTER_SETTINGS} {$_MENU_AFTER_SETTINGS}
<li {if $_system_menu eq 'paymentgateway'}class="active" {/if}>
<a href="{$_url}paymentgateway">
<i class="ion ion-cash"></i>
<span class="text">{Lang::T('Payment Gateway')}</span>
</a>
</li>
{$_MENU_AFTER_PAYMENTGATEWAY}
<li {if $_system_menu eq 'community'}class="active" {/if}> <li {if $_system_menu eq 'community'}class="active" {/if}>
<a href="{$_url}community"> <a href="{$_url}community">
<i class="ion ion-chatboxes"></i> <i class="ion ion-chatboxes"></i>

View File

@ -39,7 +39,7 @@
<div class="wrapper"> <div class="wrapper">
<header class="main-header"> <header class="main-header">
<a href="{$_url}?_route=home" class="logo"> <a href="{$_url}home" class="logo">
<span class="logo-mini"><b>N</b>uX</span> <span class="logo-mini"><b>N</b>uX</span>
<span class="logo-lg">{$_c['CompanyName']}</span> <span class="logo-lg">{$_c['CompanyName']}</span>
</a> </a>

1
ui/ui/styles/select2-bootstrap.min.css vendored Executable file

File diff suppressed because one or more lines are too long

1
ui/ui/styles/select2.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -24,7 +24,7 @@
<tr> <tr>
<td>{$ds['username']}</td> <td>{$ds['username']}</td>
<td>{$ds['plan_name']}</td> <td>{$ds['plan_name']}</td>
<td>{number_format($ds['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</td> <td>{Lang::moneyFormat($ds['price'])}</td>
<td>{$ds['type']}</td> <td>{$ds['type']}</td>
<td class="text-success">{date($_c['date_format'], strtotime($ds['recharged_on']))}</td> <td class="text-success">{date($_c['date_format'], strtotime($ds['recharged_on']))}</td>
<td class="text-danger">{date($_c['date_format'], strtotime($ds['expiration']))} <td class="text-danger">{date($_c['date_format'], strtotime($ds['expiration']))}

View File

@ -44,7 +44,11 @@
<div class="form-group"> <div class="form-group">
<label>{$_L['Phone_Number']}</label> <label>{$_L['Phone_Number']}</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon" id="basic-addon1">+</span> {if $_c['country_code_phone']!= ''}
<span class="input-group-addon" id="basic-addon1">+</span>
{else}
<span class="input-group-addon" id="basic-addon1"><i class="glyphicon glyphicon-phone-alt"></i></span>
{/if}
<input type="text" class="form-control" name="username" <input type="text" class="form-control" name="username"
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}"> placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
</div> </div>

View File

@ -28,7 +28,7 @@
<td>{$ds['gateway']}</td> <td>{$ds['gateway']}</td>
<td>{$ds['routers']}</td> <td>{$ds['routers']}</td>
<td>{$ds['payment_channel']}</td> <td>{$ds['payment_channel']}</td>
<td>{number_format($ds['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</td> <td>{Lang::moneyFormat($ds['price'])}</td>
<td class="text-primary">{date("{$_c['date_format']} H:i", <td class="text-primary">{date("{$_c['date_format']} H:i",
strtotime($ds['created_date']))}</td> strtotime($ds['created_date']))}</td>
<td class="text-danger">{date("{$_c['date_format']} H:i", <td class="text-danger">{date("{$_c['date_format']} H:i",

View File

@ -5,33 +5,35 @@
<div class="box box-solid box-default"> <div class="box box-solid box-default">
<div class="box-header">{Lang::T('Order Internet Package')}</div> <div class="box-header">{Lang::T('Order Internet Package')}</div>
</div> </div>
<div class="box box-solid box-primary"> {if $_c['enable_balance'] == 'yes'}
<div class="box-header">{Lang::T('Balance Plans')}</div> <div class="box box-solid box-primary">
<div class="box-body row"> <div class="box-header">{Lang::T('Balance Plans')}</div>
{foreach $plans_balance as $plan} <div class="box-body row">
<div class="col col-md-4"> {foreach $plans_balance as $plan}
<div class="box box-solid box-default"> <div class="col col-md-4">
<div class="box-header">{$plan['name_plan']}</div> <div class="box box-solid box-default">
<div class="table-responsive"> <div class="box-header">{$plan['name_plan']}</div>
<table class="table table-bordered table-striped"> <div class="table-responsive">
<tbody> <table class="table table-bordered table-striped">
<tr> <tbody>
<td>{Lang::T('Price')}</td> <tr>
<td>{Lang::moneyFormat($plan['price'])}</td> <td>{Lang::T('Price')}</td>
</tr> <td>{Lang::moneyFormat($plan['price'])}</td>
</tbody> </tr>
</table> </tbody>
</div> </table>
<div class="box-body"> </div>
<a href="{$_url}order/buy/0/{$plan['id']}" <div class="box-body">
onclick="return confirm('{Lang::T('Buy Balance?')}')" <a href="{$_url}order/buy/0/{$plan['id']}"
class="btn btn-sm btn-block btn-primary">Buy</a> onclick="return confirm('{Lang::T('Buy Balance?')}')"
class="btn btn-sm btn-block btn-primary">Buy</a>
</div>
</div> </div>
</div> </div>
</div> {/foreach}
{/foreach} </div>
</div> </div>
</div> {/if}
{foreach $routers as $router} {foreach $routers as $router}
<div class="box box-solid box-info"> <div class="box box-solid box-info">
<div class="box-header text-black">{$router['name']}</div> <div class="box-header text-black">{$router['name']}</div>

View File

@ -18,7 +18,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Routers']}</label> <label class="col-md-2 control-label">{$_L['Routers']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="server" name="server" class="form-control"> <select id="server" name="server" class="form-control select2">
<option value=''>{$_L['Select_Routers']}</option> <option value=''>{$_L['Select_Routers']}</option>
</select> </select>
</div> </div>
@ -26,7 +26,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label> <label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
<div class="col-md-6"> <div class="col-md-6">
<select id="plan" name="plan" class="form-control"> <select id="plan" name="plan" class="form-control select2">
<option value=''>{$_L['Select_Plans']}</option> <option value=''>{$_L['Select_Plans']}</option>
</select> </select>
</div> </div>

View File

@ -6,8 +6,11 @@
* This script is for updating PHPNuxBill * This script is for updating PHPNuxBill
**/ **/
session_start(); session_start();
include "config.php";
$download_url = 'https://github.com/hotspotbilling/phpnuxbill/archive/refs/heads/master.zip'; if(empty($update_url)){
$update_url = 'https://github.com/hotspotbilling/phpnuxbill/archive/refs/heads/master.zip';
}
if (!isset($_SESSION['aid']) || empty($_SESSION['aid'])) { if (!isset($_SESSION['aid']) || empty($_SESSION['aid'])) {
r2("./?_route=login&You_are_not_admin", 'e', 'You are not admin'); r2("./?_route=login&You_are_not_admin", 'e', 'You are not admin');
@ -40,7 +43,7 @@ if (empty($step)) {
// Download update // Download update
$fp = fopen($file, 'w+'); $fp = fopen($file, 'w+');
$ch = curl_init($download_url); $ch = curl_init($update_url);
curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 600); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 600);
curl_setopt($ch, CURLOPT_TIMEOUT, 600); curl_setopt($ch, CURLOPT_TIMEOUT, 600);
@ -100,7 +103,11 @@ if (empty($step)) {
foreach ($updates as $version => $queries) { foreach ($updates as $version => $queries) {
if (!in_array($version, $dones)) { if (!in_array($version, $dones)) {
foreach ($queries as $q) { foreach ($queries as $q) {
$dbh->exec($q); try{
$db->exec($q);
}catch(PDOException $e){
//ignore, it exists already
}
} }
$dones[] = $version; $dones[] = $version;
} }
@ -212,7 +219,7 @@ function deleteFolder($path)
<?= $msg ?> <?= $msg ?>
</div> </div>
<?php } ?> <?php } ?>
<?php if ($continue || $step == 4) { ?> <?php if ($continue || $step == 5) { ?>
<?php if ($step == 1) { ?> <?php if ($step == 1) { ?>
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading">Step 1</div> <div class="panel-heading">Step 1</div>
@ -239,7 +246,7 @@ function deleteFolder($path)
</div> </div>
<?php } else if ($step == 4) { ?> <?php } else if ($step == 4) { ?>
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading">Step 3</div> <div class="panel-heading">Step 4</div>
<div class="panel-body"> <div class="panel-body">
Updating database... Updating database...
</div> </div>

View File

@ -1,3 +1,3 @@
{ {
"version": "2023.8.15" "version": "2023.8.16"
} }