U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Pas een prijs per tarief toe op basis van de totale hoeveelheid per item in het document

0000003028     -      17-01-2022

Mercator 10.9 of hoger gebruikt de event GettingPricingByQty om de waarde van de gebruikte hoeveelheid te wijzigen en het correcte tarief te bepalen volgens de gedefinieerde hoeveelheidsdrempels. In het onderstaande voorbeeld laten we zien hoe u de hoeveelheid kunt wijzigen door alle hoeveelheden van het huidige artikel op te tellen. Vervolgens, zodra de prijs is opgehaald, wordt deze opnieuw toegepast door code (voor PU en REMISE) in de andere lijnen die hetzelfde artikel bevatten. Dit maakt het mogelijk om een korting toe te passen, zelfs als de hoeveelheid van de drempel alleen wordt bereikt door meerdere lijnen toe te voegen.

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

// <CompileWithRoslyn />

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

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

        private void BillingEngine_GettingPricingByQty(object sender, MercatorUi.Engine.Gescom.BillingEngine.GettingPricingByQtyEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            double totQ = billingEngine.LignesVRecords.Where(l => l.ID_ARTICLE == e.LigneVRecord.ID_ARTICLE).Sum(l => l.Q);
            if (totQ.CompareTo(e.Q, Globals.N_DEC_Q) != 0)
            {
                e.Q = totQ;
                MercatorUi.Engine.Gescom.BillingEngine.AfterApplyPricingInfoEventHandler afterApplyPricingInfoEventHandler = null;
                afterApplyPricingInfoEventHandler = (s, e2) =>
                {
                    billingEngine.AfterApplyPricingInfo -= afterApplyPricingInfoEventHandler;
                    if (e.DataRowLignes == e2.DataRowLignes) // zitten we nog steeds op dezelfde lijn?
                    {
                        // update de andere lijnen met hetzelfde artikel
                        foreach (var l in billingEngine.LignesVRecords.Where(l => (l.ID_ARTICLE == e.LigneVRecord.ID_ARTICLE) && (l.DataRow != e.DataRowLignes)))
                        {
                            l.PU = e.LigneVRecord.PU;
                            l.REMISE = e.LigneVRecord.REMISE;
                        }
                    }
                };
                billingEngine.AfterApplyPricingInfo += afterApplyPricingInfoEventHandler;
            }
        }
    }
}

 

Het principe is vergelijkbaar met het principe dat wordt toegepast op de customizer die gekoppeld is aan verkopen en kortingen op hoeveelheid.

Let op : de hier getoonde code regelt niet de prijswijziging in geval dat een lijn verwijderd wordt. Dit moet daarom worden afgehandeld via een event van ChangeAllPrices in een BeforeBeforePaymentOrSave event.

 


Aanvullende informatie : Functionaliteiten in "Tools > Kortingen"