feat(commercial) : types d'adresse Courtier et Distributeur (ERP-119)

Ajoute deux types d'adresse autonomes (exclusifs, comme la Prospection) :
- back : colonnes is_broker / is_distributor sur client_address (migration
  modulaire, append + 2 CHECK miroir d'exclusivite + COMMENT ON COLUMN),
  proprietes ClientAddress (getters Groups + SerializedName), Callback
  validateExclusiveAddressTypes, validateAddressTypeRequired etendue,
  catalogue des commentaires SQL mis a jour.
- front : type AddressType (+broker/distributor), drapeaux, mappers, option
  du select Type d'adresse, labels i18n, payloads create/edit et lecture.
- tests back (acceptation + exclusivite + contrat de serialisation) et front.
This commit is contained in:
2026-06-09 13:37:24 +02:00
parent 982f501b94
commit f6be671230
14 changed files with 314 additions and 52 deletions
@@ -59,12 +59,18 @@ final class ClientSerializationContractTest extends AbstractCommercialApiTestCas
self::assertArrayHasKey('isProspect', $address);
self::assertArrayHasKey('isDelivery', $address);
self::assertArrayHasKey('isBilling', $address);
// Memes garanties pour les types Courtier / Distributeur (ERP-119, meme
// pattern getter + SerializedName).
self::assertArrayHasKey('isBroker', $address);
self::assertArrayHasKey('isDistributor', $address);
// L'adresse seedee est livraison + facturation (prospect exclusif, RG-1.06).
// Prouve qu'un booleen `true` est bien serialise (le bug masquait meme les true).
self::assertFalse($address['isProspect']);
self::assertTrue($address['isDelivery']);
self::assertTrue($address['isBilling']);
self::assertFalse($address['isBroker']);
self::assertFalse($address['isDistributor']);
}
// === #80 — Gating des RIB par accounting.view ===