public virtual async Task <IHttpActionResult> UpdateAccountAsync(EditAccountRequest request)
        {
            var param = new UpdateAccountParam
            {
                CustomerId        = ComposerContext.CustomerId,
                Scope             = ComposerContext.Scope,
                PreferredLanguage = request.PreferredLanguage,
                Email             = request.Email,
                FirstName         = request.FirstName,
                LastName          = request.LastName,
                CultureInfo       = ComposerContext.CultureInfo,
            };

            var urlParam = new BaseUrlParameter {
                CultureInfo = param.CultureInfo
            };
            var addressListUrl    = MyAccountUrlProvider.GetAddressListUrl(urlParam);
            var changePasswordUrl = MyAccountUrlProvider.GetChangePasswordUrl(urlParam);

            var viewModel = await CustomerViewService.UpdateAccountAsync(param);

            if (viewModel == null)
            {
                return(Unauthorized());
            }

            viewModel.AddressListUrl    = addressListUrl;
            viewModel.ChangePasswordUrl = changePasswordUrl;

            return(Ok(viewModel));
        }
        public virtual async Task <IHttpActionResult> UpdateAddressAsync(Guid id, EditAddressRequest request)
        {
            var returnUrl = request.ReturnUrl;

            if (string.IsNullOrWhiteSpace(returnUrl) || !UrlFormatter.IsReturnUrlValid(RequestUtils.GetBaseUrl(Request).ToString(), returnUrl))
            {
                returnUrl = MyAccountUrlProvider.GetAddressListUrl(new BaseUrlParameter {
                    CultureInfo = ComposerContext.CultureInfo
                });
            }

            var viewModel = await CustomerAddressViewService.UpdateAddressAsync(new EditAddressParam
            {
                CustomerId  = ComposerContext.CustomerId,
                CultureInfo = ComposerContext.CultureInfo,
                Scope       = ComposerContext.Scope,
                EditAddress = request,
                AddressId   = id,
                ReturnUrl   = returnUrl
            });

            if (viewModel == null)
            {
                return(Unauthorized());
            }

            return(Ok(viewModel));
        }
        //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));
        }
        public virtual ActionResult UpdateAccount()
        {
            var urlParam = new BaseUrlParameter
            {
                CultureInfo = ComposerContext.CultureInfo
            };
            var changePasswordUrl = MyAccountUrlProvider.GetChangePasswordUrl(urlParam);
            var addressListUrl    = MyAccountUrlProvider.GetAddressListUrl(urlParam);

            var param = new GetUpdateAccountViewModelParam
            {
                Scope       = ComposerContext.Scope,
                CultureInfo = ComposerContext.CultureInfo,
                CustomerId  = ComposerContext.CustomerId
            };

            var viewModel = CustomerViewService.GetUpdateAccountViewModelAsync(param).Result;

            viewModel.ChangePasswordUrl = changePasswordUrl;
            viewModel.AddressListUrl    = addressListUrl;

            return(View("UpdateAccountBlade", viewModel));
        }
        public virtual MenuViewModel CreateMenu(string currentUrl)
        {
            var urlParam = new BaseUrlParameter
            {
                CultureInfo = ComposerContext.CultureInfo
            };

            bool recurringOrderConfigEnabled = RecurringOrdersSettings.Enabled;
            var  myAccountUrl      = MyAccountUrlProvider.GetMyAccountUrl(urlParam);
            var  addressListUrl    = MyAccountUrlProvider.GetAddressListUrl(urlParam);
            var  myOrderHistoryUrl = OrderUrlProvider.GetOrderHistoryUrl(new GetOrderUrlParameter {
                CultureInfo = ComposerContext.CultureInfo
            });
            var myWishListUrl = WishListUrlProvider.GetWishListUrl(new GetWishListUrlParam {
                CultureInfo = ComposerContext.CultureInfo
            });
            var myRecurringScheduleUrl = RecurringScheduleUrlProvider.GetRecurringScheduleUrl(new GetRecurringScheduleUrlParam {
                CultureInfo = ComposerContext.CultureInfo
            });

            var currentPageId = new Guid(currentUrl);

            var menu = new MenuViewModel {
                MenuItems = new List <MenuItemViewModel>()
            };
            var pageConfiguration       = SiteConfiguration.GetPagesConfiguration(ComposerContext.CultureInfo, WebsiteContext.WebsiteId);
            var myAccountPage           = PageService.GetPage(pageConfiguration.MyAccountPageId, ComposerContext.CultureInfo);
            var myAddressPage           = PageService.GetPage(pageConfiguration.AddressListPageId, ComposerContext.CultureInfo);
            var myOrderHistoryPage      = PageService.GetPage(pageConfiguration.OrderHistoryPageId, ComposerContext.CultureInfo);
            var myWishListage           = PageService.GetPage(pageConfiguration.MyWishListPageId, ComposerContext.CultureInfo);
            var myRecurringSchedulePage = PageService.GetPage(RecurringOrdersSettings.RecurringSchedulePageId, ComposerContext.CultureInfo);

            var myAccountMenuItem = new MenuItemViewModel
            {
                Name     = myAccountPage.MenuTitle,
                Url      = myAccountUrl,
                IsActive = currentPageId == pageConfiguration.MyAccountPageId ||
                           currentPageId == pageConfiguration.ChangePasswordPageId
            };

            var myAdressesMenuItem = new MenuItemViewModel
            {
                Name     = myAddressPage.MenuTitle,
                Url      = addressListUrl,
                IsActive = currentPageId == pageConfiguration.AddressListPageId ||
                           currentPageId == pageConfiguration.AddAddressPageId ||
                           currentPageId == pageConfiguration.UpdateAddressPageId
            };

            var myWishListMenuItem = new MenuItemViewModel
            {
                Name     = myWishListage.MenuTitle,
                Url      = myWishListUrl,
                IsActive = currentPageId == pageConfiguration.MyWishListPageId
            };

            var myOrderHistoryMenuItem = new MenuItemViewModel
            {
                Name     = myOrderHistoryPage.MenuTitle,
                Url      = myOrderHistoryUrl,
                IsActive = currentPageId == pageConfiguration.OrderHistoryPageId ||
                           currentPageId == pageConfiguration.OrderDetailsPageId ||
                           currentPageId == RecurringOrdersSettings.RecurringCartDetailsPageId
            };

            var myRecurringScheduleMenuItem = new MenuItemViewModel
            {
                Name     = myRecurringSchedulePage.MenuTitle,
                Url      = myRecurringScheduleUrl,
                IsActive = currentPageId == RecurringOrdersSettings.RecurringSchedulePageId || currentPageId == RecurringOrdersSettings.RecurringScheduleDetailsPageId
            };

            menu.MenuItems.AddRange(new List <MenuItemViewModel> {
                myAccountMenuItem, myWishListMenuItem, myAdressesMenuItem, myOrderHistoryMenuItem
            });

            if (recurringOrderConfigEnabled)
            {
                menu.MenuItems.Add(myRecurringScheduleMenuItem);
            }

            return(menu);
        }