4369c71706
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).
46 lines
1.9 KiB
PHP
46 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace DoctrineMigrations;
|
|
|
|
use Doctrine\DBAL\Schema\Schema;
|
|
use Doctrine\Migrations\AbstractMigration;
|
|
|
|
/**
|
|
* M5 — Tickets de pesee (ERP-183) : finalisation de site.code en NOT NULL.
|
|
*
|
|
* Cadencement en 2 temps (RETEX dev ERP-182, § 2.5) :
|
|
* - ERP-182 (Version20260617150000) a cree site.code NULLABLE + backfill +
|
|
* index unique uq_site_code, car l'entite Site ne mappait pas encore `code`
|
|
* (un persist ORM l'aurait omis -> violation NOT NULL au `make db-reset`).
|
|
* - ERP-183 mappe desormais Site::code (propriete + getter/setter + derivation
|
|
* auto du CP au prePersist) et le peuple dans SitesFixtures (86/17/82). La
|
|
* colonne est donc systematiquement renseignee : on peut poser le NOT NULL.
|
|
*
|
|
* Namespace racine `DoctrineMigrations` (regle ABSOLUE n°11), comme la migration
|
|
* de schema M5 dont celle-ci depend (elle doit s'executer apres).
|
|
*
|
|
* Le COMMENT ON COLUMN est repose avec le texte definitif (sans la mention
|
|
* « NOT NULL pose au ticket entite » devenue caduque), aligne sur l'entree
|
|
* `site.code` du ColumnCommentsCatalog (chemin schema:update de la BDD de test).
|
|
*/
|
|
final class Version20260617160000 extends AbstractMigration
|
|
{
|
|
public function getDescription(): string
|
|
{
|
|
return 'ERP-183 (M5) : site.code -> NOT NULL (la propriete ORM Site::code est desormais mappee et peuplee).';
|
|
}
|
|
|
|
public function up(Schema $schema): void
|
|
{
|
|
$this->addSql('ALTER TABLE site ALTER COLUMN code SET NOT NULL');
|
|
$this->addSql("COMMENT ON COLUMN site.code IS \$_\$Code court du site (ex. 86/17/82) — prefixe de numerotation des tickets de pesee (RG-5.02). Auto-derive des 2 premiers chiffres du CP a la creation, editable ensuite. Unique (uq_site_code).\$_\$");
|
|
}
|
|
|
|
public function down(Schema $schema): void
|
|
{
|
|
$this->addSql('ALTER TABLE site ALTER COLUMN code DROP NOT NULL');
|
|
}
|
|
}
|