public static Money CalculateDefaultPriceReduction(Money originalPrice, int itemQuantity, IPromotionData data) { Money priceReduction = null; Money promotionPrice = new Money(originalPrice, 0); promotionPrice.Amount = data.PromotionAmount; promotionPrice.Multiply(itemQuantity); switch (data.PromotionAmountType) { case PromotionAmountType.PercentReduction: if (data.PromotionAmount <= 100 && data.PromotionAmount > 0) { priceReduction = new Money(originalPrice); priceReduction.RoundingMode = RoundingMode.AlwaysRoundUp; priceReduction.Multiply(data.PromotionAmount / 100); } else { priceReduction = originalPrice; } break; case PromotionAmountType.AbsolutePrice: priceReduction = new Money(originalPrice); priceReduction.Subtract(promotionPrice); break; case PromotionAmountType.AbsoluteReduction: priceReduction = promotionPrice; break; default: LogManager.GetLogger(typeof(GenericPromotion)).Error("Unknown PromotionAmountType"); break; } return priceReduction; }
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 TestRoundUp() { Money money = new Money(); money.RoundingMode = RoundingMode.AlwaysRoundUp; money.Amount = 1.111M; Assert.IsTrue(money.Amount == 1.12M, "Round Up failed (" + money.ToString() + " != 1.12"); money.Amount = 2400; money.Multiply(.175M); Assert.IsTrue(money.Amount == 420M, "Round Up failed (" + money.ToString() + " != 420.00"); }
public void TestRoundPoint5() { Money money = new Money(); money.RoundingMode = RoundingMode.RoundPoint5AndHigher; money.Amount = 1.115M; Assert.IsTrue(money.Amount == 1.12M, "Round To Point 5 failed (" + money.ToString() + " != 1.12"); money.Amount = 1.125M; Assert.IsTrue(money.Amount == 1.13M, "Round To Point 5 failed (" + money.ToString() + " != 1.13"); money.Amount = 1.13495M; Assert.IsTrue(money.Amount == 1.14M, "Round To Point 5 failed (" + money.ToString() + " != 1.14"); money.Amount = 453; money.Add(new Money(36)); money.Add(new Money(10)); money.Multiply(0.175M); Assert.IsTrue(money.Amount == 87.33M, "Round To Point 5 failed (" + money.ToString() + " != 87.33"); }
public void TestMultiply() { Money money1 = new Money(1.23M); money1.Multiply(1.5M); Assert.IsTrue(money1.Amount == 1.84M, "Multiplication failed (" + money1.ToString() + " != 1.84"); }