示例#1
0
        /// <summary>
        /// Generic method for querying products from the Exigo API,
        /// filtering by <paramref name="categoryId"/> and
        /// <paramref name="warehouseId"/>.
        /// </summary>
        /// <returns>A collection of products.</returns>
        private IEnumerable <StarterKitItems> Getitems(int categoryId, int WarehouseId)
        {
            // Build the request.
            var request = new Api.ExigoWebService.GetItemsRequest
            {
                CurrencyCode     = "USD", // TODO: Look up in config
                PriceType        = 1,
                LanguageID       = 0,
                WebCategoryID    = categoryId,
                WarehouseID      = WarehouseId,
                WebID            = 1,
                ReturnLongDetail = true,
                ItemCodes        = null
            };

            // Execute request and get the response.
            var response = Api.GetItems(request);
            var products = response.Items.GroupBy(s => s.ItemCode).Select(x => new StarterKitItems()
            {
                Price        = x.FirstOrDefault().Price,
                SmallPicture = x.FirstOrDefault().SmallPicture,
                ItemCode     = x.FirstOrDefault().ItemCode,
                ShortDetail  = x.FirstOrDefault().ShortDetail,
                //RetailPrice = Convert.ToDecimal(x.ShortDetail4)
            }).ToList();

            return(products);
        }
示例#2
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);
        }
示例#3
0
        private IEnumerable <Product> GetDynamicProductsByCategoryId(
            int?categoryId                          = CategoryDefault,
            string itemCode                         = "",
            int warehouseId                         = WarehouseDefault,
            int priceType                           = 1,
            bool returnLongDetail                   = true,
            bool includeDiscounts                   = false,
            bool includeBookingRewardDiscount       = false,
            IList <IIndividualReward> activeRewards = null,
            Event @event = null
            )

        {
            // Build the request.
            var request = new Api.ExigoWebService.GetItemsRequest
            {
                CurrencyCode     = "USD", // TODO: Look up in config
                PriceType        = priceType,
                LanguageID       = 0,
                WarehouseID      = warehouseId,
                WebID            = 1,
                ReturnLongDetail = returnLongDetail,
                WebCategoryID    = null,
                ItemCodes        = !string.IsNullOrWhiteSpace(itemCode)
                    ? new[] { itemCode }
                    : null
            };

            // Execute request and get the response.
            //var response = Api.GetItems(request);
            ////Project items into products.
            //var products2 = response.Items
            //    .Select(item => new Product(item))
            //    .ToList();
            ////proc
            //List<ItemResponse> responseItems = new List<ItemResponse>();
            List <ItemResponse> responseItems = new List <ItemResponse>();
            List <Product>      products      = new List <Product>();

            using (var context = Exigo.Sql())
            {
                string itemCodes    = string.Join(",", request.ItemCodes);
                string sqlProcedure = string.Format("GetPersonalOrderItems {0},'{1}',{2},{3},{4},'{5}',{6}"
                                                    , request.PriceType, request.CurrencyCode, request.WarehouseID, request.WebCategoryID != null ? request.WebCategoryID : 0, request.WebID, itemCodes, request.ReturnLongDetail);
                //responseItems = context.Query<ItemResponse>(sqlProcedure).ToList();
                responseItems = context.Query <ItemResponse>(sqlProcedure).ToList();
                //in case of  Dynamic Kit items it return Max Kit Count in Quantity field
                //products.ForEach(s => s.Quantity = 1);

                // Project items into products.
                products = responseItems
                           .Select(item => new Product(item))
                           .ToList();

                products.ForEach(s => s.LargePicture = GlobalUtilities.GetProductImagePath(s.LargePicture, s.ItemCode));
                products.ForEach(s => s.SmallPicture = GlobalUtilities.GetProductImagePath(s.SmallPicture, s.ItemCode));
                products.ForEach(s => s.TinyPicture  = GlobalUtilities.GetProductImagePath(s.TinyPicture, s.ItemCode));
            }
            //KitMemberResponse
            // Project items into products.
            //var products = responseItems.Select(item => new Product(item)).ToList();
            KitMemberResponse kitMemberResponse;

            foreach (var productItem in products)
            {
                kitMemberResponse = new KitMemberResponse();


                using (var context = Exigo.Sql())
                {
                    //Getting Decription of parent
                    string           sqlProcedure1        = string.Format("GetParentDynamicKitDescription '{0}'", productItem.ItemCode);
                    ParentDynamicKit parentDynamicKitDesc = context.Query <ParentDynamicKit>(sqlProcedure1).FirstOrDefault();
                    kitMemberResponse.Description = parentDynamicKitDesc.Description;
                    // getting members of kit
                    string sqlProcedure      = string.Format("GetKitMemberItems '{0}'", productItem.ItemCode);
                    var    lstKitMemberItems = context.Query <KitMemberItemResponse>(sqlProcedure).ToArray();
                    kitMemberResponse.KitMemberItems = lstKitMemberItems;
                }
                List <KitMemberResponse> lstKitMemberRespones = new List <KitMemberResponse>();
                lstKitMemberRespones.Add(kitMemberResponse);
                productItem.KitMembers = lstKitMemberRespones.ToArray();
            }

            ////end proc
            products.ForEach(c => c.PriceTypeID = priceType);
            PopulateEligibleDiscounts(products, includeDiscounts, includeBookingRewardDiscount, @event);

            if (activeRewards != null)
            {
                foreach (var applyDiscount in activeRewards)
                {
                    if (priceType != PriceTypes.Wholesale)
                    {
                        applyDiscount.PopulateEligibleDiscounts(products);
                    }
                }
            }
            return(products);
        }
