Merge branch 'Development'

This commit is contained in:
Ibnu Maksum 2024-04-23 11:52:04 +07:00
commit 9712d411f5
No known key found for this signature in database
GPG Key ID: 7FC82848810579E5
12 changed files with 328 additions and 170 deletions

View File

@ -2,6 +2,15 @@
# CHANGELOG # CHANGELOG
## 2024.4.23
- Fix Pagination Voucher
- Fix Languange Translation
- Fix Alert Confirmation for requesting Extend
- Send Telegram Notification when Customer request to extend expiration
- prepaid users export list by @freeispradius
- fix show voucher by @agstrxyz
## 2024.4.21 ## 2024.4.21
- Restore old cron - Restore old cron

View File

@ -222,7 +222,7 @@ function Lang($key)
function alphanumeric($str, $tambahan = "") function alphanumeric($str, $tambahan = "")
{ {
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str); return Text::alphanumeric($str, $tambahan);
} }
function showResult($success, $message = '', $result = [], $meta = []) function showResult($success, $message = '', $result = [], $meta = [])

64
system/autoload/Text.php Normal file
View File

@ -0,0 +1,64 @@
<?php
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* by https://t.me/ibnux
*
* This file is for Text Transformation
**/
class Text
{
public static function toHex($string)
{
return "\x" . implode("\x", str_split(array_shift(unpack('H*', $string)), 2));
}
public static function alphanumeric($str, $tambahan = "")
{
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
}
public static function numeric($str)
{
return preg_replace("/[^0-9]+/", "", $str);
}
public static function ucWords($text)
{
return ucwords(str_replace('_', ' ', $text));
}
public static function randomUpLowCase($text)
{
$jml = strlen($text);
$result = '';
for ($i = 0; $i < $jml; $i++) {
if (rand(0, 99) % 2) {
$result .= strtolower(substr($text, $i, 1));
} else {
$result .= substr($text, $i, 1);
}
}
return $result;
}
public static function maskText($text){
$len = strlen($text);
if($len < 3){
return "***";
}else if($len<5){
return substr($text,0,1)."***".substr($text,-1,1);
}else if($len<8){
return substr($text,0,2)."***".substr($text,-2,2);
}else{
return substr($text,0,4)."******".substr($text,-3,3);
}
}
public static function sanitize($str)
{
return preg_replace("/[^A-Za-z0-9]/", '_', $str);;
}
}

View File

@ -25,19 +25,19 @@ switch ($action) {
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard"); _alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
} }
$cs = ORM::for_table('tbl_customers') $cs = ORM::for_table('tbl_customers')
->select('tbl_customers.id', 'id') ->select('tbl_customers.id', 'id')
->select('tbl_customers.username', 'username') ->select('tbl_customers.username', 'username')
->select('fullname') ->select('fullname')
->select('address')
->select('phonenumber') ->select('phonenumber')
->select('email') ->select('email')
->select('balance') ->select('balance')
->select('namebp') ->select('service_type')
->select('routers') ->order_by_asc('tbl_customers.id')
->select('status') ->find_array();
->select('method', 'Payment')
->join('tbl_user_recharges', array('tbl_customers.id', '=', 'tbl_user_recharges.customer_id'))
->order_by_asc('tbl_customers.id')->find_array();
$h = false; $h = false;
set_time_limit(-1); set_time_limit(-1);
header('Pragma: public'); header('Pragma: public');
@ -46,18 +46,105 @@ switch ($action) {
header("Content-type: text/csv"); header("Content-type: text/csv");
header('Content-Disposition: attachment;filename="phpnuxbill_customers_' . date('Y-m-d_H_i') . '.csv"'); header('Content-Disposition: attachment;filename="phpnuxbill_customers_' . date('Y-m-d_H_i') . '.csv"');
header('Content-Transfer-Encoding: binary'); header('Content-Transfer-Encoding: binary');
$headers = [
'id',
'username',
'fullname',
'address',
'phonenumber',
'email',
'balance',
'service_type',
];
if (!$h) {
echo '"' . implode('","', $headers) . "\"\n";
$h = true;
}
foreach ($cs as $c) { foreach ($cs as $c) {
$ks = []; $row = [
$vs = []; $c['id'],
foreach ($c as $k => $v) { $c['username'],
$ks[] = $k; $c['fullname'],
$vs[] = $v; $c['address'],
} $c['phonenumber'],
if (!$h) { $c['email'],
echo '"' . implode('";"', $ks) . "\"\n"; $c['balance'],
$h = true; $c['service_type'],
} ];
echo '"' . implode('";"', $vs) . "\"\n"; echo '"' . implode('","', $row) . "\"\n";
}
break;
//case csv-prepaid can be moved later to (plan.php) php file dealing with prepaid users
case 'csv-prepaid':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
}
$cs = ORM::for_table('tbl_customers')
->select('tbl_customers.id', 'id')
->select('tbl_customers.username', 'username')
->select('fullname')
->select('address')
->select('phonenumber')
->select('email')
->select('balance')
->select('service_type')
->select('namebp')
->select('routers')
->select('status')
->select('method', 'Payment')
->join('tbl_user_recharges', array('tbl_customers.id', '=', 'tbl_user_recharges.customer_id'))
->order_by_asc('tbl_customers.id')
->find_array();
$h = false;
set_time_limit(-1);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-type: text/csv");
header('Content-Disposition: attachment;filename="phpnuxbill_prepaid_users' . date('Y-m-d_H_i') . '.csv"');
header('Content-Transfer-Encoding: binary');
$headers = [
'id',
'username',
'fullname',
'address',
'phonenumber',
'email',
'balance',
'service_type',
'namebp',
'routers',
'status',
'Payment'
];
if (!$h) {
echo '"' . implode('","', $headers) . "\"\n";
$h = true;
}
foreach ($cs as $c) {
$row = [
$c['id'],
$c['username'],
$c['fullname'],
$c['address'],
$c['phonenumber'],
$c['email'],
$c['balance'],
$c['service_type'],
$c['namebp'],
$c['routers'],
$c['status'],
$c['Payment']
];
echo '"' . implode('","', $row) . "\"\n";
} }
break; break;
case 'add': case 'add':

View File

