public static IEnumerable <T> GetGenealogyTree <T>(GetTreeRequest request) where T : ITreeNode { // Get the nodes var nodes = new List <T>(); var rowcount = 50; var lastResultCount = rowcount; var callsMade = 0; while (lastResultCount == rowcount) { var query = Exigo.OData().EnrollerTree .Where(c => c.TopCustomerID == request.TopCustomerID); // Filter by level var levels = (request.Levels != 0) ? request.Levels : 10; query = query .Where(c => c.Level <= levels); // Filter by customer types var allowableCustomerTypes = new List <int>() { (int)CustomerTypes.Associate }; query = query .Where(allowableCustomerTypes.ToOrExpression <EnrollerNode, int>("Customer.CustomerTypeID")); // Get the data var results = query .OrderBy(c => c.IndentedSort) .Skip(callsMade * rowcount) .Take(rowcount) .Select(c => c) .ToList(); results.ForEach(c => { var node = (T)Activator.CreateInstance(typeof(T)); node.CustomerID = c.CustomerID; node.ParentCustomerID = c.EnrollerID; node.Level = c.Level; node.PlacementID = 0; node.IndentedSort = c.IndentedSort; node.ChildNodeCount = c.ChildCount; nodes.Add(node); }); callsMade++; lastResultCount = results.Count; } return(nodes); }
public static IEnumerable <AutoOrder> GetCustomerAutoOrders(GetCustomerAutoOrdersRequest request) { var context = Exigo.OData(); // Setup the base query var basequery = context.AutoOrders; if (request.IncludeDetails) { basequery = basequery.Expand("Details"); } // Setup the query var query = basequery.Where(c => c.CustomerID == request.CustomerID); // Filters if (!request.IncludeCancelledAutoOrders && !request.IncludeInactiveAutoOrders) { query = query.Where(c => c.AutoOrderStatusID == 0 || c.AutoOrderStatusID == 1); //82854 20161130 DV. Per client request allow Inactive auto order status 1 to be included in result } else if (!request.IncludeCancelledAutoOrders && request.IncludeInactiveAutoOrders) { query = query.Where(c => c.AutoOrderStatusID < 2); } else if (request.IncludeCancelledAutoOrders && !request.IncludeInactiveAutoOrders) { query = query.Where(c => c.AutoOrderStatusID == 0 || c.AutoOrderStatusID == 2); } // Get the data var autoOrderData = query.Select(c => c); var autoOrders = new List <AutoOrder>(); foreach (var autoOrder in autoOrderData) { autoOrders.Add((AutoOrder)autoOrder); } // If we don't have any autoOrder, stop here. if (autoOrders.Count == 0) { yield break; } // Get the payment methods if applicable if (request.IncludePaymentMethods) { var paymentMethods = GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest { CustomerID = request.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 == ExigoService.BankAccountType.Primary).FirstOrDefault(); break; default: paymentMethod = null; break; } autoOrder.PaymentMethod = paymentMethod; } } // Determine if each autoOrder contains only virtual items if applicable if (request.IncludeDetails) { var itemIDs = new List <int>(); autoOrders.ForEach(a => { if (a.Details != null && a.Details.Count() > 0) { itemIDs.AddRange(a.Details.Select(c => c.ItemID)); } }); itemIDs = itemIDs.Distinct().ToList(); // Determine which item IDs are virtual var virtualItems = context.Items .Where(c => c.IsVirtual) .Where(itemIDs.ToOrExpression <Common.Api.ExigoOData.Item, int>("ItemID")) .Select(c => new { c.ItemID }) .ToList(); var virtualItemIDs = virtualItems.Select(c => c.ItemID).ToList(); // Loop through each auto order, setting the details foreach (var autoOrder in autoOrders) { foreach (var detail in autoOrder.Details) { if (virtualItemIDs.Contains(detail.ItemID)) { detail.IsVirtual = true; } } } } // Get the images if (request.IncludeDetails) { var itemcodes = new List <string>(); foreach (var order in autoOrders) { itemcodes.AddRange(order.Details.Select(c => c.ItemCode)); } var images = new List <Common.Api.ExigoOData.Item>(); if (itemcodes.Count > 0) { images = context.Items .Where(itemcodes.ToOrExpression <Common.Api.ExigoOData.Item, string>("ItemCode")) .Select(c => new Common.Api.ExigoOData.Item { ItemCode = c.ItemCode, SmallImageUrl = c.SmallImageUrl }) .ToList(); } // Loop through each auto order, setting the details foreach (var autoOrder in autoOrders) { foreach (var detail in autoOrder.Details) { var image = images.Where(c => c.ItemCode == detail.ItemCode).FirstOrDefault(); if (image != null) { detail.ImageUrl = image.SmallImageUrl; } } } } // Return the results foreach (var autoOrder in autoOrders) { yield return(autoOrder); } }
public static AutoOrder GetCustomerAutoOrder(int customerID, int autoOrderID) { var context = Exigo.OData(); // Setup the base query var autoOrderData = context.AutoOrders.Expand("Details") .Where(c => c.CustomerID == customerID) .Where(c => c.AutoOrderID == autoOrderID) .FirstOrDefault(); if (autoOrderData == null) { return(null); } var autoOrder = (AutoOrder)autoOrderData; // Get the payment methods if applicable var paymentMethods = GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest { CustomerID = customerID }); 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 == ExigoService.BankAccountType.Primary).FirstOrDefault(); break; default: paymentMethod = null; break; } autoOrder.PaymentMethod = paymentMethod; // Get the images var itemcodes = new List <string>(); itemcodes.AddRange(autoOrder.Details.Select(c => c.ItemCode)); var tempList = new List <Common.Api.ExigoOData.Item>(); if (itemcodes.Count > 0) { tempList = context.Items .Where(itemcodes.ToOrExpression <Common.Api.ExigoOData.Item, string>("ItemCode")) .Select(c => new Common.Api.ExigoOData.Item { ItemCode = c.ItemCode, TinyImageUrl = c.TinyImageUrl, IsVirtual = c.IsVirtual }) .ToList(); // Loop through each auto order detail, setting the image and virtual flags on each foreach (var detail in autoOrder.Details) { var additionalDetail = tempList.Where(c => c.ItemCode == detail.ItemCode).FirstOrDefault(); if (additionalDetail != null) { detail.ImageUrl = additionalDetail.TinyImageUrl; detail.IsVirtual = additionalDetail.IsVirtual; } } } // Return the results return(autoOrder); }
public static IEnumerable <Item> GetItems(GetItemsRequest request) { // If we don't have what we need to make this call, stop here. if (request.Configuration == null) { throw new InvalidRequestException("ExigoService.GetItems() requires an OrderConfiguration."); } if (request.Configuration.CategoryID == 0 && request.CategoryID == null && request.ItemCodes.Length == 0) { throw new InvalidRequestException("ExigoService.GetItems() requires either a CategoryID or a collection of item codes."); } ; // Set some defaults if (request.CategoryID == null && request.ItemCodes.Length == 0) { request.CategoryID = request.Configuration.CategoryID; } // Create the contexts we will use var context = Exigo.OData(); // Determine how many categories we need to pull based on the levels. Currently designed to go one level deep. var categoryIDs = new List <int>(); if (request.CategoryID != null) { categoryIDs.Add((int)request.CategoryID); if (request.IncludeChildCategories) { // Get the child categories var ids = context.WebCategories .Where(c => c.WebID == 1) .Where(c => c.ParentID == (int)request.CategoryID) .Select(c => new { c.WebCategoryID }).ToList(); categoryIDs.AddRange(ids.Select(c => c.WebCategoryID)); } } // If we requested a specific category, get the item codes in the category if (categoryIDs.Count > 0) { var categoryItemCodes = context.WebCategoryItems .Where(c => c.WebID == 1) .Where(categoryIDs.ToOrExpression <WebCategoryItem, int>("WebCategoryID")) .Select(c => new { c.Item.ItemCode }).ToList(); var existingItemCodes = request.ItemCodes.ToList(); existingItemCodes.AddRange(categoryItemCodes.Select(c => c.ItemCode).ToList()); request.ItemCodes = existingItemCodes.ToArray(); } // If we don't have any items, stop here. if (request.ItemCodes.Length == 0) { yield break; } // Get the data var query = context.ItemWarehousePrices.Expand("Item/GroupMembers") .Where(c => c.WarehouseID == request.Configuration.WarehouseID) .Where(c => c.PriceTypeID == request.Configuration.PriceTypeID) .Where(c => c.CurrencyCode == request.Configuration.CurrencyCode); if (request.ItemCodes != null && request.ItemCodes.Count() > 0) { query = query.Where(request.ItemCodes.ToList().ToOrExpression <ItemWarehousePrice, string>("Item.ItemCode")); } var odataItems = query.ToList(); // Return the data foreach (var item in odataItems) { yield return((ExigoService.Item)item); } }
public static AutoOrder GetCustomerAutoOrder(int customerID, int autoOrderID) { var context = Exigo.OData(); // Setup the base query var autoOrderData = context.AutoOrders.Expand("Details") .Where(c => c.CustomerID == customerID) .Where(c => c.AutoOrderID == autoOrderID) .FirstOrDefault(); if (autoOrderData == null) return null; var autoOrder = (AutoOrder)autoOrderData; // Get the payment methods if applicable var paymentMethods = GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest { CustomerID = customerID }); 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 == ExigoService.BankAccountType.Primary).FirstOrDefault(); break; default: paymentMethod = null; break; } autoOrder.PaymentMethod = paymentMethod; // Determine if each autoOrder contains only virtual items if applicable var itemIDs = new List<int>(); if (autoOrder.Details != null && autoOrder.Details.Count() > 0) { itemIDs.AddRange(autoOrder.Details.Select(c => c.ItemID)); } itemIDs = itemIDs.Distinct().ToList(); // Determine which item IDs are virtual var virtualItems = context.Items .Where(c => c.IsVirtual) .Where(itemIDs.ToOrExpression<Common.Api.ExigoOData.Item, int>("ItemID")) .Select(c => new { c.ItemID }) .ToList(); var virtualItemIDs = virtualItems.Select(c => c.ItemID).ToList(); // Loop through each auto order, setting the details foreach (var detail in autoOrder.Details) { if (virtualItemIDs.Contains(detail.ItemID)) { detail.IsVirtual = true; } detail.ImageUrl = context.Items.Where(c => c.ItemCode == detail.ItemCode).FirstOrDefault().SmallImageUrl; } // Return the results return autoOrder; }
public static IEnumerable<AutoOrder> GetCustomerAutoOrders(GetCustomerAutoOrdersRequest request) { var context = Exigo.OData(); // Setup the base query var basequery = context.AutoOrders; if (request.IncludeDetails) basequery = basequery.Expand("Details"); // Setup the query var query = basequery.Where(c => c.CustomerID == request.CustomerID); // Filters if (!request.IncludeCancelledAutoOrders) { query = query.Where(c => c.AutoOrderStatusID == 0); } // Get the data var autoOrderData = query.Select(c => c); var autoOrders = new List<AutoOrder>(); foreach (var autoOrder in autoOrderData) { autoOrders.Add((AutoOrder)autoOrder); } // If we don't have any autoOrder, stop here. if (autoOrders.Count == 0) yield break; // Get the payment methods if applicable if (request.IncludePaymentMethods) { var paymentMethods = GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest { CustomerID = request.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 == ExigoService.BankAccountType.Primary).FirstOrDefault(); break; default: paymentMethod = null; break; } autoOrder.PaymentMethod = paymentMethod; } } // Determine if each autoOrder contains only virtual items if applicable if (request.IncludeDetails) { var itemIDs = new List<int>(); autoOrders.ForEach(a => { if (a.Details != null && a.Details.Count() > 0) { itemIDs.AddRange(a.Details.Select(c => c.ItemID)); } }); itemIDs = itemIDs.Distinct().ToList(); // Determine which item IDs are virtual var virtualItems = context.Items .Where(c => c.IsVirtual) .Where(itemIDs.ToOrExpression<Common.Api.ExigoOData.Item, int>("ItemID")) .Select(c => new { c.ItemID }) .ToList(); var virtualItemIDs = virtualItems.Select(c => c.ItemID).ToList(); // Loop through each auto order, setting the details foreach (var autoOrder in autoOrders) { foreach (var detail in autoOrder.Details) { if (virtualItemIDs.Contains(detail.ItemID)) { detail.IsVirtual = true; } } } } // Get the images if (request.IncludeDetails) { var itemcodes = new List<string>(); foreach (var order in autoOrders) { itemcodes.AddRange(order.Details.Select(c => c.ItemCode)); } var images = new List<Common.Api.ExigoOData.Item>(); if (itemcodes.Count > 0) { images = context.Items .Where(itemcodes.ToOrExpression<Common.Api.ExigoOData.Item, string>("ItemCode")) .Select(c => new Common.Api.ExigoOData.Item { ItemCode = c.ItemCode, SmallImageUrl = c.SmallImageUrl }) .ToList(); } // Loop through each auto order, setting the details foreach (var autoOrder in autoOrders) { foreach (var detail in autoOrder.Details) { var image = images.Where(c => c.ItemCode == detail.ItemCode).FirstOrDefault(); if (image != null) detail.ImageUrl = image.SmallImageUrl; } } } // Return the results foreach (var autoOrder in autoOrders) { yield return autoOrder; } }
public static AutoOrder GetCustomerAutoOrder(int customerID, int autoOrderID) { var context = Exigo.OData(); // Setup the base query var autoOrderData = context.AutoOrders.Expand("Details") .Where(c => c.CustomerID == customerID) .Where(c => c.AutoOrderID == autoOrderID) .FirstOrDefault(); if (autoOrderData == null) { return(null); } var autoOrder = (AutoOrder)autoOrderData; // Get the payment methods if applicable var paymentMethods = GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest { CustomerID = customerID }); 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 == ExigoService.BankAccountType.Primary).FirstOrDefault(); break; default: paymentMethod = null; break; } autoOrder.PaymentMethod = paymentMethod; // Determine if each autoship contains only virtual items if applicable var itemIDs = new List <int>(); if (autoOrder.Details != null && autoOrder.Details.Count() > 0) { itemIDs.AddRange(autoOrder.Details.Select(c => c.ItemID)); } itemIDs = itemIDs.Distinct().ToList(); // Determine which item IDs are virtual var virtualItems = context.Items .Where(c => c.IsVirtual) .Where(itemIDs.ToOrExpression <Common.Api.ExigoOData.Item, int>("ItemID")) .Select(c => new { c.ItemID }) .ToList(); var virtualItemIDs = virtualItems.Select(c => c.ItemID).ToList(); // Loop through each auto order, setting the details foreach (var detail in autoOrder.Details) { if (virtualItemIDs.Contains(detail.ItemID)) { detail.IsVirtual = true; } } // Return the results return(autoOrder); }