public Dictionary <ILineItem, List <ValidationIssue> > ValidateCart(ICart cart)
        {
            if (cart.Name.Equals(DefaultWishListName))
            {
                return(new Dictionary <ILineItem, List <ValidationIssue> >());
            }

            var validationIssues = new Dictionary <ILineItem, List <ValidationIssue> >();

            cart.ValidateOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _lineItemValidator);
            cart.UpdatePlacedPriceOrRemoveLineItems(_customerContext.GetContactById(cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
            cart.UpdateInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);

            ApplyDiscounts(cart);

            // Try to validate gift items inventory and don't catch validation issues.
            cart.UpdateInventoryOrRemoveLineItems((item, issue) =>
            {
                if (!item.IsGift)
                {
                    validationIssues.AddValidationIssues(item, issue);
                }
                else
                {
                    validationIssues.AddValidationIssues(item, ValidationIssue.RemovedGiftDueToInsufficientQuantityInInventory);
                }
            }, _inventoryProcessor);

            return(validationIssues);
        }
        public static Dictionary <ILineItem, IList <ValidationIssue> > ValidateCart(this ICart cart)
        {
            var lineItemValidator    = ServiceLocator.Current.GetInstance <ILineItemValidator>();
            var placedPriceProcessor = ServiceLocator.Current.GetInstance <IPlacedPriceProcessor>();
            var inventoryProcessor   = ServiceLocator.Current.GetInstance <IInventoryProcessor>();
            var promotionEngine      = ServiceLocator.Current.GetInstance <IPromotionEngine>();

            /*    if (cart.Name.Equals(DefaultWishListName))
             *  {
             *      return new Dictionary<ILineItem, List<ValidationIssue>>();
             *  }*/

            var validationIssues = new Dictionary <ILineItem, IList <ValidationIssue> >();

            cart.ValidateOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), lineItemValidator);

            cart.UpdatePlacedPriceOrRemoveLineItems(CustomerContext.Current.GetContactById(cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), placedPriceProcessor);

            cart.UpdateInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), inventoryProcessor);

            cart.ApplyDiscounts(promotionEngine, new PromotionEngineSettings());

            // Try to validate gift items inventory and don't catch validation issues.
            cart.UpdateInventoryOrRemoveLineItems((item, issue) => { }, inventoryProcessor);

            return(validationIssues);
        }
Exemple #3
0
        public virtual Dictionary <ILineItem, List <ValidationIssue> > ValidateCart(ICart cart)
        {
            var validationIssues = new Dictionary <ILineItem, List <ValidationIssue> >();

            cart.ValidateOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _lineItemValidator);
            cart.UpdatePlacedPriceOrRemoveLineItems(_customerContext.GetContactById(cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
            cart.UpdateInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);

            return(validationIssues);
        }
Exemple #4
0
        public void ValidateAndApplyCampaigns()
        {
            var validationIssues = new Dictionary <ILineItem, List <ValidationIssue> >();

            _cart.ValidateOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _lineItemValidator);
            _cart.UpdatePlacedPriceOrRemoveLineItems(CustomerContext.Current.GetContactById(_cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
            _cart.UpdateInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);
            _cart.ApplyDiscounts(_promotionEngine, new PromotionEngineSettings());
            _orderRepository.Save(_cart);
        }
