Update to Dashboard Preorder statistics

This commit is contained in:
Frank Schubert
2024-01-15 18:16:20 +01:00
parent 686082a62d
commit 898e35f830
2 changed files with 152 additions and 12 deletions

View File

@@ -159,22 +159,76 @@ $chartColors = [
</div>
<div class="col-12 col-xl-6">
<table>
<?php $i=0; foreach($partner_orders as $provider => $count): ?>
<?php $i=0; foreach($partner_orders as $partner => $count): ?>
<tr style="border-bottom: 1px solid <?=$chartColors[$i]?>;">
<td><span style="background-color: <?=$chartColors[$i]?>; color: <?=$chartColors[$i]?>">##</span></td>
<td class="pl-2 pr-2" style="white-space: nowrap;"><?=round(($count / $total_orders) * 100, 1)?>% (<?=($count)?>)</td>
<td title="<?=$provider?>" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"><?=$this->strtrim($provider,22)?></td>
<td title="<?=$partner?>" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"><?=$this->strtrim($partner,22)?></td>
</tr>
<?php $i++; endforeach; ?>
</table>
</div>
<?php else: ?>
<i>Keine Aktiven Anschlüsse</i>
<i>Keine Bestellungen</i>
<?php endif; ?>
</div>
</div>
</div>
</div>
<div class="col-12 col-xl-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Bestellstatus je Partner</h4>
<hr />
<div class="row">
<?php if(count($partner_orders_by_status)): ?>
<?php $i=0; foreach($partner_orders_by_status as $partner => $status): ?>
<div class="col-lg-12">
<div class="card">
<div class="card-header no-decoration">
<span class="card-title" title="<?=$partner?>"><?=$this->strtrim($partner, 200)?></span>
</div>
<div class="card-body">
<div class="row">
<div class="col-12 col-xl-6">
<canvas id="partner-status-<?=$i?>"></canvas>
</div>
<div class="col-12 col-xl-6">
<table>
<?php $j=0; foreach($status as $status_id => $count): ?>
<?php if($status_id == "total") continue; ?>
<tr style="border-bottom: 1px solid <?=$chartColors[$j]?>;">
<td><span style="background-color: <?=$chartColors[$j]?>; color: <?=$chartColors[$j]?>">##</span></td>
<td class="pl-2 pr-2" style="white-space: nowrap;"><?=round(($count / $status['total']) * 100, 1)?>% (<?=($count)?>)</td>
<td title="<?=$stati[$status_id]["code"]?> - <?=$stati[$status_id]["name"]?>" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
<?=$stati[$status_id]["code"]." - ".$stati[$status_id]["name"]?>
</td>
</tr>
<?php $j++; endforeach; ?>
</table>
</div>
</div>
</div>
</div>
</div>
<?php if($i % 2 != 0): ?>
</div>
<div class="row">
<?php endif; ?>
<?php $i++; endforeach; ?>
<?php if($i % 2 == 0): ?>
</div>
<?php endif; ?>
<?php else: ?>
<i>Keine Bestellungen</i>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
@@ -301,6 +355,56 @@ $chartColors = [
<?php endif; ?>
var status = [];
<?php foreach(PreorderstatusModel::getAll() as $status):?>
status[<?=$status->id?>] = {"code": "<?=$status->code?>", "name": "<?=$status->name?>"};
<?php endforeach; ?>
var productCharts = [];
<?php $i=0; foreach($partner_orders_by_status as $partner => $status): ?>
productCharts[<?=$i?>] = new Chart(document.getElementById('partner-status-<?=$i?>').getContext('2d'), {
type: 'doughnut',
data: {
labels: [
<?php foreach($status as $status_id => $count): ?>
<?php if($status_id == "total") continue; ?>
<?=$stati[$status_id]->code?> - <?=$stati[$status_id]->name?> " (<?=round($count / $status["total"] * 100, 1)?>%)",
<?php endforeach; ?>
],
datasets: [{
data: [
<?php foreach($status as $status_id => $count): ?>
<?php if($status_id == "total") continue; ?>
<?=$count?>,
<?php endforeach; ?>
],
backgroundColor: [
"<?=implode('","', $chartColors)?>"
],
/*borderColor: [
"#d54369",
"#4592e0"
],*/
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
},
legend: false
}
});
<?php $i++; endforeach; ?>
});
</script>

View File

@@ -61,6 +61,7 @@ class DashboardController extends mfBaseController {
$status_connected = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0, "status_code" => 500]);
$partner_orders = $this->getPartnerOrderCount($campaign_ids);
$partner_orders_by_status = $this->getPartnerOrdersByStatus($campaign_ids);
} else {
$campaigns = PreordercampaignModel::search(["owner_id" => $this->me->address_id]);
@@ -78,7 +79,9 @@ class DashboardController extends mfBaseController {
$status_connected_multi = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0, "status_code" => 245]);
$status_connected = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0, "status_code" => 500]);
$partner_orders = $this->getPartnerOrderCount($campaign_ids);
$partner_orders_by_status = $this->getPartnerOrdersByStatus($campaign_ids);
}
$total_orders = $partner_orders["total"];
@@ -86,6 +89,13 @@ class DashboardController extends mfBaseController {
//var_dump($partner_orders);exit;
$stati = [];
foreach(PreorderstatusModel::getAll() as $status) {
$stati[$status->id] = ["code" => $status->code, "name" => $status->name];
}
$this->layout()->set("stati", $stati);
$this->layout()->set("max_connections", $max_connections);
$this->layout()->set("count_orders", $count_orders);
$this->layout()->set("weekly_orders", $weekly_orders);
@@ -95,6 +105,7 @@ class DashboardController extends mfBaseController {
$this->layout()->set("status_connected", $status_connected);
$this->layout()->set("partner_orders", $partner_orders);
$this->layout()->set("total_orders", $total_orders);
$this->layout()->set("partner_orders_by_status", $partner_orders_by_status);
$this->layout()->set("campaigns", $campaigns);
$this->layout()->set("campaign_id", $r->campaign_id);
@@ -118,19 +129,24 @@ class DashboardController extends mfBaseController {
$orders = [];
$totals = 0;
foreach(AddressModel::search(["addresstype" => ["salespartner"]]) as $partner) {
$count = PreorderModel::count(["partner_id" => $partner->id, "preordercampaign_id" => $preordercampaign_id, "deleted" => 0]);
if($count) {
if(!array_key_exists($partner->getCompanyOrName(), $orders)) {
$orders[$partner->getCompanyOrName()] = $count;
$sql = "SELECT COUNT(Preorder.id) as cnt, IF(Address.company IS NOT NULL AND Address.company <> '', Address.company, CONCAT(Address.firstname, ' ', Address.lastname)) as partner FROM Preorder
LEFT JOIN Address ON (Preorder.partner_id = Address.id)
LEFT JOIN Addresstype ON (Addresstype.address_id = Address.id AND Addresstype.type='salespartner')
WHERE Preorder.deleted = 0 AND Preorder.preordercampaign_id IN (".implode(",", $preordercampaign_id).")
GROUP BY Address.id
";
$this->log->debug($sql);
$res = $this->db()->query($sql);
if($this->db()->num_rows($res)) {
while($data = $this->db()->fetch_object($res)) {
if($data->partner) {
$orders[$data->partner] = $data->cnt;
} else {
$orders[$partner->getCompanyOrName()] += $count;
$orders["Kein Partner"] = $data->cnt;
}
$totals += $count;
$totals += $data->cnt;
}
}
arsort($orders);
$orders["total"] = $totals;
return $orders;
@@ -161,6 +177,26 @@ class DashboardController extends mfBaseController {
//var_dump($orders);exit;
}
private function getPartnerOrdersByStatus($preordercampaign_id = []) {
$orders = [];
foreach(PreorderModel::search(["preordercampaign_id" => $preordercampaign_id, "deleted" => 0]) as $preorder) {
$name = $preorder->partner->getCompanyOrName();
if(!$name) $name = "Kein Partner";
if(!array_key_exists($name, $orders)) {
$orders[$name] = [];
$orders[$name]["total"] = 0;
}
if(!array_key_exists($preorder->status->id, $orders[$name])) {
$orders[$name][$preorder->status->id] = 0;
}
$orders[$name][$preorder->status->id]++;
$orders[$name]["total"]++;
}
//var_dump($orders);exit;
return $orders;
}
protected function pdfAction() {
$order = new Order(7);
$owner = new Address(1);