show user active

This commit is contained in:
Ibnu Maksum 2023-09-07 10:54:20 +07:00
parent eeae60d88e
commit c57bbeace3
No known key found for this signature in database
GPG Key ID: 7FC82848810579E5
9 changed files with 129 additions and 82 deletions

View File

@ -2,6 +2,12 @@
# CHANGELOG # CHANGELOG
## 2023.9.7
- Fix PPPOE Delete Customer
- Remove active Customer before deleting
- Show IP and Mac even if it not Hotspot
## 2023.9.6 ## 2023.9.6
- Expired Pool - Expired Pool

View File

@ -36,6 +36,17 @@ switch ($action) {
$ui->display('autoload.tpl'); $ui->display('autoload.tpl');
break; break;
case 'customer_is_active':
$d = ORM::for_table('tbl_user_recharges')->where('customer_id', $routes['2'])->findOne();
if ($d) {
if ($d['status'] == 'on') {
die('<span class="label label-success" title="Expired ' . Lang::dateAndTimeFormat($d['expiration'], $d['time']) . '">on</span>');
} else {
die('<span class="label label-danger" title="Expired ' . Lang::dateAndTimeFormat($d['expiration'], $d['time']) . '">off</span>');
}
} else {
die('<span class="label label-danger">off</span>');
}
case 'customer_select2': case 'customer_select2':
$s = addslashes(_get('s')); $s = addslashes(_get('s'));

View File

@ -12,9 +12,6 @@ $action = $routes['1'];
$admin = Admin::_info(); $admin = Admin::_info();
$ui->assign('_admin', $admin); $ui->assign('_admin', $admin);
use PEAR2\Net\RouterOS;
require_once 'system/autoload/PEAR2/Autoload.php';
if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') { if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']); r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
@ -34,7 +31,8 @@ switch ($action) {
->order_by_desc('id')->find_many(); ->order_by_desc('id')->find_many();
} else { } else {
$paginator = Paginator::bootstrap('tbl_customers'); $paginator = Paginator::bootstrap('tbl_customers');
$d = ORM::for_table('tbl_customers')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); $d = ORM::for_table('tbl_customers')
->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many();
} }
$ui->assign('search', htmlspecialchars($search)); $ui->assign('search', htmlspecialchars($search));

View File

@ -1,13 +1,14 @@
<?php <?php
/** /**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/) * PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
**/ **/
_admin(); _admin();
$ui->assign('_title', $_L['Dashboard']); $ui->assign('_title', $_L['Dashboard']);
$admin = Admin::_info(); $admin = Admin::_info();
$ui->assign('_admin', $admin); $ui->assign('_admin', $admin);
if(!in_array($admin['user_type'],['Admin','Sales'])){ if (!in_array($admin['user_type'], ['Admin', 'Sales'])) {
r2(U."home",'e',$_L['Do_Not_Access']); r2(U . "home", 'e', $_L['Do_Not_Access']);
} }
$fdate = date('Y-m-01'); $fdate = date('Y-m-01');
@ -17,59 +18,67 @@ $first_day_month = date('Y-m-01');
$mdate = date('Y-m-d'); $mdate = date('Y-m-d');
$month_n = date('n'); $month_n = date('n');
$iday = ORM::for_table('tbl_transactions')->where('recharged_on',$mdate)->sum('price'); $iday = ORM::for_table('tbl_transactions')->where('recharged_on', $mdate)->sum('price');
if($iday == ''){ if ($iday == '') {
$iday = '0.00'; $iday = '0.00';
} }
$ui->assign('iday',$iday); $ui->assign('iday', $iday);
$imonth = ORM::for_table('tbl_transactions')->where_gte('recharged_on',$first_day_month)->where_lte('recharged_on',$mdate)->sum('price'); $imonth = ORM::for_table('tbl_transactions')->where_gte('recharged_on', $first_day_month)->where_lte('recharged_on', $mdate)->sum('price');
if($imonth == ''){ if ($imonth == '') {
$imonth = '0.00'; $imonth = '0.00';
} }
$ui->assign('imonth',$imonth); $ui->assign('imonth', $imonth);
$u_act = ORM::for_table('tbl_user_recharges')->where('status','on')->count(); $u_act = ORM::for_table('tbl_user_recharges')->where('status', 'on')->count();
if($u_act == ''){ if ($u_act == '') {
$u_act = '0'; $u_act = '0';
} }
$ui->assign('u_act',$u_act); $ui->assign('u_act', $u_act);
$u_all = ORM::for_table('tbl_user_recharges')->count(); $u_all = ORM::for_table('tbl_user_recharges')->count();
if($u_all == ''){ if ($u_all == '') {
$u_all = '0'; $u_all = '0';
} }
$ui->assign('u_all',$u_all); $ui->assign('u_all', $u_all);
$c_all = ORM::for_table('tbl_customers')->count();
if ($u_all == '') {
$c_all = '0';
}
$ui->assign('c_all', $u_all);
//user expire //user expire
$expire = ORM::for_table('tbl_user_recharges')->where('expiration',$mdate)->order_by_desc('id')->find_many(); $expire = ORM::for_table('tbl_user_recharges')->where('expiration', $mdate)->order_by_desc('id')->find_many();
$ui->assign('expire',$expire); $ui->assign('expire', $expire);
//activity log //activity log
$dlog = ORM::for_table('tbl_logs')->limit(5)->order_by_desc('id')->find_many(); $dlog = ORM::for_table('tbl_logs')->limit(5)->order_by_desc('id')->find_many();
$ui->assign('dlog',$dlog); $ui->assign('dlog', $dlog);
$log = ORM::for_table('tbl_logs')->count(); $log = ORM::for_table('tbl_logs')->count();
$ui->assign('log',$log); $ui->assign('log', $log);
// Count stock // Count stock
$tmp = $v = ORM::for_table('tbl_plans')->select('id')->select('name_plan')->find_many(); $tmp = $v = ORM::for_table('tbl_plans')->select('id')->select('name_plan')->find_many();
$plans = array(); $plans = array();
$stocks = array("used"=>0,"unused"=>0); $stocks = array("used" => 0, "unused" => 0);
$n = 0; $n = 0;
foreach($tmp as $plan){ foreach ($tmp as $plan) {
$plans[$n]['name_plan'] = $plan['name_plan']; $plans[$n]['name_plan'] = $plan['name_plan'];
$plans[$n]['unused'] = ORM::for_table('tbl_voucher') $plans[$n]['unused'] = ORM::for_table('tbl_voucher')
->where('id_plan',$plan['id']) ->where('id_plan', $plan['id'])
->where('status',0)->count();; ->where('status', 0)->count();;
$stocks["unused"] += $plans[$n]['unused']; $stocks["unused"] += $plans[$n]['unused'];
$plans[$n]['used'] = ORM::for_table('tbl_voucher') $plans[$n]['used'] = ORM::for_table('tbl_voucher')
->where('id_plan',$plan['id']) ->where('id_plan', $plan['id'])
->where('status',1)->count();; ->where('status', 1)->count();;
$stocks["used"] += $plans[$n]['used']; $stocks["used"] += $plans[$n]['used'];
$n++; $n++;
} }
$ui->assign('stocks',$stocks); $ui->assign('stocks', $stocks);
$ui->assign('plans',$plans); $ui->assign('plans', $plans);
run_hook('view_dashboard'); #HOOK run_hook('view_dashboard'); #HOOK
$ui->display('dashboard.tpl'); $ui->display('dashboard.tpl');

