コード例 #1
0
        public static IEnumerable <IPaymentMethod> GetCustomerPaymentMethods(GetCustomerPaymentMethodsRequest request, IEnumerable <AutoOrder> autoOrders = null)
        {
            var methods = new List <IPaymentMethod>();

            if (!HttpContext.Current.Request.IsAuthenticated)
            {
                return(methods.AsEnumerable());
            }


            // Get the customer's billing info
            var billing = ExigoDAL.WebService().GetCustomerBilling(new GetCustomerBillingRequest
            {
                CustomerID = request.CustomerID
            });


            if (autoOrders == null)
            {
                // Get the customer's auto orders
                autoOrders = ExigoDAL.GetCustomerAutoOrders(request.CustomerID, includePaymentMethods: false);
            }


            methods.Add(new BankAccount(BankAccountType.Primary)
            {
                BankName      = string.Empty,
                NameOnAccount = billing.BankAccount.NameOnAccount,
                AccountNumber = billing.BankAccount.BankAccountNumberDisplay,
                RoutingNumber = billing.BankAccount.BankRoutingNumber,
                AutoOrderIDs  = autoOrders.Where(c => c.AutoOrderPaymentTypeID == AutoOrderPaymentTypes.DebitCheckingAccount).Select(c => c.AutoOrderID).ToArray(),

                BillingAddress = new Address()
                {
                    Address1 = billing.BankAccount.BillingAddress,
                    City     = billing.BankAccount.BillingCity,
                    State    = billing.BankAccount.BillingState,
                    Zip      = billing.BankAccount.BillingZip,
                    Country  = billing.BankAccount.BillingCountry
                }
            });


            methods.Add(new CreditCard(CreditCardType.Primary)
            {
                NameOnCard      = billing.PrimaryCreditCard.BillingName,
                CardNumber      = billing.PrimaryCreditCard.CreditCardNumberDisplay,
                ExpirationMonth = billing.PrimaryCreditCard.ExpirationMonth,
                ExpirationYear  = billing.PrimaryCreditCard.ExpirationYear,
                AutoOrderIDs    = autoOrders.Where(c => c.AutoOrderPaymentTypeID == AutoOrderPaymentTypes.PrimaryCreditCardOnFile).Select(c => c.AutoOrderID).ToArray(),

                BillingAddress = new Address()
                {
                    Address1 = billing.PrimaryCreditCard.BillingAddress,
                    City     = billing.PrimaryCreditCard.BillingCity,
                    State    = billing.PrimaryCreditCard.BillingState,
                    Zip      = billing.PrimaryCreditCard.BillingZip,
                    Country  = billing.PrimaryCreditCard.BillingCountry
                }
            });


            methods.Add(new CreditCard(CreditCardType.Secondary)
            {
                NameOnCard      = billing.SecondaryCreditCard.BillingName,
                CardNumber      = billing.SecondaryCreditCard.CreditCardNumberDisplay,
                ExpirationMonth = billing.SecondaryCreditCard.ExpirationMonth,
                ExpirationYear  = billing.SecondaryCreditCard.ExpirationYear,
                AutoOrderIDs    = autoOrders.Where(c => c.AutoOrderPaymentTypeID == AutoOrderPaymentTypes.SecondaryCreditCardOnFile).Select(c => c.AutoOrderID).ToArray(),

                BillingAddress = new Address()
                {
                    Address1 = billing.SecondaryCreditCard.BillingAddress,
                    City     = billing.SecondaryCreditCard.BillingCity,
                    State    = billing.SecondaryCreditCard.BillingState,
                    Zip      = billing.SecondaryCreditCard.BillingZip,
                    Country  = billing.SecondaryCreditCard.BillingCountry
                }
            });


            // Filter out invalid or incomplete methods if applicable
            if (request.ExcludeInvalidMethods)
            {
                methods = methods.Where(c => c.IsValid).ToList();
            }
            if (request.ExcludeIncompleteMethods)
            {
                methods = methods.Where(c => c.IsComplete).ToList();
            }
            if (request.ExcludeNonAutoOrderPaymentMethods)
            {
                methods = methods.Where(c => c is IAutoOrderPaymentMethod).ToList();
            }


            return(methods.AsEnumerable());
        }