Files
Starseed/docs/specs/M5-tickets-pesee/prompts/ERP-186-export-xlsx.md
T
Matthieu 312c119c06 feat(logistique) : entité WeighingTicket + dette site.code (ERP-183)
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).
2026-06-18 14:37:16 +02:00

1.5 KiB
Raw Blame History

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

  1. 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).
  2. Respecter le site courant + les filtres actifs (mêmes critères que la liste, mais sans pagination → export complet).
  3. Colonnes : Numéro, Contrepartie (type + nom Client/Fournisseur/Autre), Date, Immatriculation, Poids vide, Poids plein, Poids net, DSD vide, DSD plein.
  4. Sécurité is_granted('logistique.weighing_tickets.view').
  5. 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 /api sans priority: 1 (préférer une opération API Platform).

Vérification

  • make test : test de l'export (colonnes + filtrage site) + CollectionsArePaginatedTest vert.
  • make php-cs-fixer-allow-risky.
  • Téléchargement manuel → fichier ouvrable, colonnes correctes, poids net = plein vide.