protected sealed override decimal CalculateImpl(IDiscountCalculationCartInfo cartInfo) { if (cartInfo.TryGet(ProductSerialNumber, out ProductAmount pa)) { // Här borde vi assert amount >= 0 egentligen! int rebateCount = Math.Max(0, pa.Amount) / BuyX; return(rebateCount * (BuyX - PayY) * pa.Product.Price); } return(0); }
//private decimal Sum(IReadOnlyDictionary<Product, int> cart) // => cart.Sum(kvp => kvp.Key.Price * kvp.Value); protected sealed override decimal CalculateImpl(IDiscountCalculationCartInfo cartInfo) { var sum = cartInfo.ArticleValue - cartInfo.AccumulatedDiscount(); return(sum >= MinCartValue ? sum * Percentage : 0); }
protected abstract decimal CalculateImpl(IDiscountCalculationCartInfo cartInfo);
public decimal Calculate(IDiscountCalculationCartInfo cartInfo) => Math.Round(CalculateImpl(cartInfo), 2, MidpointRounding.AwayFromZero);