/// <summary>
        /// Validates and completes a cart.
        /// </summary>
        /// <param name="cart">The cart.</param>
        /// <param name="errorMessages">The error messages.</param>
        public virtual bool DoCompletingCart(ICart cart, IList <string> errorMessages)
        {
            // Change status of payments to processed.
            // It must be done before execute workflow to ensure payments which should mark as processed.
            // To avoid get errors when executed workflow.
            foreach (IPayment p in cart.Forms.SelectMany(f => f.Payments).Where(p => p != null))
            {
                PaymentStatusManager.ProcessPayment(p);
            }

            var isSuccess = true;

            if (_databaseMode.Value != DatabaseMode.ReadOnly)
            {
                if (_featureSwitch.IsSerializedCartsEnabled())
                {
                    var validationIssues = new Dictionary <ILineItem, IList <ValidationIssue> >();
                    cart.AdjustInventoryOrRemoveLineItems(
                        (item, issue) => AddValidationIssues(validationIssues, item, issue), _inventoryProcessor);

                    isSuccess = !validationIssues.Any();

                    foreach (var issue in validationIssues.Values.SelectMany(x => x).Distinct())
                    {
                        if (issue == ValidationIssue.RejectedInventoryRequestDueToInsufficientQuantity)
                        {
                            errorMessages.Add("NotEnoughStockWarning");
                        }
                        else
                        {
                            errorMessages.Add("CartValidationWarning");
                        }
                    }

                    return(isSuccess);
                }

                // Execute CheckOutWorkflow with parameter to ignore running process payment activity again.
                var isIgnoreProcessPayment = new Dictionary <string, object> {
                    { "PreventProcessPayment", true }
                };
                var workflowResults = OrderGroupWorkflowManager.RunWorkflow((OrderGroup)cart,
                                                                            OrderGroupWorkflowManager.CartCheckOutWorkflowName, true, isIgnoreProcessPayment);

                var warnings = workflowResults.OutputParameters["Warnings"] as StringDictionary;
                isSuccess = warnings.Count == 0;

                foreach (string message in warnings.Values)
                {
                    errorMessages.Add(message);
                }
            }

            return(isSuccess);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Validates and completes a cart.
        /// </summary>
        /// <param name="cart">The cart.</param>
        /// <param name="errorMessages">The error messages.</param>
        private bool DoCompletingCart(ICart cart, IList <string> errorMessages)
        {
            var isSuccess = true;

            if (_databaseMode.Value != DatabaseMode.ReadOnly)
            {
                if (_featureSwitch.IsSerializedCartsEnabled())
                {
                    var validationIssues = new Dictionary <ILineItem, IList <ValidationIssue> >();
                    cart.AdjustInventoryOrRemoveLineItems(
                        (item, issue) => AddValidationIssues(validationIssues, item, issue), _inventoryProcessor);

                    isSuccess = !validationIssues.Any();

                    foreach (var issue in validationIssues.Values.SelectMany(x => x).Distinct())
                    {
                        if (issue == ValidationIssue.RejectedInventoryRequestDueToInsufficientQuantity)
                        {
                            errorMessages.Add(Utilities.Translate("NotEnoughStockWarning"));
                        }
                        else
                        {
                            errorMessages.Add(Utilities.Translate("CartValidationWarning"));
                        }
                    }

                    return(isSuccess);
                }

                // Execute CheckOutWorkflow with parameter to ignore running process payment activity again.
                var isIgnoreProcessPayment = new Dictionary <string, object> {
                    { "PreventProcessPayment", true }
                };
                var workflowResults = OrderGroupWorkflowManager.RunWorkflow((OrderGroup)cart,
                                                                            OrderGroupWorkflowManager.CartCheckOutWorkflowName, true, isIgnoreProcessPayment);

                var warnings = workflowResults.OutputParameters["Warnings"] as StringDictionary;
                isSuccess = warnings.Count == 0;

                foreach (string message in warnings.Values)
                {
                    errorMessages.Add(message);
                }
            }

            return(isSuccess);
        }
Ejemplo n.º 3
0
        protected virtual bool DoCompletingCart(ICart cart, IList <string> errorMessages)
        {
            var isSuccess = true;

            if (_featureSwitch.IsSerializedCartsEnabled())
            {
                var validationIssues = new Dictionary <ILineItem, IList <ValidationIssue> >();
                cart.AdjustInventoryOrRemoveLineItems(
                    (item, issue) => AddValidationIssues(validationIssues, item, issue), _inventoryProcessor);

                isSuccess = !validationIssues.Any();

                foreach (var issue in validationIssues.Values.SelectMany(x => x).Distinct())
                {
                    if (issue == ValidationIssue.RemovedDueToInsufficientQuantityInInventory)
                    {
                        errorMessages.Add("Not enough in stock.");
                    }
                    else
                    {
                        errorMessages.Add("Cart validation failure.");
                    }
                }

                return(isSuccess);
            }

            var isIgnoreProcessPayment = new Dictionary <string, object> {
                { "PreventProcessPayment", true }
            };
            var workflowResults = OrderGroupWorkflowManager.RunWorkflow((OrderGroup)cart,
                                                                        OrderGroupWorkflowManager.CartCheckOutWorkflowName, true, isIgnoreProcessPayment);

            if (workflowResults.OutputParameters["Warnings"] is StringDictionary warnings)
            {
                isSuccess = warnings.Count == 0;

                foreach (string message in warnings.Values)
                {
                    errorMessages.Add(message);
                }
            }

            return(isSuccess);
        }