public CreateAutoOrderRequest(IOrderConfiguration configuration, AutoOrderPaymentType paymentType, DateTime startDate, int shipMethodID, IEnumerable <IShoppingCartItem> items, ShippingAddress address)
        {
            WarehouseID  = configuration.WarehouseID;
            PriceType    = configuration.PriceTypeID;
            CurrencyCode = configuration.CurrencyCode;
            StartDate    = startDate;
            PaymentType  = paymentType;
            ProcessType  = AutoOrderProcessType.AlwaysProcess;
            ShipMethodID = shipMethodID;

            Details = items.Select(c => (OrderDetailRequest)(c as ShoppingCartItem)).ToArray();

            FirstName  = address.FirstName;
            MiddleName = address.MiddleName;
            LastName   = address.LastName;
            Company    = address.Company;
            Email      = address.Email;
            Phone      = address.Phone;
            Address1   = address.Address1;
            Address2   = address.Address2;
            City       = address.City;
            State      = address.State;
            Zip        = address.Zip;
            Country    = address.Country;
        }
Beispiel #2
0
        public CreateAutoOrderRequest(IOrderConfiguration configuration, AutoOrderPaymentType paymentType, DateTime startDate, int shipMethodID, IEnumerable <IShoppingCartItem> items, ShippingAddress address)
        {
            WarehouseID  = configuration.WarehouseID;
            PriceType    = configuration.PriceTypeID;
            CurrencyCode = configuration.CurrencyCode;
            StartDate    = startDate;
            PaymentType  = paymentType;
            ProcessType  = AutoOrderProcessType.AlwaysProcess;
            ShipMethodID = shipMethodID;

            // Add all kit children under their parents. Add missing kit children
            // Will throw exception if dynamic kit children cannot be auto populated due to insuficient cart info
            IItemConverterService shoppingService = new Common.Services.ShoppingService(configuration);
            var details = shoppingService.GetOrderDetails(items.ToList());

            Details = details.ToArray();

            FirstName  = address.FirstName;
            MiddleName = address.MiddleName;
            LastName   = address.LastName;
            Company    = address.Company;
            Email      = address.Email;
            Phone      = address.Phone;
            Address1   = address.Address1;
            Address2   = address.Address2;
            City       = address.City;
            State      = address.State;
            Zip        = address.Zip;
            Country    = address.Country;
        }
        public IEnumerable <IItem> GetProducts <T>(IOrderConfiguration configuration, List <T> cartItems) where T : IItem
        {
            if (cartItems.Count == 0)
            {
                yield break;
            }

            // Get the products
            var results = GetProducts(configuration, cartItems.Select(c => c.ItemCode).Distinct().ToArray()).ToList();

            for (int p = 0; p < results.Count; p++)
            {
                var result   = results[p];
                var cartItem = cartItems.Where(c => c.ItemCode == result.ItemCode).FirstOrDefault();
                if (cartItem == null)
                {
                    continue;
                }

                result.ID                  = cartItem.ID;
                result.Quantity            = cartItem.Quantity;
                result.ParentItemCode      = cartItem.ParentItemCode;
                result.GroupMasterItemCode = cartItem.GroupMasterItemCode;
                result.DynamicKitCategory  = cartItem.DynamicKitCategory;
                result.Type                = cartItem.Type;
                result.IsRequired          = cartItem.IsRequired;


                yield return(result);
            }
        }
 public void Dispose()
 {
     if (this._OrderConfiguration != null)
     {
         this._OrderConfiguration = null;
     }
 }
        public IEnumerable <IProduct> GetProducts(IOrderConfiguration configuration, int categoryID = 0, bool returnLongDetails = true)
        {
            if (categoryID == 0)
            {
                categoryID = configuration.CategoryID;
            }

            // Get the products
            var response = Exigo.WebService().GetItems(new GetItemsRequest
            {
                WarehouseID         = configuration.WarehouseID,
                PriceType           = configuration.PriceTypeID,
                LanguageID          = GlobalUtilities.GetCurrentLanguageID(),
                CurrencyCode        = configuration.CurrencyCode,
                RestrictToWarehouse = true,
                ReturnLongDetail    = returnLongDetails,
                WebID         = 1,
                WebCategoryID = categoryID
            });


            foreach (var item in response.Items)
            {
                yield return((Item)item);
            }
        }
        public IEnumerable <IItem> GetProducts(IOrderConfiguration configuration, string[] itemcodes)
        {
            var results = new List <IItem>();

            if (itemcodes.Length == 0)
            {
                yield break;
            }

            // Get the products
            var response = Exigo.WebService().GetItems(new GetItemsRequest
            {
                WarehouseID         = configuration.WarehouseID,
                PriceType           = configuration.PriceTypeID,
                LanguageID          = GlobalUtilities.GetCurrentLanguageID(),
                CurrencyCode        = configuration.CurrencyCode,
                RestrictToWarehouse = true,
                ReturnLongDetail    = true,
                ItemCodes           = itemcodes.Distinct().ToArray()
            });


            foreach (var item in response.Items)
            {
                yield return((Item)item);
            }
        }
Beispiel #7
0
        public CreateOrderRequest(IOrderConfiguration configuration, int shipMethodID, IEnumerable <IShoppingCartItem> items, ShippingAddress address)
        {
            WarehouseID  = configuration.WarehouseID;
            PriceType    = configuration.PriceTypeID;
            CurrencyCode = configuration.CurrencyCode;
            OrderDate    = DateTime.Now;
            OrderType    = ExigoWebService.OrderType.ShoppingCart;
            OrderStatus  = OrderStatusType.Incomplete;
            ShipMethodID = shipMethodID;
            Notes        = address.Notes;

            // Add all kit children under their parents. Add missing kit children
            // Will throw exception if dynamic kit children cannot be auto populated due to insuficient cart info
            IItemConverterService shoppingService = new Common.Services.ShoppingService(configuration);
            var details = shoppingService.GetOrderDetails(items.ToList());

            Details = details.ToArray();

            FirstName  = address.FirstName;
            MiddleName = address.MiddleName;
            LastName   = address.LastName;
            Email      = address.Email;
            Phone      = address.Phone;
            Address1   = address.Address1;
            Address2   = address.Address2;
            City       = address.City;
            State      = address.State;
            Zip        = address.Zip;
            Country    = address.Country;
        }
        public CreateOrderRequest(IOrderConfiguration configuration, int shipMethodID, IEnumerable <IShoppingCartItem> items, ShippingAddress address)
        {
            WarehouseID  = configuration.WarehouseID;
            PriceType    = configuration.PriceTypeID;
            CurrencyCode = configuration.CurrencyCode;
            OrderDate    = DateTime.Now;
            OrderType    = ExigoWebService.OrderType.ShoppingCart;
            OrderStatus  = OrderStatusType.Incomplete;
            ShipMethodID = shipMethodID;


            Details = items.Select(c => (OrderDetailRequest)(c as ShoppingCartItem)).ToArray();

            FirstName  = address.FirstName;
            MiddleName = address.MiddleName;
            LastName   = address.LastName;
            Email      = address.Email;
            Phone      = address.Phone;
            Address1   = address.Address1;
            Address2   = address.Address2;
            City       = address.City;
            State      = address.State;
            Zip        = address.Zip;
            Country    = address.Country;
        }
