public virtual CheckoutViewModel CreateCheckoutViewModel(ICart cart, CheckoutPage currentPage, IPaymentMethod paymentMethod = null) { if (cart == null) { return(CreateEmptyCheckoutViewModel(currentPage)); } var currentShippingAddressId = cart.GetFirstShipment()?.ShippingAddress?.Id; var currentBillingAdressId = cart.GetFirstForm().Payments.FirstOrDefault()?.BillingAddress?.Id; var shipments = _shipmentViewModelFactory.CreateShipmentsViewModel(cart).ToList(); var useBillingAddressForShipment = shipments.Count == 1 && currentBillingAdressId == currentShippingAddressId && _addressBookService.UseBillingAddressForShipment(); var payments = _paymentMethodViewModelFactory.CreatePaymentMethodSelectionViewModel(paymentMethod); paymentMethod = payments.SelectedPaymentMethod.PaymentMethod; var viewModel = new CheckoutViewModel { CurrentPage = currentPage, Shipments = shipments, BillingAddress = CreateBillingAddressModel(), UseBillingAddressForShipment = useBillingAddressForShipment, StartPage = _contentLoader.Get <StartPage>(ContentReference.StartPage), AppliedCouponCodes = cart.GetFirstForm().CouponCodes.Distinct(), AvailableAddresses = new List <AddressModel>(), ReferrerUrl = GetReferrerUrl(), Payment = paymentMethod, }; 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, currentShippingAddressId); _addressBookService.LoadAddress(viewModel.BillingAddress); PopulateCountryAndRegions(viewModel); viewModel.KlarnaCheckoutPaymentMethodSelected = viewModel.Payment?.SystemKeyword == Constants.KlarnaCheckoutSystemKeyword; return(viewModel); }
public PartialViewResult SetPaymentMethod(Guid paymentMethodId) { var viewModel = _paymentMethodViewModelFactory.CreatePaymentMethodSelectionViewModel(paymentMethodId); return(PartialView("_PaymentMethodSelection", viewModel)); }