public override void SetModel(IPaymentModel model, IStringResourceProvider stringResourceProvider)
    {
        base.SetModel(model, stringResourceProvider);

        PaymentFormAndBillingAddress.SetModel(model, stringResourceProvider);
    }
    private void BindPaymentMethods()
    {
        if (Model != null)
        {
            var activePaymentMethod = this.Model.ActivePaymentMethod;
            PaymentFormAndBillingAddress.BindView();

            var havePayPalEmbedded = this.Model.PaymentMethods.Any(s => s.Value.PaymentType == PaymentType.PayPalEmbeddedCheckout);
            var havePayPalExpress  = this.Model.PaymentMethods.Any(s => s.Value.PaymentType == PaymentType.PayPalExpress);
            var havePayPalStandard = this.Model.PaymentMethods.Any(s => s.Value.PaymentType == PaymentType.PayPal);

            bool payPalExpressCheckout = IsPayPalExpressCheckout(activePaymentMethod, havePayPalExpress);

            DefaultToPayPalEmbedded(activePaymentMethod, payPalExpressCheckout, havePayPalEmbedded);

            foreach (var kvp in this.Model.PaymentMethods)
            {
                PaymentMethodBaseModel method = kvp.Value;
                switch (method.PaymentType)
                {
                case PaymentType.CreditCard:
                {
                    // if we have Paypal Advanced, then let them handle CC Processing
                    if (!havePayPalEmbedded)
                    {
                        ActivatePaymentMethodChoice(PanelCreditCardMethod, RadioCreditCard);

                        IEnumerable <CreditCardType> cardTypes = ((CreditCardPaymentModel)method).AllowedCardTypes;

                        ImageCardTypeVisa.Visible       = cardTypes.Any(f => f.CardType == CreditCardTypeEnum.Visa);
                        ImageCardTypeMastercard.Visible = cardTypes.Any(f => f.CardType == CreditCardTypeEnum.MasterCard);
                        ImageCardTypeAmex.Visible       = cardTypes.Any(f => f.CardType == CreditCardTypeEnum.AmericanExpress);
                        ImageCardTypeDiscover.Visible   = cardTypes.Any(f => f.CardType == CreditCardTypeEnum.Discover);
                        ImageCardTypeSolo.Visible       = cardTypes.Any(f => f.CardType == CreditCardTypeEnum.Solo);
                        ImageCardTypeMaestro.Visible    = cardTypes.Any(f => f.CardType == CreditCardTypeEnum.Maestro);
                    }
                }; break;

                case PaymentType.CheckByMail:
                {
                    ActivatePaymentMethodChoice(PanelCheckMoneyOrderMethod, RadioCheckByMail);
                }; break;

                case PaymentType.RequestAQuote:
                {
                    ActivatePaymentMethodChoice(PanelRequestQuote, RadioRequestQuote);
                }; break;

                case PaymentType.PurchaseOrder:
                {
                    ActivatePaymentMethodChoice(PanelPurchaseOrderMethod, RadioPurchaseOrder);
                }; break;

                case PaymentType.MicroPay:
                {
                    ActivatePaymentMethodChoice(PanelMicroPayMethod, RadioMicroPay);
                }; break;

                case PaymentType.COD:
                {
                    ActivatePaymentMethodChoice(PanelCodMethod, RadioCod);
                }; break;

                case PaymentType.CheckoutByAmazon:
                {
                    if (IsCheckoutByAmazonCheckingOut())
                    {
                        PanelCheckoutByAmazon.Visible = true;
                        RadioCheckoutByAmazon.Visible = true;
                        RadioCheckoutByAmazon.Enabled = true;
                        RadioCheckoutByAmazon.Checked = false;
                    }
                }; break;

                case PaymentType.MoneybookersQuickCheckout:
                {
                    ActivatePaymentMethodChoice(PanelMoneybookersQuickCheckout, RadioMoneybookersQuickCheckout);
                } break;

                case PaymentType.PayPalEmbeddedCheckout:
                {
                    // PayPal Advanced enables PayPal Express
                    // So make sure this isn't an express checkout originating from the cart page.
                    if (!payPalExpressCheckout)
                    {
                        ActivatePaymentMethodChoice(PanelPayPalEmbeddedCheckout, RadioPayPalEmbeddedCheckout);
                    }
                } break;

                case PaymentType.PayPalExpress:
                {
                    // Show PayPal Express if Embedded is not enabled or we are using Express to Checkout.
                    if (payPalExpressCheckout || !havePayPalEmbedded)
                    {
                        ActivatePaymentMethodChoice(PanelPaypalExpressMethod, RadioPayPalExpress);
                    }
                } break;

                case PaymentType.PayPal:
                {
                    // Only allow PayPal standard if not using express and embedded
                    if (!havePayPalExpress && !havePayPalEmbedded)
                    {
                        ActivatePaymentMethodChoice(PanelPayPalMethod, RadioPayPal);
                    }
                } break;

                case PaymentType.ECheck:
                {
                    ActivatePaymentMethodChoice(PanelECheck, RadioECheck);
                } break;
                }
            }
        }
    }