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

Enregistrer une signature dans Mercator via MercatorPenguin et Ok!Sign

0000003143     -      16/05/2023

Dans Mercator, il est possible d’enregistrer une signature manuscrite selon divers moyens. Par ailleurs, Mercator est connectable au portail de eSignature de Ok!Sign. L'application MercatorPenguin peut être utilisée comme moyen de saisie de cette signature.

Pour mettre en place cette fonctionnalité, il faut :

  • Mercator version 10.10 ou ultérieure,
  • disposer d'un compte chez Ok!Sign,
  • prendre connaissance de cette page,
  • copier la valeur x-oksign-authorization dans l'option "Matériel Caisse > Signature via Penguin & Ok!Sign : authorization" (id = PGSGN_OKID)
  • un appareil mobile (smartphone ou tablette), connecté à Internet et disposant d'un MercatorPenguin 2.10.18 ou ultérieur,
  • dans ce MercatorPenguin, activer et accepter les notifications; cela se fait au départ de l'écran d'information accessible depuis le bouton "i",
  • noter l'ID qui apparaît une fois les notifications activées.

Dans les options "Matériel Caisse", il faut compléter la valeur de "Signature via MercatorPenguin : player id" (id = PGPAY_PLID) avec l'identifiant noté dans MercatorPenguin dans l'écran d'information. Cet identifiant peut être obtenu facilement via cette requête, où xyz correspondent aux trois premiers caractères lus dans MercatorPenguin :

 

select id from PENGUIN_PLAYERS where id like 'xyz%'

 

Dans l'exemple illustré ici, nous considérons que les colonnes suivantes ont été ajoutée dans la table PIEDS_V.

alter table PIEDS_V add NOM char(30) not null default ''
alter table PIEDS_V add FONCTION char(20) not null default ''
alter table PIEDS_V add EMAIL char(40) not null default ''
alter table PIEDS_V add NUM_GSM char(20) not null default ''

 

Pour afficher ces champs, nous suggérons d'utiliser le fichier Commande_oksign.mpge présent dans le zip ci-dessous pour charger le paramétrage de l'onglet correspondant.

Les paramètres envoyés à Ok!Sign sont toujours déterminés via un customizer Billing. Il doit implémenter l'interface MercatorSignPad.ISignPadPenguin et, dès lors, fournir une méthode SignPadPenguinRet FormDescriptorForOkSign.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using System.Text.RegularExpressions;
using System.Linq;
using MercatorSignPad;

namespace Billing
{
    public class Customizer : MercatorSignPad.ISignPadPenguin
    {
        public SignPadPenguinRet FormDescriptorForOkSign(Form form)
        {
            MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)form;
            Dictionary<string, string> dicoNotEmpty = new Dictionary<string, string>
                {
                    { "NOM", _Divers.Iif_langue(Globals.Langue, "Name", "Naam", "Nom") },
                    { "EMAIL", _Divers.Iif_langue(Globals.Langue, "Email", "Email", "Email") },
                    { "FONCTION", _Divers.Iif_langue(Globals.Langue, "Function", "Functie", "Fonction") },
                    { "NUM_GSM", _Divers.Iif_langue(Globals.Langue, "Mobile", "GSM", "GSM") },
                };
            foreach (KeyValuePair<string, string> kvp in dicoNotEmpty)
            {
                if (string.IsNullOrWhiteSpace(billingForm.BillingEngine.PIEDS[kvp.Key].ToString()))
                {
                    return new SignPadPenguinRet
                    {
                        CancelMessage = string.Format(_Divers.Iif_langue(Globals.Langue,
                                            "The \"{0}\" field is mandatory!",
                                            "Het veld \"{0}\" is verplicht!",
                                            "Le champ \"{0}\" est obligatoire !"), kvp.Value)
                    };
                }
            }

            Regex regex = new Regex(@"^\+?[1-9]\d{1,14}$");
            if (!regex.IsMatch(billingForm.BillingEngine.PIEDS["NUM_GSM"].ToString()))
            {
                return new SignPadPenguinRet
                {
                    CancelMessage = _Divers.Iif_langue(Globals.Langue,
                        "The mobile phone number must start with + and contain only digits!",
                        "Het GSM nummer moet beginnen met + en mag alleen cijfers bevatten!",
                        "Le numéro de GSM doit commencer par + et ne contenir que des chiffres !")
                };
            }

            MercatorUi._BaseClasses.SqlFileView sqlFileView = billingForm.MovableControls.Values.OfType<MercatorUi._BaseClasses.SqlFileView>().FirstOrDefault(p => !p.ReadOnly);
            if (sqlFileView == null)
                return new SignPadPenguinRet { CancelMessage = "No SqlFileView!" };

