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:
commit
2431aa2eb5
@ -2,6 +2,12 @@
|
||||
|
||||
# CHANGELOG
|
||||
|
||||
## 2023.8.16
|
||||
|
||||
- Admin Can Add Balance to Customer
|
||||
- Show Balance in user
|
||||
- Using Select2 for Dropdown
|
||||
|
||||
## 2023.8.15
|
||||
|
||||
- Fix PPPOE Delete Customer
|
||||
|
@ -6,6 +6,8 @@
|
||||
|
||||
- Voucher Generator and Print
|
||||
- Self registration
|
||||
- User Balance
|
||||
- Auto Renewal Package using Balance
|
||||
- Multi Router Mikrotik
|
||||
- Hotspot & PPPOE
|
||||
- Easy Installation
|
||||
|
@ -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('[[user_name]]', $c['username'], $textInvoice);
|
||||
$textInvoice = str_replace('[[user_password]]', $c['password'], $textInvoice);
|
||||
$textInvoice = str_replace('[[footer]]', $_c['note'], $textInvoice);
|
||||
|
||||
if ($_c['user_notification_payment'] == 'sms') {
|
||||
Message::sendSMS($c['phonenumber'], $textInvoice);
|
||||
@ -255,6 +256,7 @@ class Package
|
||||
$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('[[footer]]', $_c['note'], $textInvoice);
|
||||
|
||||
if ($_c['user_notification_payment'] == 'sms') {
|
||||
Message::sendSMS($c['phonenumber'], $textInvoice);
|
||||
@ -263,4 +265,40 @@ class Package
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -122,16 +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');
|
||||
if ($routes['2'] != '0') {
|
||||
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']);
|
||||
if (empty($router) || empty($plan)) {
|
||||
r2(U . "order/package", 'e', Lang::T("Plan Not found"));
|
||||
}
|
||||
$d = ORM::for_table('tbl_payment_gateway')
|
||||
->where('username', $user['username'])
|
||||
->where('status', 1)
|
||||
|
@ -72,8 +72,6 @@ switch ($action) {
|
||||
$type = _post('type');
|
||||
$server = _post('server');
|
||||
$plan = _post('plan');
|
||||
|
||||
$date_now = date("Y-m-d H:i:s");
|
||||
$date_only = date("Y-m-d");
|
||||
$time = date("H:i:s");
|
||||
|
||||
@ -83,212 +81,28 @@ switch ($action) {
|
||||
}
|
||||
|
||||
if ($msg == '') {
|
||||
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
|
||||
$p = ORM::for_table('tbl_plans')->where('id', $plan)->where('enabled', '1')->find_one();
|
||||
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one();
|
||||
|
||||
$mikrotik = Mikrotik::info($server);
|
||||
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];
|
||||
if(Package::rechargeUser($id_customer, $server, $plan, "Recharge", $admin['fullname'])){
|
||||
$c = ORM::for_table('tbl_customers')->where('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);
|
||||
$ui->assign('date', date("Y-m-d H:i:s"));
|
||||
$ui->display('invoice.tpl');
|
||||
_log('[' . $admin['username'] . ']: ' . 'Recharge '.$c['username'].' ['.$in['plan_name'].']['.Lang::moneyFormat($in['price']).']', 'Admin', $admin['id']);
|
||||
}else{
|
||||
r2(U . 'prepaid/recharge', 'e', "Failed to recharge account");
|
||||
}
|
||||
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 {
|
||||
r2(U . 'prepaid/recharge', 'e', $msg);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'print':
|
||||
$date_now = date("Y-m-d H:i:s");
|
||||
$id = _post('id');
|
||||
|
||||
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
|
||||
$ui->assign('d', $d);
|
||||
|
||||
$ui->assign('date', $date_now);
|
||||
$ui->assign('date', date("Y-m-d H:i:s"));
|
||||
run_hook('print_invoice'); #HOOK
|
||||
$ui->display('invoice-print.tpl');
|
||||
break;
|
||||
@ -328,6 +142,7 @@ switch ($action) {
|
||||
}
|
||||
$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']);
|
||||
}
|
||||
break;
|
||||
@ -352,7 +167,8 @@ switch ($action) {
|
||||
$d->recharged_on = $recharged_on;
|
||||
$d->expiration = $expiration;
|
||||
$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']);
|
||||
} else {
|
||||
r2(U . 'prepaid/edit/' . $id, 'e', $msg);
|
||||
@ -526,7 +342,7 @@ switch ($action) {
|
||||
|
||||
case 'refill':
|
||||
$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();
|
||||
$ui->assign('c', $c);
|
||||
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();
|
||||
|
||||
$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
|
||||
if ($v1) {
|
||||
if ($v1['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 = $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();
|
||||
}
|
||||
|
||||
if(Package::rechargeUser($user, $v1['routers'], $v1['id_plan'], "Refill", "Voucher")){
|
||||
$v1->status = "1";
|
||||
$v1->user = $c['username'];
|
||||
$v1->save();
|
||||
|
||||
Message::sendTelegram( "$admin[fullname] #Refill #Voucher #Hotspot for #u$c[username]\n".$p['name_plan'].
|
||||
"\nCode: ".$code.
|
||||
"\nRouter: ".$v1['routers'].
|
||||
"\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 = $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']);
|
||||
$c = ORM::for_table('tbl_customers')->where('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);
|
||||
$ui->assign('date', date("Y-m-d H:i:s"));
|
||||
$ui->display('invoice.tpl');
|
||||
}else{
|
||||
r2(U . 'prepaid/refill', 'e', "Failed to refill account");
|
||||
}
|
||||
$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 {
|
||||
r2(U . 'prepaid/refill', 'e', $_L['Voucher_Not_Valid']);
|
||||
}
|
||||
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:
|
||||
echo 'action not defined';
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ switch ($action) {
|
||||
$data_limit = _post('data_limit');
|
||||
$data_unit = _post('data_unit');
|
||||
$id_bw = _post('id_bw');
|
||||
$price = _post('pricebp');
|
||||
$price = _post('price');
|
||||
$sharedusers = _post('sharedusers');
|
||||
$validity = _post('validity');
|
||||
$validity_unit = _post('validity_unit');
|
||||
|
@ -363,3 +363,5 @@ $_L['Disable_auto_renewal'] = 'Disable auto renewal?';
|
||||
$_L['Auto_Renewal_On'] = 'Auto Renewal On';
|
||||
$_L['Enable_auto_renewal'] = 'Enable auto renewal?';
|
||||
$_L['Auto_Renewal_Off'] = 'Auto Renewal Off';
|
||||
$_L['Refill_Balance'] = 'Refill Balance';
|
||||
$_L['Invoice_Footer'] = 'Invoice Footer';
|
||||
|
@ -3,6 +3,6 @@
|
||||
"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.",
|
||||
"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..."
|
||||
"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\n====================\r\n[[footer]]"
|
||||
}
|
||||
|
@ -82,7 +82,8 @@
|
||||
<b>[[plan_price]]</b> Internet Package Prices.<br>
|
||||
<b>[[user_name]]</b> Username internet.<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -107,7 +108,8 @@
|
||||
<b>[[plan_price]]</b> Internet Package Prices.<br>
|
||||
<b>[[user_name]]</b> Username internet.<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>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -247,6 +247,24 @@
|
||||
add dst-host=tawk.to<br>
|
||||
add dst-host=*.tawk.to</p>
|
||||
</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 class="panel-body">
|
||||
|
@ -10,9 +10,9 @@
|
||||
<div class="box-footer">
|
||||
<div class="btn-group btn-group-justified" role="group" aria-label="...">
|
||||
<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>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
@ -28,7 +28,7 @@
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<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>
|
||||
@ -63,9 +63,9 @@
|
||||
<div class="box-footer">
|
||||
<div class="btn-group btn-group-justified" role="group" aria-label="...">
|
||||
<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"
|
||||
class="btn btn-primary btn-lg btn-block">karyakarsa</a>
|
||||
class="btn btn-primary btn-sm btn-block">karyakarsa</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -101,7 +101,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<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>
|
||||
@ -114,7 +114,7 @@
|
||||
</div>
|
||||
<div class="box-body">$50 Paid Support<br>donation confirmation?<br>Or ask any Donation Alternative</div>
|
||||
<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 class="box box-primary box-hovered mb20 activities">
|
||||
@ -126,7 +126,7 @@
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<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>
|
||||
@ -142,12 +142,24 @@
|
||||
<div class="box-footer" id="latestVersion">ver</div>
|
||||
<div class="box-footer">
|
||||
<div class="btn-group btn-group-justified" role="group" aria-label="...">
|
||||
<a href="./update.php" target="_blank"
|
||||
class="btn btn-success btn-lg btn-block">Install Latest Version</a>
|
||||
<a href="./update.php" target="_blank" class="btn btn-success btn-sm btn-block">Install Latest
|
||||
Version</a>
|
||||
<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 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>
|
||||
|
@ -36,6 +36,7 @@
|
||||
<tr>
|
||||
<th>{$_L['Username']}</th>
|
||||
<th>{$_L['Full_Name']}</th>
|
||||
<th>{Lang::T('Balance')}</th>
|
||||
<th>{$_L['Phone_Number']}</th>
|
||||
<th>{$_L['Email']}</th>
|
||||
<th>{$_L['Created_On']}</th>
|
||||
@ -48,6 +49,7 @@
|
||||
<tr>
|
||||
<td>{$ds['username']}</td>
|
||||
<td>{$ds['fullname']}</td>
|
||||
<td>{Lang::moneyFormat($ds['balance'])}</td>
|
||||
<td>{$ds['phonenumber']}</td>
|
||||
<td>{$ds['email']}</td>
|
||||
<td>{$ds['created_at']}</td>
|
||||
|
47
ui/ui/deposit.tpl
Normal file
47
ui/ui/deposit.tpl
Normal 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"}
|
@ -71,7 +71,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['BW_Name']}</label>
|
||||
<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>
|
||||
{foreach $d as $ds}
|
||||
<option value="{$ds['id']}">{$ds['name_bw']}</option>
|
||||
@ -84,7 +84,7 @@
|
||||
<div class="col-md-6">
|
||||
<div class="input-group">
|
||||
<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>
|
||||
@ -112,7 +112,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Router_Name']}</label>
|
||||
<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}
|
||||
<option value="{$rs['name']}">{$rs['name']}</option>
|
||||
{/foreach}
|
||||
|
@ -72,7 +72,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['BW_Name']}</label>
|
||||
<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}
|
||||
<option value="{$bs['id']}" {if $d['id_bw'] eq $bs['id']} selected {/if}>{$bs['name_bw']}</option>
|
||||
{/foreach}
|
||||
@ -84,7 +84,7 @@
|
||||
<div class="col-md-6">
|
||||
<div class="input-group">
|
||||
<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>
|
||||
|
@ -44,7 +44,7 @@
|
||||
<td>{$ds['name_plan']}</td>
|
||||
<td>{$ds['typebp']}</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['data_limit']} {$ds['data_unit']}</td>
|
||||
<td>{$ds['validity']} {$ds['validity_unit']}</td>
|
||||
|
@ -1,5 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{$_title}</title>
|
||||
<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 rel="shortcut icon" type="image/x-icon" href="ui/ui/images/favicon.ico">
|
||||
|
||||
<script type="text/javascript">
|
||||
function printpage() {
|
||||
window.print();
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
function printpage() {
|
||||
window.print();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body topmargin="0" leftmargin="0" onload="printpage()">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table width="200">
|
||||
<tr>
|
||||
<td>
|
||||
<fieldset>
|
||||
<center>
|
||||
<b>{$_c['CompanyName']}</b><br>
|
||||
{$_c['address']}<br>
|
||||
{$_c['phone']}<br>
|
||||
</center>
|
||||
============================================<br>
|
||||
INVOICE: <b>{$d['invoice']}</b> - {$_L['Date']} : {$date}<br>
|
||||
{$_L['Sales']} : {$_admin['fullname']}<br>
|
||||
============================================<br>
|
||||
{$_L['Type']} : <b>{$d['type']}</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>
|
||||
<br>
|
||||
{$_L['Username']} : <b>{$d['username']}</b><br>
|
||||
{$_L['Password']} : **********<br>
|
||||
<br>
|
||||
{$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($d['recharged_on']))}</b><br>
|
||||
{$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($d['expiration']))} {$d['time']}</b><br>
|
||||
============================================<br>
|
||||
<center>{$_c['note']}</center>
|
||||
</fieldset>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table width="200">
|
||||
<tr>
|
||||
<td>
|
||||
<fieldset>
|
||||
<center>
|
||||
<b>{$_c['CompanyName']}</b><br>
|
||||
{$_c['address']}<br>
|
||||
{$_c['phone']}<br>
|
||||
</center>
|
||||
============================================<br>
|
||||
INVOICE: <b>{$d['invoice']}</b> - {$_L['Date']} : {$date}<br>
|
||||
{$_L['Sales']} : {$_admin['fullname']}<br>
|
||||
============================================<br>
|
||||
{$_L['Type']} : <b>{$d['type']}</b><br>
|
||||
{$_L['Plan_Name']} : <b>{$d['plan_name']}</b><br>
|
||||
{$_L['Plan_Price']} : <b>{Lang::moneyFormat($in['price'])}</b><br>
|
||||
<br>
|
||||
{$_L['Username']} : <b>{$d['username']}</b><br>
|
||||
{$_L['Password']} : **********<br>
|
||||
{if $in['type'] != 'Balance'}
|
||||
<br>
|
||||
{$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($d['recharged_on']))}</b><br>
|
||||
{$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($d['expiration']))}
|
||||
{$d['time']}</b><br>
|
||||
{/if}
|
||||
============================================<br>
|
||||
<center>{$_c['note']}</center>
|
||||
</fieldset>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="ui/ui/scripts/jquery-1.10.2.js"></script>
|
||||
<script src="ui/ui/scripts/bootstrap.min.js"></script>
|
||||
{if isset($xfooter)}
|
||||
{$xfooter}
|
||||
{/if}
|
||||
<script src="ui/ui/scripts/jquery-1.10.2.js"></script>
|
||||
<script src="ui/ui/scripts/bootstrap.min.js"></script>
|
||||
{if isset($xfooter)}
|
||||
{$xfooter}
|
||||
{/if}
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
@ -1,48 +1,57 @@
|
||||
{include file="sections/header.tpl"}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="panel panel-hovered panel-primary panel-stacked mb30">
|
||||
<div class="panel-heading">PRINT INVOICE</div>
|
||||
<div class="panel-body">
|
||||
<div class="well">
|
||||
<fieldset>
|
||||
<center>
|
||||
<b>{$_c['CompanyName']}</b><br>
|
||||
{$_c['address']}<br>
|
||||
{$_c['phone']}<br>
|
||||
</center>
|
||||
====================================================<br>
|
||||
INVOICE: <b>{$in['invoice']}</b> - {$_L['Date']} : {$date}<br>
|
||||
{$_L['Sales']} : {$_admin['fullname']}<br>
|
||||
====================================================<br>
|
||||
{$_L['Type']} : <b>{$in['type']}</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>
|
||||
<br>
|
||||
{$_L['Username']} : <b>{$in['username']}</b><br>
|
||||
{$_L['Password']} : **********<br>
|
||||
<br>
|
||||
{$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($in['recharged_on']))}</b><br>
|
||||
{$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($in['expiration']))} {$in['time']}</b><br>
|
||||
=====================================================<br>
|
||||
<center>{$_c['note']}</center>
|
||||
</fieldset>
|
||||
</div>
|
||||
<form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank">
|
||||
<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 class="col-md-6 col-sm-12">
|
||||
<div class="panel panel-hovered panel-primary panel-stacked mb30">
|
||||
<div class="panel-heading">PRINT INVOICE</div>
|
||||
<div class="panel-body">
|
||||
<div class="well">
|
||||
<fieldset>
|
||||
<center>
|
||||
<b>{$_c['CompanyName']}</b><br>
|
||||
{$_c['address']}<br>
|
||||
{$_c['phone']}<br>
|
||||
</center>
|
||||
====================================================<br>
|
||||
INVOICE: <b>{$in['invoice']}</b> - {$_L['Date']} : {$date}<br>
|
||||
{$_L['Sales']} : {$_admin['fullname']}<br>
|
||||
====================================================<br>
|
||||
{$_L['Type']} : <b>{$in['type']}</b><br>
|
||||
{$_L['Plan_Name']} : <b>{$in['plan_name']}</b><br>
|
||||
{$_L['Plan_Price']} : <b>{Lang::moneyFormat($in['price'])}</b><br>
|
||||
<br>
|
||||
{$_L['Username']} : <b>{$in['username']}</b><br>
|
||||
{$_L['Password']} : **********<br>
|
||||
{if $in['type'] != 'Balance'}
|
||||
<br>
|
||||
{$_L['Created_On']} : <b>{date($_c['date_format'], strtotime($in['recharged_on']))}</b><br>
|
||||
{$_L['Expires_On']} : <b>{date($_c['date_format'], strtotime($in['expiration']))}
|
||||
{$in['time']}</b><br>
|
||||
{/if}
|
||||
=====================================================<br>
|
||||
<center>{$_c['note']}</center>
|
||||
</fieldset>
|
||||
</div>
|
||||
<form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank">
|
||||
<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>
|
||||
<script type="text/javascript">
|
||||
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')
|
||||
}
|
||||
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'
|
||||
)
|
||||
}
|
||||
</script>
|
||||
{include file="sections/footer.tpl"}
|
@ -22,7 +22,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Routers']}</label>
|
||||
<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}
|
||||
<option value="{$rs['name']}">{$rs['name']}</option>
|
||||
{/foreach}
|
||||
|
@ -24,7 +24,6 @@
|
||||
<label class="col-md-2 control-label">{$_L['Routers']}</label>
|
||||
<div class="col-md-6">
|
||||
<input type="text" class="form-control" id="routers" name="routers" value="{$d['routers']}" readonly>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['BW_Name']}</label>
|
||||
<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>
|
||||
{foreach $d as $ds}
|
||||
<option value="{$ds['id']}">{$ds['name_bw']}</option>
|
||||
@ -60,7 +60,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Router_Name']}</label>
|
||||
<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>
|
||||
{foreach $r as $rs}
|
||||
<option value="{$rs['name']}">{$rs['name']}</option>
|
||||
@ -72,7 +72,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Pool']}</label>
|
||||
<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>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -27,7 +27,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['BW_Name']}</label>
|
||||
<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}
|
||||
<option value="{$bs['id']}" {if $d['id_bw'] eq $bs['id']} selected {/if}>{$bs['name_bw']}</option>
|
||||
{/foreach}
|
||||
@ -60,7 +60,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Pool']}</label>
|
||||
<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}
|
||||
<option value="{$ps['pool_name']}" {if $d['pool_name'] eq $ps['pool_name']} selected {/if}>{$ps['pool_name']}</option>
|
||||
{/foreach}
|
||||
|
@ -41,7 +41,7 @@
|
||||
<tr {if $ds['enabled'] != 1}class="danger" title="disabled"{/if}>
|
||||
<td>{$ds['name_plan']}</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['pool']}</td>
|
||||
<td>{$ds['routers']}</td>
|
||||
|
@ -17,7 +17,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
|
||||
<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}
|
||||
<option value="{$ps['id']}" {if $d['plan_id'] eq $ps['id']} selected {/if}>{$ps['name_plan']}</option>
|
||||
{/foreach}
|
||||
|
@ -38,7 +38,7 @@
|
||||
<td>{$ds['username']}</td>
|
||||
<td class="text-center">{$ds['plan_name']}</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['expiration']))} {$ds['time']}</td>
|
||||
<td class="text-center">{$ds['method']}</td>
|
||||
|
@ -38,7 +38,7 @@
|
||||
<td>{$ds['username']}</td>
|
||||
<td class="text-center">{$ds['plan_name']}</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['expiration']))} {$ds['time']}</td>
|
||||
<td class="text-center">{$ds['method']}</td>
|
||||
@ -49,7 +49,7 @@
|
||||
</div>
|
||||
<div class="clearfix text-right total-sum mb10">
|
||||
<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>
|
||||
<button type="button" id="actprint" class="btn btn-default btn-sm no-print">{$_L['Click_Here_to_Print']}</button>
|
||||
|
@ -86,7 +86,7 @@
|
||||
<td rowspan="5" width="1"><img src="qrcode/?data={$vs['code']}"></td>
|
||||
</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>
|
||||
<td valign="middle" align="center" style="font-size:20px">{$_L['Code_Voucher']}</td>
|
||||
|
@ -9,7 +9,7 @@
|
||||
<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" 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>
|
||||
{foreach $c as $cs}
|
||||
{if $id eq $cs['id']}
|
||||
@ -31,7 +31,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Routers']}</label>
|
||||
<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>
|
||||
</select>
|
||||
</div>
|
||||
@ -40,7 +40,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
|
||||
<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>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -9,7 +9,7 @@
|
||||
<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" 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>
|
||||
{foreach $c as $cs}
|
||||
<option value="{$cs['id']}">{$cs['username']}</option>
|
||||
@ -27,7 +27,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Routers']}</label>
|
||||
<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>
|
||||
</select>
|
||||
</div>
|
||||
@ -36,7 +36,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
|
||||
<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>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -3,13 +3,13 @@
|
||||
<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">{$_L['Recharge_Account']}</div>
|
||||
<div class="panel-heading">{$_L['Refill_Account']}</div>
|
||||
<div class="panel-body">
|
||||
<form class="form-horizontal" method="post" role="form" action="{$_url}prepaid/refill-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" name="id_customer" style="width: 100%"
|
||||
<select id="personSelect" class="form-control select2" name="id_customer" style="width: 100%"
|
||||
data-placeholder="{$_L['Select_Customer']}...">
|
||||
<option></option>
|
||||
{foreach $c as $cs}
|
||||
|
@ -44,31 +44,37 @@
|
||||
<div class="panel-body">
|
||||
<div class="form-container">
|
||||
<div class="form-group">
|
||||
<label>{$_L['Phone_Number']}</label>
|
||||
<label>{$_L['Phone_Number']}</label>
|
||||
<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}"
|
||||
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
|
||||
</div>
|
||||
</div>
|
||||
<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=""
|
||||
placeholder="{Lang::T('Verification Code')}" name="otp_code">
|
||||
</div>
|
||||
<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}"
|
||||
name="fullname">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{$_L['Email']}</label>
|
||||
<input type="text" required class="form-control" placeholder="xxxxxx@xxx.xx" id="email" value="{$email}"
|
||||
name="email">
|
||||
<input type="text" required class="form-control" placeholder="xxxxxx@xxx.xx"
|
||||
id="email" value="{$email}" name="email">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{$_L['Address']}</label>
|
||||
<input type="text" name="address" id="address" value="{$address}" class="form-control">
|
||||
<label>{$_L['Address']}</label>
|
||||
<input type="text" name="address" id="address" value="{$address}"
|
||||
class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -80,12 +86,13 @@
|
||||
<div class="panel-body">
|
||||
<div class="form-container">
|
||||
<div class="form-group">
|
||||
<label>{$_L['Password']}</label>
|
||||
<label>{$_L['Password']}</label>
|
||||
<input type="password" required class="form-control" id="password" name="password">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{$_L['Confirm_Password']}</label>
|
||||
<input type="password" required class="form-control" id="cpassword" name="cpassword">
|
||||
<label>{$_L['Confirm_Password']}</label>
|
||||
<input type="password" required class="form-control" id="cpassword"
|
||||
name="cpassword">
|
||||
</div>
|
||||
<div class="btn-group btn-group-justified mb15">
|
||||
<div class="btn-group">
|
||||
|
@ -51,7 +51,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form action="{$_url}register" method="post">
|
||||
<form action="{$_url}register" method="post">
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">1. {$_L['Register_Member']}</div>
|
||||
@ -59,7 +59,12 @@
|
||||
<div class="form-group">
|
||||
<label>{$_L['Phone_Number']}</label>
|
||||
<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"
|
||||
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
|
||||
</div>
|
||||
|
@ -41,8 +41,7 @@
|
||||
<td>{$ds['username']}</td>
|
||||
<td>{$ds['type']}</td>
|
||||
<td>{$ds['plan_name']}</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['expiration']))} {$ds['time']}</td>
|
||||
<td>{$ds['method']}</td>
|
||||
@ -56,7 +55,7 @@
|
||||
|
||||
<div class="clearfix text-right total-sum mb10">
|
||||
<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>
|
||||
<p class="text-center small text-info">{$_L['All_Transactions_at_Date']}:
|
||||
{date($_c['date_format'], strtotime($mdate))} {$mtime}</p>
|
||||
|
@ -52,8 +52,7 @@
|
||||
<td>{$ds['username']}</td>
|
||||
<td>{$ds['type']}</td>
|
||||
<td>{$ds['plan_name']}</td>
|
||||
<td class="text-right">{$_c['currency_code']}
|
||||
{number_format($ds['price'],0,$_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['expiration']))} {$ds['time']}</td>
|
||||
<td>{$ds['method']}</td>
|
||||
@ -65,7 +64,7 @@
|
||||
</div>
|
||||
<div class="clearfix text-right total-sum mb10">
|
||||
<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>
|
||||
<p class="text-center small text-info">{$stype} [{date( $_c['date_format'], strtotime($fdate))} -
|
||||
{date( $_c['date_format'], strtotime($tdate))}]</p>
|
||||
|
2
ui/ui/scripts/select2.min.js
vendored
Normal file
2
ui/ui/scripts/select2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -14,10 +14,18 @@
|
||||
|
||||
<script src="ui/ui/scripts/plugins/select2.min.js"></script>
|
||||
<script src="ui/ui/scripts/custom.js"></script>
|
||||
<script src="ui/ui/scripts/select2.min.js"></script>
|
||||
|
||||
{if isset($xfooter)}
|
||||
{$xfooter}
|
||||
{/if}
|
||||
{literal}
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('.select2').select2({theme: "bootstrap"});
|
||||
});
|
||||
</script>
|
||||
{/literal}
|
||||
|
||||
</body>
|
||||
|
||||
|
@ -15,7 +15,8 @@
|
||||
|
||||
<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/select2.min.css" />
|
||||
<link rel="stylesheet" href="ui/ui/styles/select2-bootstrap.min.css" />
|
||||
<style>
|
||||
::-moz-selection {
|
||||
/* Code for Firefox */
|
||||
@ -27,6 +28,10 @@
|
||||
color: red;
|
||||
background: yellow;
|
||||
}
|
||||
|
||||
.select2-container .select2-selection--single .select2-selection__rendered {
|
||||
margin-top: 0px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
{if isset($xheader)}
|
||||
@ -53,15 +58,15 @@
|
||||
<li class="dropdown user user-menu">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
<img src="https://robohash.org/{$_admin['id']}?set=set3&size=100x100&bgset=bg1"
|
||||
onerror="this.src='system/uploads/admin.default.png'"
|
||||
class="user-image" alt="Avatar">
|
||||
onerror="this.src='system/uploads/admin.default.png'" class="user-image"
|
||||
alt="Avatar">
|
||||
<span class="hidden-xs">{$_admin['fullname']}</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="user-header">
|
||||
<img src="https://robohash.org/{$_admin['id']}?set=set3&size=100x100&bgset=bg1"
|
||||
onerror="this.src='system/uploads/admin.default.png'"
|
||||
class="img-circle" alt="Avatar">
|
||||
onerror="this.src='system/uploads/admin.default.png'" class="img-circle"
|
||||
alt="Avatar">
|
||||
|
||||
<p>
|
||||
{$_admin['fullname']}
|
||||
@ -73,11 +78,12 @@
|
||||
<li class="user-body">
|
||||
<div class="row">
|
||||
<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 class="col-xs-5 text-center text-sm">
|
||||
<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>
|
||||
</li>
|
||||
@ -139,6 +145,8 @@
|
||||
{/if}
|
||||
<li {if $_routes[1] eq 'recharge'}class="active" {/if}><a
|
||||
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}
|
||||
</ul>
|
||||
</li>
|
||||
@ -157,8 +165,8 @@
|
||||
href="{$_url}services/pppoe">{$_L['PPPOE_Plans']}</a></li>
|
||||
<li {if $_routes[1] eq 'list'}class="active" {/if}><a
|
||||
href="{$_url}bandwidth/list">{$_L['Bandwidth_Plans']}</a></li>
|
||||
<li {if $_routes[1] eq 'balance'}class="active" {/if}><a
|
||||
href="{$_url}services/balance">{Lang::T('Balance Plans')}</a></li>
|
||||
<li {if $_routes[1] eq 'balance'}class="active" {/if}><a
|
||||
href="{$_url}services/balance">{Lang::T('Balance Plans')}</a></li>
|
||||
{$_MENU_SERVICES}
|
||||
</ul>
|
||||
</li>
|
||||
@ -217,7 +225,7 @@
|
||||
</ul>
|
||||
</li>
|
||||
{$_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="#">
|
||||
<i class="ion ion-gear-a"></i> <span>{$_L['Settings']}</span>
|
||||
<span class="pull-right-container">
|
||||
@ -228,26 +236,25 @@
|
||||
<li {if $_routes[1] eq 'app'}class="active" {/if}><a
|
||||
href="{$_url}settings/app">{$_L['General_Settings']}</a></li>
|
||||
<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
|
||||
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
|
||||
href="{$_url}settings/users">{$_L['Administrator_Users']}</a></li>
|
||||
<li {if $_routes[1] eq 'dbstatus'}class="active" {/if}><a
|
||||
href="{$_url}settings/dbstatus">{$_L['Backup_Restore']}</a></li>
|
||||
<li {if $_routes[1] eq 'dbstatus'}class="active" {/if}><a
|
||||
href="{$_url}pluginmanager">{Lang::T('Plugin Manager')}</a></li>
|
||||
<li {if $_routes[0] eq 'pluginmanager'}class="active" {/if}>
|
||||
<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}
|
||||
</ul>
|
||||
</li>
|
||||
{$_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}>
|
||||
<a href="{$_url}community">
|
||||
<i class="ion ion-chatboxes"></i>
|
||||
|
@ -39,7 +39,7 @@
|
||||
<div class="wrapper">
|
||||
|
||||
<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-lg">{$_c['CompanyName']}</span>
|
||||
</a>
|
||||
|
1
ui/ui/styles/select2-bootstrap.min.css
vendored
Executable file
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
1
ui/ui/styles/select2.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -24,7 +24,7 @@
|
||||
<tr>
|
||||
<td>{$ds['username']}</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 class="text-success">{date($_c['date_format'], strtotime($ds['recharged_on']))}</td>
|
||||
<td class="text-danger">{date($_c['date_format'], strtotime($ds['expiration']))}
|
||||
|
@ -44,7 +44,11 @@
|
||||
<div class="form-group">
|
||||
<label>{$_L['Phone_Number']}</label>
|
||||
<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"
|
||||
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
|
||||
</div>
|
||||
|
@ -28,7 +28,7 @@
|
||||
<td>{$ds['gateway']}</td>
|
||||
<td>{$ds['routers']}</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",
|
||||
strtotime($ds['created_date']))}</td>
|
||||
<td class="text-danger">{date("{$_c['date_format']} H:i",
|
||||
|
@ -5,33 +5,35 @@
|
||||
<div class="box box-solid box-default">
|
||||
<div class="box-header">{Lang::T('Order Internet Package')}</div>
|
||||
</div>
|
||||
<div class="box box-solid box-primary">
|
||||
<div class="box-header">{Lang::T('Balance Plans')}</div>
|
||||
<div class="box-body row">
|
||||
{foreach $plans_balance as $plan}
|
||||
<div class="col col-md-4">
|
||||
<div class="box box-solid box-default">
|
||||
<div class="box-header">{$plan['name_plan']}</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{Lang::T('Price')}</td>
|
||||
<td>{Lang::moneyFormat($plan['price'])}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<a href="{$_url}order/buy/0/{$plan['id']}"
|
||||
onclick="return confirm('{Lang::T('Buy Balance?')}')"
|
||||
class="btn btn-sm btn-block btn-primary">Buy</a>
|
||||
{if $_c['enable_balance'] == 'yes'}
|
||||
<div class="box box-solid box-primary">
|
||||
<div class="box-header">{Lang::T('Balance Plans')}</div>
|
||||
<div class="box-body row">
|
||||
{foreach $plans_balance as $plan}
|
||||
<div class="col col-md-4">
|
||||
<div class="box box-solid box-default">
|
||||
<div class="box-header">{$plan['name_plan']}</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{Lang::T('Price')}</td>
|
||||
<td>{Lang::moneyFormat($plan['price'])}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<a href="{$_url}order/buy/0/{$plan['id']}"
|
||||
onclick="return confirm('{Lang::T('Buy Balance?')}')"
|
||||
class="btn btn-sm btn-block btn-primary">Buy</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{foreach $routers as $router}
|
||||
<div class="box box-solid box-info">
|
||||
<div class="box-header text-black">{$router['name']}</div>
|
||||
|
@ -18,7 +18,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Routers']}</label>
|
||||
<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>
|
||||
</select>
|
||||
</div>
|
||||
@ -26,7 +26,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
|
||||
<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>
|
||||
</select>
|
||||
</div>
|
||||
|
17
update.php
17
update.php
@ -6,8 +6,11 @@
|
||||
* This script is for updating PHPNuxBill
|
||||
**/
|
||||
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'])) {
|
||||
r2("./?_route=login&You_are_not_admin", 'e', 'You are not admin');
|
||||
@ -40,7 +43,7 @@ if (empty($step)) {
|
||||
|
||||
// Download update
|
||||
$fp = fopen($file, 'w+');
|
||||
$ch = curl_init($download_url);
|
||||
$ch = curl_init($update_url);
|
||||
curl_setopt($ch, CURLOPT_POST, 0);
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 600);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
|
||||
@ -100,7 +103,11 @@ if (empty($step)) {
|
||||
foreach ($updates as $version => $queries) {
|
||||
if (!in_array($version, $dones)) {
|
||||
foreach ($queries as $q) {
|
||||
$dbh->exec($q);
|
||||
try{
|
||||
$db->exec($q);
|
||||
}catch(PDOException $e){
|
||||
//ignore, it exists already
|
||||
}
|
||||
}
|
||||
$dones[] = $version;
|
||||
}
|
||||
@ -212,7 +219,7 @@ function deleteFolder($path)
|
||||
<?= $msg ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if ($continue || $step == 4) { ?>
|
||||
<?php if ($continue || $step == 5) { ?>
|
||||
<?php if ($step == 1) { ?>
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">Step 1</div>
|
||||
@ -239,7 +246,7 @@ function deleteFolder($path)
|
||||
</div>
|
||||
<?php } else if ($step == 4) { ?>
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">Step 3</div>
|
||||
<div class="panel-heading">Step 4</div>
|
||||
<div class="panel-body">
|
||||
Updating database...
|
||||
</div>
|
||||
|
@ -1,3 +1,3 @@
|
||||
{
|
||||
"version": "2023.8.15"
|
||||
"version": "2023.8.16"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user