private void UpdatePayments(CheckoutViewModel viewModel, ICart cart) { viewModel.PaymentMethodViewModels = _paymentMethodViewModelFactory.GetPaymentMethodViewModels(); var methodViewModels = viewModel.PaymentMethodViewModels.ToList(); if (!methodViewModels.Any()) { return; } var defaultPaymentMethod = methodViewModels.FirstOrDefault(p => p.IsDefault) ?? methodViewModels.First(); var selectedPaymentMethod = viewModel.Payment == null ? defaultPaymentMethod : methodViewModels.Single(p => p.SystemKeyword == viewModel.Payment.SystemKeyword); viewModel.Payment = selectedPaymentMethod.PaymentOption; viewModel.Payments = methodViewModels.Where(x => cart.GetFirstForm().Payments.Any(p => p.PaymentMethodId == x.PaymentMethodId)) .Select(x => x.PaymentOption) .OfType <PaymentOptionBase>() .ToList(); foreach (var viewModelPayment in viewModel.Payments) { viewModelPayment.Amount = new Money( cart.GetFirstForm().Payments .FirstOrDefault(p => p.PaymentMethodId == viewModelPayment.PaymentMethodId)?.Amount ?? 0, cart.Currency); } if (!cart.GetFirstForm(). Payments.Any()) { return; } var method = methodViewModels.FirstOrDefault( x => x.PaymentMethodId == cart.GetFirstForm(). Payments.FirstOrDefault(). PaymentMethodId); if (method == null) { return; } viewModel.SelectedPayment = method.Description; var payment = cart.GetFirstForm(). Payments.FirstOrDefault(); var creditCardPayment = payment as ICreditCardPayment; if (creditCardPayment != null) { viewModel.SelectedPayment += $" - ({creditCardPayment.CreditCardNumber.Substring(creditCardPayment.CreditCardNumber.Length - 4)})"; } }
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var systemKeyword = bindingContext.ValueProvider.GetValue("SystemKeyword").AttemptedValue; var paymentMethodViewModels = _paymentMethodViewModelFactory.GetPaymentMethodViewModels(); var selectedPaymentMethod = paymentMethodViewModels.FirstOrDefault(p => p.SystemKeyword == systemKeyword); bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, selectedPaymentMethod.PaymentOption.GetType()); return(base.BindModel(controllerContext, bindingContext)); }
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; }
public Task BindModelAsync(ModelBindingContext bindingContext) { var systemKeyword = bindingContext.ValueProvider.GetValue("SystemKeyword").FirstValue; if (string.IsNullOrEmpty(systemKeyword)) { return(Task.CompletedTask); } var paymentMethodViewModels = _paymentMethodViewModelFactory.GetPaymentMethodViewModels(); var selectedPaymentMethod = paymentMethodViewModels.FirstOrDefault(p => p.SystemKeyword == systemKeyword); bindingContext.ModelMetadata = _modelMetadataProvider.GetMetadataForType(selectedPaymentMethod?.PaymentOption.GetType()); return(Task.CompletedTask); }