Exemple #5
0
        private Dictionary <ILineItem, List <ValidationIssue> > ValidatePurchaseOrder(IPurchaseOrder purchaseOrder)
        {
            var validationIssues = new Dictionary <ILineItem, List <ValidationIssue> >();

            purchaseOrder.UpdatePlacedPriceOrRemoveLineItems(_customerContext.GetContactById(purchaseOrder.CustomerId),
                                                             (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
            purchaseOrder.UpdateInventoryOrRemoveLineItems((item, issue) =>
                                                           validationIssues.AddValidationIssues(item, issue));
            purchaseOrder.AdjustInventoryOrRemoveLineItems((item, issue) =>
                                                           validationIssues.AddValidationIssues(item, issue));
            purchaseOrder.ApplyDiscounts(_promotionEngine, new PromotionEngineSettings());
            return(validationIssues);
        }
Exemple #6
0
        public IDictionary <ILineItem, IList <ValidationIssue> > RequestInventory(ICart cart)
        {
            var validationIssues = new Dictionary <ILineItem, IList <ValidationIssue> >();

            cart.AdjustInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);
            return(validationIssues);
        }
Exemple #7
0
        public Dictionary <ILineItem, List <ValidationIssue> > ValidateCart(ICart cart)
        {
            if (cart.Name.Equals(DefaultWishListName))
            {
                return(new Dictionary <ILineItem, List <ValidationIssue> >());
            }

            var validationIssues = new Dictionary <ILineItem, List <ValidationIssue> >();

            cart.ValidateOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _lineItemValidator);
            cart.UpdatePlacedPriceOrRemoveLineItems(_customerContext.GetContactById(cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
            cart.UpdateInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);

            cart.ApplyDiscounts(_promotionEngine, new PromotionEngineSettings());

            return(validationIssues);
        }
        public Dictionary <ILineItem, List <ValidationIssue> > ValidateCart(ICart cart)
        {
            var validationIssues = new Dictionary <ILineItem, List <ValidationIssue> >();

            if (cart.Name.Equals(DefaultWishListName))
            {
                cart.UpdatePlacedPriceOrRemoveLineItems(_customerContext.GetContactById(cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
                return(validationIssues);
            }

            cart.ValidateOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _lineItemValidator);
            cart.UpdatePlacedPriceOrRemoveLineItems(_customerContext.GetContactById(cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
            cart.UpdateInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);

            var shipments = cart.GetFirstForm().Shipments;

            foreach (var shipment in shipments)
            {
                var dynamicLineItems = shipment.LineItems.Where(x => !string.IsNullOrEmpty(x.Properties[VariantOptionCodesProperty]?.ToString()));

                foreach (var item in dynamicLineItems)
                {
                    var dynamicCodesStr           = item.Properties[VariantOptionCodesProperty].ToString();
                    var dynamicCodes              = dynamicCodesStr.Split(',');
                    var contentLink               = _referenceConverter.GetContentLink(item.Code);
                    var variant                   = _contentLoader.Get <IContent>(contentLink) as DynamicVariant;
                    var dynamicVariants           = variant.VariantOptions.Where(x => dynamicCodes.Contains(x.Code));
                    var totalDynamicVariantsPrice = dynamicVariants.Sum(x => x.Prices.FirstOrDefault(p => p.Currency == cart.Currency.CurrencyCode).Amount);
                    item.Properties["BasePrice"]   = item.PlacedPrice;
                    item.Properties["OptionPrice"] = totalDynamicVariantsPrice;
                    item.PlacedPrice += totalDynamicVariantsPrice;

                    cart.UpdateLineItemQuantity(shipment, item, item.Quantity);
                }
            }

            cart.ApplyDiscounts(_promotionEngine, new PromotionEngineSettings());

            return(validationIssues);
        }
 public Dictionary<ILineItem, List<ValidationIssue>> RequestInventory(ICart cart)
 {
     var validationIssues = new Dictionary<ILineItem, List<ValidationIssue>>();
     cart.AdjustInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);
     return validationIssues;
 }
Exemple #10
0
        public Dictionary<ILineItem, List<ValidationIssue>> ValidateCart(ICart cart)
        {
            if (cart.Name.Equals(DefaultWishListName))
            {
                return new Dictionary<ILineItem, List<ValidationIssue>>();
            }

            var validationIssues = new Dictionary<ILineItem, List<ValidationIssue>>();
            cart.ValidateOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _lineItemValidator);
            cart.UpdatePlacedPriceOrRemoveLineItems(_customerContext.GetContactById(cart.CustomerId), (item, issue) => validationIssues.AddValidationIssues(item, issue), _placedPriceProcessor);
            cart.UpdateInventoryOrRemoveLineItems((item, issue) => validationIssues.AddValidationIssues(item, issue), _inventoryProcessor);

            cart.ApplyDiscounts(_promotionEngine, new PromotionEngineSettings());

            return validationIssues;
        }