public virtual CheckoutViewModel CreateCheckoutViewModel(ICart cart, CheckoutPage currentPage, IPaymentMethodViewModel<PaymentMethodBase> paymentViewModel = null) { if (cart == null) { return CreateEmptyCheckoutViewModel(currentPage); } var shipments = _shipmentViewModelFactory.CreateShipmentsViewModel(cart).ToList(); var viewModel = new CheckoutViewModel { CurrentPage = currentPage, Shipments = shipments, BillingAddress = CreateBillingAddressModel(), UseBillingAddressForShipment = shipments.Count == 1 && _addressBookService.UseBillingAddressForShipment(), StartPage = _contentLoader.Get<StartPage>(ContentReference.StartPage), AppliedCouponCodes = cart.GetFirstForm().CouponCodes.Distinct(), AvailableAddresses = new List<AddressModel>(), ReferrerUrl = GetReferrerUrl(), Payment = paymentViewModel, }; UpdatePayment(viewModel); var availableAddresses = GetAvailableAddresses(); if (availableAddresses.Any()) { viewModel.AvailableAddresses.Add(new AddressModel { Name = _localizationService.GetString("/Checkout/MultiShipment/SelectAddress") }); foreach (var address in availableAddresses) { viewModel.AvailableAddresses.Add(address); } } else { viewModel.AvailableAddresses.Add(new AddressModel { Name = _localizationService.GetString("/Checkout/MultiShipment/NoAddressFound") }); } SetDefaultShipmentAddress(viewModel); _addressBookService.LoadAddress(viewModel.BillingAddress); PopulateCountryAndRegions(viewModel); return viewModel; }
private void PopulateCountryAndRegions(CheckoutViewModel viewModel) { foreach (var shipment in viewModel.Shipments) { _addressBookService.LoadCountriesAndRegionsForAddress(shipment.Address); } }
private void UpdatePayment(CheckoutViewModel viewModel) { viewModel.PaymentMethodViewModels = _paymentMethodViewModelFactory.GetPaymentMethodViewModels(); var selectedPaymentMethod = viewModel.Payment == null ? viewModel.PaymentMethodViewModels.First() : viewModel.PaymentMethodViewModels.Single(p => p.SystemName == viewModel.Payment.SystemName); viewModel.Payment = PaymentMethodViewModelResolver.Resolve(selectedPaymentMethod.SystemName, _orderFactory); viewModel.Payment.Description = selectedPaymentMethod.Description; viewModel.Payment.SystemName = selectedPaymentMethod.SystemName; viewModel.Payment.PaymentMethod.PaymentMethodId = selectedPaymentMethod.PaymentMethodId; }
private void SetDefaultShipmentAddress(CheckoutViewModel viewModel) { if (viewModel.Shipments.Count == 1) { viewModel.Shipments[0].Address = viewModel.AvailableAddresses.SingleOrDefault(x => x.ShippingDefault) ?? viewModel.BillingAddress; } }