public virtual ManagerResponse SetPaymentMethods()

in src/Foundation/CommerceServer/code/Managers/CartManager.cs [470:529]


        public virtual ManagerResponse<CartResult, CommerceCart> SetPaymentMethods([NotNull] CommerceStorefront storefront, [NotNull] IVisitorContext visitorContext, [NotNull] PaymentInputModel inputModel)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNull(visitorContext, "visitorContext");
            Assert.ArgumentNotNull(inputModel, "inputModel");

            var addPaymentResponse = new ManagerResponse<CartResult, CommerceCart>(new AddPaymentInfoResult { Success = true }, null);
            var errorResponse = new AddPaymentInfoResult { Success = false };
            var response = this.GetCurrentCart(storefront, visitorContext, true);
            if (!response.ServiceProviderResult.Success || response.Result == null)
            {
                return new ManagerResponse<CartResult, CommerceCart>(errorResponse, response.Result);
            }

            var cart = (CommerceCart)response.ServiceProviderResult.Cart;
            if (inputModel.CreditCardPayment != null && !string.IsNullOrEmpty(inputModel.CreditCardPayment.PaymentMethodID) && inputModel.BillingAddress != null)
            {
                var removeBillingResponse = this.RemoveAllBillingParties(storefront, visitorContext, cart);
                if (!removeBillingResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(removeBillingResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = removeBillingResponse.Result;

                CommerceParty billingParty = inputModel.BillingAddress.ToNewBillingParty();

                var addPartyResponse = this.AddPartyToCart(storefront, visitorContext, cart, billingParty);
                if (!addPartyResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(addPartyResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = addPartyResponse.Result;

                var removePaymentResponse = this.RemoveAllPaymentMethods(storefront, visitorContext, cart);
                if (!removePaymentResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(removePaymentResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = removePaymentResponse.Result;

                CommerceCreditCardPaymentInfo creditCardPayment = inputModel.CreditCardPayment.ToCreditCardPaymentInfo();

                addPaymentResponse = this.AddPaymentInfoToCart(storefront, visitorContext, cart, creditCardPayment, billingParty, true);
                if (!addPaymentResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(addPaymentResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = addPaymentResponse.Result;
            }

            return addPaymentResponse;
        }