Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Dans MercatorPenguin, compléter automatiquement une nouvelle fiche de signalétique via le numéro de TVA

0000002875     -      29/03/2021

Le code montré ci-dessous permet de compléter automatiquement une nouvelle fiche fournisseur dans MercatorPenguin, en encodant uniquement son numéro de TVA. Ce code est lié au bundle "Consultation fournisseurs" qui contient au préalable ces éléments :

  1. Le paramétrage Penguin du signalétique des fournisseurs :
    <StackLayout Margin="10, 10, 10, 10">
    <m:EditEntry Placeholder="Nom" Source="f_nom" BackgroundColor="Gray" TextColor="Blue" HorizontalOptions="FillAndExpand" />
    <m:EditEntry Placeholder="Adresse"  Source="f_adresse" HorizontalOptions="FillAndExpand" />
    <m:EditEntry Placeholder="Adresse 2"  Source="f_adresse2" HorizontalOptions="FillAndExpand" />
    <StackLayout Orientation="Horizontal">
    <m:EditEntry Placeholder="C. postal" WidthRequest="120" Source="f_codep" HorizontalOptions="End"  />
    <m:EditEntry Placeholder="Ville"  Source="f_ville" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    <StackLayout Orientation="Horizontal">
    <Label Text="Langue" Font="Medium" Margin="0,0,0,0" VerticalOptions="Center" WidthRequest="50" />
    <m:EditPicker Source="f_langue" HorizontalOptions="FillAndExpand" />
    <Label Text="Devise" 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="N° entreprise" 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="Régime" Font="Medium" Margin="0,0,0,0" VerticalOptions="Center" WidthRequest="90" />
    <m:EditPicker Source="f_regime" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    <m:EditEntry Placeholder="Compte bancaire" Source="f_num_bqe" HorizontalOptions="FillAndExpand" />
    <m:EditEntry Placeholder="Adresse mail" Source="f_email" HorizontalOptions="FillAndExpand" />

    <StackLayout Orientation="Horizontal">
    <Label Text="Escompte" Font="Medium" Margin="0,0,0,0" VerticalOptions="Center" WidthRequest="90" />
    <m:EditEntry Source="f_escpte" HorizontalOptions="FillAndExpand" />
    </StackLayout>
    </StackLayout>
  2. Le bundle liste "Consultation fournisseurs edit" (fourni dans le fichier ci-dessous).

Fonctionnement du code : lors de la création d'une nouvelle fiche fournisseur, il n'est pas autorisé de créer une fiche sans nom. Ceci est contrôlé lors de la validation par MercatorPenguinServer. Toutefois, via l’événement PenguinServerBeforeValidateData de la classe MercatorUi.Sig.Sig, il est possible d'intervenir avant cette validation. C'est à cet endroit que nous allons détecter que le nom est vide et que le numéro de TVA est complété. Dans ce cas, le web service VIES sera appelé et, si le numéro de TVA est reconnu et associé aux coordonnées d'un assujetti à la TVA, alors son nom et son adresse seront récupérés.

Le code de ce customizer est le suivant :

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("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")))
                {
                    MercatorController.xFunctions.xViesRet xViesRet = MercatorController.xFunctions.xNumTvaVies(vatno);
                    if (xViesRet == null)
                    {
                        e.BlockingMessage = ($"Erreur durant l'interrogation du service Vies pour vérification du numéro de TVA '{vatno}' !\r\n\r\n{Api.LastError}");
                        return;
                    }
                    if (!xViesRet.Valid)
                    {
                        e.BlockingMessage = ($"Le n° de TVA '{vatno}' n'existe pas !");
                        return;
                    }
                    else if (string.IsNullOrWhiteSpace(xViesRet.Name))
                    {
                        e.BlockingMessage = ($"Le n° de TVA '{vatno}' existe mais aucun nom ne lui est associé !");
                        return;
                    }

                    e.Data["F_NOM"] = xViesRet.Name;
                    e.Data["F_ADRESSE"] = Api.Left(xViesRet.Address, Sig.FieldList["F_ADRESSE"].Length);
                    e.Data["F_ADRESSE2"] = Api.Left(xViesRet.Address2, Sig.FieldList["F_ADRESSE2"].Length);
                    e.Data["F_CODEP"] = xViesRet.PostalCode;
                    e.Data["F_VILLE"] = xViesRet.City;
                }
            }
        }
    }
}

 

Attention : comme il s'agit d'un customizer Sig qui n'est pris en compte qu'une seule fois au démarrage de Mercator, il est nécessaire de redémarrer l'instance de ce Mercator dans MercatorPenguinServer après chaque modification. Cela peut se faire aisément via la page de maintenance.

MercatorPenguinServer : version minimum = 2.2.1.3

10/05/2018 : pour tenir compte de ce souci, la ligne suivante a été ajoutée dans le code ci-dessus :
address = address.Replace("ÿ", "\n");



A télécharger : 0000002875.zip (1 Kb - 25/10/2018)