コード例 #1
0
        public override AddPromotionResult Execute(IUnitOfWork unitOfWork, AddPromotionParameter parameter, AddPromotionResult result)
        {
            OrderPromotionCode orderPromotionCode = new OrderPromotionCode()
            {
                Code = parameter.PromotionCode
            };

            this.AddPromotionCode(unitOfWork, result.Cart, orderPromotionCode);
            this.promotionEngine.ApplyPromotions(result.Cart);
            unitOfWork.Save();
            return(this.NextHandler.Execute(unitOfWork, parameter, result));
        }
コード例 #2
0
        private void AddPromotionCode(IUnitOfWork unitOfWork, CustomerOrder customerOrder, OrderPromotionCode orderPromotionCode)
        {
            if (this.promotionEngine.ListContainsPromotionCode(customerOrder.OrderPromotionCodes.Select <OrderPromotionCode, string>((Func <OrderPromotionCode, string>)(o => o.Code)), orderPromotionCode.Code))
            {
                return;
            }
            IRepository <OrderPromotionCode> repository = unitOfWork.GetRepository <OrderPromotionCode>();

            foreach (OrderPromotionCode deleted in customerOrder.OrderPromotionCodes.ToList <OrderPromotionCode>())
            {
                repository.Delete(deleted);
            }
            unitOfWork.Save();

            orderPromotionCode.CustomerOrder = customerOrder;
            customerOrder.OrderPromotionCodes.Add(orderPromotionCode);
            repository.Insert(orderPromotionCode);
            customerOrder.RecalculatePromotions         = true;
            customerOrder.ShippingCalculationNeededAsOf = DateTimeProvider.Current.Now;
            customerOrder.RecalculateTax = true;
        }