View File

@ -24,34 +24,37 @@
</div>&nbsp; </div>&nbsp;
</div> </div>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped table-condensed">
<thead> <thead>
<tr> <tr>
<th>{$_L['Manage']}</th> <th></th>
<th>{$_L['Username']}</th> <th>{$_L['Username']}</th>
<th>{$_L['Full_Name']}</th> <th>{$_L['Full_Name']}</th>
<th>{Lang::T('Balance')}</th> <th>{Lang::T('Balance')}</th>
<th>{$_L['Phone_Number']}</th> <th>{$_L['Phone_Number']}</th>
<th>{$_L['Email']}</th> <th>{$_L['Email']}</th>
<th>{$_L['Created_On']}</th> <th>{$_L['Created_On']}</th>
<th>{$_L['Recharge']}</th> <th>{$_L['Manage']}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{foreach $d as $ds} {foreach $d as $ds}
<tr> <tr>
<td align="center"> <td align="center" api-get-text="{$_url}autoload/customer_is_active/{$ds['id']}">
<a href="{$_url}customers/view/{$ds['id']}" id="{$ds['id']}" <span class="label label-default">-</span>
class="btn btn-success btn-sm">{Lang::T('View')}</a>
</td> </td>
<td>{$ds['username']}</td> <td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'" style="cursor:pointer;">{$ds['username']}</td>
<td>{$ds['fullname']}</td> <td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'" style="cursor: pointer;">{$ds['fullname']}</td>
<td>{Lang::moneyFormat($ds['balance'])}</td> <td>{Lang::moneyFormat($ds['balance'])}</td>
<td>{$ds['phonenumber']}</td> <td>{$ds['phonenumber']}</td>
<td>{$ds['email']}</td> <td>{$ds['email']}</td>
<td>{Lang::dateTimeFormat($ds['created_at'])}</td> <td>{Lang::dateTimeFormat($ds['created_at'])}</td>
<td align="center"><a href="{$_url}prepaid/recharge-user/{$ds['id']}" id="{$ds['id']}" <td align="center">
class="btn btn-primary btn-sm">{$_L['Recharge']}</a></td> <a href="{$_url}customers/view/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
class="btn btn-success btn-xs">&nbsp;&nbsp;{Lang::T('View')}&nbsp;&nbsp;</a>
<a href="{$_url}prepaid/recharge-user/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
class="btn btn-primary btn-xs">{$_L['Recharge']}</a>
</td>
</tr> </tr>
{/foreach} {/foreach}
</tbody> </tbody>

