Générer automatiquement les numéros de série à l'entrée

0000002880     -      23/03/2020

Le code développé ci-dessous permet de générer de façon automatique les numéros de série à l'entrée, typiquement dans une séquence d'achats. Le principe de ce code est de s'intégrer dans cette fenêtre et d'y créer les lignes souhaitées :

Ceci est nécessaire car cet écran effectue toute une série de contrôles sur les numéros de série : unicité, longueur, ... Le cas échéant, si une erreur est détectée, cet écran restera visible et le message d'erreur sera affiché ; l'utilisateur pourra alors apporter les corrections manuellement. Ceci justifie donc pourquoi cet écran, quand il n'y a pas d'erreur, est visible un bref instant.

Le code doit être placé dans un customizer Billing associé à la séquence d'achats de la gestion commerciale. Pour cet exemple, il crée 3 numéros de série : ABC, DEF et GHE.

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

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {

        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.SerialSubEngine.AskSerialShown += BillingEngineSerialSubEngine_AskSerialShown;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.SerialSubEngine.AskSerialShown -= BillingEngineSerialSubEngine_AskSerialShown;
        }

        void BillingEngineSerialSubEngine_AskSerialShown(object sender, MercatorUi.Engine.Gescom.SerialSubEngine.AskSerialShownEventArgs e)
        {
            if (e.GescomAskSerial.AllowMultiple && e.GescomAskSerial.Inward)
            {
                e.GescomAskSerial.ButtonGridIn.PerformClick(); // montrer la grille
                DataTable dt = (DataTable)e.GescomAskSerial.GridIn.DataSource;
                dt.Rows.Add(new string[1] { "ABC" });
                dt.Rows.Add(new string[1] { "DEF" });
                dt.Rows.Add(new string[1] { "GHE" });
                e.GescomAskSerial.ButtonOk.PerformClick();
            }
        }
    }
}