Hoeveelheidstarieven zijn geactiveerd en een artikel is gedefinieerd met verschillende hoeveelheidsdrempels. De kolom korting 2 is aanwezig. In een verkoopdocument voer ik een artikellijn in met een bepaalde hoeveelheid. Ik geef ook "manueel" een korting 2 in. Wanneer ik later de hoeveelheid wijzig, binnen dezelfde hoeveelheidsdrempel of niet, wordt korting 2 automatisch terug op 0 gezet. Hoe kan men korting 2 in dit scenario behouden?
Bij een wijziging van de hoeveelheid in een verkoop, terwijl hoeveelheidstarieven geactiveerd zijn, herberekent Mercator volledig de verkoopprijs en alle kortingen. Een korting 2 kan bijvoorbeeld afkomstig zijn uit "Tools / Kortingen" (BAREMES). Het beschreven gedrag is dus gewenst en correct. Indien men hiervan wil afwijken, volstaat het om deze eenvoudige customizer te implementeren.
💡 Let op de aanwezigheid van de test if (e.FromChangeQ) die ervoor zorgt dat de code enkel wordt toegepast wanneer de herberekening wordt uitgevoerd na een wijziging van de hoeveelheid in een situatie met hoeveelheidstarieven.
// <CompileWithRoslyn />
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeApplyPricingInfo += BillingEngine_BeforeApplyPricingInfo;
billingEngine.AfterApplyPricingInfo += BillingEngine_AfterApplyPricingInfo;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeApplyPricingInfo -= BillingEngine_BeforeApplyPricingInfo;
billingEngine.AfterApplyPricingInfo -= BillingEngine_AfterApplyPricingInfo;
}
private (string dl_id, double remise2) tupple;
private void BillingEngine_BeforeApplyPricingInfo(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeApplyPricingInfoEventArgs e)
{
if (e.FromChangeQ)
tupple = (e.LignesVRecord.DL_ID, e.LignesVRecord.REMISE2);
}
private void BillingEngine_AfterApplyPricingInfo(object sender, MercatorUi.Engine.Gescom.BillingEngine.AfterApplyPricingInfoEventArgs e)
{
if (e.FromChangeQ && (tupple.dl_id == e.LignesVRecord.DL_ID))
e.LignesVRecord.REMISE2 = tupple.remise2;
}
}
}