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