/// <summary> /// Gets the product availability. /// </summary> /// <param name="productIds">The product ids.</param> /// <param name="channelId">The channel identifier.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Response containing available quantities for the listings inquired.</returns> public async Task <ActionResult> GetProductAvailability(IEnumerable <long> productIds, long channelId, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); PagedResult <ProductAvailableQuantity> productAvailableQuantities = await productOperationsHandler.GetProductAvailability(productIds, channelId, queryResultSettings); return(this.Json(productAvailableQuantities.Results)); }
/// <summary> /// Gets the products. /// </summary> /// <param name="productIds">The product ids.</param> /// <returns>Response containing simple products.</returns> public async Task <ActionResult> GetSimpleProducts(IEnumerable <long> productIds) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); IEnumerable <SimpleProduct> simpleProducts = await productOperationsHandler.GetSimpleProducts(productIds); return(this.Json(simpleProducts)); }
/// <summary> /// Gets the active prices of the specified products. /// </summary> /// <param name="recordIds">Products' record IDs.</param> /// <param name="catalogId">The catalog ID.</param> /// <param name="affiliationLoyaltyTierIds">Affiliation Loyalty Tier IDs.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>The prices.</returns> public async Task <ActionResult> GetActivePrices(IEnumerable <long> recordIds, long?catalogId, IEnumerable <long> affiliationLoyaltyTierIds, QueryResultSettings queryResultSettings) { if (queryResultSettings == null) { throw new ArgumentNullException(nameof(queryResultSettings)); } EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); PagedResult <ProductPrice> products = await productOperationsHandler.GetActivePrices(recordIds, catalogId, affiliationLoyaltyTierIds, queryResultSettings); return(this.Json(products.Results)); }
/// <summary> /// Get the search results. /// </summary> /// <param name="searchText">The search text.</param> /// <returns> /// The View for that product. /// </returns> public async Task <ActionResult> Search(string searchText) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); string sanitizedSearchText = Utilities.GetSanitizedSearchText(searchText); PagedResult <ProductSearchResult> productSearchResults = await productOperationsHandler.SearchByText(sanitizedSearchText, catalogId : 0, queryResultSettings : Utilities.DefaultQuerySettings); await PopulateProductInfo(productSearchResults, ecommerceContext); ProductSearchResultsViewModel viewModel = new ProductSearchResultsViewModel(sanitizedSearchText, productSearchResults); return(this.View(ProductsController.ProductSearchResultsViewName, viewModel)); }
/// <summary> /// Return View. /// </summary> /// <returns>The View.</returns> public async Task <ActionResult> Index() { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <Category> categories = await orgUnitOperationsHandler.GetNavigationalHierarchyCategories(Utilities.DefaultQuerySettings); IEnumerable <long> rawCategoryIds = categories.Select(c => c.RecordId); Collection <Product> productList = null; // add productId to an ObservableCollection ObservableCollection <long> productIds = new ObservableCollection <long>() { 22565423115, 22565423455, 22565423885, 22565423933 }; ProductSearchCriteria searchCriteria = new ProductSearchCriteria { DataLevelValue = 4, Ids = productIds }; // try and get product information ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); // This will fetch even uncatalogued products that match the criteria. PagedResult <Product> products = await productOperationsHandler.SearchProducts(searchCriteria, new long[] { 0 }, Utilities.DefaultQuerySettings); if (products.Results.Any()) { productList = new Collection <Product>(products.Results.ToList()); } return(this.View(HomeController.HomeViewName, productList)); }
/// <summary> /// Get the Details for a particular product. /// </summary> /// <param name="productId">The product id you need the details for.</param> /// <returns>The View for that product.</returns> public async Task <ActionResult> Index(string productId = "") { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <Category> categories = await orgUnitOperationsHandler.GetNavigationalHierarchyCategories(Utilities.DefaultQuerySettings); IEnumerable <long> rawCategoryIds = categories.Select(c => c.RecordId); ObservableCollection <long> productIds = null; Product prod = null; Collection <CustomLink> breadcrumbNavLinks = new Collection <CustomLink>(); long productIdentifier; if (string.IsNullOrEmpty(productId) || !long.TryParse(productId, out productIdentifier)) { RetailLogger.Log.OnlineStoreInvalidProductIdProvided(productId); return(this.RedirectToAction(HomeController.DefaultActionName, HomeController.ControllerName)); } else { // add productId to an ObservableCollection productIds = new ObservableCollection <long>(); productIds.Add(productIdentifier); ProductSearchCriteria searchCriteria = new ProductSearchCriteria { DataLevelValue = 4, Ids = productIds }; // try and get product information ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); PagedResult <ProductCatalog> productCatalogs = await productOperationsHandler.GetProductCatalogs(Utilities.DefaultQuerySettings); IEnumerable <long> activeCatalogIds = productCatalogs.Results.Select(pc => pc.RecordId); PagedResult <Product> products = await productOperationsHandler.SearchProducts(searchCriteria, activeCatalogIds, Utilities.DefaultQuerySettings); if (!products.Results.Any()) { var message = string.Format("ProductIds: {0}.", string.Join(",", productIds)); RetailLogger.Log.OnlineStoreNoProductsFound(message); return(this.RedirectToAction(HomeController.DefaultActionName, HomeController.ControllerName)); } prod = products.Results.First <Product>(); // Breadcrumb Navigation Links // add current item breadcrumbNavLinks.Add(new CustomLink("/ProductDetails?productId=" + prod.RecordId, prod.ProductName)); Category currentCategory = this.GetCategoryById(prod.CategoryIds.First(), categories); while (currentCategory.ParentCategory != 0) { breadcrumbNavLinks.Add(new CustomLink("/ProductGallery?categoryId=" + currentCategory.RecordId, currentCategory.Name)); currentCategory = this.GetCategoryById(currentCategory.ParentCategory, categories); } breadcrumbNavLinks.Add(new CustomLink("/", "Home")); } prod = (await ProductDetailsController.PopulateViewSpecificProductInfo(new Product[] { prod }, ecommerceContext)).FirstOrDefault(); return(this.View(ProductDetailsController.ProductDetailsViewName, new ProductDetailsModel(prod, breadcrumbNavLinks))); }
/// <summary> /// Return View with optional search criteria added. /// </summary> /// <param name="categoryId">Required: Category id to show products for.</param> /// <param name="filterBrands">List of brands to show (comma separated).</param> /// <param name="filterCategories">List of categories to show (comma separated).</param> /// <returns>View of Products.</returns> public async Task <ActionResult> Index(string categoryId = "", string[] filterBrands = null, string[] filterCategories = null) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <Category> categories = await orgUnitOperationsHandler.GetNavigationalHierarchyCategories(Utilities.DefaultQuerySettings); IEnumerable <long> rawCategoryIds = categories.Select(c => c.RecordId); // determine what category to load products for, if null, load all products ObservableCollection <long> categoryIds; if (string.IsNullOrEmpty(categoryId)) { categoryIds = new ObservableCollection <long>(rawCategoryIds); } else { categoryIds = new ObservableCollection <long>(); categoryIds.Add(long.Parse(categoryId)); } // Category Id to Name Mapping Dictionary <long, string> mapping = new Dictionary <long, string>(); foreach (Category category in categories) { mapping.Add(category.RecordId, category.Name); } // Retrieving Products - make sure we include products from descendant categories too ProductSearchCriteria searchCriteria = new ProductSearchCriteria { DataLevelValue = 4, CategoryIds = categoryIds, IncludeProductsFromDescendantCategories = true }; // try and get product information ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); PagedResult <ProductCatalog> productCatalogs = await productOperationsHandler.GetProductCatalogs(Utilities.DefaultQuerySettings); IEnumerable <long> activeCatalogIds = productCatalogs.Results.Select(pc => pc.RecordId); PagedResult <Product> products = await productOperationsHandler.SearchProducts(searchCriteria, activeCatalogIds, Utilities.DefaultQuerySettings); // Breadcrumb Navigation Links Collection <CustomLink> breadcrumbNavLinks = new Collection <CustomLink>(); Category currentCategory = this.GetCategoryById(long.Parse(categoryId), categories); while (!currentCategory.ParentCategory.Equals((long?)0)) { breadcrumbNavLinks.Add(new CustomLink("/ProductGallery?categoryId=" + currentCategory.RecordId, currentCategory.Name)); currentCategory = this.GetCategoryById(currentCategory.ParentCategory, categories); } breadcrumbNavLinks.Add(new CustomLink("/", "Home")); // Filter Mapping Dictionary <string, string[]> filters = new Dictionary <string, string[]>(); filters.Add("brand", filterBrands); filters.Add("categories", filterCategories); IEnumerable <Product> productList = await ProductDetailsController.PopulateViewSpecificProductInfo(products.Results, ecommerceContext); // create a new product gallery model for the view ProductGalleryModel productGalleryModel = new ProductGalleryModel(long.Parse(categoryId), productList, breadcrumbNavLinks, mapping, filters); return(this.View(ProductGalleryController.ProductGalleryViewName, productGalleryModel)); }