예제 #1
0
        public virtual async Task <IHttpActionResult> CompleteCheckout(CompleteCheckoutRequest request)
        {
            if (request == null)
            {
                return(BadRequest("No request body found."));
            }

            var nextStepUrl = CartUrlProvider.GetCheckoutStepUrl(new GetCheckoutStepUrlParam
            {
                CultureInfo = ComposerContext.CultureInfo,
                StepNumber  = request.CurrentStep + 1
            });

            var checkoutViewModel = await CheckoutService.CompleteCheckoutAsync(new CompleteCheckoutParam
            {
                CartName    = CartConfiguration.ShoppingCartName,
                CustomerId  = ComposerContext.CustomerId,
                CultureInfo = ComposerContext.CultureInfo,
                Scope       = ComposerContext.Scope,
                BaseUrl     = RequestUtils.GetBaseUrl(Request).ToString(),
            });

            checkoutViewModel.NextStepUrl = nextStepUrl;

            return(Ok(checkoutViewModel));
        }
        //TODO: Change the method name for GetAdressListAsync or something similar because it confuse people
        public virtual async Task <IHttpActionResult> GetShippingAddressAsync()
        {
            var checkoutAddressStepUrl = CartUrlProvider.GetCheckoutStepUrl(new GetCheckoutStepUrlParam
            {
                CultureInfo = ComposerContext.CultureInfo,
                StepNumber  = 1,
            });


            var urlParam = new BaseUrlParameter {
                CultureInfo = ComposerContext.CultureInfo,
                ReturnUrl   = checkoutAddressStepUrl
            };
            var addressListUrl     = MyAccountUrlProvider.GetAddressListUrl(urlParam);
            var addAddressUrl      = CartUrlProvider.GetCheckoutAddAddressUrl(urlParam);
            var editAddressBaseUrl = CartUrlProvider.GetCheckoutUpdateAddressBaseUrl(urlParam);

            var viewModel = await CustomerAddressViewService.GetAddressListViewModelAsync(new GetAddressListViewModelParam
            {
                CustomerId         = ComposerContext.CustomerId,
                CultureInfo        = ComposerContext.CultureInfo,
                Scope              = ComposerContext.Scope,
                AddAddressUrl      = addAddressUrl,
                EditAddressBaseUrl = editAddressBaseUrl,
                CountryCode        = ComposerContext.CountryCode
            });

            return(Ok(viewModel));
        }
