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()); }