public Money CalculatePriceReduction(IBasketLine basketLine) { /* * Buy N, get one free * i.e. Buy 4, pay for 3 */ try { int quantity = basketLine.Quantity / (PromotionBase.AuxData + 1); //See how many multiples we have if (quantity * (PromotionBase.AuxData + 1) > basketLine.Quantity) { quantity--; } if (quantity > 0) { Money discount = new Money(basketLine.LinePrice); discount.RoundingMode = RoundingMode.AlwaysRoundUp; discount.Divide(basketLine.Quantity); discount.Multiply(quantity); return discount; } else { return new Money(0); } } catch (Exception e) { LogManager.GetLogger(GetType()).Error(e); return new Money(0); } }
public void TestDivide() { Money money1 = new Money(1.23M); money1.Divide(1.5M); Assert.IsTrue(money1.Amount == 0.82M, "Addition failed (" + money1.ToString() + " != 0.82"); }