d16c7e5541
Onglet « Carte » sur les fiches Client et Fournisseur (visible sous field_sales.tours.view et module actif) : tous les points géolocalisés du Tiers sur une carte Leaflet, pin ajustable (PATCH lat/lng + geoManual), adresses non géolocalisées listées à part. Composant réutilisable TierAddressMap. Écran de planification : point de départ choisi parmi les sites de l'utilisateur (MalioSelect) ou en adresse libre (autocomplete BAN), marqueur « maison » sur la carte et trace partant du départ. Le mode n'est dérivé du back qu'au premier chargement (les sauvegardes ne réécrasent plus le choix). Suppression de l'ajout d'étape « point libre » (bouton + modale) ; l'affichage des étapes custom existantes est conservé.
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
/**
|
|
* Helpers purs du « Point de départ » d'une tournée (M6.5+).
|
|
*
|
|
* Le point de départ peut être choisi parmi les sites de l'utilisateur ou saisi
|
|
* en adresse libre (autocomplete BAN). Ces helpers ne touchent ni à l'API ni à
|
|
* l'état réactif : ils formatent des libellés à partir d'un site, donc testables
|
|
* unitairement (cf. startPoint.spec.ts). La composition du libellé stocké
|
|
* (`startLabel`) reste dans le composant car elle dépend d'i18n (préfixe
|
|
* « Site de … »).
|
|
*/
|
|
|
|
/** Sous-ensemble d'un site nécessaire au formatage du point de départ. */
|
|
export interface StartSite {
|
|
name: string
|
|
street: string
|
|
postalCode: string
|
|
city: string
|
|
/** Adresse complète reconstituée côté backend (peut être absente). */
|
|
fullAddress?: string
|
|
}
|
|
|
|
/**
|
|
* Adresse postale complète d'un site (« rue, CP ville »), à géocoder via la BAN.
|
|
* Utilise `fullAddress` du backend si présent, sinon recompose depuis les champs.
|
|
*/
|
|
export function siteFullAddress(site: StartSite): string {
|
|
if (site.fullAddress && site.fullAddress.trim() !== '') {
|
|
return site.fullAddress.trim()
|
|
}
|
|
const cityLine = [site.postalCode, site.city].filter(Boolean).join(' ')
|
|
return [site.street, cityLine].filter(Boolean).join(', ')
|
|
}
|
|
|
|
/** Libellé d'une option du select de sites : « {nom} — {code postal} ». */
|
|
export function siteOptionLabel(site: Pick<StartSite, 'name' | 'postalCode'>): string {
|
|
return `${site.name} — ${site.postalCode}`
|
|
}
|