Example #1
0
            /// <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));
            }
Example #2
0
            /// <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));
            }