            string signedPdfFileName = string.Format("{0}_{1}_signed.pdf", billingForm.BillingEngine.Journal, billingForm.BillingEngine.PiedsVRecord.DATE.ToShortDateString().Replace("/", "_"));

            MercatorSigning.OkSign.FormDescriptor.FormHelper formHelper1 = new MercatorSigning.OkSign.FormDescriptor.FormHelper
            {
                FieldMarker = "_Signature_",
                FieldWidth = 175,
                FieldHeight = 70,
                FieldSigningOptions = MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Tan | MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Pen,
                SignerInfoName = billingForm.BillingEngine.PiedsVRecord.NOM,
                SignerInfoMobile = billingForm.BillingEngine.PiedsVRecord.NUM_GSM,
                SignerInfoActingAs = billingForm.BillingEngine.PiedsVRecord.FONCTION,
                SignerInfoEmail = billingForm.BillingEngine.PiedsVRecord.EMAIL
            };
            MercatorSigning.OkSign.FormDescriptor formDescriptor = new MercatorSigning.OkSign.FormDescriptor
            {
                SendToMeEmail = "info@mercator.eu", // pas obligatoire si le mail à utiliser est celui dans le compte OkSign
                Logo = "https://www.mercator.eu/assets/images/logo.png", // pas obligatoire si le logo à utiliser est celui dans le compte OkSign
                FileName = signedPdfFileName // nom du fichier visible par le signataire. Peut contenir une chaîne libre terminant par .pdf
            };
            formDescriptor.FormHelpers.Add(formHelper1);

            return new SignPadPenguinRet
            {
                FormDescriptor = formDescriptor,
                SignedFileName = Api.AddBS(sqlFileView.BasePath) + signedPdfFileName
            };
        }
    }
}

 

Dans ce code, on voit qu'une validation des données est effectuée et que, le cas échéant, une chaîne de caractères est placée dans CancelMessage. Cela permet d'afficher ce message à l'utilisateur et d'annuler le processus de signature.

La propriété SignedFileName doit contenir le chemin complet du fichier signé qui sera téléchargé en fin de processus. Ce chemin peut être un chemin physique ou compatible SqlFileView. Dans cet exemple, nous utilisons toujours un stockage du fichier signé dans l'explorateur de fichiers SQL du document. Dès lors, il est obligatoire de placer un SqlFileView via le paramétrage d'écran.

Le FieldMarker est _Signature_. Il est donc nécessaire que cette chaîne de caractères soit présente dans le modèle d'impression associé à la séquence, à l'endroit où on souhaite faire apparaître le cadre de signature. (Voir exemple de repx dans le zip ci-dessous)

 

Utilisation

Lors de la demande de saisie d'une signature, Mercator affiche cet écran, qui permet de suivre les différents statuts de cette demande :

La chronologie de la séquence de signature  est la suivante :

       

  • Mercator envoie une notification au mobile dont le player id correspond à la valeur indiquée dans l'option "Signature via MercatorPenguin : player id".
  • L'utilisateur doit ouvrir cette notification sur le mobile. Ceci va, le cas échéant, ouvrir MercatorPenguin.
  • MercatorPenguin affiche alors une page web du portail Ok!Sign. (Le contenu de cette page ne dépend pas de Mercator et ne peut dès lors être modifié)
  • Mercator se met à l'écoute des réponses du portail Ok!Sign.
  • Dès que la signature est effectuée, Mercator télécharge le document signé et le place à l'endroit déterminé par SignedFileName .

 

 Commande_oksign1                Commande_oksign2   


La communication entre Mercator et MercatorPenguin se fait sur base d'une notification. En principe, la transmission de cette notification est immédiate et donc la signature peut être effectuée sans délai. En fonction de l'infrastructure utilisée ou de la couverture "data" à disposition, ce délai peut être allongé. Ceci peut rendre cette fonctionnalité inutilisable. Il est donc nécessaire d'effectuer des essais d'envois-réceptions de notifications dans l'environnement qui sera celui dans lequel sera utilisée cette fonctionnalité.

Rappel : les notifications ne sont jamais reçues si l'application n'a jamais été démarrée ou si on l'a forcé à quitter. -> démarrez au moins une fois MercatorPenguin.

Cette page donne des pistes de solutions pour réduire des retards de notifications.

 

Mots clés : OkSign

A télécharger : 0000003143.zip (31 Kb - 20/03/2023)