feat(commercial) : aligne la liste des pays fournisseurs sur le referentiel Country (ERP-116)
Les ecrans fournisseurs (new / edit / consultation) utilisaient une liste de pays codee en dur (France, Espagne) au lieu du referentiel /countries deja branche cote clients. Resultat : la Suisse et les autres pays du referentiel n'apparaissaient pas dans les adresses fournisseurs. useSupplierReferentials charge desormais /countries (miroir de useClientReferentials), et les 3 pages derivent countryOptions du referentiel (France garantie en tete sur new, union avec l'embed sur edit, valeurs des adresses sur la consultation).
This commit is contained in:
@@ -51,6 +51,11 @@ interface ReferentialMember extends HydraMember {
|
|||||||
label: string
|
label: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface CountryMember extends HydraMember {
|
||||||
|
code: string
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
|
||||||
const LD_JSON_HEADERS = { Accept: 'application/ld+json' }
|
const LD_JSON_HEADERS = { Accept: 'application/ld+json' }
|
||||||
|
|
||||||
export function useSupplierReferentials() {
|
export function useSupplierReferentials() {
|
||||||
@@ -62,6 +67,7 @@ export function useSupplierReferentials() {
|
|||||||
const paymentDelays = ref<RefOption[]>([])
|
const paymentDelays = ref<RefOption[]>([])
|
||||||
const paymentTypes = ref<PaymentTypeOption[]>([])
|
const paymentTypes = ref<PaymentTypeOption[]>([])
|
||||||
const banks = ref<RefOption[]>([])
|
const banks = ref<RefOption[]>([])
|
||||||
|
const countries = ref<RefOption[]>([])
|
||||||
|
|
||||||
/** Recupere une collection complete (pagination desactivee) en Hydra. */
|
/** Recupere une collection complete (pagination desactivee) en Hydra. */
|
||||||
async function fetchAll<T extends HydraMember>(
|
async function fetchAll<T extends HydraMember>(
|
||||||
@@ -103,6 +109,13 @@ export function useSupplierReferentials() {
|
|||||||
.then((types) => { paymentTypes.value = types.map(t => ({ value: t['@id'], label: t.label, code: t.code })) }),
|
.then((types) => { paymentTypes.value = types.map(t => ({ value: t['@id'], label: t.label, code: t.code })) }),
|
||||||
fetchAll<ReferentialMember>('/banks')
|
fetchAll<ReferentialMember>('/banks')
|
||||||
.then((banksList) => { banks.value = banksList.map(b => ({ value: b['@id'], label: b.label })) }),
|
.then((banksList) => { banks.value = banksList.map(b => ({ value: b['@id'], label: b.label })) }),
|
||||||
|
// Pays (ERP-116) : la valeur d'option est le NOM du pays (et non l'IRI),
|
||||||
|
// car l'adresse stocke `country` en chaine libre (« France »...). On
|
||||||
|
// conserve ainsi la compatibilite avec les adresses existantes sans FK
|
||||||
|
// ni migration de donnees a ce stade. value === label. Aligne sur les
|
||||||
|
// clients (`useClientReferentials`) pour une liste de pays identique.
|
||||||
|
fetchAll<CountryMember>('/countries')
|
||||||
|
.then((list) => { countries.value = list.map(c => ({ value: c.name, label: c.name })) }),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,6 +126,7 @@ export function useSupplierReferentials() {
|
|||||||
paymentDelays,
|
paymentDelays,
|
||||||
paymentTypes,
|
paymentTypes,
|
||||||
banks,
|
banks,
|
||||||
|
countries,
|
||||||
loadCommon,
|
loadCommon,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -515,10 +515,19 @@ const contactOptions = computed<RefOption[]>(() =>
|
|||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
|
|
||||||
const countryOptions: RefOption[] = [
|
// Pays : referentiel `country` charge via l'API (ERP-116), aligne sur l'ecran
|
||||||
{ value: 'France', label: 'France' },
|
// client. On merge la valeur deja stockee sur chaque adresse (embed) — comme les
|
||||||
{ value: 'Espagne', label: 'Espagne' },
|
// autres selects de cet ecran — pour ne pas vider le select si `/countries`
|
||||||
]
|
// echoue (resilience ERP-102) ou si un pays historique n'est plus au referentiel.
|
||||||
|
const embedCountryOptions = computed<RefOption[]>(() =>
|
||||||
|
mergeOptions([], (supplier.value?.addresses ?? [])
|
||||||
|
.map(a => a.country)
|
||||||
|
.filter((c): c is string => !!c)
|
||||||
|
.map(c => ({ value: c, label: c }))),
|
||||||
|
)
|
||||||
|
const countryOptions = computed<RefOption[]>(() =>
|
||||||
|
mergeOptions(referentials.countries.value, embedCountryOptions.value),
|
||||||
|
)
|
||||||
|
|
||||||
// Selects comptables : referentiel UNION valeur courante de l'embed (libelle).
|
// Selects comptables : referentiel UNION valeur courante de l'embed (libelle).
|
||||||
const tvaModeOptions = computed(() => mergeOptions(referentials.tvaModes.value, referentialOptionOf(supplier.value?.tvaMode)))
|
const tvaModeOptions = computed(() => mergeOptions(referentials.tvaModes.value, referentialOptionOf(supplier.value?.tvaMode)))
|
||||||
|
|||||||
@@ -361,10 +361,16 @@ const allSiteOptions = computed<SelectOption[]>(() =>
|
|||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
|
|
||||||
const countryOptions: SelectOption[] = [
|
// Pays (consultation, lecture seule) : derive des adresses du fournisseur, comme
|
||||||
{ value: 'France', label: 'France' },
|
// l'ecran client. Le referentiel `country` (ERP-116) n'est pas charge ici, l'ecran
|
||||||
{ value: 'Espagne', label: 'Espagne' },
|
// n'affiche que les valeurs deja stockees.
|
||||||
]
|
const countryOptions = computed<SelectOption[]>(() =>
|
||||||
|
[...new Set(
|
||||||
|
(supplier.value?.addresses ?? [])
|
||||||
|
.map(a => a.country)
|
||||||
|
.filter((c): c is string => !!c),
|
||||||
|
)].map(c => ({ value: c, label: c })),
|
||||||
|
)
|
||||||
|
|
||||||
// Selects comptables : libelle issu de l'embed (option unique ou vide).
|
// Selects comptables : libelle issu de l'embed (option unique ou vide).
|
||||||
const tvaModeOptions = computed(() => referentialOptionOf(supplier.value?.tvaMode))
|
const tvaModeOptions = computed(() => referentialOptionOf(supplier.value?.tvaMode))
|
||||||
|
|||||||
@@ -646,11 +646,15 @@ const contactOptions = computed<RefOption[]>(() =>
|
|||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
|
|
||||||
// Pays disponibles (France preselectionnee par defaut sur chaque adresse).
|
// Pays : referentiel `country` charge via l'API (ERP-116), aligne sur l'ecran
|
||||||
const countryOptions: RefOption[] = [
|
// client. France garantie en tete pour rester preselectionnable par defaut sur
|
||||||
{ value: 'France', label: 'France' },
|
// chaque adresse meme si `/countries` echoue (resilience ERP-102).
|
||||||
{ value: 'Espagne', label: 'Espagne' },
|
const countryOptions = computed<RefOption[]>(() => {
|
||||||
]
|
const list = referentials.countries.value
|
||||||
|
return list.some(c => c.value === 'France')
|
||||||
|
? list
|
||||||
|
: [{ value: 'France', label: 'France' }, ...list]
|
||||||
|
})
|
||||||
|
|
||||||
// « + Adresse » desactive tant que la derniere adresse n'est pas valide.
|
// « + Adresse » desactive tant que la derniere adresse n'est pas valide.
|
||||||
const canAddAddress = computed(() => {
|
const canAddAddress = computed(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user