Пример #1
0
        /// <summary>
        /// Adds and processes a promo code
        /// </summary>
        /// <param name="promoCode"></param>
        public void AddPromoCode(PromoCode promoCode)
        {
            // check constraints
            if (PromoCodes.Exists(p => p.Code == promoCode.Code))
            {
                throw new Exception("Cannot enter same promo code twice!");
            }

            if (promoCode.SpecialPriceItem != null && !Order.OrderDetails.Exists(o => o.ProductId == promoCode.SpecialPriceItem.Id))
            {
                throw new Exception("Must purchase special item to receive discount: " + promoCode.SpecialPriceItem.Name);
            }

            if (promoCode.WithPurchaseOf != null && !Order.OrderDetails.Exists(o => o.ProductId == promoCode.WithPurchaseOf.Id))
            {
                throw new Exception("Must purchase qualifying item: " + promoCode.WithPurchaseOf.Name);
            }

            if (promoCode.MinimumQualifyingPurchase != null && TotalExtendedPrice < promoCode.MinimumQualifyingPurchase)
            {
                throw new Exception("Must have a minimum purchase of $" + promoCode.MinimumQualifyingPurchase.ToString());
            }

            if (promoCode.CodeStart != null && DateTime.Now < promoCode.CodeStart)
            {
                DateTime codeStart = (DateTime)promoCode.CodeStart;
                throw new Exception("Code is not valid until " + codeStart.ToShortDateString());
            }

            if (promoCode.CodeEnd != null && DateTime.Now > promoCode.CodeEnd)
            {
                throw new Exception("Code is expired!");
            }

            // Apply promotions
            if (promoCode.PromotionalItem != null)
            {
                Order.OrderDetails.Add(new OrderDetail()
                {
                    Product           = promoCode.PromotionalItem,
                    UnitPrice         = promoCode.PromotionalItemPrice ?? 0,
                    Quantity          = 1,
                    IsPromotionalItem = true,
                    PlacedInCart      = DateTime.Now,
                    Shipping          = 0
                });
            }

            // special price may be zero; only apply if a percentage is not given
            if ((promoCode.PercentOffItem == null || promoCode.PercentOffItem == 0) && promoCode.SpecialPriceItem != null)
            {
                OrderDetail item = Order.OrderDetails.Find(o => o.Product.Id == promoCode.SpecialPriceItem.Id);
                item.UnitPrice = promoCode.SpecialPrice ?? 0;
            }

            // percent off item
            if (promoCode.PercentOffItem != null && promoCode.PercentOffItem > 0 && promoCode.SpecialPriceItem != null)
            {
                OrderDetail item = Order.OrderDetails.Find(o => o.Product.Id == promoCode.SpecialPriceItem.Id);
                item.UnitPrice = PercentOff(item.UnitPrice, promoCode.PercentOffItem ?? 0);
            }

            // percent off order
            if (promoCode.PercentOffOrder != null && promoCode.PercentOffOrder > 0)
            {
                for (int i = 0; i < Order.OrderDetails.Count; i++)
                {
                    OrderDetail item = Order.OrderDetails[i];
                    item.UnitPrice = PercentOff(item.UnitPrice, promoCode.PercentOffOrder ?? 0);
                }
            }

            // Add promocode to list
            PromoCodes.Add(promoCode);
        }
Пример #2
0
 /// <summary>
 /// Removes shipping charges from an item in the shopping cart
 /// </summary>
 /// <param name="orderDetail"></param>
 public void RemoveShippingCharges(OrderDetail orderDetail)
 {
     orderDetail.Shipping = 0;
 }