Пример #1
0
        public ActionResult Index(MultiShipmentPage currentPage, MultiShipmentViewModel viewModel)
        {
            if (viewModel.CartItems == null || !viewModel.CartItems.Any())
            {
                var home = Url.ContentUrl(ContentReference.StartPage);
                return(Redirect(home));
            }

            for (var i = 0; i < viewModel.CartItems.Count(); i++)
            {
                if (string.IsNullOrEmpty(viewModel.CartItems[i].AddressId))
                {
                    ModelState.AddModelError(string.Format("CartItems[{0}].AddressId", i), _localizationService.GetString("/Checkout/MultiShipment/Empty/AddressId"));
                }
            }

            if (!ModelState.IsValid)
            {
                return(View(_checkoutViewModelFactory.CreateMultiShipmentViewModel(Cart, User.Identity.IsAuthenticated)));
            }

            _cartService.RecreateLineItemsBasedOnShipments(Cart, viewModel.CartItems, GetAddresses(viewModel));

            _orderRepository.Save(Cart);

            return(RedirectToAction("Index", new { node = currentPage.ParentLink }));
        }
Пример #2
0
        private void UpdateShippingAddressesForAnonymous(MultiShipmentViewModel viewModel)
        {
            foreach (var item in viewModel.CartItems)
            {
                var anonymousShippingAddress = new AddressModel
                {
                    AddressId   = Guid.NewGuid().ToString(),
                    Name        = Guid.NewGuid().ToString(),
                    CountryCode = "USA"
                };

                item.AddressId = anonymousShippingAddress.AddressId;
                _addressBookService.LoadCountriesAndRegionsForAddress(anonymousShippingAddress);
                viewModel.AvailableAddresses.Add(anonymousShippingAddress);
            }
        }
Пример #3
0
        public virtual MultiShipmentViewModel CreateMultiShipmentViewModel(ICart cart, bool isAuthenticated)
        {
            var viewModel = new MultiShipmentViewModel
            {
                StartPage                                     = _contentLoader.Get <StartPage>(ContentReference.StartPage),
                AvailableAddresses                            = GetAvailableShippingAddresses(),
                CartItems                                     = cart != null?FlattenCartItems(_shipmentViewModelFactory.CreateShipmentsViewModel(cart).SelectMany(x => x.CartItems)) : new CartItemViewModel[0],
                                                  ReferrerUrl = GetReferrerUrl()
            };

            if (!isAuthenticated)
            {
                UpdateShippingAddressesForAnonymous(viewModel);
            }

            return(viewModel);
        }
        private IList <AddressModel> GetAddresses(MultiShipmentViewModel viewModel)
        {
            if (User.Identity.IsAuthenticated)
            {
                var addresses = new List <AddressModel>();

                foreach (var addressId in viewModel.CartItems.Select(x => x.AddressId).Distinct())
                {
                    var address = new AddressModel {
                        AddressId = addressId
                    };
                    _addressBookService.LoadAddress(address);
                    addresses.Add(address);
                }

                return(addresses);
            }

            return(_addressBookService.MergeAnonymousShippingAddresses(viewModel.AvailableAddresses, viewModel.CartItems));
        }
        public ActionResult Index(MultiShipmentPage currentPage, MultiShipmentViewModel viewModel)
        {
            for (var i = 0; i < viewModel.CartItems.Length; i++)
            {
                if (string.IsNullOrEmpty(viewModel.CartItems[i].AddressId))
                {
                    ModelState.AddModelError($"CartItems[{i}].AddressId", _localizationService.GetString("/Checkout/MultiShipment/Empty/AddressId"));
                }
            }

            if (!ModelState.IsValid)
            {
                return(View(_checkoutViewModelFactory.CreateMultiShipmentViewModel(Cart, User.Identity.IsAuthenticated)));
            }

            _cartService.RecreateLineItemsBasedOnShipments(Cart, viewModel.CartItems, GetAddresses(viewModel));

            _orderRepository.Save(Cart);

            return(RedirectToAction("Index", new { node = currentPage.ParentLink }));
        }