Beispiel #9
0
        /// <summary>
        /// Getting the Items
        /// </summary>
        /// <param name="itemCodes"></param>
        /// <param name="Configuration"></param>
        /// <param name="priceTypeiD"></param>
        /// <returns></returns>
        public static IEnumerable <Product> GetEligibleItems(string[] itemCodes, IOrderConfiguration Configuration, int priceTypeID)
        {
            List <Common.Api.ExigoWebService.ItemResponse> responseItems = new List <Common.Api.ExigoWebService.ItemResponse>();

            using (var context = Exigo.Sql())
            {
                int    webCategoryID    = itemCodes.Length == 0 ? Configuration.CategoryID : 0;
                int    webID            = 1;
                bool   returnLongDetail = false;
                string Codes            = itemCodes.Length == 0 ? "" : String.Join(",", itemCodes);
                string sqlProcedure     = string.Format("GetPersonalOrderItems {0},'{1}',{2},{3},{4},'{5}',{6}"
                                                        , priceTypeID, Configuration.CurrencyCode,
                                                        Configuration.WarehouseID, webCategoryID, webID, Codes,
                                                        returnLongDetail);
                responseItems = context.Query <Common.Api.ExigoWebService.ItemResponse>(sqlProcedure).ToList();
            }
            //group by item-code and select only first   allow only those items which  Available in stock
            responseItems = responseItems.GroupBy(x => x.ItemCode).Select(x => x.First()).ToList();
            // allow only those items which  Available in stock
            responseItems = responseItems.Where(x => x.InventoryStatus.ToString().Equals(Common.Api.ExigoWebService.InventoryStatusType.Available.ToString())).ToList();
            if (responseItems.Count() == 0)
            {
                return(new List <Product>());
            }
            var products = responseItems.Select(item => new Product(item)).ToList();

            products.ForEach(c => c.PriceTypeID = priceTypeID);
            return(products);
        }
Beispiel #10
0
        public CreateOrderRequest(IOrderConfiguration configuration, int shipMethodID, string giftMessage, IEnumerable <IShoppingCartItem> items, ShippingAddress address, decimal?shippingOverride = null, decimal?taxOverride = null)
        {
            WarehouseID            = configuration.WarehouseID;
            PriceType              = configuration.PriceTypeID;
            CurrencyCode           = configuration.CurrencyCode;
            OrderDate              = DateTime.Now;
            OrderType              = OrderType.ShoppingCart;
            OrderStatus            = OrderStatusType.Incomplete;
            ShipMethodID           = shipMethodID;
            ShippingAmountOverride = shippingOverride;
            TaxRateOverride        = taxOverride;
            Details = items.Select(c => (OrderDetailRequest)(c as ShoppingCartItem)).ToArray();

            FirstName = address.FirstName;
            LastName  = address.LastName;
            Email     = address.Email;
            Phone     = address.Phone;
            Address1  = address.Address1;
            Address2  = address.Address2;
            City      = address.City;
            State     = address.State;
            Zip       = address.Zip;
            Country   = address.Country;
            Other20   = giftMessage;
        }
Beispiel #11
0
        public CreateOrderRequest(int customerId, IOrderConfiguration configuration, string giftMessage, int shipMethodID, Common.ModelsEx.Shopping.IOrder order, decimal?ShippingOverride = null, decimal?TaxOverride = null)
        {
            CustomerID             = customerId;
            WarehouseID            = configuration.WarehouseID;
            PriceType              = configuration.PriceTypeID;
            CurrencyCode           = configuration.CurrencyCode;
            OrderDate              = DateTime.Now;
            OrderType              = OrderType.ShoppingCart;
            OrderStatus            = OrderStatusType.Incomplete;
            ShipMethodID           = shipMethodID;
            ShippingAmountOverride = ShippingOverride ?? ShippingOverride;
            TaxRateOverride        = TaxOverride ?? TaxOverride;
            Details = order.Products.Select(c => new OrderDetailRequest(c)).ToArray();

            FirstName = order.ShippingAddress.FirstName;
            LastName  = order.ShippingAddress.LastName;
            Email     = order.ShippingAddress.Email;
            Phone     = order.ShippingAddress.Phone;
            Address1  = order.ShippingAddress.Address1;
            Address2  = order.ShippingAddress.Address2;
            City      = order.ShippingAddress.City;
            State     = order.ShippingAddress.State;
            Zip       = order.ShippingAddress.Zip;
            Country   = order.ShippingAddress.Country;
            Other20   = giftMessage;
        }
        private void InflateManageAutoOrderViewModel(int customerID, IMarket market, IOrderConfiguration configuration, ref ManageAutoOrderViewModel viewModel)
        {
            viewModel.AvailableStartDates = Enumerable.Range(1, 27).Select(day =>
            {
                var date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, day).BeginningOfDay();
                if (date < DateTime.Now.BeginningOfDay())
                {
                    date = date.AddMonths(1);
                }

                return(date);
            }).OrderBy(d => d.Day).ToList();

            viewModel.AvailableProducts = Exigo.GetItems(new ExigoService.GetItemsRequest()
            {
                Configuration             = configuration,
                LanguageID                = Utilities.GetUserLanguage(Request).LanguageID,
                CategoryID                = configuration.CategoryID,
                PriceTypeID               = PriceTypes.Wholesale,
                IncludeChildCategories    = true,
                IncludeDynamicKitChildren = false
            }).ToList();

            viewModel.AvailablePaymentMethods = Exigo.GetCustomerPaymentMethods(customerID)
                                                .Where(p => p.IsValid)
                                                .Where(p => p is IAutoOrderPaymentMethod)
                                                .ToList();

            if (viewModel.AvailablePaymentMethods != null && viewModel.AvailablePaymentMethods.Count() == 1)
            {
                viewModel.NewCreditCard.Type = CreditCardType.Secondary;
            }
        }
