/// <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); }
/// <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); }
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); }