예제 #1
0
        /// <summary>
        /// Prepare paged low stock product list model
        /// </summary>
        /// <param name="searchModel">Low stock product search model</param>
        /// <returns>
        /// A task that represents the asynchronous operation
        /// The task result contains the low stock product list model
        /// </returns>
        public virtual async Task <LowStockProductListModel> PrepareLowStockProductListModelAsync(LowStockProductSearchModel searchModel)
        {
            if (searchModel == null)
            {
                throw new ArgumentNullException(nameof(searchModel));
            }

            //get parameters to filter comments
            var publishedOnly = searchModel.SearchPublishedId == 0 ? null : searchModel.SearchPublishedId == 1 ? true : (bool?)false;
            var vendor        = await _workContext.GetCurrentVendorAsync();

            var vendorId = vendor?.Id ?? 0;

            //get low stock product and product combinations
            var products = await _productService.GetLowStockProductsAsync(vendorId : vendorId, loadPublishedOnly : publishedOnly);

            var combinations = await _productService.GetLowStockProductCombinationsAsync(vendorId : vendorId, loadPublishedOnly : publishedOnly);

            //prepare low stock product models
            var lowStockProductModels = new List <LowStockProductModel>();

            lowStockProductModels.AddRange(await products.SelectAwait(async product => new LowStockProductModel
            {
                Id   = product.Id,
                Name = product.Name,

                ManageInventoryMethod = await _localizationService.GetLocalizedEnumAsync(product.ManageInventoryMethod),
                StockQuantity         = await _productService.GetTotalStockQuantityAsync(product),
                Published             = product.Published
            }).ToListAsync());

            lowStockProductModels.AddRange(await combinations.SelectAwait(async combination =>
            {
                var product = await _productService.GetProductByIdAsync(combination.ProductId);
                return(new LowStockProductModel
                {
                    Id = combination.ProductId,
                    Name = product.Name,

                    Attributes = await _productAttributeFormatter
                                 .FormatAttributesAsync(product, combination.AttributesXml, await _workContext.GetCurrentCustomerAsync(), "<br />", true, true, true, false),
                    ManageInventoryMethod = await _localizationService.GetLocalizedEnumAsync(product.ManageInventoryMethod),

                    StockQuantity = combination.StockQuantity,
                    Published = product.Published
                });
            }).ToListAsync());

            var pagesList = lowStockProductModels.ToPagedList(searchModel);

            //prepare list model
            var model = new LowStockProductListModel().PrepareToGrid(searchModel, pagesList, () => pagesList);

            return(model);
        }
예제 #2
0
        /// <summary>
        /// Prepare paged low stock product list model
        /// </summary>
        /// <param name="searchModel">Low stock product search model</param>
        /// <returns>Low stock product list model</returns>
        public virtual LowStockProductListModel PrepareLowStockProductListModel(LowStockProductSearchModel searchModel)
        {
            if (searchModel == null)
            {
                throw new ArgumentNullException(nameof(searchModel));
            }

            //get parameters to filter comments
            var publishedOnly = searchModel.SearchPublishedId == 0 ? null : searchModel.SearchPublishedId == 1 ? true : (bool?)false;
            var vendorId      = _workContext.CurrentVendor?.Id ?? 0;

            //get low stock product and product combinations
            var products     = _productService.GetLowStockProducts(vendorId: vendorId, loadPublishedOnly: publishedOnly);
            var combinations = _productService.GetLowStockProductCombinations(vendorId: vendorId, loadPublishedOnly: publishedOnly);

            //prepare low stock product models
            var lowStockProductModels = new List <LowStockProductModel>();

            lowStockProductModels.AddRange(products.Select(product => new LowStockProductModel
            {
                Id   = product.Id,
                Name = product.Name,
                ManageInventoryMethod = product
                                        .ManageInventoryMethod.GetLocalizedEnum(_localizationService, _workContext.WorkingLanguage.Id),
                StockQuantity = product.GetTotalStockQuantity(),
                Published     = product.Published
            }));

            lowStockProductModels.AddRange(combinations.Select(combination => new LowStockProductModel
            {
                Id         = combination.Product.Id,
                Name       = combination.Product.Name,
                Attributes = _productAttributeFormatter
                             .FormatAttributes(combination.Product, combination.AttributesXml, _workContext.CurrentCustomer, "<br />", true, true, true, false),
                ManageInventoryMethod = combination.Product
                                        .ManageInventoryMethod.GetLocalizedEnum(_localizationService, _workContext.WorkingLanguage.Id),
                StockQuantity = combination.StockQuantity,
                Published     = combination.Product.Published
            }));

            //prepare list model
            var model = new LowStockProductListModel
            {
                Data  = lowStockProductModels.PaginationByRequestModel(searchModel),
                Total = lowStockProductModels.Count
            };

            return(model);
        }