/// <summary> /// Construct the <see cref="OrderFlow"/> /// </summary> /// <param name="name">The name of the order flow</param> /// <param name="routeNames">The names of the routes that should make up the order flow.</param> public OrderFlow(string name, string[] routeNames) { this.name = name; for (var i = 0; i < routeNames.Length; i += 1) { var routeName = routeNames[i]; if (orderFlowSteps.Any(s => s.Name == name)) { throw new ArgumentException("routeNames", "Duplicate route names."); } var orderFlowStep = new OrderFlowStep { Previous = "", Name = routeName, Next = "", StepNumber = i + 1 }; if (i > 0) { orderFlowStep.Previous = routeNames[i - 1]; } if (i < routeNames.Length - 1) { orderFlowStep.Next = routeNames[i + 1]; } this.orderFlowSteps.Add(orderFlowStep); this.stepIndex[routeName] = orderFlowStep; } }
/// <summary> /// Adds <see cref="Atomia.Store.AspNetMvc.Models.OrderFlowModel"/> to ViewBag. /// </summary> private void PopulateViewBag(ActionExecutingContext filterContext, OrderFlow orderFlow, OrderFlowStep currentStep, bool isQueryStringBased) { var resourceProvider = DependencyResolver.Current.GetService<IResourceProvider>(); var orderFlowModel = new OrderFlowModel { IsQueryStringBased = isQueryStringBased, Name = orderFlow.Name, Steps = orderFlow.Steps.Select(s => new OrderFlowStepModel { Name = s.Name, Previous = s.Previous, Next = s.Next, StepNumber = s.StepNumber, Title = resourceProvider.GetResource("StepTitle" + s.Name), Description = resourceProvider.GetResource("StepDescription" + s.Name) }), CurrentStep = new OrderFlowStepModel { Name = currentStep.Name, Previous = currentStep.Previous, Next = currentStep.Next, StepNumber = currentStep.StepNumber, Title = resourceProvider.GetResource("StepTitle" + currentStep.Name), Description = resourceProvider.GetResource("StepDescription" + currentStep.Name) } }; filterContext.Controller.ViewBag.OrderFlow = orderFlowModel; }
/// <summary> /// Validates <see cref="Atomia.Store.AspNetMvc.Models.OrderFlowModel"/> for current step. /// </summary> private void ValidateOrderFlowStep(ActionExecutingContext filterContext, OrderFlow orderFlow, OrderFlowStep currentOrderFlowStep) { var orderFlowValidator = DependencyResolver.Current.GetService<IOrderFlowValidator>(); var validationMessages = orderFlowValidator.ValidateOrderFlowStep(orderFlow, currentOrderFlowStep); if (validationMessages.Count() > 0) { // TODO: Make messages available to next controller via flash message provider filterContext.Result = new RedirectToRouteResult(currentOrderFlowStep.Previous, new RouteValueDictionary()); } }