Dans les documents de vente et d'achat, bloquer le calcul de prix par Mercator

0000003042     -      20/12/2021

Le customizer ci-dessous peut être installé dans les différentes séquences de vente et d'achat. Il permet de bloquer le calcul de prix par Mercator. Il requiert une version de Mercator 10.10 ou ultérieure. Il est nécessaire d'ajouter la colonne NON_MOD_PRIX de type boolean dans LIGNES_V et/ou LIGNES_A.

alter table LIGNES_V add NON_MOD_PRIX bit NOT NULL default 0
alter table LIGNES_A add NON_MOD_PRIX bit NOT NULL default 0

Mercator ne calculera plus le prix, ni les remises dans les lignes ayant NON_MOD_PRIX coché (valeur = 1 / true).
Ceci peut être utilisé, par exemple, pour empêcher Mercator de recalculer les prix lors de l'augmentation de statut d'une commande en livraison, avec changement des quantités.

Zoom
using System.Data;
using System.Linq;
using MercatorUi.Engine.Gescom;
using MercatorUi.ICustomizers;
using MercatorApi;

namespace Billing
{
    public class Customizer :
        IBillingEngineCreated,
        IBillingEngineClosed
    {
        public void BillingEngineCreated(BillingEngine billingEngine)
        {
            billingEngine.BeforeTransform += BillingEngine_BeforeTransform;
            if (billingEngine.PiedsVRecord.NIVEAU_BO > 0) //Pour que Mercator ne modifie plus les prix alors que le document a été transformé partiellement.
                billingEngine.LignesVRecords.Where(l => !string.IsNullOrWhiteSpace(l.ID_ARTICLE)).ToList().ForEach(l => Api.SmartReplace(l.DataRow, "NON_MOD_PRIX", true));
        }

        public void BillingEngineClosed(BillingEngine billingEngine)
        {
            billingEngine.BeforeTransform -= BillingEngine_BeforeTransform;
        }

        private void BillingEngine_BeforeTransform(object sender, BillingEngine.BeforeTransformEventArgs e)
        {
            BillingEngine billingEngine = (BillingEngine)sender;
            if ((e.Direction == BillingEngine.TransformDirection.Up) && (billingEngine.Type == 3))
                billingEngine.LignesVRecords.Where(l => !string.IsNullOrWhiteSpace(l.ID_ARTICLE)).ToList().ForEach(l => l.NON_MOD_PRIX = true);
        }
    }
}