Fix Calculation
This commit is contained in:
parent
00ac91903f
commit
80cecabfb0
@ -427,3 +427,4 @@ $_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active p
|
|||||||
$_L['Monthly_Registered_Customers'] = 'Monthly Registered Customers';
|
$_L['Monthly_Registered_Customers'] = 'Monthly Registered Customers';
|
||||||
$_L['Total_Monthly_Sales'] = 'Total Monthly Sales';
|
$_L['Total_Monthly_Sales'] = 'Total Monthly Sales';
|
||||||
$_L['Active_Users'] = 'Active Users';
|
$_L['Active_Users'] = 'Active Users';
|
||||||
|
$_L['All_Users_Insights'] = 'All Users Insights';
|
||||||
|
@ -99,34 +99,34 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-7">
|
<div class="col-md-7">
|
||||||
{if $_c['disable_voucher'] != 'yes' && $stocks['unused']>0 || $stocks['used']>0}
|
{if $_c['disable_voucher'] != 'yes' && $stocks['unused']>0 || $stocks['used']>0}
|
||||||
<div class="panel panel-primary mb20 panel-hovered project-stats table-responsive">
|
<div class="panel panel-primary mb20 panel-hovered project-stats table-responsive">
|
||||||
<div class="panel-heading">Vouchers Stock</div>
|
<div class="panel-heading">Vouchers Stock</div>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{$_L['Plan_Name']}</th>
|
||||||
|
<th>unused</th>
|
||||||
|
<th>used</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{foreach $plans as $stok}
|
||||||
|
<tr>
|
||||||
|
<td>{$stok['name_plan']}</td>
|
||||||
|
<td>{$stok['unused']}</td>
|
||||||
|
<td>{$stok['used']}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
{/foreach}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{$_L['Plan_Name']}</th>
|
<td>Total</td>
|
||||||
<th>unused</th>
|
<td>{$stocks['unused']}</td>
|
||||||
<th>used</th>
|
<td>{$stocks['used']}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</table>
|
||||||
<tbody>
|
</div>
|
||||||
{foreach $plans as $stok}
|
|
||||||
<tr>
|
|
||||||
<td>{$stok['name_plan']}</td>
|
|
||||||
<td>{$stok['unused']}</td>
|
|
||||||
<td>{$stok['used']}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
{/foreach}
|
|
||||||
<tr>
|
|
||||||
<td>Total</td>
|
|
||||||
<td>{$stocks['unused']}</td>
|
|
||||||
<td>{$stocks['used']}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{/if}
|
{/if}
|
||||||
<div class="panel panel-warning mb20 panel-hovered project-stats table-responsive">
|
<div class="panel panel-warning mb20 panel-hovered project-stats table-responsive">
|
||||||
<div class="panel-heading">{$_L['User_Expired_Today']}</div>
|
<div class="panel-heading">{$_L['User_Expired_Today']}</div>
|
||||||
@ -143,15 +143,15 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{$no = 1}
|
{$no = 1}
|
||||||
{foreach $expire as $expired}
|
{foreach $expire as $expired}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{$no++}</td>
|
<td>{$no++}</td>
|
||||||
<td><a href="{$_url}customers/viewu/{$expired['username']}">{$expired['username']}</a></td>
|
<td><a href="{$_url}customers/viewu/{$expired['username']}">{$expired['username']}</a></td>
|
||||||
<td>{Lang::dateAndTimeFormat($expired['recharged_on'],$expired['recharged_time'])}
|
<td>{Lang::dateAndTimeFormat($expired['recharged_on'],$expired['recharged_time'])}
|
||||||
</td>
|
</td>
|
||||||
<td>{Lang::dateAndTimeFormat($expired['expiration'],$expired['time'])}
|
<td>{Lang::dateAndTimeFormat($expired['expiration'],$expired['time'])}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@ -175,11 +175,11 @@
|
|||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
{foreach $dlog as $dlogs}
|
{foreach $dlog as $dlogs}
|
||||||
<li class="primary">
|
<li class="primary">
|
||||||
<span class="point"></span>
|
<span class="point"></span>
|
||||||
<span class="time small text-muted">{time_elapsed_string($dlogs['date'],true)}</span>
|
<span class="time small text-muted">{time_elapsed_string($dlogs['date'],true)}</span>
|
||||||
<p>{$dlogs['description']}</p>
|
<p>{$dlogs['description']}</p>
|
||||||
</li>
|
</li>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -192,171 +192,171 @@
|
|||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.5.1/dist/chart.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.5.1/dist/chart.min.js"></script>
|
||||||
{literal}
|
{literal}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
var counts = JSON.parse('{/literal}{$counts|json_encode}{literal}');
|
var counts = JSON.parse('{/literal}{$counts|json_encode}{literal}');
|
||||||
|
|
||||||
var monthNames = [
|
var monthNames = [
|
||||||
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
||||||
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
||||||
];
|
];
|
||||||
|
|
||||||
var labels = [];
|
var labels = [];
|
||||||
var data = [];
|
var data = [];
|
||||||
|
|
||||||
for (var i = 1; i <= 12; i++) {
|
for (var i = 1; i <= 12; i++) {
|
||||||
var month = counts.find(count => count.date === i);
|
var month = counts.find(count => count.date === i);
|
||||||
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
|
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
|
||||||
data.push(month ? month.count : 0);
|
data.push(month ? month.count : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ctx = document.getElementById('chart').getContext('2d');
|
||||||
|
var chart = new Chart(ctx, {
|
||||||
|
type: 'bar',
|
||||||
|
data: {
|
||||||
|
labels: labels,
|
||||||
|
datasets: [{
|
||||||
|
label: 'Registered Members',
|
||||||
|
data: data,
|
||||||
|
backgroundColor: 'rgba(0, 0, 255, 0.5)',
|
||||||
|
borderColor: 'rgba(0, 0, 255, 0.7)',
|
||||||
|
borderWidth: 1
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
scales: {
|
||||||
|
x: {
|
||||||
|
grid: {
|
||||||
|
display: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
y: {
|
||||||
|
beginAtZero: true,
|
||||||
|
grid: {
|
||||||
|
color: 'rgba(0, 0, 0, 0.1)'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
var monthlySales = JSON.parse('{/literal}{$monthlySales|json_encode}{literal}');
|
||||||
|
|
||||||
|
var monthNames = [
|
||||||
|
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
||||||
|
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
||||||
|
];
|
||||||
|
|
||||||
|
var labels = [];
|
||||||
|
var data = [];
|
||||||
|
|
||||||
|
for (var i = 1; i <= 12; i++) {
|
||||||
|
var month = findMonthData(monthlySales, i);
|
||||||
|
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
|
||||||
|
data.push(month ? month.totalSales : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ctx = document.getElementById('salesChart').getContext('2d');
|
||||||
|
var chart = new Chart(ctx, {
|
||||||
|
type: 'bar',
|
||||||
|
data: {
|
||||||
|
labels: labels,
|
||||||
|
datasets: [{
|
||||||
|
label: 'Monthly Sales',
|
||||||
|
data: data,
|
||||||
|
backgroundColor: 'rgba(2, 10, 242)', // Customize the background color
|
||||||
|
borderColor: 'rgba(255, 99, 132, 1)', // Customize the border color
|
||||||
|
borderWidth: 1
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
scales: {
|
||||||
|
x: {
|
||||||
|
grid: {
|
||||||
|
display: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
y: {
|
||||||
|
beginAtZero: true,
|
||||||
|
grid: {
|
||||||
|
color: 'rgba(0, 0, 0, 0.1)'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function findMonthData(monthlySales, month) {
|
||||||
|
for (var i = 0; i < monthlySales.length; i++) {
|
||||||
|
if (monthlySales[i].month === month) {
|
||||||
|
return monthlySales[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var ctx = document.getElementById('chart').getContext('2d');
|
|
||||||
var chart = new Chart(ctx, {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
type: 'bar',
|
// Get the data from PHP and assign it to JavaScript variables
|
||||||
data: {
|
var u_act = '{/literal}{$u_act}{literal}';
|
||||||
labels: labels,
|
var c_all = '{/literal}{$c_all}{literal}';
|
||||||
|
var u_all = '{/literal}{$u_all}{literal}';
|
||||||
|
//lets calculate the inactive users as reported
|
||||||
|
var expired = u_all - u_act;
|
||||||
|
var inactive = c_all - u_all;
|
||||||
|
// Create the chart data
|
||||||
|
var data = {
|
||||||
|
labels: ['Active Users', 'Expired Users', 'Inactive Users'],
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Registered Members',
|
label: 'User Recharges',
|
||||||
data: data,
|
data: [parseInt(u_act), parseInt(expired), parseInt(inactive)],
|
||||||
backgroundColor: 'rgba(0, 0, 255, 0.5)',
|
backgroundColor: ['rgba(4, 191, 13)', 'rgba(191, 35, 4)', 'rgba(0, 0, 255, 0.5'],
|
||||||
borderColor: 'rgba(0, 0, 255, 0.7)',
|
borderColor: ['rgba(0, 255, 0, 1)', 'rgba(255, 99, 132, 1)', 'rgba(0, 0, 255, 0.7'],
|
||||||
borderWidth: 1
|
borderWidth: 1
|
||||||
}]
|
}]
|
||||||
},
|
};
|
||||||
options: {
|
|
||||||
|
// Create chart options
|
||||||
|
var options = {
|
||||||
responsive: true,
|
responsive: true,
|
||||||
scales: {
|
aspectRatio: 1,
|
||||||
x: {
|
plugins: {
|
||||||
grid: {
|
legend: {
|
||||||
display: false
|
position: 'bottom',
|
||||||
}
|
labels: {
|
||||||
},
|
boxWidth: 15
|
||||||
y: {
|
|
||||||
beginAtZero: true,
|
|
||||||
grid: {
|
|
||||||
color: 'rgba(0, 0, 0, 0.1)'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
// Get the canvas element and create the chart
|
||||||
|
var ctx = document.getElementById('userRechargesChart').getContext('2d');
|
||||||
|
var chart = new Chart(ctx, {
|
||||||
|
type: 'pie',
|
||||||
|
data: data,
|
||||||
|
options: options
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
</script>
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
var monthlySales = JSON.parse('{/literal}{$monthlySales|json_encode}{literal}');
|
|
||||||
|
|
||||||
var monthNames = [
|
|
||||||
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
|
||||||
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
|
|
||||||
];
|
|
||||||
|
|
||||||
var labels = [];
|
|
||||||
var data = [];
|
|
||||||
|
|
||||||
for (var i = 1; i <= 12; i++) {
|
|
||||||
var month = findMonthData(monthlySales, i);
|
|
||||||
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
|
|
||||||
data.push(month ? month.totalSales : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
var ctx = document.getElementById('salesChart').getContext('2d');
|
|
||||||
var chart = new Chart(ctx, {
|
|
||||||
type: 'bar',
|
|
||||||
data: {
|
|
||||||
labels: labels,
|
|
||||||
datasets: [{
|
|
||||||
label: 'Monthly Sales',
|
|
||||||
data: data,
|
|
||||||
backgroundColor: 'rgba(2, 10, 242)', // Customize the background color
|
|
||||||
borderColor: 'rgba(255, 99, 132, 1)', // Customize the border color
|
|
||||||
borderWidth: 1
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
responsive: true,
|
|
||||||
scales: {
|
|
||||||
x: {
|
|
||||||
grid: {
|
|
||||||
display: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
y: {
|
|
||||||
beginAtZero: true,
|
|
||||||
grid: {
|
|
||||||
color: 'rgba(0, 0, 0, 0.1)'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function findMonthData(monthlySales, month) {
|
|
||||||
for (var i = 0; i < monthlySales.length; i++) {
|
|
||||||
if (monthlySales[i].month === month) {
|
|
||||||
return monthlySales[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
// Get the data from PHP and assign it to JavaScript variables
|
|
||||||
var u_act = '{/literal}{$u_act}{literal}';
|
|
||||||
var c_all = '{/literal}{$c_all}{literal}';
|
|
||||||
var u_all = '{/literal}{$u_all}{literal}';
|
|
||||||
//lets calculate the inactive users as reported
|
|
||||||
var inactive = u_all - u_act;
|
|
||||||
|
|
||||||
// Create the chart data
|
|
||||||
var data = {
|
|
||||||
labels: ['Active Users', 'Inactive Users', 'Total Users'],
|
|
||||||
datasets: [{
|
|
||||||
label: 'User Recharges',
|
|
||||||
data: [parseInt(u_act), parseInt(inactive), parseInt(c_all)],
|
|
||||||
backgroundColor: ['rgba(4, 191, 13)', 'rgba(191, 35, 4)', 'rgba(0, 0, 255, 0.5'],
|
|
||||||
borderColor: ['rgba(0, 255, 0, 1)', 'rgba(255, 99, 132, 1)', 'rgba(0, 0, 255, 0.7'],
|
|
||||||
borderWidth: 1
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create chart options
|
|
||||||
var options = {
|
|
||||||
responsive: true,
|
|
||||||
aspectRatio: 1,
|
|
||||||
plugins: {
|
|
||||||
legend: {
|
|
||||||
position: 'bottom',
|
|
||||||
labels: {
|
|
||||||
boxWidth: 15
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get the canvas element and create the chart
|
|
||||||
var ctx = document.getElementById('userRechargesChart').getContext('2d');
|
|
||||||
var chart = new Chart(ctx, {
|
|
||||||
type: 'pie',
|
|
||||||
data: data,
|
|
||||||
options: options
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{/literal}
|
{/literal}
|
||||||
<script>
|
<script>
|
||||||
window.addEventListener('DOMContentLoaded', function () {
|
window.addEventListener('DOMContentLoaded', function() {
|
||||||
$.getJSON("./version.json?" + Math.random(), function (data) {
|
$.getJSON("./version.json?" + Math.random(), function(data) {
|
||||||
var localVersion = data.version;
|
var localVersion = data.version;
|
||||||
$('#version').html('Version: ' + localVersion);
|
$('#version').html('Version: ' + localVersion);
|
||||||
$.getJSON(
|
$.getJSON(
|
||||||
"https://raw.githubusercontent.com/hotspotbilling/phpnuxbill/master/version.json?" +
|
"https://raw.githubusercontent.com/hotspotbilling/phpnuxbill/master/version.json?" +
|
||||||
Math
|
Math
|
||||||
.random(),
|
.random(),
|
||||||
function (data) {
|
function(data) {
|
||||||
var latestVersion = data.version;
|
var latestVersion = data.version;
|
||||||
if (localVersion !== latestVersion) {
|
if (localVersion !== latestVersion) {
|
||||||
$('#version').html('Latest Version: ' + latestVersion);
|
$('#version').html('Latest Version: ' + latestVersion);
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "2024.2.5"
|
"version": "2024.2.5.1"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user