Files
2026-04-28 21:15:09 +03:00

161 lines
5.5 KiB
PHP

<?php
$data = j(setting("ndtCalculation"));
$stats = [];
$statsData = [];
foreach($data AS $d) {
foreach($d AS $field => $value) {
if(strpos($field, "backlog") !== false) {
$field = str_replace("_backlog", "", $field);
$field = strtoupper($field);
if(!isset($stats[$field])) {
$stats[$field] = 0;
}
if($value>0) {
$stats[$field] += $value;
}
}
}
}
foreach($stats AS $log => $value) {
$statsData[] = [
'log_name' => $log,
'val' => $value,
];
}
$labels = implode("','",array_keys($stats));
$datas = implode(",",array_values($stats));
$totalCount = array_sum(array_values($stats));
?>
<div class="row">
<div class="col-md-6">
<canvas class="d-none" id="ndtBacklogStats"></canvas>
<div id="ndtBacklogChart"></div>
</div>
<div class="col-md-6">
<table class="table table-sm table-bordered table-striped">
<tr>
<th>{{e2("Status")}}</th>
<th>{{e2("Count")}}</th>
<th>{{e2("%")}}</th>
</tr>
<?php foreach($stats AS $label => $stat) {
?>
<tr>
<td>{{$label}}</td>
<td>{{$stat}}</td>
<td>%{{round($stat * 100 / $totalCount, 0)}}</td>
</tr>
<?php
} ?>
<tr>
<th>{{e2("Total")}}</th>
<th>{{$totalCount}}</th>
<th>%100</th>
</tr>
</table>
</div>
</div>
<script>
$(() => {
const ndtBacklogData = <?php echo json_encode_tr($statsData) ?>;
$('#ndtBacklogChart').dxPieChart({
type: 'doughnut',
// palette: 'Pastel',
dataSource: ndtBacklogData,
// title: '{{e2("Spool List")}}',
tooltip: {
enabled: true,
// format: 'millions',
customizeTooltip(arg) {
console.log(arg);
return {
text: `${arg.valueText} - ${(arg.percent * 100).toFixed(2)}%`,
};
},
},
legend: {
horizontalAlignment: 'center',
verticalAlignment: 'top',
margin: 0,
visible: true
},
export: {
enabled: true,
},
series: [{
argumentField: 'log_name',
label: {
visible: true,
connector: {
visible: true,
},
customizeText: function (arg) {
return arg.percentText;
}
},
}],
});
});
</script>
<script>
const ctx2 = document.getElementById('ndtBacklogStats');
var options = {
tooltips: {
enabled: true
},
plugins: {
datalabels: {
formatter: (value, ctx) => {
let sum = ctx.dataset._meta[0].total;
let percentage = (value * 100 / sum).toFixed(2) + "%";
return percentage;
},
color: '#fff',
}
}
};
new Chart(ctx2, {
type: 'doughnut',
data: {
labels: ['<?php echo $labels ?>'],
datasets: [{
label: '# {{e2("Count")}}',
data: [<?php echo $datas ?>],
borderWidth: 1
}]
},
options: options
});
</script>