Voorstel van straatnamen bij het ingeven van een adres

0000002946     -      27-11-2019

Mercator 10.6 en hoger kunnen, bij het ingeven van een adres, een suggestielijst van straatnamen voorstellen. Om deze functionaliteit te activeren, ga naar het menu Tools > Opties > Andere …”Intellisense adressen in België” en zet op JA zetten (RESTAPI_AD).

Deze suggestielijst verschijnt zodra de ingegeven postcode is gevalideerd.

Het is zinvol om het ingave scherm zo te configureren dat de postcode eerst wordt ingegeven.

Deze functie wordt toegepast in de adressen van de bestanden en in de andere schermen (Acties, Verkopen, Aankopen) die de velden ADRESSE en CODEP bevatten.

Deze functie heeft enkel betrekking op België. Het systeem vereist een internet verbinding, aangezien het gebaseerd is op een webservice die door Mercator wordt gehost.

Voor Luxemburg, ga naar deze oplossing om de straatnamen te bekomen.

Hieronder een voorbeeld van de customizer SigCli die toelaat om na te kijken of bij het bewaren van een klantenfiche, de ingegeven straatnaam bestaat. De test wordt uitgevoerd met StartsWith zodat er een nummer na het ingeven van de straatnaam kan volgen. 

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))
            {
                 // Moet een klant uit België te zijn
                if (string.IsNullOrWhiteSpace(sigForm.CliRecord.C_CODEP))
                {
                    Dialogs.Stop("De postcode is leeg");
                    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("Error bij ophalen van straten: "
                                + (MercatorController.xFunctions.xAddressesLastError ?? "erreur inconnue")
                                + "\r\n Onmogelijk om gegevens na te kijken!");
                }
                else
                {
                    string adresse = sigForm.CliRecord.C_ADRESSE;
                    if (!allStreetsByPostalCodeRecords.Where(p => adresse.StartsWith(p.street, StringComparison.InvariantCultureIgnoreCase)).Any()
                        && !Dialogs.AnswerYesNo($"De straat \"{adresse}\" lijkt niet te bestaan.\r\nVerdergaan?"))
                    {
                        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;
        }

    }
}