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

Comment regrouper des lignes contenues dans le BillingEngine selon certains critères ?

0000002449     -      20/06/2019

Ce customizer permet de regrouper les lignes contenues dans le BillingEngine selon divers critères.

Il fonctionne de la même manière que le regroupement obtenu via clic-droit + regrouper dans la grille d'encodage mais est exécuté avant la sauvegarde.

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

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSave += BillingEngine_BeforeSave;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSave -= BillingEngine_BeforeSave;
        }

        private void BillingEngine_BeforeSave(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSaveEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;

            // ne pas regrouper sur les valeurs différentes de LIGNES_V.CUSTOM_COL1 et LIGNES_V.CUSTOM_COL2
            string[] supplColumns = new string[] { "CUSTOM_COL1", "CUSTOM_COL2" };

            // conditions supplémentaires écrites dans la syntaxe de DataTable.Select()
            string additionalConditionsOnLignes = "(q > 0)" // ne regrouper que les lignes de quantités positives
                + " and (id_article<>'S_ID1') and (id_article<>'S_ID2')"; // ne jamais regrouper ces deux articles

            // tenir compte de PU, REMISE, REMISE2, ... -> donc ne regrouper que si PU, REMISE, REMISE2, ... sont identiques
            bool doNotChangePuRemises = true;

            // conserver les lignes avec un commentaire dans la désignation
            bool keyComments = true;

            billingEngine.Group(supplColumns, additionalConditionsOnLignes, doNotChangePuRemises, keyComments);
        }
    }
}

Si on souhaite effectuer la même personnalisation du regroupement lorsqu'il est exécuté via le menu contextuel, il suffit de placer ce customizer qui utilise l'événement BeforeGroup du BillingEngine

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

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeGroup += BillingEngine_BeforeGroup;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeGroup -= BillingEngine_BeforeGroup;
        }

        private void BillingEngine_BeforeGroup(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeGroupEventArgs e)
        {
            e.Col_Filtre_Sup = new string[] { "CUSTOM_COL1", "CUSTOM_COL2" }; ;
            e.AdditionalConditionsOnLignes = "(q > 0) and (id_article<>'S_ID1') and (id_article<>'S_ID2')";
            e.DoNotChangePuRemises = true;
            e.KeepComments = true;
        }

    }
}