Beispiel #13
0
 List <ShipMethodResponse> IShippingService.GetDefaultShipMethods(IOrderConfiguration configuration)
 {
     return(GetShipMethodsFromApi(
                new GetShipMethodsRequest
     {
         CurrencyCode = configuration.CurrencyCode,
         WarehouseID = configuration.WarehouseID
     }
                ));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref = "MainWindow"/> class.
 /// </summary>
 public MainWindow()
 {
     InitializeComponent();
     this.configuration   = new OrderConfiguration();
     this.factory         = configuration.GetFactory();
     this.builder         = configuration.GetBuilder();
     this.validator       = configuration.GetValidator();
     this.database        = configuration.GetDatabase();
     this.builder.Factory = factory;
     this.textBoxClassOfTheTaxi.ItemsSource   = Enum.GetNames(typeof(CarClass));
     this.textBoxClassOfTheTaxi.SelectedIndex = 0;
 }
Beispiel #15
0
        private static IQueryable <ItemWarehousePrice> GetItemsQueryable(IOrderConfiguration configuration, IEnumerable <string> itemCodes, params string[] expansions)
        {
            var query = Exigo.OData().ItemWarehousePrices;

            if (expansions != null && expansions.Length > 0)
            {
                query = query.Expand(string.Join(",", expansions));
            }

            return(query
                   .Where(c => c.WarehouseID == configuration.WarehouseID)
                   .Where(c => c.PriceTypeID == configuration.PriceTypeID)
                   .Where(c => c.CurrencyCode == configuration.CurrencyCode)
                   .Where(itemCodes.ToList().ToOrExpression <ItemWarehousePrice, string>("Item.ItemCode"))
                   .AsQueryable());
        }
Beispiel #16
0
        IEnumerable <Product> IProductService.GetDynamicProducts(IOrderConfiguration configuration, string[] itemCodes, bool includeDiscounts, IList <IIndividualReward> activeRewards)
        {
            // TODO: BRIAN F. - This should call a private, reusable method to stay DRY. This implementation is too similar.
            var request = new Api.ExigoWebService.GetItemsRequest
            {
                CurrencyCode     = configuration.CurrencyCode,
                PriceType        = configuration.PriceTypeID,
                LanguageID       = configuration.LanguageID,
                WarehouseID      = configuration.WarehouseID,
                WebCategoryID    = configuration.CategoryID,
                ItemCodes        = itemCodes,
                ReturnLongDetail = true
            };

            // Execute request and get the response.
            //var response = Api.GetItems(request);

            // Project items into products.
            //var products = response.Items
            //    .Select(item => new Product(item) { PriceTypeID = configuration.PriceTypeID })
            //    .ToList();
            //procedure
            List <ItemResponse> responseItems = new List <ItemResponse>();

            using (var context = Exigo.Sql())
            {
                string itemCode     = request.ItemCodes.Length > 0 ? request.ItemCodes[0] : "";
                string sqlProcedure = string.Format("GetDynamicItemDetail {0},'{1}',{2},{3},'{4}',{5}"
                                                    , request.PriceType, request.CurrencyCode, request.WarehouseID, request.WebCategoryID, itemCode, request.ReturnLongDetail);
                responseItems = context.Query <ItemResponse>(sqlProcedure).ToList();
            }
            // Project items into products.
            var products = responseItems.Select(item => new Product(item)).ToList();

            //end Procedure
            products.ForEach(c => c.PriceTypeID = request.PriceType);
            PopulateEligibleDiscounts(products, includeDiscounts);
            if (activeRewards != null)
            {
                foreach (var applyDiscount in activeRewards)
                {
                    applyDiscount.PopulateEligibleDiscounts(products);
                }
            }
            return(products);
        }
Beispiel #17
0
        List <ShipMethodResponse> IShippingService.GetStarterKitShipMethods(IOrderConfiguration configuration)
        {
            List <ShipMethodResponse> lst = GetShipMethodsFromApi(
                new GetShipMethodsRequest
            {
                CurrencyCode = configuration.CurrencyCode,
                WarehouseID  = Warehouses.StarterKitsandSubscriptionsUSA
            }
                );

            //List<ShipMethodResponse> lstReturn = (from i in lst where i.Description.Contains("2-day Expedited") select i).ToList();
            //lstReturn.AddRange(GetShipMethodsFromApi(
            //    new GetShipMethodsRequest
            //    {
            //        CurrencyCode = configuration.CurrencyCode,
            //        WarehouseID = Warehouses.StarterKitsandSubscriptionsUSA
            //    }
            //));
            return(lst);
        }
        public CreateOrderRequest(IOrderConfiguration configuration, int shipMethodID, IEnumerable<IShoppingCartItem> items, ShippingAddress address)
        {
            WarehouseID  = configuration.WarehouseID;
            PriceType    = configuration.PriceTypeID;
            CurrencyCode = configuration.CurrencyCode;
            OrderDate    = DateTime.Now;
            OrderType    = ExigoWebService.OrderType.ShoppingCart;
            OrderStatus  = OrderStatusType.Incomplete;
            ShipMethodID = shipMethodID;

            Details      = items.Select(c => (OrderDetailRequest)(c as ShoppingCartItem)).ToArray();

            FirstName    = address.FirstName;
            LastName     = address.LastName;
            Email        = address.Email;
            Phone        = address.Phone;
            Address1     = address.Address1;
            Address2     = address.Address2;
            City         = address.City;
            State        = address.State;
            Zip          = address.Zip;
            Country      = address.Country;
        }
Beispiel #19
0
        public static IEnumerable <string> GetEligibleItemCodes(string[] itemCodes, IOrderConfiguration Configuration, int priceTypeiD)
        {
            var getItemsrequest = new Common.Api.ExigoWebService.GetItemsRequest
            {
                ItemCodes     = itemCodes,
                CurrencyCode  = Configuration.CurrencyCode,
                PriceType     = priceTypeiD,
                LanguageID    = Configuration.LanguageID,
                WarehouseID   = Configuration.WarehouseID,
                WebID         = 1,
                WebCategoryID = null
            };

            var api = Exigo.WebService();

            // Execute request and get the response.
            var response = api.GetItems(getItemsrequest);

            foreach (var itemResponse in response.Items)
            {
                yield return(itemResponse.ItemCode);
            }
        }
Beispiel #20
0
 private static void PopulateAdditionalItemData(IEnumerable<Item> items, IOrderConfiguration configuration)
 {
     GlobalUtilities.RunAsyncTasks(
         () => { PopulateGroupMembers(items, configuration); },
         () => { PopulateDynamicKitMembers(items); }
     );
 }
Beispiel #21
0
        private static IQueryable<ItemWarehousePrice> GetItemsQueryable(IOrderConfiguration configuration, IEnumerable<string> itemCodes , params string[] expansions)
        {
            var query = Exigo.OData().ItemWarehousePrices;
            if (expansions != null && expansions.Length > 0)
            {
                query = query.Expand(string.Join(",", expansions));
            }

            return query
                    .Where(c => c.WarehouseID == configuration.WarehouseID)
                    .Where(c => c.PriceTypeID == configuration.PriceTypeID)
                    .Where(c => c.CurrencyCode == configuration.CurrencyCode)
                    .Where(itemCodes.ToList().ToOrExpression<ItemWarehousePrice, string>("Item.ItemCode"))
                    .AsQueryable();
        }
Beispiel #22
0
        public static IEnumerable<Item> GetItems(IEnumerable<ShoppingCartItem> shoppingCartItems, IOrderConfiguration configuration)
        {
            // If we don't have what we need to make this call, stop here.
            if (configuration == null)
                throw new InvalidRequestException("ExigoService.GetItems() requires an OrderConfiguration.");

            if (shoppingCartItems.Count() == 0)
                yield break;

            // Create the contexts we will use
            var context = Exigo.OData();

            // Get the data
            var apiItems = context.ItemWarehousePrices.Expand("Item/GroupMembers")
                    .Where(c => c.WarehouseID == configuration.WarehouseID)
                    .Where(c => c.PriceTypeID == configuration.PriceTypeID)
                    .Where(c => c.CurrencyCode == configuration.CurrencyCode)
                    .Where(shoppingCartItems.Select(c => c.ItemCode).Distinct().ToList().ToOrExpression<ItemWarehousePrice, string>("Item.ItemCode"))
                    .ToList();

            // Loop through each of our cart items, and populate it with the known data
            var results = new List<Item>();
            foreach (var apiItem in apiItems)
            {
                var cartItems = shoppingCartItems.Where(c => c.ItemCode == apiItem.Item.ItemCode).ToList();
                foreach (var cartItem in cartItems)
                {
                    var newItem                 = (Item)apiItem;
                    newItem.ID                  = cartItem.ID;
                    newItem.Quantity            = cartItem.Quantity;
                    newItem.ParentItemCode      = cartItem.ParentItemCode;
                    newItem.GroupMasterItemCode = cartItem.GroupMasterItemCode;
                    newItem.DynamicKitCategory  = cartItem.DynamicKitCategory;
                    newItem.Type                = cartItem.Type;

                    yield return newItem;
                }
            }
        }
Beispiel #23
0
        public static IEnumerable <Item> GetItems(IEnumerable <ShoppingCartItem> shoppingCartItems, IOrderConfiguration configuration)
        {
            // If we don't have what we need to make this call, stop here.
            if (configuration == null)
            {
                throw new InvalidRequestException("ExigoService.GetItems() requires an OrderConfiguration.");
            }

            if (shoppingCartItems.Count() == 0)
            {
                yield break;
            }


            // Create the contexts we will use
            var context = Exigo.OData();


            // Get the data
            var apiItems = context.ItemWarehousePrices.Expand("Item/GroupMembers")
                           .Where(c => c.WarehouseID == configuration.WarehouseID)
                           .Where(c => c.PriceTypeID == configuration.PriceTypeID)
                           .Where(c => c.CurrencyCode == configuration.CurrencyCode)
                           .Where(shoppingCartItems.Select(c => c.ItemCode).Distinct().ToList().ToOrExpression <ItemWarehousePrice, string>("Item.ItemCode"))
                           .ToList();


            // Loop through each of our cart items, and populate it with the known data
            var results = new List <Item>();

            foreach (var apiItem in apiItems)
            {
                var cartItems = shoppingCartItems.Where(c => c.ItemCode == apiItem.Item.ItemCode).ToList();
                foreach (var cartItem in cartItems)
                {
                    var newItem = (Item)apiItem;
                    newItem.ID                  = cartItem.ID;
                    newItem.Quantity            = cartItem.Quantity;
                    newItem.ParentItemCode      = cartItem.ParentItemCode;
                    newItem.GroupMasterItemCode = cartItem.GroupMasterItemCode;
                    newItem.DynamicKitCategory  = cartItem.DynamicKitCategory;
                    newItem.Type                = cartItem.Type;

                    yield return(newItem);
                }
            }
        }
Beispiel #24
0
 /// <summary>
 /// Capture configuration details and pass up to default constructor to handle defaults
 /// </summary>
 public ItemInformationRequest(IOrderConfiguration configuration) : this()
 {
     this.WarehouseID  = configuration.WarehouseID;
     this.PriceTypeID  = configuration.PriceTypeID;
     this.CurrencyCode = configuration.CurrencyCode;
 }
Beispiel #25
0
        public static IEnumerable <Item> GetItems(IEnumerable <ShoppingCartItem> shoppingCartItems, IOrderConfiguration configuration)
        {
            // If we don't have what we need to make this call, stop here.
            if (configuration == null)
            {
                throw new InvalidRequestException("ExigoService.GetItems() requires an OrderConfiguration.");
            }

            if (shoppingCartItems.Count() == 0)
            {
                yield break;
            }


            // Create the contexts we will use
            //var context = Exigo.OData();

            var ItemCodestringsResult = String.Join(",", shoppingCartItems.Select(i => i.ItemCode).ToList());

            int[] PriceTypeIDArray       = new int[] { PriceTypes.Retail, PriceTypes.Wholesale };
            var   PriceTypeIDArrayString = String.Join(", ", PriceTypeIDArray);

            var apiItems = new List <ItemWarehousePrice>();

            using (var Context = Exigo.Sql())
            {
                //Getting items list by item code
                string sqlProcedure = string.Format("ItemWarehousePrice {0},'{1}','{2}','{3}'", configuration.WarehouseID, PriceTypeIDArrayString, ItemCodestringsResult, configuration.CurrencyCode);
                apiItems = Context.Query <ItemWarehousePrice>(sqlProcedure).Distinct().ToList().GroupBy(c => new { c.PriceTypeID, c.ItemID }).Select(i => i.First()).ToList();
            }


            //// Get the data
            //var apiItems = context.ItemWarehousePrices.Expand("Item/GroupMembers")
            //        .Where(c => c.WarehouseID == configuration.WarehouseID)
            //    //.Where(c => c.PriceTypeID == configuration.PriceTypeID) Done to support Both Retail and Whole sale items for BO Rewards.
            //        .Where(c => c.PriceTypeID == PriceTypes.Retail || c.PriceTypeID == PriceTypes.Wholesale) //Done to support Both Retail and Whole sale items for BO Rewards.
            //        .Where(c => c.CurrencyCode == configuration.CurrencyCode)
            //        .Where(shoppingCartItems.Select(c => c.ItemCode).Distinct().ToList().ToOrExpression<ItemWarehousePrice, string>("Item.ItemCode"))
            //        .ToList().GroupBy(c => new { c.PriceTypeID, c.ItemID }).Select(i => i.First()).ToList();


            // Loop through each of our cart items, and populate it with the known data
            var results = new List <Item>();

            foreach (var apiItem in apiItems)
            {
                var cartItems = shoppingCartItems.Where(c => c.ItemCode == apiItem.ItemCode && c.PriceTypeID == apiItem.PriceTypeID).ToList();
                foreach (var cartItem in cartItems)
                {
                    var newItem = (Item)apiItem;
                    newItem.ID                  = cartItem.ID;
                    newItem.Category            = cartItem.Category;
                    newItem.LargeImageUrl       = cartItem.LargePicture;
                    newItem.TinyImageUrl        = cartItem.TinyPicture;
                    newItem.SmallImageUrl       = cartItem.SmallPicture;
                    newItem.ItemCode            = cartItem.ItemCode;
                    newItem.ItemDescription     = cartItem.Description;
                    newItem.Quantity            = cartItem.Quantity;
                    newItem.Price               = cartItem.Price;
                    newItem.AppliedAmount       = cartItem.AppliedAmount;
                    newItem.ParentItemCode      = cartItem.ParentItemCode;
                    newItem.GroupMasterItemCode = cartItem.GroupMasterItemCode;
                    newItem.DynamicKitCategory  = cartItem.DynamicKitCategory;
                    newItem.Type                = cartItem.Type;
                    newItem.PriceTypeID         = cartItem.PriceTypeID;
                    newItem.ApplyDiscountType   = cartItem.ApplyDiscountType;
                    newItem.PriceEachOverride   = cartItem.PriceEachOverride;

                    newItem.MaxKitQuantity = cartItem.MaxKitQuantity;

                    newItem.BusinessVolumeEachOverride       = cartItem.BusinessVolumeEachOverride;
                    newItem.CommissionableVolumeEachOverride = cartItem.CommissionableVolumeEachOverride;


                    yield return(newItem);
                }
            }
        }
Beispiel #26
0
 public PopulateAdditionalItemDataRequest(IOrderConfiguration configuration, int languageID) : base(configuration, languageID)
 {
     this.Items = new List <Item>();
 }
Beispiel #27
0
        public static List <Item> GetItems(IEnumerable <ShoppingCartItem> shoppingCartItems, IOrderConfiguration configuration, int languageID, int _priceTypeID = 0)
        {
            var results = new List <Item>();

            // If we don't have what we need to make this call, stop here.
            if (configuration == null)
            {
                throw new InvalidRequestException("ExigoService.GetItems() requires an OrderConfiguration.");
            }

            if (shoppingCartItems.Count() == 0)
            {
                return(results);
            }


            // Create the contexts we will use
            var priceTypeID = (_priceTypeID > 0) ? _priceTypeID : configuration.PriceTypeID;

            var itemcodes = new List <string>();

            shoppingCartItems.ToList().ForEach(c => itemcodes.Add(c.ItemCode));

            var apiItems = GetItemInformation(new GetItemsRequest {
                Configuration = configuration, LanguageID = languageID, ItemCodes = itemcodes.ToArray()
            }, priceTypeID);

            // Populate the group members and dynamic kits
            if (apiItems.Any())
            {
                var request = new GetItemsRequest
                {
                    LanguageID    = languageID,
                    Configuration = configuration
                };
                PopulateAdditionalItemData(apiItems, request);
            }

            foreach (var cartItem in shoppingCartItems)
            {
                var apiItem = apiItems.FirstOrDefault(i => i.ItemCode == cartItem.ItemCode);

                if (apiItem != null)
                {
                    var newItem = (Item)apiItem.DeepClone();
                    newItem.ID                  = cartItem.ID;
                    newItem.Quantity            = cartItem.Quantity;
                    newItem.ParentItemCode      = cartItem.ParentItemCode;
                    newItem.GroupMasterItemCode = cartItem.GroupMasterItemCode;
                    newItem.DynamicKitCategory  = cartItem.DynamicKitCategory;
                    newItem.Type                = cartItem.Type;
                    results.Add(newItem);
                }
            }

            // Return the data
            return(results);
        }
Beispiel #28
0
 /// <summary>
 /// Capture language and pass up to sibling constructor to capture configuration details
 /// </summary>
 public ItemInformationRequest(IOrderConfiguration configuration, int?languageID) : this(configuration)
 {
     this.LanguageID = languageID;
 }
Beispiel #29
0
        private static void PopulateGroupMembers(IEnumerable<Item> items, IOrderConfiguration configuration)
        {
            // Determine if we have any group master items
            var groupMasterItemCodes = items.Where(c => c.IsGroupMaster).Select(c => c.ItemCode).ToList();
            if (groupMasterItemCodes.Count == 0) return;

            // Get the item group members
            var context = Exigo.OData();
            var apiItemGroupMembers = context.ItemGroupMembers
                .Where(groupMasterItemCodes.ToOrExpression<Common.Api.ExigoOData.ItemGroupMember, string>("MasterItemCode"))
                .ToList();

            // Bind the item group members to the items
            var itemGroupMembers = apiItemGroupMembers.Select(c => (ItemGroupMember)c).ToList();

            // Get a collection of images for each of these group members
            var memberItemCodes = apiItemGroupMembers.Select(c => c.ItemCode).ToList();
            var memberData = Exigo.OData().ItemWarehousePrices
                .Where(i => i.CurrencyCode == configuration.CurrencyCode)
                .Where(i => i.PriceTypeID == configuration.PriceTypeID)
                .Where(memberItemCodes.ToOrExpression<Common.Api.ExigoOData.ItemWarehousePrice, string>("Item.ItemCode"))
                .Select(i => new AdditionalDataCollection()
                {
                    ItemCode = i.Item.ItemCode,
                    LargeImage = i.Item.LargeImageUrl,
                    SmallImage = i.Item.SmallImageUrl,
                    Price = i.Price,
                    RetailPrice = i.Other1Price,
                    ShortDescription = i.Item.ShortDetail,
                    LongDescription1 = i.Item.LongDetail,
                    LongDescription2 = i.Item.LongDetail2,
                    AllowOnAutoOrder = i.Item.AllowOnAutoOrder
                }).ToList();

            foreach (var groupMasterItemCode in groupMasterItemCodes)
            {
                var item = items.Where(c => c.ItemCode == groupMasterItemCode).FirstOrDefault();
                if (item == null) continue;

                item.GroupMembers = itemGroupMembers
                    .Where(c => c.MasterItemCode == groupMasterItemCode)
                    .OrderBy(c => c.SortOrder)
                    .ToList();

                // Populate the item's basic details for cart purposes
                foreach (var groupMember in item.GroupMembers)
                {
                    var data = memberData.FirstOrDefault(i => i.ItemCode == groupMember.ItemCode) ?? new AdditionalDataCollection();
                    groupMember.Item = groupMember.Item ?? new Item();
                    groupMember.Item.ItemCode = groupMember.ItemCode;
                    groupMember.Item.GroupMasterItemCode = groupMasterItemCode;
                    groupMember.Item.LargeImageUrl = data.LargeImage;
                    groupMember.Item.SmallImageUrl = data.SmallImage;
                    groupMember.Item.Price = data.Price;
                    groupMember.Item.OtherPrice1 = data.RetailPrice;
                    groupMember.Item.ShortDetail1 = data.ShortDescription;
                    groupMember.Item.LongDetail1 = data.LongDescription1;
                    groupMember.Item.LongDetail2 = data.LongDescription2;
                    groupMember.Item.AllowOnAutoOrder = data.AllowOnAutoOrder;
                }
            }
        }
 public ShoppingService(IOrderConfiguration orderConfiguration)
 {
     this._OrderConfiguration = orderConfiguration;
 }
Beispiel #31
0
        //[Inject]
        //public ICaching Caching { get; set; }

        #endregion

        /// <summary>
        /// Returns products by category.
        /// </summary>
        /// <param name="orderConfiguration">The order configuration.</param>
        /// <returns>A collection of products.</returns>
        IEnumerable <Product> IProductService.GetStarterKits(
            IOrderConfiguration orderConfiguration, string[] itemCodes = null)
        {
            return(GetStarterKitProductsByCategoryId(CategoryStarterKit, WarehouseStarterKits, itemCodes));
        }
Beispiel #32
0
        // Item call for shopping cart items
        public static List <Item> GetItems(IEnumerable <ShoppingCartItem> shoppingCartItems, IOrderConfiguration configuration, int languageID, int _priceTypeID = 0)
        {
            var results = new List <Item>();

            // If we don't have what we need to make this call, stop here.
            if (configuration == null)
            {
                throw new InvalidRequestException("ExigoService.GetItems() requires an OrderConfiguration.");
            }

            if (shoppingCartItems.Count() == 0)
            {
                return(results);
            }


            // Create the contexts we will use
            var priceTypeID = (_priceTypeID > 0) ? _priceTypeID : configuration.PriceTypeID;

            var itemcodes = new List <string>();

            shoppingCartItems.ToList().ForEach(c => itemcodes.Add(c.ItemCode));

            var apiItems = new List <ExigoService.Item>();

            try
            {
                using (var context = Exigo.Sql())
                {
                    apiItems = context.Query <ExigoService.Item>(@"
                            SELECT
	                        ItemID = i.ItemID,
	                        ItemCode = i.ItemCode,
	                        ItemDescription = 
		                        case 
			                        when i.IsGroupMaster = 1 then COALESCE(i.GroupDescription, il.ItemDescription, i.ItemDescription)
			                        when il.ItemDescription != '' then COALESCE(il.ItemDescription, i.ItemDescription)
							        else i.ItemDescription
		                        end,
	                        Weight = i.Weight,
	                        ItemTypeID = i.ItemTypeID,
	                        TinyImageUrl = i.TinyImageName,
	                        SmallImageUrl = i.SmallImageName,
	                        LargeImageUrl = i.LargeImageName,
	                        ShortDetail1 = COALESCE(il.ShortDetail, i.ShortDetail),
	                        ShortDetail2 = COALESCE(il.ShortDetail2, i.ShortDetail2),
	                        ShortDetail3 = COALESCE(il.ShortDetail3, i.ShortDetail3),
	                        ShortDetail4 = COALESCE(il.ShortDetail4, i.ShortDetail4),
	                        LongDetail1 = COALESCE(il.LongDetail, i.LongDetail),
	                        LongDetail2 = COALESCE(il.LongDetail2, i.LongDetail2),
	                        LongDetail3 = COALESCE(il.LongDetail3, i.LongDetail3),
	                        LongDetail4 = COALESCE(il.LongDetail4, i.LongDetail4),
	                        IsVirtual = i.IsVirtual,
	                        AllowOnAutoOrder = i.AllowOnAutoOrder,
	                        IsGroupMaster = i.IsGroupMaster,
	                        IsDynamicKitMaster = cast(case when i.ItemTypeID = 2 then 1 else 0 end as bit),
	                        GroupMasterItemDescription = i.GroupDescription,
	                        GroupMembersDescription = i.GroupMembersDescription,
	                        Field1 = i.Field1,
	                        Field2 = i.Field2,
	                        Field3 = i.Field3,
	                        Field4 = i.Field4,
	                        Field5 = i.Field5,
	                        Field6 = i.Field6,
	                        Field7 = i.Field7,
	                        Field8 = i.Field8,
	                        Field9 = i.Field9,
	                        Field10 = i.Field10,
	                        OtherCheck1 = i.OtherCheck1,
	                        OtherCheck2 = i.OtherCheck2,
	                        OtherCheck3 = i.OtherCheck3,
	                        OtherCheck4 = i.OtherCheck4,
	                        OtherCheck5 = i.OtherCheck5,
	                        Auto1 = i.Auto1,
	                        Auto2 = i.Auto2,
	                        Auto3 = i.Auto3,
	                        Price = ip.Price,
	                        CurrencyCode = ip.CurrencyCode,
	                        BV = ip.BusinessVolume,
	                        CV = ip.CommissionableVolume,
	                        OtherPrice1 = ip.Other1Price,
	                        OtherPrice2 = ip.Other2Price,
	                        OtherPrice3 = ip.Other3Price,
	                        OtherPrice4 = ip.Other4Price,
	                        OtherPrice5 = ip.Other5Price,
	                        OtherPrice6 = ip.Other6Price,
	                        OtherPrice7 = ip.Other7Price,
	                        OtherPrice8 = ip.Other8Price,
	                        OtherPrice9 = ip.Other9Price,
	                        OtherPrice10 = ip.Other10Price,
					        a.Price AS RetailPrice,
					        a.PriceTypeID AS PriceTypeID1,
	                        b.Price AS SmartShopperPrice,
					        b.PriceTypeID AS PriceTypeID2
                        FROM Items i
	                        INNER JOIN ItemPrices ip
		                        ON ip.ItemID = i.ItemID
		                        AND ip.PriceTypeID = @priceTypeID
						        AND ip.CurrencyCode = @currencyCode
                        INNER JOIN ItemPrices a
		                        ON a.ItemID = ip.ItemID
                                AND a.CurrencyCode = @currencyCode
                                AND a.PriceTypeID = @FirstPriceTypeID
					        INNER JOIN ItemPrices b					
					            ON b.ItemID = ip.ItemID
						        AND b.CurrencyCode = @currencyCode
						        AND b.PriceTypeID = @SecondPriceTypeID
	                        INNER JOIN ItemWarehouses iw
		                        ON iw.ItemID = i.ItemID
		                        AND iw.WarehouseID = @warehouse
						        LEFT JOIN ItemLanguages il
		                        ON il.ItemID = i.ItemID
						        AND il.LanguageID = @languageID
					        WHERE i.ItemCode in @itemCodes
                        ", new
                    {
                        warehouse         = configuration.WarehouseID,
                        currencyCode      = configuration.CurrencyCode,
                        languageID        = languageID,
                        itemCodes         = itemcodes,
                        priceTypeID       = priceTypeID,
                        FirstPriceTypeID  = PriceTypes.Retail,
                        SecondPriceTypeID = PriceTypes.Wholesale
                    }).ToList();
                }
            }
            catch (Exception e)
            {
                Console.Write(e);
            }

            if (apiItems.Any())
            {
                // Populate the group members and dynamic kits
                PopulateAdditionalItemData(apiItems, languageID, configuration.CurrencyCode, configuration.WarehouseID);
            }

            foreach (var apiItem in apiItems)
            {
                var cartItems = shoppingCartItems.Where(c => c.ItemCode == apiItem.ItemCode).ToList();
                foreach (var cartItem in cartItems)
                {
                    var newItem = apiItem;
                    newItem.ID                  = cartItem.ID;
                    newItem.Quantity            = cartItem.Quantity;
                    newItem.ParentItemCode      = cartItem.ParentItemCode;
                    newItem.GroupMasterItemCode = cartItem.GroupMasterItemCode;
                    newItem.DynamicKitCategory  = cartItem.DynamicKitCategory;
                    newItem.Type                = cartItem.Type;
                    results.Add(newItem);
                }
            }
            // Return the data
            return(results);
        }
Beispiel #33
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="itemCodes"></param>
        /// <param name="includeDiscounts"></param>
        /// <returns></returns>
        IEnumerable <Product> IProductService.GetProducts(IOrderConfiguration configuration, string[] itemCodes, bool includeDiscounts, IList <IIndividualReward> activeRewards)
        {
            // TODO: BRIAN F. - This should call a private, reusable method to stay DRY. This implementation is too similar.
            var request = new Api.ExigoWebService.GetItemsRequest
            {
                CurrencyCode     = configuration.CurrencyCode,
                PriceType        = configuration.PriceTypeID,
                LanguageID       = configuration.LanguageID,
                WarehouseID      = configuration.WarehouseID,
                WebCategoryID    = configuration.CategoryID,
                ItemCodes        = itemCodes,
                ReturnLongDetail = true
            };

            // Execute request and get the response.
            //var response = Api.GetItems(request);

            // Project items into products.

            //var products = response.Items
            //    .Select(item => new Product(item) { PriceTypeID = configuration.PriceTypeID })
            //    .ToList();
            //procedure
            List <ItemResponse> responseItems = new List <ItemResponse>();
            string itemCode = request.ItemCodes.Length > 0 ? request.ItemCodes[0] : "";

            using (var context = Exigo.Sql())
            {
                int webID = 1;
                //if itemcode didn't supplied then get item based on WebCategoryID
                int    WebCategoryID = itemCode == string.Empty ? Convert.ToInt32(request.WebCategoryID) : 0;
                string sqlProcedure  = string.Format("GetPersonalOrderItems {0},'{1}',{2},{3},{4},'{5}',{6}"
                                                     , request.PriceType, request.CurrencyCode, request.WarehouseID, WebCategoryID, webID, itemCode, request.ReturnLongDetail);
                responseItems = context.Query <ItemResponse>(sqlProcedure).ToList();
            }
            // Project items into products.
            List <Product> products = new List <Product>();

            if (!string.IsNullOrEmpty(itemCode))
            {
                var     product       = responseItems.GroupBy(s => s.ItemCode).FirstOrDefault();
                Product singleProduct = new Product(product.FirstOrDefault());
                products.Add(singleProduct);
            }
            else
            {
                products = responseItems.Select(item => new Product(item)).ToList();
            }

            //end Procedure
            products.ForEach(c => c.PriceTypeID = request.PriceType);
            PopulateEligibleDiscounts(products, includeDiscounts);
            if (activeRewards != null)
            {
                foreach (var applyDiscount in activeRewards)
                {
                    applyDiscount.PopulateEligibleDiscounts(products);
                }
            }
            return(products);
        }
 public ItemConverterService(IOrderConfiguration orderConfig)
 {
     this._OrderConfiguration = orderConfig;
 }
Beispiel #35
0
        private static void PopulateDynamicKitMembers(IEnumerable <Item> items, IOrderConfiguration configuration, int languageID, GetItemsRequest request)
        {
            try
            {
                // Determine if we have any dynamic kit items
                var dynamicKitMasterItemCodes = items.Where(c => c.IsDynamicKitMaster).Select(c => c.ItemCode).ToList();
                if (dynamicKitMasterItemCodes.Count == 0)
                {
                    return;
                }

                using (var context = Exigo.Sql())
                {
                    var allKitCategoryItems = context.Query <DynamicKitCategoryItem>(@"
                        select
                            MasterItemID = idkcm.MasterItemID,
                            DynamicKitCategoryID = idkcm.DynamicKitCategoryID,
                            DynamicKitCategory = dkc.DynamicKitCategoryDescription, 
                            Quantity = idkcm.Quantity,
                            ItemID = i.ItemID,
                            ItemCode = i.ItemCode,
                            ItemDescription = i.ItemDescription,
                            TinyImage = i.TinyImageName,
                            SmallImage = i.SmallImageName,
                            LargeImage = i.LargeImageName

                            from ItemDynamicKitCategoryMembers idkcm
                            inner join ItemDynamicKitCategories dkc
	                            on dkc.DynamicKitCategoryID = idkcm.DynamicKitCategoryID
                            inner join Items mi
	                            on idkcm.MasterItemID = mi.ItemID
	                            and mi.ItemCode in @itemcodes
                            left join ItemDynamicKitCategoryItemMembers dkitem
	                            on dkitem.DynamicKitCategoryID = idkcm.DynamicKitCategoryID
                            left join Items i
	                            on dkitem.ItemID = i.ItemID
                        ", new { itemCodes = dynamicKitMasterItemCodes }).ToList();


                    foreach (var dynamicKitMasterItemCode in dynamicKitMasterItemCodes)
                    {
                        // Get the specifc master DK item
                        var item = items.Where(c => c.ItemCode == dynamicKitMasterItemCode).FirstOrDefault();
                        if (item == null)
                        {
                            continue;
                        }

                        // Get the appropriate kit category items for the master DK item
                        var kitCategoryItems     = allKitCategoryItems.Where(c => c.MasterItemID == item.ItemID).ToList();
                        var itemCodeCategoryKeys = kitCategoryItems.Select(c => new
                        {
                            ItemCode             = c.ItemCode,
                            DynamicKitCategoryID = c.DynamicKitCategoryID
                        });
                        var itemCodes  = itemCodeCategoryKeys.Select(c => c.ItemCode);
                        var categories = new List <DynamicKitCategory>();

                        // Assemble a unique list of kit categories
                        foreach (var cat in kitCategoryItems)
                        {
                            if (categories.Where(c => c.DynamicKitCategoryID == cat.DynamicKitCategoryID).Count() == 0)
                            {
                                var category = new DynamicKitCategory();

                                category.Quantity = cat.Quantity;
                                category.DynamicKitCategoryDescription = cat.DynamicKitCategory;
                                category.DynamicKitCategoryID          = cat.DynamicKitCategoryID;
                                categories.Add(category);
                            }
                        }

                        // Add the list of kit categories to the master DK item
                        item.DynamicKitCategories = categories;

                        // get the information for the child kit category items
                        var childrenItems = GetItems(new GetItemsRequest {
                            Configuration = configuration, LanguageID = languageID, ItemCodes = itemCodes.ToArray()
                        });

                        // Map the items to correct kit categories on the the master DK item
                        foreach (var citem in childrenItems)
                        {
                            var _category = itemCodeCategoryKeys.Where(c => c.ItemCode == citem.ItemCode).FirstOrDefault();
                            if (_category != null)
                            {
                                var itemCategory = item.DynamicKitCategories.FirstOrDefault(c => c.DynamicKitCategoryID == _category.DynamicKitCategoryID);

                                itemCategory.Items.Add(new DynamicKitCategoryItem
                                {
                                    ItemID               = citem.ItemID,
                                    ItemDescription      = citem.ItemDescription,
                                    TinyImageUrl         = citem.TinyImageUrl,
                                    SmallImageUrl        = citem.SmallImageUrl,
                                    LargeImageUrl        = citem.LargeImageUrl,
                                    ItemCode             = citem.ItemCode,
                                    Quantity             = itemCategory.Quantity,
                                    ParentItemCode       = dynamicKitMasterItemCode,
                                    GroupMasterItemCode  = dynamicKitMasterItemCode,
                                    DynamicKitCategory   = itemCategory.DynamicKitCategoryDescription,
                                    DynamicKitCategoryID = itemCategory.DynamicKitCategoryID
                                });
                            }


                            // Get the static kit members if needed
                            if (citem.ItemTypeID == 1)
                            {
                                var itemCodeAsList = new List <string>()
                                {
                                    citem.ItemCode
                                };
                                item.StaticKitChildren = GetStaticKitChildren(itemCodeAsList, request);
                            }
                        }
                    }
                }
            }
            catch { }
        }