/// <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;
        }
示例#3
0
        /// <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>
        /// 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());
            }
        }