@ -148,16 +148,18 @@ if (isset($_GET['recharge']) && !empty($_GET['recharge'])) {
$router = $tur['routers']; $router = $tur['routers'];
} }
$p = ORM::for_table('tbl_plans')->findOne($tur['plan_id']); $p = ORM::for_table('tbl_plans')->findOne($tur['plan_id']);
$c = ORM::for_table('tbl_customers')->findOne($tur['customer_id']); if(!$p){
r2(U . 'home', '3', "Plan Not Found");
}
if ($tur['routers'] == 'radius') { if ($tur['routers'] == 'radius') {
Radius::customerAddPlan($c, $p, $tur['expiration'] . ' ' . $tur['time']); Radius::customerAddPlan($user, $p, $tur['expiration'] . ' ' . $tur['time']);
} else { } else {
if ($tur['type'] == 'Hotspot') { if ($tur['type'] == 'Hotspot') {
Mikrotik::removeHotspotUser($client, $c['username']); Mikrotik::removeHotspotUser($client, $user['username']);
Mikrotik::addHotspotUser($client, $p, $c); Mikrotik::addHotspotUser($client, $p, $user);
} else if ($tur['type'] == 'PPPOE') { } else if ($tur['type'] == 'PPPOE') {
Mikrotik::removePpoeUser($client, $c['username']); Mikrotik::removePpoeUser($client, $user['username']);
Mikrotik::addPpoeUser($client, $p, $c); Mikrotik::addPpoeUser($client, $p, $user);
} }
} }
// make customer cannot extend again // make customer cannot extend again
@ -169,6 +171,10 @@ if (isset($_GET['recharge']) && !empty($_GET['recharge'])) {
App::setToken(_get('stoken'), $id); App::setToken(_get('stoken'), $id);
file_put_contents($path, $m); file_put_contents($path, $m);
_log("Customer $tur[customer_id] $tur[username] extend for $days days", "Customer", $user['id']); _log("Customer $tur[customer_id] $tur[username] extend for $days days", "Customer", $user['id']);
Message::sendTelegram("#u$user[username] #extend #".$p['type']." \n" . $p['name_plan'] .
"\nLocation: " . $p['routers'] .
"\nCustomer: " . $user['fullname'] .
"\nNew Expired: " . Lang::dateAndTimeFormat($expiration, $tur['time']));
r2(U . 'home', 's', "Extend until $expiration"); r2(U . 'home', 's', "Extend until $expiration");
}else{ }else{
r2(U . 'home', 'e', "Plan is not expired"); r2(U . 'home', 'e', "Plan is not expired");

View File

@ -132,7 +132,7 @@ switch ($action) {
$using = _post('using'); $using = _post('using');
$stoken = _post('stoken'); $stoken = _post('stoken');
if(!empty(App::getTokenValue($stoken))){ if (!empty(App::getTokenValue($stoken))) {
$username = App::getTokenValue($stoken); $username = App::getTokenValue($stoken);
$in = ORM::for_table('tbl_transactions')->where('username', $username)->order_by_desc('id')->find_one(); $in = ORM::for_table('tbl_transactions')->where('username', $username)->order_by_desc('id')->find_one();
Package::createInvoice($in); Package::createInvoice($in);
@ -325,18 +325,13 @@ switch ($action) {
case 'voucher': case 'voucher':
$ui->assign('_title', Lang::T('Vouchers')); $ui->assign('_title', Lang::T('Vouchers'));
$limit = 10;
$page = _get('p', 0);
$pageNow = $page * $limit;
$search = _req('search'); $search = _req('search');
if ($search != '') { if ($search != '') {
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
$d = ORM::for_table('tbl_plans')->where('enabled', '1') $query = ORM::for_table('tbl_plans')->where('enabled', '1')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan')) ->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_like('tbl_voucher.code', '%' . $search . '%') ->where_like('tbl_voucher.code', '%' . $search . '%');
->offset($pageNow) $d = Paginator::findMany($query, ["search" => $search]);
->limit($limit)
->findArray();
} else if ($admin['user_type'] == 'Agent') { } else if ($admin['user_type'] == 'Agent') {
$sales = []; $sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray(); $sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
@ -344,21 +339,17 @@ switch ($action) {
$sales[] = $s['id']; $sales[] = $s['id'];
} }
$sales[] = $admin['id']; $sales[] = $admin['id'];
$d = ORM::for_table('tbl_plans') $query = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan')) ->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_in('generated_by', $sales) ->where_in('generated_by', $sales)
->where_like('tbl_voucher.code', '%' . $search . '%') ->where_like('tbl_voucher.code', '%' . $search . '%');
->offset($pageNow) $d = Paginator::findMany($query, ["search" => $search]);
->limit($limit)
->findArray();
} }
} else { } else {
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) { if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
$d = ORM::for_table('tbl_plans')->where('enabled', '1') $query = ORM::for_table('tbl_plans')->where('enabled', '1')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan')) ->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'));
->offset($pageNow) $d = Paginator::findMany($query);
->limit($limit)
->findArray();
} else if ($admin['user_type'] == 'Agent') { } else if ($admin['user_type'] == 'Agent') {
$sales = []; $sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray(); $sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
@ -366,12 +357,10 @@ switch ($action) {
$sales[] = $s['id']; $sales[] = $s['id'];
} }
$sales[] = $admin['id']; $sales[] = $admin['id'];
$d = ORM::for_table('tbl_plans') $query = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan')) ->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_in('generated_by', $sales) ->where_in('generated_by', $sales);
->offset($pageNow) $d = Paginator::findMany($query);
->limit($limit)
->findArray();
} }
} }
// extract admin // extract admin
@ -581,6 +570,7 @@ switch ($action) {
} else if ($voucher_format == 'rand') { } else if ($voucher_format == 'rand') {
$code = Lang::randomUpLowCase($code); $code = Lang::randomUpLowCase($code);
} }
die($code);
$d = ORM::for_table('tbl_voucher')->create(); $d = ORM::for_table('tbl_voucher')->create();
$d->type = $type; $d->type = $type;
$d->routers = $server; $d->routers = $server;
@ -743,15 +733,15 @@ switch ($action) {
$id = $routes[2]; $id = $routes[2];
$days = $routes[3]; $days = $routes[3];
$stoken = $_GET['stoken']; $stoken = $_GET['stoken'];
if(App::getTokenValue($stoken)){ if (App::getTokenValue($stoken)) {
r2(U . 'plan', 's', "Extend already done"); r2(U . 'plan', 's', "Extend already done");
} }
$tur = ORM::for_table('tbl_user_recharges')->find_one($id); $tur = ORM::for_table('tbl_user_recharges')->find_one($id);
$status = $tur['status']; $status = $tur['status'];
if(strtotime($tur['expiration'].' '.$tur['time']) > time()){ if (strtotime($tur['expiration'] . ' ' . $tur['time']) > time()) {
// not expired // not expired
$expiration = date('Y-m-d', strtotime($tur['expiration']." +$days day")); $expiration = date('Y-m-d', strtotime($tur['expiration'] . " +$days day"));
}else{ } else {
//expired //expired
$expiration = date('Y-m-d', strtotime(" +$days day")); $expiration = date('Y-m-d', strtotime(" +$days day"));
} }
@ -759,7 +749,7 @@ switch ($action) {
$tur->status = "on"; $tur->status = "on";
$tur->save(); $tur->save();
App::setToken($stoken, $id); App::setToken($stoken, $id);
if($status=='off'){ if ($status == 'off') {
if ($tur['routers'] != 'radius') { if ($tur['routers'] != 'radius') {
$mikrotik = Mikrotik::info($tur['routers']); $mikrotik = Mikrotik::info($tur['routers']);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);

View File

@ -4,18 +4,18 @@
"Announcement": "Pemberitahuan", "Announcement": "Pemberitahuan",
"Registration_Info": "Info Pendaftaran", "Registration_Info": "Info Pendaftaran",
"Voucher_not_found__please_buy_voucher_befor_register": "Voucher tidak ditemukan, silakan beli voucher sebelum mendaftar", "Voucher_not_found__please_buy_voucher_befor_register": "Voucher tidak ditemukan, silakan beli voucher sebelum mendaftar",
"Register_Success__You_can_login_now": "Daftar Sukses! Anda dapat masuk sekarang", "Register_Success__You_can_login_now": "Daftar Sukses! Anda dapat masuk sekarang",
"Log_in_to_Member_Panel": "Masuk ke Panel Anggota", "Log_in_to_Member_Panel": "Masuk ke Panel Anggota",
"Register_as_Member": "Daftar sebagai Anggota", "Register_as_Member": "Daftar sebagai Anggota",
"Enter_Admin_Area": "Masuk ke Admin Panel", "Enter_Admin_Area": "Masuk ke Admin Panel",
"PHPNuxBill": "PHPNuxBill", "PHPNuxBill": "PHPNuxBill",
"Username": "Nama Pengguna", "Username": "Nama Pengguna",
"Password": "Kata Sandi", "Password": "Kata Sandi",
"Passwords_does_not_match": "Kata Sandi tidak cocok", "Passwords_does_not_match": "Kata sandi tidak cocok",
"Account_already_axist": "Akun telah ada", "Account_already_axist": "Akun telah ada",
"Manage": "Mengelola", "Manage": "Mengelola",
"Submit": "Kirim", "Submit": "Kirim",
"Save_Changes": "Simpan perubahan", "Save_Changes": "Simpan Perubahan",
"Cancel": "Batal", "Cancel": "Batal",
"Edit": "Sunting", "Edit": "Sunting",
"Delete": "Hapus", "Delete": "Hapus",
@ -25,32 +25,32 @@
"Data_Deleted_Successfully": "Data Berhasil Dihapus", "Data_Deleted_Successfully": "Data Berhasil Dihapus",
"Static_Pages": "Halaman Statis", "Static_Pages": "Halaman Statis",
"Failed_to_save_page__make_sure_i_can_write_to_folder_pages___i_chmod_664_pages___html_i_": "Gagal menyimpan halaman, pastikan diperbolehkan menulis file di folder pages, <i>chmod 664 pages\/*.html<i>", "Failed_to_save_page__make_sure_i_can_write_to_folder_pages___i_chmod_664_pages___html_i_": "Gagal menyimpan halaman, pastikan diperbolehkan menulis file di folder pages, <i>chmod 664 pages\/*.html<i>",
"Saving_page_success": "Menyimpan halaman sukses", "Saving_page_success": "Menyimpan halaman berhasil",
"Sometimes_you_need_to_refresh_3_times_until_content_change": "Terkadang Anda perlu menyegarkan 3 kali hingga konten berubah", "Sometimes_you_need_to_refresh_3_times_until_content_change": "Terkadang Anda perlu menyegarkan 3 kali hingga konten berubah",
"Dashboard": "Dasbor", "Dashboard": "Dasbor",
"Search_Customers___": "Cari Member...", "Search_Customers___": "Cari Member...",
"My_Account": "Akun Saya", "My_Account": "Akun Saya",
"My_Profile": "Profil Saya", "My_Profile": "Profil Saya",
"Settings": "Pengaturan", "Settings": "Pengaturan",
"Edit_Profile": "Sunting profil", "Edit_Profile": "Sunting Profil",
"Change_Password": "Ganti kata sandi", "Change_Password": "Ganti kata sandi",
"Logout": "Keluar", "Logout": "Keluar",
"Services": "Layanan", "Services": "Layanan",
"Bandwidth_Plans": "Paket Bandwidth", "Bandwidth_Plans": "Paket Bandwidth",
"Bandwidth_Name": "Nama Bandwidth", "Bandwidth_Name": "Nama Bandwidth",
"New_Bandwidth": "Baru Bandwidth", "New_Bandwidth": "Bandwidth Baru",
"Edit_Bandwidth": "Sunting Bandwidth", "Edit_Bandwidth": "Sunting Bandwidth",
"Add_New_Bandwidth": "Tambahkan Bandwidth Baru", "Add_New_Bandwidth": "Tambahkan Bandwidth Baru",
"Rate_Download": "Nilai Unduhan", "Rate_Download": "Nilai Unduhan",
"Rate_Upload": "Nilai Unggahan", "Rate_Upload": "Nilai Unggahan",
"Name_Bandwidth_Already_Exist": "Nama Bandwidth Sudah Ada", "Name_Bandwidth_Already_Exist": "Nama Bandwidth sudah ada",
"Hotspot_Plans": "Paket Hotspot", "Hotspot_Plans": "Paket Hotspot",
"PPPOE_Plans": "Paket PPPoE", "PPPOE_Plans": "Paket PPPoE",
"Plan_Name": "Nama Paket", "Plan_Name": "Nama Paket",
"New_Service_Plan": "Paket Layanan Baru", "New_Service_Plan": "Paket Layanan Baru",
"Add_Service_Plan": "Tambah Paket Layanan", "Add_Service_Plan": "Tambah Paket Layanan",
"Edit_Service_Plan": "Sunting Paket Layanan", "Edit_Service_Plan": "Sunting Paket Layanan",
"Name_Plan_Already_Exist": "Nama Paket Sudah Ada", "Name_Plan_Already_Exist": "Nama Paket sudah ada",
"Plan_Type": "Jenis Paket", "Plan_Type": "Jenis Paket",
"Plan_Price": "Harga Paket", "Plan_Price": "Harga Paket",
"Limit_Type": "Tipe Batas", "Limit_Type": "Tipe Batas",
@ -58,7 +58,7 @@
"Limited": "Terbatas", "Limited": "Terbatas",
"Time_Limit": "Batas waktu", "Time_Limit": "Batas waktu",
"Data_Limit": "Batas Data", "Data_Limit": "Batas Data",
"Both_Limit": "Keduanya Membatasi", "Both_Limit": "Membatasi keduanya",
"Plan_Validity": "Waktu Paket", "Plan_Validity": "Waktu Paket",
"Select_Bandwidth": "Pilih Bandwidth", "Select_Bandwidth": "Pilih Bandwidth",
"Shared_Users": "Berbagi Pelanggan", "Shared_Users": "Berbagi Pelanggan",
@ -78,7 +78,7 @@
"Phone_Number": "Nomor telepon", "Phone_Number": "Nomor telepon",
"User_deleted_Successfully": "Pelanggan berhasil dihapus", "User_deleted_Successfully": "Pelanggan berhasil dihapus",
"Full_Administrator": "Administrator Penuh", "Full_Administrator": "Administrator Penuh",
"Keep_Blank_to_do_not_change_Password": "Biarkan Kosong apabila tidak ingin mengubah Kata Sandi", "Keep_Blank_to_do_not_change_Password": "Biarkan kosong apabila tidak ingin mengubah kata sandi",
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Kosongkan jika Anda tidak ingin menampilkan kode mata uang", "Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Kosongkan jika Anda tidak ingin menampilkan kode mata uang",
"Theme_Style": "Gaya Tema", "Theme_Style": "Gaya Tema",
"Theme_Color": "Warna Tema", "Theme_Color": "Warna Tema",
@ -93,23 +93,23 @@
"IP_Address": "Alamat IP", "IP_Address": "Alamat IP",
"Router_Secret": "Password Router", "Router_Secret": "Password Router",
"Description": "Deskrispi", "Description": "Deskrispi",
"IP_Router_Already_Exist": "IP Router Sudah Ada", "IP_Router_Already_Exist": "IP Router sudah ada",
"Name_Pool": "Nama Pool", "Name_Pool": "Nama Pool",
"Range_IP": "Rentang IP", "Range_IP": "Rentang IP",
"New_Pool": "Pool baru", "New_Pool": "Pool baru",
"Add_Pool": "Tambahkan Pool", "Add_Pool": "Tambahkan Pool",
"Edit_Pool": "Sunting Pool", "Edit_Pool": "Sunting Pool",
"Pool_Name_Already_Exist": "Nama Pool Sudah Ada", "Pool_Name_Already_Exist": "Nama Pool sudah ada",
"Refill_Account": "Isi Ulang Akun", "Refill_Account": "Isi Ulang Akun",
"Recharge_Account": "Isi Ulang Akun", "Recharge_Account": "Isi Ulang Akun",
"Select_Account": "Pilih Akun", "Select_Account": "Pilih Akun",
"Service_Plan": "Paket Layanan", "Service_Plan": "Paket Layanan",
"Recharge": "Isi Ulang", "Recharge": "Isi Ulang",
"Method": "Metode", "Method": "Metode",
"Account_Created_Successfully": "Akun Berhasil Dibuat", "Account_Created_Successfully": "Akun berhasil dibuat",
"Database_Status": "Status Database", "Database_Status": "Status Database",
"Total_Database_Size": "Ukuran Total Database", "Total_Database_Size": "Ukuran total database",
"Download_Database_Backup": "Unduh Cadangan Database", "Download_Database_Backup": "Unduh cadangan database",
"Table_Name": "Nama Tabel", "Table_Name": "Nama Tabel",
"Rows": "Baris", "Rows": "Baris",
"Size": "Ukuran", "Size": "Ukuran",
@ -123,15 +123,15 @@
"Period_Reports": "Laporan Periode", "Period_Reports": "Laporan Periode",
"All_Transactions": "Semua Transaksi", "All_Transactions": "Semua Transaksi",
"Total_Income": "Jumlah Pemasukan", "Total_Income": "Jumlah Pemasukan",
"All_Transactions_at_Date": "Semua Transaksi pada Tanggal", "All_Transactions_at_Date": "Semua transaksi pada ganggal",
"Export_for_Print": "Ekspor untuk Cetak", "Export_for_Print": "Ekspor untuk cetak",
"Print": "Cetak", "Print": "Cetak",
"Export_to_PDF": "Ekspor ke PDF", "Export_to_PDF": "Ekspor ke PDF",
"Click_Here_to_Print": "Klik Disini untuk Mencetak", "Click_Here_to_Print": "Klik Disini untuk mencetak",
"You_can_use_html_tag": "Anda dapat menggunakan tag html", "You_can_use_html_tag": "Anda dapat menggunakan tag HTML",
"Date_Format": "Format tanggal", "Date_Format": "Format tanggal",
"Income_Today": "Pendapatan Hari Ini", "Income_Today": "Pendapatan hari ini",
"Income_This_Month": "Penghasilan Bulan Ini", "Income_This_Month": "Penghasilan bulan ini",
"Users_Active": "Pelanggan Aktif", "Users_Active": "Pelanggan Aktif",
"Total_Users": "Total Pelanggan", "Total_Users": "Total Pelanggan",
"Users": "Pelanggan", "Users": "Pelanggan",
@ -153,7 +153,7 @@
"View_Reports": "Lihat Laporan", "View_Reports": "Lihat Laporan",
"View_All": "Lihat semua", "View_All": "Lihat semua",
"Number_of_Vouchers": "Jumlah Voucher", "Number_of_Vouchers": "Jumlah Voucher",
"Length_Code": "Kode Panjang", "Length_Code": "Panjang Kode",
"Code_Voucher": "Kode Voucher", "Code_Voucher": "Kode Voucher",
"Voucher": "Voucher", "Voucher": "Voucher",
"Hotspot_Voucher": "Voucher Hotspot", "Hotspot_Voucher": "Voucher Hotspot",
@ -177,7 +177,7 @@
"Currency_Code": "Kode Mata Uang", "Currency_Code": "Kode Mata Uang",
"Order_Voucher": "Pesan Voucher", "Order_Voucher": "Pesan Voucher",
"Voucher_Activation": "Aktivasi Voucher", "Voucher_Activation": "Aktivasi Voucher",
"List_Activated_Voucher": "Daftar Voucher yang Diaktifkan", "List_Activated_Voucher": "Daftar Voucher yang diaktifkan",
"Enter_voucher_code_here": "Masukkan kode voucher di sini", "Enter_voucher_code_here": "Masukkan kode voucher di sini",
"Private_Message": "Pesan Pribadi", "Private_Message": "Pesan Pribadi",
"Inbox": "Kotak Masuk", "Inbox": "Kotak Masuk",
@ -195,10 +195,10 @@
"All_field_is_required": "Semua bidang wajib diisi", "All_field_is_required": "Semua bidang wajib diisi",
"Voucher_Not_Valid": "Voucher tidak berlaku", "Voucher_Not_Valid": "Voucher tidak berlaku",
"Activation_Vouchers_Successfully": "Aktivasi Voucher Berhasil", "Activation_Vouchers_Successfully": "Aktivasi Voucher Berhasil",
"Data_Not_Found": "Data Tidak Ditemukan", "Data_Not_Found": "Data tidak ditemukan",
"Search_by_Username": "Cari berdasarkan Nama Pengguna", "Search_by_Username": "Cari berdasarkan nama pengguna",
"Search_by_Name": "Cari berdasarkan Nama", "Search_by_Name": "Cari berdasarkan nama",
"Search_by_Code_Voucher": "Cari berdasarkan Kode Voucher", "Search_by_Code_Voucher": "Cari berdasarkan kode voucher",
"Search": "Mencari", "Search": "Mencari",
"Select_a_customer": "Pilih pelanggan", "Select_a_customer": "Pilih pelanggan",
"Select_Routers": "Pilih Router", "Select_Routers": "Pilih Router",
@ -212,25 +212,25 @@
"Language_Name": "Nama Bahasa", "Language_Name": "Nama Bahasa",
"Folder_Name": "Nama Folder", "Folder_Name": "Nama Folder",
"Translator": "Penerjemah", "Translator": "Penerjemah",
"Language_Name_Already_Exist": "Nama Bahasa Sudah Ada", "Language_Name_Already_Exist": "Nama Bahasa sudah ada",
"Payment_Gateway": "Gerbang Pembayaran", "Payment_Gateway": "Gerbang Pembayaran",
"Community": "Komunitas", "Community": "Komunitas",
"1_user_can_be_used_for_many_devices_": "1 pengguna bisa digunakan untuk banyak perangkat?", "1_user_can_be_used_for_many_devices_": "1 pengguna bisa digunakan untuk banyak perangkat?",
"Cannot_be_change_after_saved": "Tidak dapat diubah setelah disimpan", "Cannot_be_change_after_saved": "Tidak dapat diubah setelah disimpan",
"Explain_Coverage_of_router": "Jelaskan Cakupan router", "Explain_Coverage_of_router": "Jelaskan cakupan router",
"Name_of_Area_that_router_operated": "Nama area tempat router dioperasikan", "Name_of_Area_that_router_operated": "Nama area tempat router dioperasikan",
"Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "URL Notifikasi Pembayaran, URL Notifikasi Berulang, URL Notifikasi Akun Bayar", "Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "URL notifikasi pembayaran, URL notifikasi berulang, URL notifikasi akun bayar",
"Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Selesaikan URL Pengalihan, Selesaikan URL Pengalihan, URL Pengalihan Kesalahan", "Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Selesaikan URL pengalihan, selesaikan URL pengalihan, URL pengalihan kesalahan",
"Status": "Status", "Status": "Status",
"Plan_Not_found": "Paket tidak ditemukan", "Plan_Not_found": "Paket tidak ditemukan",
"Failed_to_create_transaction_": "Gagal membuat transaksi.", "Failed_to_create_transaction_": "Gagal membuat transaksi.",
"Seller_has_not_yet_setup_Xendit_payment_gateway": "Penjual belum menyiapkan gateway pembayaran Xendit", "Seller_has_not_yet_setup_Xendit_payment_gateway": "Penjual belum menyiapkan gateway pembayaran Xendit",
"Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin belum menyiapkan gerbang pembayaran Xendit, mohon beritahu admin", "Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin belum menyiapkan gerbang pembayaran Xendit, mohon beritahu Admin",
"Buy_this__your_active_package_will_be_overwrite": "Beli ini? Paket aktif Anda akan ditimpa", "Buy_this__your_active_package_will_be_overwrite": "Beli ini? Paket aktif Anda akan ditimpa",
"You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "Anda sudah memiliki transaksi yang belum dibayar, batalkan atau bayar.", "You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "Anda sudah memiliki transaksi yang belum dibayar, batalkan atau bayar.",
"Transaction_Not_found": "Transaksi Tidak ditemukan", "Transaction_Not_found": "Transaksi tidak ditemukan",
"Cancel_it_": "Batalkan itu?", "Cancel_it_": "Batalkan itu?",
"expired": "kedaluwarsa", "expired": "Kedaluwarsa",
"Check_for_Payment": "Periksa Pembayaran", "Check_for_Payment": "Periksa Pembayaran",
"Transaction_still_unpaid_": "Transaksi masih belum dibayar.", "Transaction_still_unpaid_": "Transaksi masih belum dibayar.",
"Paid_Date": "Tanggal Pembayaran", "Paid_Date": "Tanggal Pembayaran",
@ -243,9 +243,9 @@
"Buy_PPOE_Plan": "Beli Paket PPPoE", "Buy_PPOE_Plan": "Beli Paket PPPoE",
"Package": "Paket", "Package": "Paket",
"Order_Internet_Package": "Pesan Paket Internet", "Order_Internet_Package": "Pesan Paket Internet",
"Unknown_Command_": "Perintah Tidak Diketahui.", "Unknown_Command_": "Perintah tidak diketahui.",
"Checking_payment": "Memeriksa pembayaran", "Checking_payment": "Memeriksa pembayaran",
"Create_Transaction_Success": "Transaksi Berhasil Dibuat", "Create_Transaction_Success": "Transaksi berhasil dibuat",
"You_have_unpaid_transaction": "Anda memiliki transaksi yang belum dibayar", "You_have_unpaid_transaction": "Anda memiliki transaksi yang belum dibayar",
"TripayPayment_Channel": "Saluran Pembayaran Tripay", "TripayPayment_Channel": "Saluran Pembayaran Tripay",
"Payment_Channel": "Saluran Pembayaran", "Payment_Channel": "Saluran Pembayaran",
@ -258,16 +258,16 @@
"Gateway": "Gerbang", "Gateway": "Gerbang",
"Date_Done": "Tanggal Selesai", "Date_Done": "Tanggal Selesai",
"Unpaid_Order": "Pesanan Belum Dibayar", "Unpaid_Order": "Pesanan Belum Dibayar",
"Payment_Gateway_Not_Found": "Gerbang Pembayaran Tidak Ditemukan", "Payment_Gateway_Not_Found": "Gerbang Pembayaran tidak ditemukan",
"Payment_Gateway_saved_successfully": "Gerbang Pembayaran berhasil disimpan", "Payment_Gateway_saved_successfully": "Gerbang Pembayaran berhasil disimpan",
"ORDER": "MEMESAN", "ORDER": "MEMESAN",
"Package_History": "Riwayat Paket", "Package_History": "Riwayat Paket",
"Buy_History": "Riwayat Beli", "Buy_History": "Riwayat Beli",
"Activation_History": "Riwayat Aktivasi", "Activation_History": "Riwayat Aktivasi",
"Buy_Package": "Beli Paket", "Buy_Package": "Beli Paket",
"Email": "Surel", "Email": "Email",
"Company_Footer": "Catatan Kaki Perusahaan", "Company_Footer": "Catatan Kaki Perusahaan",
"Will_show_below_user_pages": "Akan ditampilkan di bawah halaman pengguna", "Will_show_below_user_pages": "Akan ditampilkan dibawah halaman pengguna",
"Request_OTP": "Minta OTP", "Request_OTP": "Minta OTP",
"Verification_Code": "Kode Verifikasi", "Verification_Code": "Kode Verifikasi",
"SMS_Verification_Code": "Kode Verifikasi SMS", "SMS_Verification_Code": "Kode Verifikasi SMS",
@ -284,10 +284,10 @@
"Current_IP": "IP saat ini", "Current_IP": "IP saat ini",
"Current_MAC": "MAC saat ini", "Current_MAC": "MAC saat ini",
"Login_Status": "Status Masuk", "Login_Status": "Status Masuk",
"Login_Request_successfully": "Permintaan Masuk berhasil", "Login_Request_successfully": "Permintaan masuk berhasil",
"Logout_Request_successfully": "Permintaan Keluar berhasil", "Logout_Request_successfully": "Permintaan keluar berhasil",
"Disconnect_Internet_": "Putuskan sambungan Internet?", "Disconnect_Internet_": "Putuskan sambungan internet?",
"Not_Online__Login_now_": "Tidak, Masuk sekarang?", "Not_Online__Login_now_": "Tidak, masuk sekarang?",
"You_are_Online__Logout_": "Kamu sedang aktif, ingin keluar?", "You_are_Online__Logout_": "Kamu sedang aktif, ingin keluar?",
"Connect_to_Internet_": "Hubungkan ke Internet?", "Connect_to_Internet_": "Hubungkan ke Internet?",
"Your_account_not_connected_to_internet": "Akun Anda tidak terhubung ke internet", "Your_account_not_connected_to_internet": "Akun Anda tidak terhubung ke internet",
@ -322,9 +322,9 @@
"Price": "Harga", "Price": "Harga",
"Validity": "Waktu", "Validity": "Waktu",
"Disable_auto_renewal_": "Nonaktifkan perpanjangan otomatis?", "Disable_auto_renewal_": "Nonaktifkan perpanjangan otomatis?",
"Auto_Renewal_On": "Perpanjangan Otomatis Aktif", "Auto_Renewal_On": "Perpanjangan otomatis aktif",
"Enable_auto_renewal_": "Aktifkan perpanjangan otomatis?", "Enable_auto_renewal_": "Aktifkan perpanjangan otomatis?",
"Auto_Renewal_Off": "Perpanjangan Otomatis Mati", "Auto_Renewal_Off": "Perpanjangan otomatis mati",
"Refill_Balance": "Isi Ulang Saldo", "Refill_Balance": "Isi Ulang Saldo",
"Invoice_Footer": "Catatan Kaki Faktur", "Invoice_Footer": "Catatan Kaki Faktur",
"Pay_With_Balance": "Bayar dengan Saldo", "Pay_With_Balance": "Bayar dengan Saldo",
@ -334,7 +334,7 @@
"View": "Melihat", "View": "Melihat",
"Back": "Kembali", "Back": "Kembali",
"Active": "Aktif", "Active": "Aktif",
"Transfer_Balance": "Kirim Saldo", "Transfer_Balance": "Kirim saldo",
"Send_your_balance_": "Kirim saldo Anda?", "Send_your_balance_": "Kirim saldo Anda?",
"Send": "Kirim", "Send": "Kirim",
"Cannot_send_to_yourself": "Tidak dapat mengirim ke diri Anda sendiri", "Cannot_send_to_yourself": "Tidak dapat mengirim ke diri Anda sendiri",
@ -342,9 +342,9 @@
"From": "Dari", "From": "Dari",
"To": "Ke", "To": "Ke",
"insufficient_balance": "Saldo tidak mencukupi", "insufficient_balance": "Saldo tidak mencukupi",
"Send_Balance": "Kirim Saldo", "Send_Balance": "Kirim saldo",
"Received_Balance": "Saldo yang Diterima", "Received_Balance": "Saldo yang diterima",
"Minimum_Balance_Transfer": "Minimal Transfer Saldo", "Minimum_Balance_Transfer": "Minimal transfer saldo",
"Minimum_Transfer": "Minimal Transfer", "Minimum_Transfer": "Minimal Transfer",
"Company_Logo": "Logo Perusahaan", "Company_Logo": "Logo Perusahaan",
"Expired_IP_Pool": "IP Pool Kedaluwarsa", "Expired_IP_Pool": "IP Pool Kedaluwarsa",
@ -361,13 +361,13 @@
"Buy_for_friend": "Beli untuk teman", "Buy_for_friend": "Beli untuk teman",
"Buy_this_for_friend_account_": "Beli ini untuk akun teman?", "Buy_this_for_friend_account_": "Beli ini untuk akun teman?",
"Review_package_before_recharge": "Tinjau paket sebelum mengisi ulang", "Review_package_before_recharge": "Tinjau paket sebelum mengisi ulang",
"Activate": "Mengaktifkan Paket", "Activate": "Mengaktifkan paket",
"Deactivate": "Menonaktifkan Paket", "Deactivate": "Menonaktifkan paket",
"Sync": "Sinkronisasi", "Sync": "Sinkronisasi",
"Failed_to_create_PaymeTrust_transaction_": "Gagal membuat transaksi PaymeTrust.", "Failed_to_create_PaymeTrust_transaction_": "Gagal membuat transaksi PaymeTrust.",
"Location": "Lokasi", "Location": "Lokasi",
"Radius_Plans": "Paket Radius", "Radius_Plans": "Paket Radius",
"Change_title_in_user_Plan_order": "Ubah judul dalam urutan paket pelanggan", "Change_title_in_user_Plan_order": "Ubah Judul dalam urutan paket pelanggan",
"Logs": "Log", "Logs": "Log",
"Voucher_Format": "Format Voucher", "Voucher_Format": "Format Voucher",
"Resend_To_Customer": "Kirim Ulang Ke Pelanggan", "Resend_To_Customer": "Kirim Ulang Ke Pelanggan",
@ -378,12 +378,12 @@
"Monthly_Registered_Customers": "Pendaftaran Pelanggan perbulan", "Monthly_Registered_Customers": "Pendaftaran Pelanggan perbulan",
"Total_Monthly_Sales": "Total penjualan perbulan", "Total_Monthly_Sales": "Total penjualan perbulan",
"Active_Users": "Pelanggan Aktif", "Active_Users": "Pelanggan Aktif",
"SuperAdmin": "Admin Super", "SuperAdmin": "Super Admin",
"Lists": "Daftar", "Lists": "Daftar",
"Vouchers": "Voucher", "Vouchers": "Voucher",
"Refill_Customer": "Isi Ulang Pelanggan", "Refill_Customer": "Isi Ulang Pelanggan",
"Recharge_Customer": "Isi Ulang Pelanggan", "Recharge_Customer": "Isi Ulang Pelanggan",
"Plans": "Rencana", "Plans": "Paket",
"PPPOE": "PPPOE", "PPPOE": "PPPOE",
"Bandwidth": "Bandwidth", "Bandwidth": "Bandwidth",
"Send_Message": "Mengirim pesan", "Send_Message": "Mengirim pesan",
@ -393,18 +393,18 @@
"Radius_NAS": "Radius NAS", "Radius_NAS": "Radius NAS",
"Customer_Announcement": "Pengumuman Pelanggan", "Customer_Announcement": "Pengumuman Pelanggan",
"Language_Editor": "Editor Bahasa", "Language_Editor": "Editor Bahasa",
"Plan_Category": "Kategori Rencana", "Plan_Category": "Kategori Paket",
"ID": "PENGENAL", "ID": "ID",
"Prev": "Sebelumnya", "Prev": "Sebelumnya",
"Internet_Plan": "Paket Internet", "Internet_Plan": "Paket Internet",
"Generated_By": "Dihasilkan oleh", "Generated_By": "Dihasilkan oleh",
"All_Users_Insights": "Semua Wawasan Pengguna", "All_Users_Insights": "Semua Wawasan Pengguna",
"year": "tahun", "year": "Tahun",
"month": "bulan", "month": "Bulan",
"week": "pekan", "week": "Pekan",
"day": "hari", "day": "Hari",
"hour": "jam", "hour": "Jam",
"minute": "menit", "minute": "Menit",
"second": "Kedua", "second": "Kedua",
"Account_Type": "Jenis akun", "Account_Type": "Jenis akun",
"Contact": "Kontak", "Contact": "Kontak",
@ -422,55 +422,55 @@
"success": "Sukses", "success": "Sukses",
"Click_Here": "Klik disini", "Click_Here": "Klik disini",
"Your_friend_do_not_have_active_package": "Teman Anda tidak memiliki paket aktif", "Your_friend_do_not_have_active_package": "Teman Anda tidak memiliki paket aktif",
"If_your_friend_have_Additional_Cost__you_will_pay_for_that_too": "Jika teman Anda memiliki Biaya Tambahan, Anda juga akan membayarnya", "If_your_friend_have_Additional_Cost__you_will_pay_for_that_too": "Jika teman Anda memiliki biaya tambahan, Anda juga akan membayarnya",
"Select_Payment_Gateway": "Pilih Gerbang Pembayaran", "Select_Payment_Gateway": "Pilih Gerbang Pembayaran",
"Available_Payment_Gateway": "Gerbang Pembayaran yang Tersedia", "Available_Payment_Gateway": "Gerbang Pembayaran yang tersedia",
"Pay_Now": "Bayar sekarang", "Pay_Now": "Bayar sekarang",
"Notes": "Catatan", "Notes": "Catatan",
"will_be_replaced_with_Customer_Name": "akan diganti dengan Nama Pelanggan", "will_be_replaced_with_Customer_Name": "akan diganti dengan nama Pelanggan",
"will_be_replaced_with_Customer_username": "akan diganti dengan nama pengguna Pelanggan", "will_be_replaced_with_Customer_username": "akan diganti dengan nama pengguna Pelanggan",
"will_be_replaced_with_Package_name": "akan diganti dengan nama Paket", "will_be_replaced_with_Package_name": "akan diganti dengan nama paket",
"will_be_replaced_with_Package_price": "akan diganti dengan harga Paket", "will_be_replaced_with_Package_price": "akan diganti dengan harga Paket",
"will_be_replaced_with_Expiration_date": "akan diganti dengan tanggal kedaluwarsa", "will_be_replaced_with_Expiration_date": "akan diganti dengan tanggal kedaluwarsa",
"additional_bills_for_customers": "tagihan tambahan untuk pelanggan", "additional_bills_for_customers": "tagihan tambahan untuk pelanggan",
"Your_Company_Name_at_Settings": "Nama Perusahaan Anda di Pengaturan", "Your_Company_Name_at_Settings": "Nama Perusahaan Anda di pengaturan",
"Your_Company_Address_at_Settings": "Alamat Perusahaan Anda di Pengaturan", "Your_Company_Address_at_Settings": "Alamat Perusahaan Anda di pengaturan",
"Your_Company_Phone_at_Settings": "Telepon Perusahaan Anda di Pengaturan", "Your_Company_Phone_at_Settings": "Telepon Perusahaan Anda di pengaturan",
"Invoice_number": "Nomor faktur", "Invoice_number": "Nomor faktur",
"Date_invoice_created": "Tanggal faktur dibuat", "Date_invoice_created": "Tanggal faktur dibuat",
"Payment_gateway_user_paid_from": "Pengguna gateway pembayaran membayar dari", "Payment_gateway_user_paid_from": "Pengguna gateway pembayaran membayar dari",
"Payment_channel_user_paid_from": "Pengguna saluran pembayaran membayar dari", "Payment_channel_user_paid_from": "Pengguna saluran pembayaran membayar dari",
"is_Hotspot_or_PPPOE": "adalah Hotspot atau PPPOE", "is_Hotspot_or_PPPOE": "adalah Hotspot atau PPPOE",
"Internet_Package": "Paket Internet", "Internet_Package": "Paket internet",
"Internet_Package_Prices": "Harga Paket Internet", "Internet_Package_Prices": "Harga paket internet",
"Receiver_name": "Nama Penerima", "Receiver_name": "Nama penerima",
"Username_internet": "Nama pengguna internet", "Username_internet": "Nama pengguna internet",
"User_password": "Kata sandi pengguna", "User_password": "Kata sandi pengguna",
"Transaction_datetime": "Tanggal waktu transaksi", "Transaction_datetime": "Tanggal waktu transaksi",
"Balance_Before": "Saldo Sebelumnya", "Balance_Before": "Saldo sebelumnya",
"Balance_After": "Saldo Setelahnya", "Balance_After": "Saldo setelahnya",
"For_Notes_by_admin": "Untuk Catatan oleh admin", "For_Notes_by_admin": "Untuk catatan oleh Admin",
"how_much_balance_have_been_send": "berapa banyak saldo yang telah dikirim", "how_much_balance_have_been_send": "berapa banyak saldo yang telah dikirim",
"Current_Balance": "Saldo saat ini", "Current_Balance": "Saldo saat ini",
"Sender_name": "Nama pengirim", "Sender_name": "Nama pengirim",
"Customer_Balance": "Saldo Pelanggan", "Customer_Balance": "Saldo Pelanggan",
"Privacy_Policy": "Kebijakan pribadi", "Privacy_Policy": "Kebijakan Privasi",
"Terms_and_Conditions": "syarat dan Ketentuan", "Terms_and_Conditions": "Syarat dan Ketentuan",
"Disable_Registration": "Nonaktifkan Pendaftaran", "Disable_Registration": "Nonaktifkan Pendaftaran",
"Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Pelanggan cukup Login dengan Nomor Telepon dan Kode Voucher, Voucher akan menjadi kata sandi", "Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Pelanggan cukup masuk dengan nomor telepon dan kode voucher, Voucher akan menjadi kata sandi",
"After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "Setelah Pelanggan mengaktifkan voucher atau login, Pelanggan akan diarahkan ke url ini", "After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "Setelah Pelanggan mengaktifkan voucher atau masuk, Pelanggan akan diarahkan ke URL ini",
"Extend_Postpaid_Expiration": "Perpanjang Masa Kedaluwarsa Pascabayar", "Extend_Postpaid_Expiration": "Perpanjang masa kedaluwarsa pascabayar",
"Allow_Extend": "Izinkan Perpanjang", "Allow_Extend": "Izinkan Perpanjang",
"Extend_Days": "Perpanjang Hari", "Extend_Days": "Perpanjang Hari",
"Confirmation_Message": "Pesan konfirmasi", "Confirmation_Message": "Pesan konfirmasi",
"Email_Notification": "pemberitahuan email", "Email_Notification": "Pemberitahuan Email",
"This_Token_will_act_as_SuperAdmin_Admin": "Token ini akan bertindak sebagai SuperAdmin\/Admin", "This_Token_will_act_as_SuperAdmin_Admin": "Token ini akan bertindak sebagai SuperAdmin\/Admin",
"Miscellaneous": "Aneka ragam", "Miscellaneous": "Aneka ragam",
"OTP_Required": "Diperlukan OTP", "OTP_Required": "Diperlukan OTP",
"OTP_is_required_when_user_want_to_change_phone_number": "OTP diperlukan ketika pengguna ingin mengganti nomor telepon", "OTP_is_required_when_user_want_to_change_phone_number": "OTP diperlukan ketika pengguna ingin mengganti nomor telepon",
"OTP_Method": "Metode OTP", "OTP_Method": "Metode OTP",
"SMS": "SMS", "SMS": "SMS",
"WhatsApp": "Ada apa", "WhatsApp": "WhatsApp",
"SMS_and_WhatsApp": "SMS dan WhatsApp", "SMS_and_WhatsApp": "SMS dan WhatsApp",
"The_method_which_OTP_will_be_sent_to_user": "Metode OTP yang akan dikirimkan ke pengguna" "The_method_which_OTP_will_be_sent_to_user": "Metode OTP yang akan dikirimkan ke pengguna"
} }

View File

@ -11,7 +11,7 @@
class="glyphicon glyphicon-refresh" aria-hidden="true"></span> sync</a> class="glyphicon glyphicon-refresh" aria-hidden="true"></span> sync</a>
</div> </div>
<div class="btn-group pull-right"> <div class="btn-group pull-right">
<a class="btn btn-info btn-xs" title="save" href="{$_url}customers/csv" <a class="btn btn-info btn-xs" title="save" href="{$_url}customers/csv-prepaid"
onclick="return confirm('This will export to CSV?')"><span class="glyphicon glyphicon-download" onclick="return confirm('This will export to CSV?')"><span class="glyphicon glyphicon-download"
aria-hidden="true"></span> CSV</a> aria-hidden="true"></span> CSV</a>
</div> </div>
@ -75,7 +75,7 @@
{/if} {/if}
{if $ds['status']=='off' && $_c['extend_expired']} {if $ds['status']=='off' && $_c['extend_expired']}
<a href="javascript:extend('{$ds['id']}')" <a href="javascript:extend('{$ds['id']}')"
class="btn btn-info btn-xs">{Lang::T('extend')}</a> class="btn btn-info btn-xs">{Lang::T('Extend')}</a>
{/if} {/if}
</td> </td>
</tr> </tr>

View File

@ -187,7 +187,7 @@
{if $_bill['status'] != 'on' && $_bill['prepaid'] != 'yes' && $_c['extend_expired']} {if $_bill['status'] != 'on' && $_bill['prepaid'] != 'yes' && $_c['extend_expired']}
<a class="btn btn-warning text-black btn-sm" <a class="btn btn-warning text-black btn-sm"
href="{$_url}home&extend={$_bill['id']}&stoken={App::getToken()}" href="{$_url}home&extend={$_bill['id']}&stoken={App::getToken()}"
onclick="return confirm('{str_replace("\n","\\n",str_replace("\r","",$_c['extend_confirmation']))}')">{Lang::T('Extend')}</a> onclick="return confirm('{Text::toHex($_c['extend_confirmation'])}')">{Lang::T('Extend')}</a>
{/if} {/if}
<a class="btn btn-primary pull-right btn-sm" <a class="btn btn-primary pull-right btn-sm"
href="{$_url}home&recharge={$_bill['id']}&stoken={App::getToken()}" href="{$_url}home&recharge={$_bill['id']}&stoken={App::getToken()}"

View File

@ -16,31 +16,34 @@
<div class="panel-body"> <div class="panel-body">
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px"> <div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
<div class="col-md-8"> <div class="col-md-8">
<form id="site-search" method="post" action="{$_url}plan/voucher/"> <form id="site-search" method="post" action="{$_url}plan/voucher/">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon"> <div class="input-group-addon">
<span class="fa fa-search"></span> <span class="fa fa-search"></span>
</div> </div>
<input type="text" name="search" class="form-control" placeholder="{Lang::T('Search by Code Voucher')}..." value="{$search}"> <input type="text" name="search" class="form-control"
<div class="input-group-btn"> placeholder="{Lang::T('Search by Code Voucher')}..." value="{$search}">
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button> <div class="input-group-btn">
</div> <button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div> </div>
</form> </div>
</div> </form>
</div>
<div class="col-md-4"> <div class="col-md-4">
<div class="btn-group btn-group-justified" role="group"> <div class="btn-group btn-group-justified" role="group">
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<a href="{$_url}plan/add-voucher" class="btn btn-primary btn-block"><i class="ion ion-android-add"></i> {Lang::T('Add Vouchers')}</a> <a href="{$_url}plan/add-voucher" class="btn btn-primary btn-block"><i
</div> class="ion ion-android-add"></i> {Lang::T('Add Vouchers')}</a>
</div> </div>
<div class="btn-group btn-group-justified" role="group"> </div>
<div class="btn-group" role="group"> <div class="btn-group btn-group-justified" role="group">
<a href="{$_url}plan/print-voucher" target="print_voucher" class="btn btn-info btn-block"><i class="ion ion-android-print"></i> Print</a> <div class="btn-group" role="group">
</div> <a href="{$_url}plan/print-voucher" target="print_voucher"
</div> class="btn btn-info btn-block"><i class="ion ion-android-print"></i> Print</a>
</div>&nbsp; </div>
</div>
</div>&nbsp;
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
<table id="datatable" class="table table-bordered table-striped table-condensed"> <table id="datatable" class="table table-bordered table-striped table-condensed">
@ -82,8 +85,7 @@
</td> </td>
<td> <td>
{if $ds['status'] neq '1'} {if $ds['status'] neq '1'}
<a href="{$_url}plan/voucher-view/{$ds['id']}" id="{$ds['id']}" <a href="{$_url}plan/voucher-view/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
style="margin: 0px;"
class="btn btn-success btn-xs">&nbsp;&nbsp;{Lang::T('View')}&nbsp;&nbsp;</a> class="btn btn-success btn-xs">&nbsp;&nbsp;{Lang::T('View')}&nbsp;&nbsp;</a>
{/if} {/if}
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])} {if in_array($_admin['user_type'],['SuperAdmin','Admin'])}

View File

@ -141,12 +141,12 @@ function r2($to, $ntype = 'e', $msg = '')
{ {
if ($msg == '') { if ($msg == '') {
header("location: $to"); header("location: $to");
exit; die();
} }
$_SESSION['ntype'] = $ntype; $_SESSION['ntype'] = $ntype;
$_SESSION['notify'] = $msg; $_SESSION['notify'] = $msg;
header("location: $to"); header("location: $to");
exit; die();
} }
function copyFolder($from, $to, $exclude = []) function copyFolder($from, $to, $exclude = [])

View File

@ -1,3 +1,3 @@
{ {
"version": "2024.4.21" "version": "2024.4.23"
} }