Add per-billet sales stats in stats tab
- Calculate sold count and revenue per billet from paid orders - Display 'Ventes par billet' card between KPIs and orders list Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -392,11 +392,20 @@ class AccountController extends AbstractController
|
||||
|
||||
$eventTotalHT = 0;
|
||||
$eventTotalSold = 0;
|
||||
$billetStats = [];
|
||||
$paidEventOrders = $em->getRepository(BilletBuyer::class)->findBy(['event' => $event, 'status' => BilletBuyer::STATUS_PAID]);
|
||||
foreach ($paidEventOrders as $paidOrder) {
|
||||
$eventTotalHT += $paidOrder->getTotalHT();
|
||||
foreach ($paidOrder->getItems() as $item) {
|
||||
$eventTotalSold += $item->getQuantity();
|
||||
$billetId = $item->getBillet()?->getId();
|
||||
if ($billetId) {
|
||||
if (!isset($billetStats[$billetId])) {
|
||||
$billetStats[$billetId] = ['name' => $item->getBilletName(), 'sold' => 0, 'revenue' => 0];
|
||||
}
|
||||
$billetStats[$billetId]['sold'] += $item->getQuantity();
|
||||
$billetStats[$billetId]['revenue'] += $item->getLineTotalHT();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -412,6 +421,7 @@ class AccountController extends AbstractController
|
||||
'event_total_ht' => $eventTotalHT / 100,
|
||||
'event_total_sold' => $eventTotalSold,
|
||||
'event_total_orders' => \count($paidEventOrders),
|
||||
'billet_stats' => $billetStats,
|
||||
'search_query' => $searchQuery,
|
||||
'breadcrumbs' => [
|
||||
self::BREADCRUMB_HOME,
|
||||
|
||||
@@ -482,6 +482,23 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if billet_stats|length > 0 %}
|
||||
<div class="card-brutal overflow-hidden mb-6">
|
||||
<div class="section-header">
|
||||
<h2 class="text-[10px] font-black uppercase tracking-widest text-white">Ventes par billet</h2>
|
||||
</div>
|
||||
<div class="p-6">
|
||||
{% for stat in billet_stats %}
|
||||
<div class="flex flex-wrap items-center gap-4 py-3 {{ not loop.last ? 'border-b border-gray-200' : '' }}">
|
||||
<span class="font-black uppercase text-sm flex-1">{{ stat.name }}</span>
|
||||
<span class="text-sm font-bold text-gray-600">{{ stat.sold }} vendu{{ stat.sold > 1 ? 's' : '' }}</span>
|
||||
<span class="font-black text-sm text-indigo-600">{{ (stat.revenue / 100)|number_format(2, ',', ' ') }} € HT</span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="card-brutal overflow-hidden">
|
||||
<div class="section-header flex justify-between items-center">
|
||||
<h2 class="text-[10px] font-black uppercase tracking-widest text-white">Commandes</h2>
|
||||
|
||||
Reference in New Issue
Block a user