예제 #3
0
        public virtual async Task <IHttpActionResult> UpdateCart(UpdateCartRequest updateCartRequest)
        {
            if (updateCartRequest == null)
            {
                return(BadRequest("updateCartRequest is required"));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var getCartUrlParam = new BaseUrlParameter
            {
                CultureInfo = ComposerContext.CultureInfo
            };

            var checkoutStepInfos = CartUrlProvider.GetCheckoutStepPageInfos(getCartUrlParam);

            var nextStepUrl = CartUrlProvider.GetCheckoutStepUrl(new GetCheckoutStepUrlParam
            {
                CultureInfo = ComposerContext.CultureInfo,
                StepNumber  = updateCartRequest.CurrentStep.GetValueOrDefault() + 1
            });

            var getCartParam = new GetCartParam
            {
                Scope       = ComposerContext.Scope,
                CultureInfo = ComposerContext.CultureInfo,
                CustomerId  = ComposerContext.CustomerId,
                CartName    = CartConfiguration.ShoppingCartName,
                BaseUrl     = RequestUtils.GetBaseUrl(Request).ToString(),
            };

            var updateCheckoutCartParam = new UpdateCheckoutCartParam
            {
                GetCartParam = getCartParam,
                CurrentStep  = updateCartRequest.CurrentStep.GetValueOrDefault(),
                IsGuest      = ComposerContext.IsGuest,
                UpdateValues = updateCartRequest.UpdatedCart
            };

            var homepageUrl = GetHomepageUrl();

            var updateCartResultViewModel = await CheckoutService.UpdateCheckoutCartAsync(updateCheckoutCartParam);

            SetHomepageUrl(updateCartResultViewModel.Cart, homepageUrl);
            SetEditCartUrl(updateCartResultViewModel.Cart);

            if (updateCartResultViewModel.Cart.OrderSummary != null)
            {
                updateCartResultViewModel.Cart.OrderSummary.CheckoutStepUrls = checkoutStepInfos.Values.Select(x => x.Url).ToList();
            }

            if (!updateCartResultViewModel.HasErrors)
            {
                updateCartResultViewModel.NextStepUrl = nextStepUrl;
            }

            return(Ok(updateCartResultViewModel));
        }
예제 #4
0
 protected void SetEditCartUrl(CartViewModel cartViewModel, BaseUrlParameter getUrlParam)
 {
     if (cartViewModel.OrderSummary != null)
     {
         var cartUrl = CartUrlProvider.GetCartUrl(getUrlParam);
         cartViewModel.OrderSummary.EditCartUrlTarget = cartUrl;
     }
 }
예제 #5
0
 protected virtual void SetCheckoutUrl(CartViewModel cartViewModel, BaseUrlParameter getUrlParam)
 {
     if (cartViewModel.OrderSummary != null)
     {
         var checkoutUrl = CartUrlProvider.GetCheckoutPageUrl(getUrlParam);
         cartViewModel.OrderSummary.CheckoutUrlTarget = checkoutUrl;
     }
 }
예제 #6
0
        protected virtual string GetCartUrl()
        {
            var getCartUrlParam = new BaseUrlParameter
            {
                CultureInfo = ComposerContext.CultureInfo
            };

            return(CartUrlProvider.GetCartUrl(getCartUrlParam));
        }
예제 #7
0
        protected virtual void SetHomepageUrl(CartViewModel cartViewModel, BaseUrlParameter getUrlParam)
        {
            if (cartViewModel != null)
            {
                var homepageUrl = CartUrlProvider.GetHomepageUrl(getUrlParam);

                cartViewModel.HomepageUrl = homepageUrl;
            }
        }
예제 #8
0
        protected virtual string GetHomepageUrl()
        {
            var homepageUrl = CartUrlProvider.GetHomepageUrl(new BaseUrlParameter
            {
                CultureInfo = ComposerContext.CultureInfo
            });

            return(homepageUrl);
        }
예제 #9
0
        protected virtual CartViewModel GetCartViewModel()
        {
            var cartViewModel = new CartViewModel
            {
                IsLoading   = true,
                HomepageUrl = CartUrlProvider.GetHomepageUrl(new BaseUrlParameter
                {
                    CultureInfo = ComposerContext.CultureInfo
                })
            };

            return(cartViewModel);
        }
예제 #10
0
        public virtual ActionResult Minicart(int notificationTimeInSeconds)
        {
            var minicartViewModel = new MinicartViewModel
            {
                NotificationTimeInMilliseconds = notificationTimeInSeconds * 1000,
                Url = CartUrlProvider.GetCartUrl(new BaseUrlParameter
                {
                    CultureInfo = ComposerContext.CultureInfo,
                })
            };

            return(View(minicartViewModel));
        }
예제 #11
0
        protected void SetEditCartUrl(CartViewModel cartViewModel)
        {
            if (cartViewModel.OrderSummary != null)
            {
                var getCartUrlParam = new BaseUrlParameter
                {
                    CultureInfo = ComposerContext.CultureInfo
                };

                var cartUrl = CartUrlProvider.GetCartUrl(getCartUrlParam);

                cartViewModel.OrderSummary.EditCartUrlTarget = cartUrl;
            }
        }
예제 #12
0
        public virtual async Task <IHttpActionResult> GetCart()
        {
            var homepageUrl = GetHomepageUrl();

            var cartViewModel = await CartService.GetCartViewModelAsync(new GetCartParam
            {
                Scope       = ComposerContext.Scope,
                CultureInfo = ComposerContext.CultureInfo,
                CustomerId  = ComposerContext.CustomerId,
                CartName    = CartConfiguration.ShoppingCartName,
                BaseUrl     = RequestUtils.GetBaseUrl(Request).ToString(),
            });

            SetHomepageUrl(cartViewModel, homepageUrl);
            SetEditCartUrl(cartViewModel);

            if (cartViewModel.OrderSummary != null)
            {
                var checkoutUrlTarget = GetCheckoutUrl();
                var checkoutStepInfos = CartUrlProvider.GetCheckoutStepPageInfos(new BaseUrlParameter
                {
                    CultureInfo = ComposerContext.CultureInfo
                });
                //Build redirect url in case of the customer try to access an unauthorized step.
                var stepNumber = cartViewModel.OrderSummary.CheckoutRedirectAction.LastCheckoutStep;
                if (!checkoutStepInfos.ContainsKey(stepNumber))
                {
                    return(BadRequest("StepNumber is invalid"));
                }

                var checkoutStepInfo = checkoutStepInfos[stepNumber];

                //If the cart contains recurring items and user is not authenticated, redirect to sign in
                if (RecurringOrdersSettings.Enabled && cartViewModel.HasRecurringLineitems && !ComposerContext.IsAuthenticated)
                {
                    cartViewModel.OrderSummary.CheckoutRedirectAction.RedirectUrl = checkoutUrlTarget;
                }
                else
                {
                    cartViewModel.OrderSummary.CheckoutRedirectAction.RedirectUrl = checkoutStepInfo.Url;
                }
                cartViewModel.OrderSummary.CheckoutStepUrls  = checkoutStepInfos.Values.Select(x => x.Url).ToList();
                cartViewModel.OrderSummary.CheckoutUrlTarget = checkoutUrlTarget;
            }

            return(Ok(cartViewModel));
        }
예제 #13
0
        protected virtual string GetCheckoutUrl()
        {
            var getCartUrlParam = new BaseUrlParameter
            {
                CultureInfo = ComposerContext.CultureInfo
            };

            var checkoutStepInfos = CartUrlProvider.GetCheckoutStepPageInfos(getCartUrlParam);

            var checkoutSignInUrl = CartUrlProvider.GetCheckoutSignInUrl(new BaseUrlParameter
            {
                CultureInfo = ComposerContext.CultureInfo,
                ReturnUrl   = ComposerContext.IsAuthenticated ? null : checkoutStepInfos[1].Url
            });

            var checkoutUrlTarget = ComposerContext.IsAuthenticated ? checkoutStepInfos[1].Url : checkoutSignInUrl;

            return(checkoutUrlTarget);
        }
예제 #14
0
        public virtual async Task <IHttpActionResult> CompleteCheckout()
        {
            var checkoutViewModel = await CheckoutService.CompleteCheckoutAsync(new CompleteCheckoutParam
            {
                CartName    = CartConfiguration.ShoppingCartName,
                CustomerId  = ComposerContext.CustomerId,
                CultureInfo = ComposerContext.CultureInfo,
                Scope       = ComposerContext.Scope,
                BaseUrl     = RequestUtils.GetBaseUrl(Request).ToString(),
            });

            checkoutViewModel.NextStepUrl = CartUrlProvider.GetCheckoutConfirmationPageUrl(
                new BaseUrlParameter {
                CultureInfo = ComposerContext.CultureInfo
            });

            checkoutViewModel.IsAuthenticated = ComposerContext.IsAuthenticated;

            return(Ok(checkoutViewModel));
        }
예제 #15
0
 protected virtual void SetForgotPasswordPageUrl(CartViewModel cartViewModel, BaseUrlParameter getUrlParam)
 {
     cartViewModel.ForgotPasswordUrl = CartUrlProvider.GetForgotPasswordPageUrl(getUrlParam);
 }