Ejemplo n.º 1
0
        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);
        }
Ejemplo 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 && !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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
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;
            }
        }
Ejemplo n.º 7
0
        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);
        }