U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Automatisch een fiche laten invullen via het BTW-nummer in MercatorPenguin

0000002875     -      29-03-2021

De code hieronder laat toe om een leveranciersfiche automatisch in te vullen in MercatorPenguin door enkel het BTW-nummer in te voeren. Deze code is gekoppeld aan de bundel 'Consultatie Leveranciers' die deze elementen van tevoren bevat:

  1. Penguin-parametrisatie van het informatiebestand leveranciers:
    <StackLayout Margin="10, 10, 10, 10">
    <m:EditEntry Placeholder="Naam" Source="f_nom" BackgroundColor="Gray" TextColor="Blue" HorizontalOptions="FillAndExpand" />
    <m:EditEntry Placeholder="Adres"  Source="f_adresse" HorizontalOptions="FillAndExpand" />
    <m:EditEntry Placeholder="Adreslijn 2"  Source="f_adresse2" HorizontalOptions="FillAndExpand" />
    <StackLayout Orientation="Horizontal">
    <m:EditEntry Placeholder="Postcode" WidthRequest="120" Source="f_codep" HorizontalOptions="End"  />
    <m:EditEntry Placeholder="Gemeente"  Source="f_ville" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    <StackLayout Orientation="Horizontal">
    <Label Text="Taal" Font="Medium" Margin="0,0,0,0" VerticalOptions="Center" WidthRequest="50" />
    <m:EditPicker Source="f_langue" HorizontalOptions="FillAndExpand" />
    <Label Text="Munt" Font="Medium" Margin="10,0,0,0" VerticalOptions="Center" WidthRequest="50" />
    <m:EditPicker Source="f_id_dev" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    <StackLayout Orientation="Horizontal">
    <Label Text="Ond. Nummer" Font="Medium" Margin="0,0,0,0" VerticalOptions="Center" WidthRequest="90" />
    <m:EditEntry Source="f_num_tva" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    <StackLayout Orientation="Horizontal">
    <Label Text="Regime" Font="Medium" Margin="0,0,0,0" VerticalOptions="Center" WidthRequest="90" />
    <m:EditPicker Source="f_regime" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    <m:EditEntry Placeholder="Bankrekening" Source="f_num_bqe" HorizontalOptions="FillAndExpand" />
    <m:EditEntry Placeholder="Email" Source="f_email" HorizontalOptions="FillAndExpand" />

    <StackLayout Orientation="Horizontal">
    <Label Text="Korting" Font="Medium" Margin="0,0,0,0" VerticalOptions="Center" WidthRequest="90" />
    <m:EditEntry Source="f_escpte" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    </StackLayout>
  2. Bundel lijst "Consultatie leveranciers edit (meegeleverd in het bestand hieronder)

Werking van de code: Bij het aanmaken van een nieuwe leveranciersfiche, kan je normaal geen fiche aanmaken zonder naam. Dit wordt gecontroleerd bij het valideren op de MercatorPenguinServer. Via het event PenguinServerBeforeValidateData uit de klasse MercatorUi.Sig.Sig, is het mogelijk om tussen te komen bij deze validatie. Hier zullen we detecteren dat de naam leeg is en dat het btw-nummer is ingevuld. In dit geval wordt de VIES-webservice aangesproken en als het btw-nummer wordt herkend en gekoppeld aan de details van een btw-registrant, worden zijn naam en adres opgehaald.

De code van deze customizer is als volgt:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;

namespace SigFou
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.PenguinServerBeforeValidateData += Sig_PenguinServerBeforeValidateData;
        }

        void Sig_PenguinServerBeforeValidateData(object sender, MercatorUi.Sig.Sig.PenguinServerBeforeValidateDataEventArgs e)
        {
            MercatorUi.Globals.ApiLogDelegate.Invoke(e.Data["F_NOM"].ToString() + " -> " + e.Data["F_NUM_TVA"].ToString());
            MercatorUi.Sig.Sig Sig = (MercatorUi.Sig.Sig)sender;
            if (string.IsNullOrWhiteSpace(e.Data["F_NOM"].ToString()) && !string.IsNullOrWhiteSpace(e.Data["F_NUM_TVA"].ToString()))
            {
                string vatno = e.Data["F_NUM_TVA"].ToString().Trim().ToUpper();
                if ((vatno.Length > 5) && (
                    vatno.StartsWith("AT") || vatno.StartsWith("BE") || vatno.StartsWith("BG") || vatno.StartsWith("CY") ||
                    vatno.StartsWith("CZ") || vatno.StartsWith("DE") || vatno.StartsWith("DK") || vatno.StartsWith("EE") ||
                    vatno.StartsWith("EL") || vatno.StartsWith("ES") || vatno.StartsWith("FI") || vatno.StartsWith("FR") ||
                    vatno.StartsWith("GB") || vatno.StartsWith("HU") || vatno.StartsWith("IE") || vatno.StartsWith("IT") ||
                    vatno.StartsWith("LT") || vatno.StartsWith("LU") || vatno.StartsWith("LV") || vatno.StartsWith("MT") ||
                    vatno.StartsWith("NL") || vatno.StartsWith("PL") || vatno.StartsWith("PT") || vatno.StartsWith("RO") ||
                    vatno.StartsWith("SE") || vatno.StartsWith("SI") || vatno.StartsWith("SK")))
                {
                    string countryCode = vatno.Substring(0, 2);
                    string vatNumber = vatno.Substring(2);
                    bool valid = false;
                    string name;
                    string address;
                    MercatorTunnel.eu.europa.ec.checkVatService checkVatService = new MercatorTunnel.eu.europa.ec.checkVatService();
                    try
                    {
                        checkVatService.checkVat(ref countryCode, ref vatNumber, out valid, out name, out address);
                    }
                    catch (Exception ex)
                    {
                        e.BlockingMessage = "CheckVatService : " + ex.Message;
                        return;
                    }
                    if (!valid)
                    {
                        e.BlockingMessage = "Het BTW NR bestaat NIET!";
                        return;
                    }
                    e.Data["F_NOM"] = Api.Left(name, Sig.FieldList["F_NOM"].Length);
                    address = address.Replace("ÿ", "\n");
                    e.Data["F_ADRESSE"] = Api.Left(Api.StrExtract(address + "\n", "", "\n"), Sig.FieldList["F_ADRESSE"].Length);
                    string adr2 = Api.StrExtract(address + "\n", "\n", "\n");
                    string adr3 = Api.StrExtract(address + "\n", "\n", "\n", 2);
                    string cp_ville = adr2;
                    if (!string.IsNullOrEmpty(adr3))
                    {
                        cp_ville = adr3;
                        e.Data["F_ADRESSE2"] = Api.Left(adr2, Sig.FieldList["F_ADRESSE2"].Length);
                    }
                    e.Data["F_CODEP"] = Api.StrExtract("|" + cp_ville, "|", " ").Trim();
                    e.Data["F_VILLE"] = Api.StrExtract(cp_ville + "|", " ", "|").Trim();
                }
            }
        }
    }
}

 

Waarschuwing aangezien het een Sig-aanpasser is die slechts één keer wordt ingeladen bij het opstarten van Mercator, is het noodzakelijk om de instantie van Mercator bij elke wijziging te herstarten in MercatorPenguinServer. Dit kan worden gedaan via de onderhoudspagina.

MercatorPenguinServer : version minimum = 2.2.1.3

10/05/2018: om rekening te houden met deze bezorgdheid, is de volgende regel toegevoegd in de bovenstaande code:
address = address.Replace ("ÿ", "\ n");



Te laden : 0000002875.zip (1 Kb - 25-10-2018)