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
@@ -36,7 +36,7 @@ class SitesFixtures extends Fixture
public function load(ObjectManager $manager): void
{
// Chatellerault : bleu Starseed.
// Chatellerault : bleu Starseed. Code 86 (prefixe TP — RG-5.02).
$this->ensureSite(
$manager,
name: 'Chatellerault',
@@ -45,11 +45,12 @@ class SitesFixtures extends Fixture
postalCode: '86100',
city: 'Châtellerault',
color: '#056CF2',
code: '86',
);
// Saint-Jean : jaune vif. Le nom du site (identifier) ne reflete
// pas la ville reelle (Fontenet) — c'est une nomenclature interne
// client.
// client. Code 17 (prefixe TP — RG-5.02).
$this->ensureSite(
$manager,
name: 'Saint-Jean',
@@ -58,9 +59,10 @@ class SitesFixtures extends Fixture
postalCode: '17400',
city: 'Fontenet',
color: '#F3CB00',
code: '17',
);
// Pommevic : vert clair.
// Pommevic : vert clair. Code 82 (prefixe TP — RG-5.02).
$this->ensureSite(
$manager,
name: 'Pommevic',
@@ -69,6 +71,7 @@ class SitesFixtures extends Fixture
postalCode: '82400',
city: 'Pommevic',
color: '#74BF04',
code: '82',
);
$manager->flush();
@@ -91,11 +94,13 @@ class SitesFixtures extends Fixture
string $postalCode,
string $city,
string $color,
string $code,
): Site {
$site = $this->siteRepository->findByName($name);
if (null === $site) {
$site = new Site($name, $street, $complement, $postalCode, $city, $color);
$site->setCode($code);
$manager->persist($site);
return $site;
@@ -106,6 +111,7 @@ class SitesFixtures extends Fixture
$site->setPostalCode($postalCode);
$site->setCity($city);
$site->setColor($color);
$site->setCode($code);
return $site;
}