Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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;
            }
        }