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 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); //} //get auto order list var AutoOrders = new List <AutoOrder>(); using (var Context = Exigo.Sql()) { string sqlProcedure = string.Format("GetPaymentMethodAutoOrder {0}, {1}", request.CustomerID, request.IncludeCancelledAutoOrders); AutoOrders = Context.Query <AutoOrder>(sqlProcedure).ToList(); string SPGetCustomerAutoOrderShippingAddress = string.Format("GetCustomerAutoOrderShippingAddress {0}", request.CustomerID); var reciept = Context.Query <ShippingAddress>(SPGetCustomerAutoOrderShippingAddress).FirstOrDefault(); AutoOrders.ForEach(c => c.Recipient = reciept); if (request.IncludeDetails) { string autoOrdersIds = string.Join(",", AutoOrders.Select(s => s.AutoOrderID)); string SPGetCustomerAutoOrderDetail = string.Format("GetCustomerAutoOrderDetail '{0}'", autoOrdersIds); var detailsList = Context.Query <AutoOrderDetail>(SPGetCustomerAutoOrderDetail).ToList(); foreach (var item in AutoOrders) { var lstDetails = detailsList.Where(s => s.AutoOrderID == item.AutoOrderID); item.Details = lstDetails.ToList(); } } } // If we don't have any autoships, 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 autoship 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 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; } }