public override List<string> GetPromotionText(LineItem lineItem) {
            List<string> promotionText = new List<string>();

            int remainingQuantity = lineItem.Quantity;
            int setsOfMinimumQuantities = 0;
            int quantityToBeDiscounted = 0;

            while (remainingQuantity >= minNumberItemsForPromotion) {
                remainingQuantity -= minNumberItemsForPromotion;
                setsOfMinimumQuantities++;

                if (remainingQuantity >= quantityEligibleForDiscount) {
                    quantityToBeDiscounted += quantityEligibleForDiscount;
                } else {
                    quantityToBeDiscounted += remainingQuantity;
                }

                remainingQuantity -= quantityEligibleForDiscount;
            }

            if (remainingQuantity < 0) {
                remainingQuantity = 0;
            }

            promotionText.Add("Promotion: " + setsOfMinimumQuantities + " set of " + minNumberItemsForPromotion + " means you get the next " + quantityEligibleForDiscount + " at a discount of " + (discountPercentage * 100) + "% off");

            if (remainingQuantity != 0) {
                promotionText.Add("Remaining: " + remainingQuantity + " @ $" + String.Format("{0:0.00}",lineItem.PricePerUnit) + " each");
            }

            return promotionText;
        }
        public override double GetPromotionAdjustedTotalCost(LineItem lineItem) {
            if (lineItem == null) {
                return 0;
            }

            int remainingQuantity = lineItem.Quantity;
            int setsOfMinimumQuantities = 0;
            int quantityToBeDiscounted = 0;

            while (remainingQuantity >= minNumberItemsForPromotion) {
                remainingQuantity -= minNumberItemsForPromotion;
                setsOfMinimumQuantities++;

                if (remainingQuantity >= quantityEligibleForDiscount) {
                    quantityToBeDiscounted += quantityEligibleForDiscount;
                } else {
                    quantityToBeDiscounted += remainingQuantity;
                }

                remainingQuantity -= quantityEligibleForDiscount;
            }

            if (remainingQuantity < 0) {
                remainingQuantity = 0;
            }

            double costForMinimumSets = (setsOfMinimumQuantities * minNumberItemsForPromotion) * lineItem.PricePerUnit;
            double remainingQuantityCost = remainingQuantity * lineItem.PricePerUnit;
            double discountedCosts = quantityToBeDiscounted * (lineItem.PricePerUnit * discountPercentage);
            return costForMinimumSets + remainingQuantityCost + discountedCosts;
        }
예제 #3
0
        public void AddItem(Item item) {
            if (item == null) {
                throw new ArgumentException(ERROR_MSG_ADDING_NULL_ITEM_TO_CART);
            }

            if (lineItems.ContainsKey(item)) {
                lineItems[item].Increment();
            } else {
                LineItem lineItem = new LineItem(item);
                lineItem.Increment();
                lineItems.Add(item, lineItem);
            }
        }
        public override double GetPromotionAdjustedTotalCost(LineItem lineItem) {
            if (lineItem == null) {
                return 0;
            }

            int setsOfMinimumQuantities = lineItem.Quantity / minNumberItemsForPromotion;
            double adjustedPromotionCostForSets = setsOfMinimumQuantities * promotionPrice;

            int remainingQuantity = lineItem.Quantity % minNumberItemsForPromotion;
            double remainingQuantityCost = remainingQuantity * lineItem.PricePerUnit;

            return adjustedPromotionCostForSets + remainingQuantityCost;
        }
        public override List<string> GetPromotionText(LineItem lineItem) {
            List<string> promotionText = new List<string>();

            int setsOfMinimumQuantities = lineItem.Quantity / minNumberItemsForPromotion;
            double adjustedPromotionCostForSets = setsOfMinimumQuantities * promotionPrice;
            int remainingQuantity = lineItem.Quantity % minNumberItemsForPromotion;

            promotionText.Add("Promotion: " + setsOfMinimumQuantities + " set of " + minNumberItemsForPromotion + " @ $" + String.Format("{0:0.00}", promotionPrice) + " each");

            if (remainingQuantity != 0) {
                promotionText.Add("Remaining: " + remainingQuantity + " @ $" + String.Format("{0:0.00}", lineItem.PricePerUnit) + " each");
            }

            return promotionText;
        }
예제 #6
0
        public void AddItem(Item item, int quantity) {
            if (item == null) {
                throw new ArgumentException(ERROR_MSG_ADDING_NULL_ITEM_TO_CART);
            }

            if (quantity <= 0) {
                throw new ArgumentException(ERROR_MSG_INVALID_QUANTITY);
            }

            if (DoesCartContainItem(item)) {
                LineItem lineItem = GetLineItemForItem(item);
                lineItem.Quantity = lineItem.Quantity + quantity;
            } else {
                LineItem lineItem = new LineItem(item);
                lineItem.Quantity += quantity;
                lineItems.Add(item, lineItem);
            }
        }
예제 #7
0
        public override double GetPromotionAdjustedTotalCost(LineItem lineItem) {
            if (lineItem == null) {
                return 0;
            }

            int remainingQuantity = lineItem.Quantity;
            int setsOfMinimumQuantities = 0;

            while (remainingQuantity >= minNumberItemsForPromotion) {
                remainingQuantity = remainingQuantity - minNumberItemsForPromotion;
                setsOfMinimumQuantities++;
                remainingQuantity = remainingQuantity - quantityFree;
            }

            if (remainingQuantity < 0) {
                remainingQuantity = 0;
            }

            double costForMinimumSets = (setsOfMinimumQuantities * minNumberItemsForPromotion) * lineItem.PricePerUnit;
            double remainingQuantityCost = remainingQuantity * lineItem.PricePerUnit;
            return costForMinimumSets + remainingQuantityCost;
        }
예제 #8
0
        public override List<string> GetPromotionText(LineItem lineItem) {
            List<string> promotionText = new List<string>();

            int remainingQuantity = lineItem.Quantity;
            int setsOfMinimumQuantities = 0;

            while (remainingQuantity >= minNumberItemsForPromotion) {
                remainingQuantity = remainingQuantity - minNumberItemsForPromotion;
                setsOfMinimumQuantities++;
                remainingQuantity = remainingQuantity - quantityFree;
            }

            if (remainingQuantity < 0) {
                remainingQuantity = 0;
            }

            promotionText.Add("Promotion: " + setsOfMinimumQuantities + " set of " + minNumberItemsForPromotion + " means you get " + (setsOfMinimumQuantities * quantityFree) + " free");

            if (remainingQuantity != 0) {
                promotionText.Add("Remaining: " + remainingQuantity + " @ $" + String.Format("{0:0.00}",lineItem.PricePerUnit) + " each");
            }

            return promotionText;
        }
예제 #9
0
 abstract public List<string> GetPromotionText(LineItem lineItem);
예제 #10
0
 abstract public double GetPromotionAdjustedTotalCost(LineItem lineItem);