diff --git a/frontend/modules/commercial/pages/clients/[id]/index.vue b/frontend/modules/commercial/pages/clients/[id]/index.vue index a16e73c..1951700 100644 --- a/frontend/modules/commercial/pages/clients/[id]/index.vue +++ b/frontend/modules/commercial/pages/clients/[id]/index.vue @@ -171,7 +171,7 @@ :model-value="view.draft" :title="t('commercial.clients.form.address.title', { n: index + 1 })" :category-options="view.categoryOptions" - :site-options="view.siteOptions" + :site-options="allSiteOptions" :contact-options="contactOptions" :country-options="countryOptions" readonly @@ -325,6 +325,7 @@ const route = useRoute() const router = useRouter() const toast = useToast() const { can, canAny } = usePermissions() +const authStore = useAuthStore() // Gating de la route : la consultation exige `view`. Usine (sans view) est // redirige vers le repertoire (lui-meme protege). Cf. matrice § 2.7. @@ -391,6 +392,18 @@ const accounting = computed(() => mapAccountingDraft(client.value ?? ({} as Clie const mainCategoryOptions = computed(() => categoryOptionsOf(client.value?.categories)) const contactOptions = computed(() => contactOptionsOf(client.value?.contacts)) +// Liste COMPLETE des sites disponibles, issue de /api/me (groupe me:read — donc +// pas de 403 pour les roles metier, contrairement a GET /sites). Libelle = numero +// de departement (2 premiers chiffres du code postal). Permet d'afficher TOUJOURS +// toutes les cases « Sites » (86 / 17 / 82) dans le bloc adresse, meme celles non +// rattachees a l'adresse consultee (les rattachees restent cochees via siteIris). +const allSiteOptions = computed(() => + (authStore.user?.sites ?? []).map(s => ({ + value: `/api/sites/${s.id}`, + label: (s.postalCode ?? '').slice(0, 2), + })), +) + const relationOptions = computed(() => [ { value: 'distributeur', label: t('commercial.clients.form.main.relationDistributor') }, { value: 'courtier', label: t('commercial.clients.form.main.relationBroker') },