feat(back) : export tickets de pesée — colonnes Fournisseur/Client/Autre + Statut (ERP-193)

Remplace les colonnes « Type contrepartie » + « Contrepartie » par 3 colonnes
mutuellement exclusives Fournisseur / Client / Autre (miroir de la liste), et
ajoute une colonne Statut (« En attente » / « Terminée »).
This commit is contained in:
2026-06-24 15:15:25 +02:00
parent 819ac5e608
commit 31678cb716
2 changed files with 33 additions and 32 deletions
@@ -146,8 +146,11 @@ final class WeighingTicketExportController
{
return [
'Numéro',
'Type contrepartie',
'Contrepartie',
// Contrepartie eclatee en 3 colonnes mutuellement exclusives (miroir de
// la liste / repertoire, ERP-193) plutot que « type + nom ».
'Fournisseur',
'Client',
'Autre',
'Date',
'Immatriculation',
'Poids vide (kg)',
@@ -155,6 +158,7 @@ final class WeighingTicketExportController
'Poids net (kg)',
'DSD vide',
'DSD plein',
'Statut',
];
}
@@ -166,10 +170,14 @@ final class WeighingTicketExportController
private function buildRows(array $tickets): iterable
{
foreach ($tickets as $ticket) {
$type = $ticket->getCounterpartyType();
yield [
$ticket->getNumber(),
$this->counterpartyTypeLabel($ticket->getCounterpartyType()),
$this->counterpartyName($ticket),
$ticket->getNumber() ?? '',
// Une seule des 3 colonnes est renseignee selon le type (RG-5.03).
'FOURNISSEUR' === $type ? ($ticket->getSupplier()?->getCompanyName() ?? '') : '',
'CLIENT' === $type ? ($ticket->getClient()?->getCompanyName() ?? '') : '',
'AUTRE' === $type ? ($ticket->getOtherLabel() ?? '') : '',
$ticket->getDisplayDate()?->format('d/m/Y H:i') ?? '',
$ticket->getImmatriculation() ?? '',
$ticket->getEmptyWeight() ?? '',
@@ -177,36 +185,22 @@ final class WeighingTicketExportController
$ticket->getNetWeight() ?? '',
$ticket->getEmptyDsd() ?? '',
$ticket->getFullDsd() ?? '',
$this->statusLabel($ticket->getStatus()),
];
}
}
/**
* Libelle FR du type de contrepartie (RG-5.03). Renvoie la valeur brute pour
* une valeur inattendue (garde-fou : ne masque pas une donnee corrompue).
* Libelle FR du statut du cycle de vie (ERP-193) : « En attente » (DRAFT) ou
* « Terminée » (VALIDATED). Renvoie la valeur brute pour une valeur inattendue
* (garde-fou : ne masque pas une donnee corrompue).
*/
private function counterpartyTypeLabel(?string $type): string
private function statusLabel(string $status): string
{
return match ($type) {
'CLIENT' => 'Client',
'FOURNISSEUR' => 'Fournisseur',
'AUTRE' => 'Autre',
default => $type ?? '',
};
}
/**
* Nom de la contrepartie selon le type (RG-5.03) : raison sociale du client,
* du fournisseur, ou libelle libre « Autre ». Client / Supplier sont
* fetch-joines par le repository (anti N+1, § 4.0).
*/
private function counterpartyName(WeighingTicket $ticket): string
{
return match ($ticket->getCounterpartyType()) {
'CLIENT' => $ticket->getClient()?->getCompanyName() ?? '',
'FOURNISSEUR' => $ticket->getSupplier()?->getCompanyName() ?? '',
'AUTRE' => $ticket->getOtherLabel() ?? '',
default => '',
return match ($status) {
WeighingTicket::STATUS_DRAFT => 'En attente',
WeighingTicket::STATUS_VALIDATED => 'Terminée',
default => $status,
};
}