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:
+22
-28
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user