Exemple #1
0
        private IList <AddressModel> GetAddresses(MultiAddressViewModel viewModel)
        {
            var addresses      = new List <AddressModel>();
            var savedAddresses = _addressBookService.List();
            var orderAddresses = CartWithValidationIssues.Cart.GetFirstForm()
                                 .Shipments
                                 .Select(x => x.ShippingAddress)
                                 .Where(x => x != null);

            foreach (var addressId in viewModel.CartItems.Select(x => x.AddressId).Distinct())
            {
                var address = new AddressModel {
                    AddressId = addressId
                };
                var savedAddress = savedAddresses.FirstOrDefault(x => x.AddressId.Equals(addressId));
                if (savedAddress != null)
                {
                    _addressBookService.LoadAddress(address);
                    addresses.Add(address);
                    continue;
                }

                var orderAddress = orderAddresses.FirstOrDefault(x => x.Id.Equals(addressId));
                if (orderAddress == null)
                {
                    continue;
                }
                addresses.Add(_addressBookService.ConvertToModel(orderAddress));
            }


            return(addresses);
        }
        //public virtual MultiShipmentViewModel CreateMultiShipmentViewModel(ICart cart, MultiShipmentPage multiShipmentPage, bool isAuthenticated)
        //{
        //    var viewModel = new MultiShipmentViewModel(multiShipmentPage)
        //    {
        //        AvailableAddresses = GetAvailableShippingAddresses(cart),
        //        CartItems = cart != null ? FlattenCartItems(_shipmentViewModelFactory.CreateShipmentsViewModel(cart).SelectMany(x => x.CartItems)) : new CartItemViewModel[0],
        //        ReferrerUrl = GetReferrerUrl()
        //    };

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

        //    return viewModel;
        //}

        public virtual MultiAddressViewModel CreateMultiShipmentViewModel(ICart cart, CheckoutPage checkoutPage, bool isAuthenticated)
        {
            var viewModel = new MultiAddressViewModel(checkoutPage)
            {
                AvailableAddresses                            = GetAvailableShippingAddresses(cart),
                CartItems                                     = cart != null?FlattenCartItems(_shipmentViewModelFactory.CreateShipmentsViewModel(cart).SelectMany(x => x.CartItems)) : Array.Empty <CartItemViewModel>(),
                                                  ReferrerUrl = GetReferrerUrl(),
            };

            if (!isAuthenticated && !viewModel.AvailableAddresses.Any())
            {
                UpdateShippingAddressesForAnonymous(viewModel);
            }

            return(viewModel);
        }
        //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);
        //    }
        //}

        private void UpdateShippingAddressesForAnonymous(MultiAddressViewModel 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);
            }
        }