feat(commercial) : saisie manuelle de l'adresse si la BAN ne trouve rien (ERP-119)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m5s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m9s

Le champ Adresse (MalioInputAutocomplete) passe en allow-create : le texte saisi
est conserve au blur/Entree meme sans suggestion BAN (sinon il etait efface).
Message « Adresse introuvable ? Saisissez-la directement. » dans la liste vide.
La ville reste pilotee par le code postal.
This commit is contained in:
2026-06-09 14:07:15 +02:00
parent f6be671230
commit 4d403ec7ed
3 changed files with 16 additions and 4 deletions
+1
View File
@@ -180,6 +180,7 @@
"postalCode": "Code postal", "postalCode": "Code postal",
"city": "Ville", "city": "Ville",
"street": "Adresse", "street": "Adresse",
"streetNotFound": "Adresse introuvable ? Saisissez-la directement.",
"streetComplement": "Adresse complémentaire", "streetComplement": "Adresse complémentaire",
"sites": "Sites", "sites": "Sites",
"contacts": "Contact(s) rattaché(s)", "contacts": "Contact(s) rattaché(s)",
@@ -123,10 +123,10 @@
<div class="col-span-2"> <div class="col-span-2">
<!-- Adresse : saisie assistee (BAN) en edition ; champ texte simple <!-- Adresse : saisie assistee (BAN) en edition ; champ texte simple
seulement en lecture seule (MalioInputAutocomplete ne reaffiche pas seulement en lecture seule (MalioInputAutocomplete ne reaffiche pas
sa valeur liee, il n'afficherait rien en readonly). Une erreur BAN sa valeur liee, il n'afficherait rien en readonly). allow-create :
ne bascule PAS en saisie libre : l'autocompletion reste montee et si la BAN ne propose rien (ou erreur), le texte saisi est CONSERVE au
chaque frappe relance la recherche (l'utilisateur peut aussi taper blur/Entree (saisie manuelle) — sinon il serait efface. La ville reste
une rue librement). --> pilotee par le code postal ; choisir une suggestion remplit rue+ville+CP. -->
<MalioInputAutocomplete <MalioInputAutocomplete
v-if="!readonly" v-if="!readonly"
:model-value="model.street" :model-value="model.street"
@@ -137,6 +137,8 @@
:readonly="readonly" :readonly="readonly"
:required="true" :required="true"
:error="errors?.street" :error="errors?.street"
:allow-create="true"
:no-results-text="t('commercial.clients.form.address.streetNotFound')"
@update:model-value="(v: string | number | null) => update('street', v === null ? null : String(v))" @update:model-value="(v: string | number | null) => update('street', v === null ? null : String(v))"
@search="onAddressSearch" @search="onAddressSearch"
@select="onAddressSelect" @select="onAddressSelect"
@@ -36,6 +36,7 @@ const MalioInputAutocompleteStub = defineComponent({
minSearchLength: { type: Number, default: 0 }, minSearchLength: { type: Number, default: 0 },
label: { type: String, default: '' }, label: { type: String, default: '' },
readonly: { type: Boolean, default: false }, readonly: { type: Boolean, default: false },
allowCreate: { type: Boolean, default: false },
}, },
emits: ['update:modelValue', 'search', 'select'], emits: ['update:modelValue', 'search', 'select'],
setup(props) { setup(props) {
@@ -78,6 +79,14 @@ describe('ClientAddressBlock — affichage de l\'adresse persistee', () => {
expect(values).toContain('8 Boulevard du Port') expect(values).toContain('8 Boulevard du Port')
}) })
// ERP-119 : saisie manuelle possible quand la BAN ne trouve rien -> allow-create
// (sans cette prop, MalioInputAutocomplete efface le texte non selectionne au blur).
it('active allow-create sur le champ Adresse (saisie manuelle libre)', () => {
const wrapper = mountBlock(null)
expect(wrapper.findComponent(MalioInputAutocompleteStub).props('allowCreate')).toBe(true)
})
}) })
/** /**