312c119c06
Entité WeighingTicket - Entité métier complète (#[Auditable], TimestampableBlamableTrait, relations ORM Client/Supplier/Site) + contrat de sérialisation à 3 maillons (weighing_ticket:read / :item:read + contextes par opération). - Getters calculés displayDate et plateFreeFormat (#[SerializedName]), sécurité view/manage, pas de Delete/archive. - Validation #[Assert\*] messages FR + #[Assert\Callback] RG-5.03 (->atPath()), libellé i18n audit.entity.logistique_weighingticket. - Repository : interface Domain + DoctrineWeighingTicketRepository (recherche + tri number DESC, deletedAt IS NULL). Dette site.code - Site.code mappé VARCHAR(8) (groupes read/write), dérivation auto au PrePersist (2 premiers chiffres du CP), UniqueConstraint uq_site_code. - Migration Version20260617160000 : ALTER COLUMN code SET NOT NULL + COMMENT. - Fixtures (codes 86/17/82) et SiteApiTest ajustés. Câblage - doctrine.yaml : mapping ORM du module Logistique (absent du scaffold ERP-181). - ColumnCommentsCatalog : site.code + table weighing_ticket. Specs M5 versionnées (spec-back / spec-front / prompts).
1.5 KiB
1.5 KiB
Prompt d'implémentation — M5 · ERP-186 (1.6) — Export XLSX des tickets de pesée
Projet Starseed. Tâche back. Lis CLAUDE.md, .claude/rules/backend.md et la spec : docs/specs/M5-tickets-pesee/spec-back.md (§ 4.5). Prérequis : ERP-185.
Mission
Endpoint d'export XLSX de toute la liste des tickets de pesée (bouton « Exporter »).
Étapes
- Endpoint
GET /api/weighing_tickets/export.xlsx: opération API Platform dédiée avec provider renvoyant un binaire (Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,Content-Disposition: attachment). - Respecter le site courant + les filtres actifs (mêmes critères que la liste, mais sans pagination → export complet).
- Colonnes : Numéro, Contrepartie (type + nom Client/Fournisseur/Autre), Date, Immatriculation, Poids vide, Poids plein, Poids net, DSD vide, DSD plein.
- Sécurité
is_granted('logistique.weighing_tickets.view'). - Whitelister cette opération dans
CollectionsArePaginatedTest::EXCLUDED(export complet légitime).
Garde-fous
declare(strict_types=1);; commentaires FR.- Utiliser le helper XLSX standard du projet (cf. exports M1→M4) — ne pas réinventer.
- Pas de controller custom sous
/apisanspriority: 1(préférer une opération API Platform).
Vérification
make test: test de l'export (colonnes + filtrage site) +CollectionsArePaginatedTestvert.make php-cs-fixer-allow-risky.- Téléchargement manuel → fichier ouvrable, colonnes correctes, poids net = plein − vide.