示例#4
0
        /// <summary>
        /// Generic method for querying products of starter kit,
        /// <paramref name="categoryId"/>
        /// <paramref name="warehouseId"/>.
        /// </summary>
        /// <param name="categoryId"></param>
        /// <param name="warehouseId"></param>
        /// <param name="itemCode"></param>
        /// <param name="priceType"></param>
        /// <param name="returnLongDetail"></param>
        /// <param name="includeDiscounts"></param>
        /// <param name="includeBookingRewardDiscount"></param>
        /// <param name="activeRewards"></param>
        /// <param name="event"></param>
        /// <returns>A collection of products.</returns>
        private IEnumerable <Product> GetStarterKitProductsByCategoryId(
            int?categoryId                          = CategoryDefault,
            int warehouseId                         = WarehouseDefault,
            string[] itemCodes                      = null,
            int priceType                           = 1,
            bool returnLongDetail                   = true,
            bool includeDiscounts                   = false,
            bool includeBookingRewardDiscount       = false,
            IList <IIndividualReward> activeRewards = null,
            Event @event    = null,
            string siteType = ""

            )
        {
            // Build the request.
            var request = new Api.ExigoWebService.GetItemsRequest
            {
                CurrencyCode     = "USD", // TODO: Look up in config
                PriceType        = priceType,
                LanguageID       = 0,
                WarehouseID      = warehouseId,
                WebID            = 1,
                ReturnLongDetail = returnLongDetail,
                WebCategoryID    = categoryId,
                ItemCodes        = itemCodes != null ? itemCodes : null
                                   //ItemCodes = !string.IsNullOrWhiteSpace(itemCode)
                                   //    ? new[] { itemCode }
                                   //    : null
            };

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

            ////Project items into products.
            //var products2 = response.Items
            //    .Select(item => new Product(item))
            //    .ToList();
            //proc
            List <ItemResponse> responseItems = new List <ItemResponse>();

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

            //end proc
            products.ForEach(c => c.PriceTypeID = priceType);
            PopulateEligibleDiscounts(products, includeDiscounts, includeBookingRewardDiscount, @event);

            if (activeRewards != null)
            {
                foreach (var applyDiscount in activeRewards)
                {
                    if (priceType == PriceTypes.Wholesale)
                    {
                        ;
                    }
                    else
                    {
                        applyDiscount.PopulateEligibleDiscounts(products);
                    }
                }
            }
            return(products);
        }
示例#5
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);
        }