View File

@ -33,7 +33,7 @@
<div class="col-lg-3 col-xs-6"> <div class="col-lg-3 col-xs-6">
<div class="small-box bg-yellow"> <div class="small-box bg-yellow">
<div class="inner"> <div class="inner">
<h4>{$u_act}</h4> <h4>{$u_act}/{$u_all}</h4>
<p>{$_L['Users_Active']}</p> <p>{$_L['Users_Active']}</p>
</div> </div>
@ -47,7 +47,7 @@
<div class="col-lg-3 col-xs-6"> <div class="col-lg-3 col-xs-6">
<div class="small-box bg-red"> <div class="small-box bg-red">
<div class="inner"> <div class="inner">
<h4>{$u_all}</h4> <h4>{$c_all}</h4>
<p>{$_L['Total_Users']}</p> <p>{$_L['Total_Users']}</p>
</div> </div>

View File

@ -22,6 +22,13 @@
$(document).ready(function() { $(document).ready(function() {
$('.select2').select2({theme: "bootstrap"}); $('.select2').select2({theme: "bootstrap"});
}); });
var listAtts = document.querySelectorAll(`[api-get-text]`);
listAtts.forEach(function(el) {
$.get(el.getAttribute('api-get-text'), function(data) {
el.innerHTML = data;
});
});
</script> </script>
{/literal} {/literal}

View File

@ -1,45 +1,58 @@
</section> </section>
</div> </div>
{if isset($_c['CompanyFooter'])} {if isset($_c['CompanyFooter'])}
<footer class="main-footer"> <footer class="main-footer">
{$_c['CompanyFooter']} {$_c['CompanyFooter']}
</footer> </footer>
{else} {else}
<footer class="main-footer"> <footer class="main-footer">
PHPNuxBill by <a href="https://github.com/hotspotbilling/phpnuxbill" rel="nofollow noreferrer noopener" target="_blank">iBNuX</a>, Theme by <a href="https://adminlte.io/" rel="nofollow noreferrer noopener" target="_blank">AdminLTE</a> PHPNuxBill by <a href="https://github.com/hotspotbilling/phpnuxbill" rel="nofollow noreferrer noopener"
</footer> target="_blank">iBNuX</a>, Theme by <a href="https://adminlte.io/" rel="nofollow noreferrer noopener"
{/if} target="_blank">AdminLTE</a>
</div> </footer>
{/if}
</div>
<script src="ui/ui/scripts/jquery.min.js"></script> <script src="ui/ui/scripts/jquery.min.js"></script>
<script src="ui/ui/scripts/bootstrap.min.js"></script> <script src="ui/ui/scripts/bootstrap.min.js"></script>
<script src="ui/ui/scripts/adminlte.min.js"></script> <script src="ui/ui/scripts/adminlte.min.js"></script>
<script src="ui/ui/scripts/plugins/select2.min.js"></script> <script src="ui/ui/scripts/plugins/select2.min.js"></script>
<script src="ui/ui/scripts/custom.js"></script> <script src="ui/ui/scripts/custom.js"></script>
{if isset($xfooter)} {if isset($xfooter)}
{$xfooter} {$xfooter}
{/if} {/if}
{if $_c['tawkto'] != ''} {if $_c['tawkto'] != ''}
<!--Start of Tawk.to Script--> <!--Start of Tawk.to Script-->
<script type="text/javascript"> <script type="text/javascript">
var Tawk_API = Tawk_API || {}, var Tawk_API = Tawk_API || {},
Tawk_LoadStart = new Date(); Tawk_LoadStart = new Date();
(function() { (function() {
var s1 = document.createElement("script"), var s1 = document.createElement("script"),
s0 = document.getElementsByTagName("script")[0]; s0 = document.getElementsByTagName("script")[0];
s1.async = true; s1.async = true;
s1.src='https://embed.tawk.to/{$_c['tawkto']}'; s1.src='https://embed.tawk.to/{$_c['tawkto']}';
s1.charset = 'UTF-8'; s1.charset = 'UTF-8';
s1.setAttribute('crossorigin', '*'); s1.setAttribute('crossorigin', '*');
s0.parentNode.insertBefore(s1, s0); s0.parentNode.insertBefore(s1, s0);
})(); })();
</script> </script>
<!--End of Tawk.to Script--> <!--End of Tawk.to Script-->
{/if} {/if}
</body> {literal}
<script>
var listAtts = document.querySelectorAll(`[api-get-text]`);
listAtts.forEach(function(el) {
$.get(el.getAttribute('api-get-text'), function(data) {
el.innerHTML = data;
});
});
</script>
{/literal}
</body>
</html> </html>

View File

@ -1,3 +1,3 @@
{ {
"version": "2023.9.6" "version": "2023.9.7"
} }