/// <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); }
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); }
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); }
/// <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); }
/// <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); }