feat(commercial) : referentiel pays (country) en base + branchement front (ERP-116)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Has been cancelled
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled

Cree la table country (referentiel statique : code ISO alpha-2, name, position)
seedee avec 6 pays (France, Allemagne, Belgique, Espagne, Italie, Royaume-Uni),
exposee en lecture seule via /api/countries (GetCollection + Get, gating aligne
sur Bank). Perimetre minimal volontaire : aucune longueur bancaire/fiscale a ce
stade (iteration ulterieure du ticket).

Front : la liste des pays jusqu'ici codee en dur dans les 3 ecrans clients est
remplacee par le referentiel charge via useClientReferentials (value = nom du
pays, l'adresse continuant de stocker country en chaine libre : pas de FK ni de
migration de donnees). Consultation : options derivees de l'embed.

Garde-fous : country ajoute a ColumnCommentsCatalog + whitelist
EntitiesAreTimestampableBlamableTest ; tests API dedies (200/seed/405/403/401).
This commit is contained in:
Matthieu
2026-06-09 10:31:34 +02:00
parent d4a5df50a7
commit e40e053950
13 changed files with 426 additions and 17 deletions
@@ -30,6 +30,10 @@ describe('useClientReferentials.loadCommon (resilience ERP-102)', () => {
if (url === '/sites') {
return Promise.resolve({ member: [{ '@id': '/api/sites/1', name: 'Chatellerault', postalCode: '86100' }] })
}
if (url === '/countries') {
// Pays : value === label === name (l'adresse stocke le nom).
return Promise.resolve({ member: [{ '@id': '/api/countries/1', code: 'FR', name: 'France' }] })
}
return Promise.resolve({
member: [{ '@id': '/api/x/1', code: 'X', label: 'Libelle X' }],
})
@@ -44,6 +48,8 @@ describe('useClientReferentials.loadCommon (resilience ERP-102)', () => {
expect(refs.sites.value).toEqual([{ value: '/api/sites/1', label: '86' }])
expect(refs.tvaModes.value).toEqual([{ value: '/api/x/1', label: 'Libelle X' }])
expect(refs.banks.value).toEqual([{ value: '/api/x/1', label: 'Libelle X' }])
// Pays : value = nom du pays (et non l'IRI).
expect(refs.countries.value).toEqual([{ value: 'France', label: 'France' }])
// Seul le select en echec reste vide.
expect(refs.categories.value).toEqual([])