Suggestion des noms de rue lors de la saisie d'une adresse

0000002946     -      27/11/2019

Mercator 10.6 ou ultérieur peut présenter une liste de suggestions de noms de rue lors de la saisie d'une adresse. Pour activer cette fonctionnalité, il faut mettre cette option à OUI : "Autres / Intellisense adresses en Belgique" (RESTAPI_AD).

Cette liste de suggestions est disponible dès que le code postal a été validé.

Il est opportun de paramétrer l'écran afin que le code postal soit saisi avant l'adresse.

Ceci s'applique aux adresses des signalétiques ainsi que celles des autres écrans (actions, ventes, achats) qui contiennent les champs ADRESSE et CODEP.

Cette fonctionnalité concerne uniquement à la Belgique. Le système requiert une connexion à internet, car il repose sur un webservice conçu et hébergé par Mercator.

En ce qui concerne le Luxembourg, il faut s'orienter vers cette solution pour obtenir les noms de rue.


Ci-dessous un exemple de customizer SigCli qui permet de vérifier, lors de la sauvegarde d'une fiche client, si la rue mentionnée existe. Le test est effectué avec adresse.StartsWith afin de permettre la saisie du numéro après le nom de la rue.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
using System.Windows.Forms;
using System.Threading.Tasks;

namespace SigCli
{
    public class Customizer : MercatorUi.ICustomizers.IFormValidateCustomizer
    {
        public bool FormValidateCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
            
            if ((string.IsNullOrWhiteSpace(sigForm.CliRecord.C_PAYS))
            || sigForm.CliRecord.C_PAYS.StartsWith("BE", StringComparison.InvariantCultureIgnoreCase))
            {
                // il devrait s'agir d'un client en Belgique
                if (string.IsNullOrWhiteSpace(sigForm.CliRecord.C_CODEP))
                {
                    Dialogs.Stop("Le code postal est vide !");
                    var textBoxCp = sigForm.MovableControls.Values.OfType<MercatorUi.MovableControls.MovableTextBox>()
                                                .Where(p => p.Source == "C_CODEP").FirstOrDefault();
                    if (textBoxCp != null)
                        MercatorUi._Divers.FocusError(textBoxCp);
                    return false;
                }
                var task = Task.Run(async () =>
                    await MercatorController.xFunctions.xAddressesStreetsByPostalCode(MercatorUi.Globals.Langue, sigForm.CliRecord.C_CODEP));
                var allStreetsByPostalCodeRecords = task.Result;
                if (allStreetsByPostalCodeRecords == null)
                {
                    MercatorUi.Dialogs.Stop("Erreur lors de la récupération des noms de rue : "
                                + (MercatorController.xFunctions.xAddressesLastError ?? "erreur inconnue")
                                + "\r\nImpossible d'effectuer la vérification !");
                }
                else
                {
                    string adresse = sigForm.CliRecord.C_ADRESSE;
                    if (!allStreetsByPostalCodeRecords.Where(p => adresse.StartsWith(p.street, StringComparison.InvariantCultureIgnoreCase)).Any()
                        && !Dialogs.AnswerYesNo($"Aucune rue \"{adresse}\" ne paraît exister.\r\nContinuer ?"))
                    {
                        var textBoxAd = sigForm.MovableControls.Values.OfType<MercatorUi.MovableControls.MovableTextBox>()
                                                   .Where(p => p.Source == "C_ADRESSE").FirstOrDefault();
                        if (textBoxAd != null)
                            MercatorUi._Divers.FocusError(textBoxAd);
                        return false;
                    }
                }
            }
            return true;
        }

    }
}