public static void PlaceUniLevelCustomer(PlaceUniLevelCustomerRequest request) { // Create our request var apiRequest = new PlaceUniLevelNodeRequest() { CustomerID = request.CustomerID, ToSponsorID = request.ToSponsorID, Reason = request.Reason, OptionalFindAvailable = request.FindNextAvailablePlacement }; // Handle the optional filters if (request.Placement != null) { apiRequest.OptionalPlacement = (int)request.Placement; } if (request.BuildTypeID != null) { apiRequest.OptionalUnilevelBuildTypeID = (int)request.BuildTypeID; } // Place the node ExigoDAL.WebService().PlaceUniLevelNode(apiRequest); // Update the customer's field to indicate they have been moved. ExigoDAL.WebService().UpdateCustomer(new UpdateCustomerRequest { CustomerID = request.CustomerID, Field1 = DateTime.Now.ToCST().ToString() }); }
public static BankAccount SetCustomerBankAccount(int customerID, BankAccount account, ExigoService.BankAccountType type) { // New bank accounts if (type == ExigoService.BankAccountType.New) { return(SaveNewCustomerBankAccount(customerID, account)); } // Save the bank account var request = new SetAccountCheckingRequest { CustomerID = customerID, BankName = account.BankName, BankAccountNumber = account.AccountNumber, BankRoutingNumber = account.RoutingNumber, BankAccountType = Common.Api.ExigoWebService.BankAccountType.CheckingPersonal, NameOnAccount = account.NameOnAccount, BillingAddress = account.BillingAddress.AddressDisplay, BillingCity = account.BillingAddress.City, BillingState = account.BillingAddress.State, BillingZip = account.BillingAddress.Zip, BillingCountry = account.BillingAddress.Country }; var response = ExigoDAL.WebService().SetAccountChecking(request); return(account); }
public static void DeleteCustomerBankAccount(int customerID, ExigoService.BankAccountType type) { // If this is a new credit card, don't delete it - we have nothing to delete if (type == ExigoService.BankAccountType.New) { return; } // Save the a blank copy of the bank account // Save the bank account var request = new SetAccountCheckingRequest { CustomerID = customerID, BankName = string.Empty, BankAccountNumber = string.Empty, BankRoutingNumber = string.Empty, BankAccountType = Common.Api.ExigoWebService.BankAccountType.CheckingPersonal, NameOnAccount = string.Empty, BillingAddress = string.Empty, BillingCity = string.Empty, BillingState = string.Empty, BillingZip = string.Empty, BillingCountry = string.Empty }; var response = ExigoDAL.WebService().SetAccountChecking(request); }
public static void DeleteCustomerCreditCard(int customerID, CreditCardType type) { // If this is a new credit card, don't delete it - we have nothing to delete if (type == CreditCardType.New) { return; } // Save the a blank copy of the credit card // Passing a blank token will do the trick var request = new SetAccountCreditCardTokenRequest { CustomerID = customerID, CreditCardAccountType = (type == CreditCardType.Primary) ? AccountCreditCardType.Primary : AccountCreditCardType.Secondary, CreditCardToken = string.Empty, ExpirationMonth = 1, ExpirationYear = DateTime.Now.Year + 1, BillingName = string.Empty, BillingAddress = string.Empty, BillingCity = string.Empty, BillingState = string.Empty, BillingZip = string.Empty, BillingCountry = string.Empty }; var response = ExigoDAL.WebService().SetAccountCreditCardToken(request); }
public static bool IsWebaliasAvailable(string webalias) { var webaliasAvailable = false; // must use try catch as API returns an exception if no customer site with the provided webalias is found try { // cannot use SQL due to delay in update to replicated database var customerSite = ExigoDAL.WebService().GetCustomerSite(new GetCustomerSiteRequest() { WebAlias = webalias }); if (customerSite == null) { webaliasAvailable = true; } ; } catch (Exception ex) { webaliasAvailable = true; Log.Error(ex, "Error Getting Replicated Site: {Message}", ex.Message); } return(webaliasAvailable); }
public static Address SaveNewCustomerAddress(int customerID, Address address) { var addressesOnFile = ExigoDAL.GetCustomerAddresses(customerID).Where(c => c.IsComplete); // Do any of the addresses on file match the one we are using? // If not, save this address to the next available slot if (!addressesOnFile.Any(c => c.Equals(address))) { var saveAddress = false; var request = new UpdateCustomerRequest(); request.CustomerID = customerID; // Main address if (!addressesOnFile.Any(c => c.AddressType == AddressType.Main)) { saveAddress = true; address.AddressType = AddressType.Main; request.MainAddress1 = address.Address1; request.MainAddress2 = address.Address2; request.MainCity = address.City; request.MainState = address.State; request.MainZip = address.Zip; request.MainCountry = address.Country; } // Mailing address else if (!addressesOnFile.Any(c => c.AddressType == AddressType.Mailing)) { saveAddress = true; address.AddressType = AddressType.Mailing; request.MailAddress1 = address.Address1; request.MailAddress2 = address.Address2; request.MailCity = address.City; request.MailState = address.State; request.MailZip = address.Zip; request.MailCountry = address.Country; } // Other address else { saveAddress = true; address.AddressType = AddressType.Other; request.OtherAddress1 = address.Address1; request.OtherAddress2 = address.Address2; request.OtherCity = address.City; request.OtherState = address.State; request.OtherZip = address.Zip; request.OtherCountry = address.Country; } if (saveAddress) { ExigoDAL.WebService().UpdateCustomer(request); ExigoDAL.PurgeCustomer(customerID); } } return(address); }
public static bool IsWebAliasAvailable(int customerID, string webalias) { try { // Get the current webalias to see if it matches what we passed. If so, it's still valid. var currentWebAlias = ExigoDAL.GetCustomerSite(customerID).WebAlias; if (webalias.Equals(currentWebAlias, StringComparison.InvariantCultureIgnoreCase)) { return(true); } // Validate the web alias // cannot use SQL due to delay in update to replicated database var customerSite = ExigoDAL.WebService().GetCustomerSite(new GetCustomerSiteRequest() { WebAlias = webalias }); return(customerSite == null); } catch (Exception ex) { // the GetCustomerSite throws an exception if no matching web alias is found // return the web alias is available in this case so return true Log.Error(ex, "Error Getting Replicated Site: {Message}", ex.Message); return(true); } }
public static Address SetCustomerAddressOnFile(int customerID, Address address, AddressType type) { var saveAddress = false; var request = new UpdateCustomerRequest(); request.CustomerID = customerID; // Attempt to validate the user's entered address if US address address = GlobalUtilities.ValidateAddress(address) as Address; // New Addresses if (type == AddressType.New) { return(ExigoDAL.SaveNewCustomerAddress(customerID, address)); } // Main address if (type == AddressType.Main) { saveAddress = true; request.MainAddress1 = address.Address1; request.MainAddress2 = address.Address2 ?? string.Empty; request.MainCity = address.City; request.MainState = address.State; request.MainZip = address.Zip; request.MainCountry = address.Country; } // Mailing address if (type == AddressType.Mailing) { saveAddress = true; request.MailAddress1 = address.Address1; request.MailAddress2 = address.Address2 ?? string.Empty; request.MailCity = address.City; request.MailState = address.State; request.MailZip = address.Zip; request.MailCountry = address.Country; } // Other address if (type == AddressType.Other) { saveAddress = true; request.OtherAddress1 = address.Address1; request.OtherAddress2 = address.Address2 ?? string.Empty; request.OtherCity = address.City; request.OtherState = address.State; request.OtherZip = address.Zip; request.OtherCountry = address.Country; } if (saveAddress) { ExigoDAL.WebService().UpdateCustomer(request); ExigoDAL.PurgeCustomer(customerID); } return(address); }
public static void SetCustomerBinaryPlacementPreference(int customerID, BinaryPlacementType placementType) { ExigoDAL.WebService().SetBinaryPreference(new SetBinaryPreferenceRequest { CustomerID = customerID, PlacementType = placementType }); }
public static void OptOutCustomer(int customerID) { ExigoDAL.WebService().UpdateCustomer(new UpdateCustomerRequest { CustomerID = customerID, SubscribeToBroadcasts = false }); }
public static void SetCustomerPreferredLanguage(int customerID, int languageID) { ExigoDAL.WebService().UpdateCustomer(new UpdateCustomerRequest { CustomerID = customerID, LanguageID = languageID }); }
public static void CancelOrder(int orderID) { ExigoDAL.WebService().ChangeOrderStatus(new ChangeOrderStatusRequest { OrderID = orderID, OrderStatus = OrderStatusType.Canceled }); }
public static void OptInCustomer(int customerID, string email) { ExigoDAL.WebService().UpdateCustomer(new UpdateCustomerRequest { CustomerID = customerID, Email = email, SubscribeToBroadcasts = true, SubscribeFromIPAddress = GlobalUtilities.GetClientIP() }); }
public static bool UpdateCustomer(UpdateCustomerRequest request) { if (MemoryCache.Default.Contains("Customer_" + request.CustomerID)) { PurgeCustomer(request.CustomerID); } var response = ExigoDAL.WebService().UpdateCustomer(request); return(response.Result.Status == ResultStatus.Success); }
public static void DeleteCustomerAutoOrder(int customerID, int autoOrderID) { // Make sure the autoorder exists if (!IsValidAutoOrderID(customerID, autoOrderID)) { return; } // Cancel the autoorder var response = ExigoDAL.WebService().ChangeAutoOrderStatus(new ChangeAutoOrderStatusRequest { AutoOrderID = autoOrderID, AutoOrderStatus = AutoOrderStatusType.Deleted }); }
public static void DeleteCustomerAddress(int customerID, AddressType type) { var deleteAddress = false; var request = new UpdateCustomerRequest(); request.CustomerID = customerID; // Main address if (type == AddressType.Main) { deleteAddress = true; request.MainAddress1 = string.Empty; request.MainAddress2 = string.Empty; request.MainCity = string.Empty; request.MainState = string.Empty; request.MainZip = string.Empty; request.MainCountry = string.Empty; } // Mailing address else if (type == AddressType.Mailing) { deleteAddress = true; request.MailAddress1 = string.Empty; request.MailAddress2 = string.Empty; request.MailCity = string.Empty; request.MailState = string.Empty; request.MailZip = string.Empty; request.MailCountry = string.Empty; } // Other address else if (type == AddressType.Other) { deleteAddress = true; request.OtherAddress1 = string.Empty; request.OtherAddress2 = string.Empty; request.OtherCity = string.Empty; request.OtherState = string.Empty; request.OtherZip = string.Empty; request.OtherCountry = string.Empty; } if (deleteAddress) { ExigoDAL.WebService().UpdateCustomer(request); } }
public static string GetCustomerPassword(int customerID) { try { if (GlobalSettings.Parties.CustomReportID_GetCustomerPassword > 0) { //Create Request GetCustomReportRequest request = new GetCustomReportRequest { ReportID = GlobalSettings.Parties.CustomReportID_GetCustomerPassword }; //Add Parameters List <ParameterRequest> parameters = new List <ParameterRequest>(); parameters.Add(new ParameterRequest { ParameterName = "PassCheck", // Unique passkey to ensure only we are calling this report and it is not accessed from others with API credentials Value = "!00000000000000" }); parameters.Add(new ParameterRequest { ParameterName = "CID", Value = customerID }); //Now attach the list to the request request.Parameters = parameters.ToArray(); //Send Request to Server and Get Response GetCustomReportResponse response = ExigoDAL.WebService().GetCustomReport(request); string password = response.ReportData.Tables[0].Rows[0].ItemArray[0].ToString(); //Now examine the results: return(password); } else { return(""); } } catch { return(""); } }
public static bool IsEmailAvailable(int customerID, string email) { var isEmailAvailable = true; var customer = ExigoDAL.WebService().GetCustomers(new GetCustomersRequest() { Email = email }).Customers .Where(c => c.CustomerID != customerID).Count(); if (customer > 0) { isEmailAvailable = false; } return(isEmailAvailable); }
public static CompanyNewsItem GetCompanyNewsItem(GetCompanyNewsItemRequest request) { var api = ExigoDAL.WebService(); CompanyNewsItem response; var newsItemResponse = (api.GetCompanyNewsItem(new Common.Api.ExigoWebService.GetCompanyNewsItemRequest { NewsID = request.NewsID })); //Convert to our model CompanyNewsItem newsItem = (CompanyNewsItem)newsItemResponse; //Only respond if the article is flagged to backoffice visbility if (newsItem.WebSettings == NewsWebSettings.AccessAvailable) { response = newsItem; } return(newsItem); }
public bool SaveImage(string path, string filename, byte[] bytes) { try { ExigoDAL.WebService().SetImageFile(new Common.Api.ExigoWebService.SetImageFileRequest { Name = filename, Path = path, ImageData = bytes }); } catch (Exception ex) { Log.Error(ex, "Error Saving Image: {Message}", ex.Message); return(false); } // If we got here, everything should be good return(true); }
public static VerifyAddressResponse VerifyAddress(Address address) { var result = new VerifyAddressResponse(); result.OriginalAddress = address; result.IsValid = false; try { if (address.Country.ToUpper() == "US" && address.IsComplete) { var verifiedAddress = ExigoDAL.WebService().VerifyAddress(new VerifyAddressRequest { Address = address.AddressDisplay, City = address.City, State = address.State, Zip = address.Zip, Country = address.Country }); result.VerifiedAddress = new Address() { AddressType = address.AddressType, Address1 = verifiedAddress.Address, Address2 = string.Empty, City = verifiedAddress.City, State = verifiedAddress.State, Zip = verifiedAddress.Zip, Country = verifiedAddress.Country }; result.IsValid = true; } } catch { return(result); } return(result); }
public static List <CompanyNewsItem> GetCompanyNews(GetCompanyNewsRequest request) { var api = ExigoDAL.WebService(); CompanyNewsResponse[] newsResponse; var newsItems = new List <CompanyNewsItem>(); foreach (var department in request.NewsDepartments) { newsResponse = (api.GetCompanyNews(new Common.Api.ExigoWebService.GetCompanyNewsRequest { DepartmentType = department }).CompanyNews); //Convert to our model newsItems = newsResponse.Select(apiItem => (CompanyNewsItem)apiItem) .Where(newsItem => (NewsWebSettings)newsItem.WebSettings == NewsWebSettings.AccessAvailable).ToList(); //and filter out anything not flagged as available in the backoffice // If they requested the content, then loop through all the articles and add the content to each news item var tasks = new List <Task>(); foreach (var item in newsItems) { tasks.Add(Task.Factory.StartNew(() => { var newsItemResponse = (api.GetCompanyNewsItem(new Common.Api.ExigoWebService.GetCompanyNewsItemRequest { NewsID = item.NewsID })); //Add the content to the item item.Content = newsItemResponse.Content; })); Task.WaitAll(tasks.ToArray()); tasks.Clear(); } } return(newsItems); }
public static bool IsLoginNameAvailable(string loginname, int customerID = 0) { if (customerID > 0) { // Get the current login name to see if it matches what we passed. If so, it's still valid. var currentLoginName = ExigoDAL.GetCustomer(customerID).LoginName; if (loginname.Equals(currentLoginName, StringComparison.InvariantCultureIgnoreCase)) { return(true); } } // Validate the login name // cannot use SQL due to delay in update to replicated database var apiCustomer = ExigoDAL.WebService().GetCustomers(new GetCustomersRequest() { LoginName = loginname }).Customers.FirstOrDefault(); return(apiCustomer == null); }
public static CustomerSite GetCustomerSiteRealTime(int customerID) { var site = new CustomerSite(); // The GetCustomerSite method currently throws an exception if no customer site record exists for the customer // We will set the site for this customer in the Catch and get the site again if this is the case try { var apiCustomerSite = ExigoDAL.WebService().GetCustomerSite(new GetCustomerSiteRequest { CustomerID = customerID }); site = (CustomerSite)apiCustomerSite; } catch (Exception) { // Do Nothing } return(site); }
public static CreditCard SetCustomerCreditCard(int customerID, CreditCard card, CreditCardType type) { // New credit cards if (type == CreditCardType.New) { return(SaveNewCustomerCreditCard(customerID, card)); } // Validate that we have a token var token = card.Token; //card.GetToken(); if (token.IsNullOrEmpty()) { return(card); } // Save the credit card var request = new SetAccountCreditCardTokenRequest { CustomerID = customerID, CreditCardAccountType = (card.Type == CreditCardType.Primary) ? AccountCreditCardType.Primary : AccountCreditCardType.Secondary, CreditCardToken = token, ExpirationMonth = card.ExpirationMonth, ExpirationYear = card.ExpirationYear, BillingName = card.NameOnCard, BillingAddress = card.BillingAddress.AddressDisplay, BillingCity = card.BillingAddress.City, BillingState = card.BillingAddress.State, BillingZip = card.BillingAddress.Zip, BillingCountry = card.BillingAddress.Country }; var response = ExigoDAL.WebService().SetAccountCreditCardToken(request); return(card); }
public static void SendEmail(SendEmailRequest request) { var sendEmailRequest = new Common.Api.ExigoWebService.SendEmailRequest { MailFrom = request.From, Subject = request.Subject, Body = request.Body }; // Send the emails var tasks = new List <Task>(); foreach (var email in request.To) { tasks.Add( Task.Factory.StartNew(() => { sendEmailRequest.MailTo = email; ExigoDAL.WebService().SendEmail(sendEmailRequest); })); } Task.WaitAll(tasks.ToArray()); }
public static CustomerSite SetCustomerSite(CustomerSite request) { ExigoDAL.WebService().SetCustomerSite(new SetCustomerSiteRequest(request)); return(request); }
public static Customer GetCustomer(int customerID, bool realtime = false) { if (!MemoryCache.Default.Contains("Customer_" + customerID)) { Customer customer = null; if (!realtime) { using (var context = ExigoDAL.Sql()) { customer = context.Query <Customer, Address, Address, Address, Customer>(@" SELECT c.CustomerID ,c.FirstName ,c.MiddleName ,c.LastName ,c.NameSuffix ,c.Company ,c.CustomerTypeID ,c.CustomerStatusID ,c.Email ,c.Phone AS PrimaryPhone ,c.Phone2 AS SecondaryPhone ,c.MobilePhone ,c.Fax ,c.CanLogin ,c.LoginName ,c.PasswordHash ,c.RankID ,c.EnrollerID ,c.SponsorID ,c.BirthDate ,c.CurrencyCode ,c.PayableToName ,c.DefaultWarehouseID ,c.PayableTypeID ,c.CheckThreshold ,c.LanguageID ,c.Gender ,c.TaxCode AS TaxID ,c.TaxCodeTypeID ,c.IsSalesTaxExempt ,c.SalesTaxCode ,c.SalesTaxExemptExpireDate ,c.VatRegistration ,c.BinaryPlacementTypeID ,c.UseBinaryHoldingTank ,c.IsInBinaryHoldingTank ,c.IsEmailSubscribed ,c.EmailSubscribeIP ,c.Notes ,c.Field2 ,c.Field3 ,c.Field4 ,c.Field5 ,c.Field6 ,c.Field7 ,c.Field8 ,c.Field9 ,c.Field10 ,c.Field11 ,c.Field12 ,c.Field13 ,c.Field14 ,c.Field15 ,c.Date1 ,c.Date2 ,c.Date3 ,c.Date4 ,c.Date5 ,c.CreatedDate ,c.ModifiedDate ,c.CreatedBy ,c.ModifiedBy ,cs.CustomerStatusDescription ,ct.CustomerTypeDescription ,c.MainAddress1 AS Address1 ,c.MainAddress2 AS Address2 ,c.MainAddress3 AS Address3 ,c.MainCity AS City ,c.MainState AS State ,c.MainZip AS Zip ,c.MainCountry AS Country ,c.MainCounty AS County ,c.MainVerified AS isVerified ,c.MailAddress1 AS Address1 ,c.MailAddress2 AS Address2 ,c.MailAddress3 AS Address3 ,c.MailCity AS City ,c.MailState AS State ,c.MailZip AS Zip ,c.MailVerified AS isVerified ,c.MailCountry AS Country ,c.MailCounty AS County ,c.OtherAddress1 AS Address1 ,c.OtherAddress2 AS Address2 ,c.OtherAddress3 AS Address3 ,c.OtherCity AS City ,c.OtherState AS State ,c.OtherZip AS Zip ,c.OtherCountry AS Country ,c.OtherCounty AS County ,c.OtherVerified AS isVerified FROM Customers c LEFT JOIN CustomerStatuses cs ON c.CustomerStatusID = cs.CustomerStatusID LEFT JOIN CustomerTypes ct ON c.CustomerTypeID = ct.CustomerTypeID WHERE c.CustomerID = @CustomerID ", (cust, main, mail, other) => { main.AddressType = AddressType.Main; cust.MainAddress = main; mail.AddressType = AddressType.Mailing; cust.MailingAddress = mail; other.AddressType = AddressType.Other; cust.OtherAddress = other; return(cust); }, param: new { CustomerID = customerID }, splitOn: "Address1, Address1, Address1" ).FirstOrDefault(); } } if (customer == null) { var customerResponse = ExigoDAL.WebService().GetCustomers(new GetCustomersRequest { CustomerID = customerID }).Customers.FirstOrDefault(); customer = (Customer)customerResponse; customer.RankID = customerResponse.RankID; customer.CustomerStatusDescription = CommonResources.CustomerStatuses(customerResponse.CustomerStatus); } if (customer == null) { return(null); } MemoryCache.Default.Add("Customer_" + customerID, customer, DateTime.Now.AddMinutes(15)); return(customer); } else { return(MemoryCache.Default.Get("Customer_" + customerID) as Customer); } }
public static IEnumerable <RealTimeCommission> GetCustomerRealTimeCommissions(GetCustomerRealTimeCommissionsRequest request) { var results = new List <RealTimeCommission>(); // Get the commission record var realtimeresponse = ExigoDAL.WebService().GetRealTimeCommissions(new Common.Api.ExigoWebService.GetRealTimeCommissionsRequest { CustomerID = request.CustomerID }); if (realtimeresponse.Commissions.Length == 0) { return(results); } // Get the unique periods for each of the commission results if (request.GetPeriodVolumes) { var periods = new List <Period>(); var periodRequests = new List <GetPeriodsRequest>(); foreach (var commissionResponse in realtimeresponse.Commissions) { var periodID = commissionResponse.PeriodID; var periodTypeID = commissionResponse.PeriodType; var req = periodRequests.Where(c => c.PeriodTypeID == periodTypeID).FirstOrDefault(); if (req == null) { periodRequests.Add(new GetPeriodsRequest() { PeriodTypeID = periodTypeID, PeriodIDs = new List <int> { periodID } }); } else { var ids = req.PeriodIDs.ToList(); ids.Add(periodID); req.PeriodIDs = ids.Distinct().ToList(); } } foreach (var req in periodRequests) { var responses = GetPeriods(req); foreach (var response in responses) { periods.Add(response); } } // Get the volumes for each unique period var volumeCollections = new List <VolumeCollection>(); foreach (var period in periods) { volumeCollections.Add(GetCustomerVolumes(new GetCustomerVolumesRequest { CustomerID = request.CustomerID, PeriodID = period.PeriodID, PeriodTypeID = period.PeriodTypeID, VolumesToFetch = request.VolumesToFetch })); } // Process each commission response try { foreach (var commission in realtimeresponse.Commissions) { var typedCommission = (RealTimeCommission)commission; typedCommission.Period = periods .Where(c => c.PeriodTypeID == commission.PeriodType) .Where(c => c.PeriodID == commission.PeriodID) .FirstOrDefault(); typedCommission.Volumes = volumeCollections .Where(c => c.Period.PeriodTypeID == typedCommission.Period.PeriodTypeID) .Where(c => c.Period.PeriodID == typedCommission.Period.PeriodID) .FirstOrDefault(); typedCommission.PaidRank = typedCommission.Volumes.PayableAsRank; results.Add(typedCommission); } return(results.OrderByDescending(c => c.Period.StartDate)); } catch { return(results); } } else { var periodInfo = ExigoDAL.GetPeriods(new GetPeriodsRequest { PeriodIDs = realtimeresponse.Commissions.Select(p => p.PeriodID).ToList(), PeriodTypeID = realtimeresponse.Commissions.FirstOrDefault().PeriodType }); foreach (var commission in realtimeresponse.Commissions) { var typedCommission = (RealTimeCommission)commission; var period = periodInfo.FirstOrDefault(p => p.PeriodID == commission.PeriodID && p.PeriodTypeID == commission.PeriodType); typedCommission.Period = new Period(); //typedCommission.Period.PeriodID = commission.PeriodID; //typedCommission.Period.PeriodTypeID =commission.PeriodType; //typedCommission.Period.PeriodDescription = commission.PeriodDescription; if (period != null) { typedCommission.Period = period; } results.Add(typedCommission); } return(results.OrderByDescending(c => c.Period.StartDate)); } }
public static IEnumerable <AutoOrder> GetCustomerAutoOrders(int customerid, int?autoOrderID = null, bool includePaymentMethods = true) { var autoOrders = new List <AutoOrder>(); var detailItemCodes = new List <string>(); var request = new GetAutoOrdersRequest { CustomerID = customerid, AutoOrderStatus = AutoOrderStatusType.Active }; if (autoOrderID != null) { request.AutoOrderID = (int)autoOrderID; } var aoResponse = ExigoDAL.WebService().GetAutoOrders(request); if (!aoResponse.AutoOrders.Any()) { return(autoOrders); } foreach (var aor in aoResponse.AutoOrders) { autoOrders.Add((AutoOrder)aor); } detailItemCodes = autoOrders.SelectMany(a => a.Details.Select(d => d.ItemCode)).Distinct().ToList(); var autoOrderIds = autoOrders.Select(a => a.AutoOrderID).ToList(); var createdDateNodes = new List <AutoOrderCreatedDate>(); var aoDetailInfo = new List <AutoOrderDetailInfo>(); using (var context = ExigoDAL.Sql()) { var nodeResults = context.QueryMultiple(@" SELECT AutoOrderID, CreatedDate FROM AutoOrders WHERE AutoOrderID in @ids SELECT ItemCode, SmallImageName, IsVirtual FROM Items WHERE ItemCode in @itemcodes ", new { ids = autoOrderIds, itemcodes = detailItemCodes }); createdDateNodes = nodeResults.Read <AutoOrderCreatedDate>().ToList(); aoDetailInfo = nodeResults.Read <AutoOrderDetailInfo>().ToList(); } foreach (var ao in autoOrders) { ao.CreatedDate = createdDateNodes.Where(n => n.AutoOrderID == ao.AutoOrderID).Select(n => n.CreatedDate).FirstOrDefault(); foreach (var detail in ao.Details) { var detailInfo = aoDetailInfo.Where(i => i.ItemCode == detail.ItemCode).FirstOrDefault(); detail.ImageUrl = GlobalUtilities.GetProductImagePath(detailInfo.ImageUrl); detail.IsVirtual = detailInfo.IsVirtual; } } if (includePaymentMethods) { // Add payment methods var paymentMethods = GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest { CustomerID = customerid }); foreach (var autoOrder in autoOrders) { IPaymentMethod paymentMethod; switch (autoOrder.AutoOrderPaymentTypeID) { case 1: paymentMethod = paymentMethods.Where(c => c is CreditCard && ((CreditCard)c).Type == CreditCardType.Primary).FirstOrDefault(); break; case 2: paymentMethod = paymentMethods.Where(c => c is CreditCard && ((CreditCard)c).Type == CreditCardType.Secondary).FirstOrDefault(); break; case 3: paymentMethod = paymentMethods.Where(c => c is BankAccount && ((BankAccount)c).Type == BankAccountType.Primary).FirstOrDefault(); break; default: paymentMethod = null; break; } autoOrder.PaymentMethod = paymentMethod; } } return(autoOrders); }