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).
This commit is contained in:
Matthieu
2026-06-17 17:46:20 +02:00
parent f6d39cb187
commit 4369c71706
20 changed files with 2006 additions and 10 deletions
+11
View File
@@ -138,6 +138,17 @@ doctrine:
dir: '%kernel.project_dir%/src/Module/Transport/Domain/Entity'
prefix: 'App\Module\Transport\Domain\Entity'
alias: Transport
# Mapping inconditionnel du module Logistique (meme logique que Transport) :
# la table weighing_ticket (tickets de pesee M5) creee par la migration
# Version20260617150000 doit etre connue de l'ORM, sinon schema:update la
# drope sur la base de test. L'activation fonctionnelle passe par
# config/modules.php.
Logistique:
type: attribute
is_bundle: false
dir: '%kernel.project_dir%/src/Module/Logistique/Domain/Entity'
prefix: 'App\Module\Logistique\Domain\Entity'
alias: Logistique
controller_resolver:
auto_mapping: false