public async Task <FileDto> GetProductsToExcel(GetAllProductsForExcelInput input)
        {
            var filteredProducts = _productRepository.GetAll()
                                   .WhereIf(!string.IsNullOrWhiteSpace(input.Filter), e => false || e.Description.Contains(input.Filter))
                                   .WhereIf(!string.IsNullOrWhiteSpace(input.DescriptionFilter), e => e.Description.ToLower() == input.DescriptionFilter.ToLower().Trim());

            var query = (from o in filteredProducts
                         select new GetProductForViewDto()
            {
                Product = new ProductDto
                {
                    Description = o.Description,
                    Id = o.Id
                }
            });


            var productListDtos = await query.ToListAsync();

            return(_productsExcelExporter.ExportToFile(productListDtos));
        }
        public async Task <FileDto> GetProductsToExcel(GetAllProductsForExcelInput input)
        {
            var filteredProducts = _productRepository.GetAll()
                                   .Include(e => e.CategoryFk)
                                   .WhereIf(!string.IsNullOrWhiteSpace(input.Filter), e => false || e.Name.Contains(input.Filter) || e.Description.Contains(input.Filter) || e.Uom.Contains(input.Filter) || e.Remark.Contains(input.Filter))
                                   .WhereIf(!string.IsNullOrWhiteSpace(input.NameFilter), e => e.Name == input.NameFilter)
                                   .WhereIf(!string.IsNullOrWhiteSpace(input.DescriptionFilter), e => e.Description == input.DescriptionFilter)
                                   .WhereIf(input.MinStockFilter != null, e => e.Stock >= input.MinStockFilter)
                                   .WhereIf(input.MaxStockFilter != null, e => e.Stock <= input.MaxStockFilter)
                                   .WhereIf(!string.IsNullOrWhiteSpace(input.UomFilter), e => e.Uom == input.UomFilter)
                                   .WhereIf(input.IsApprovedFilter > -1, e => (input.IsApprovedFilter == 1 && e.IsApproved) || (input.IsApprovedFilter == 0 && !e.IsApproved))
                                   .WhereIf(input.IsActiveFilter > -1, e => (input.IsActiveFilter == 1 && e.IsActive) || (input.IsActiveFilter == 0 && !e.IsActive))
                                   .WhereIf(!string.IsNullOrWhiteSpace(input.CategoryNameFilter), e => e.CategoryFk != null && e.CategoryFk.Name == input.CategoryNameFilter);

            var query = (from o in filteredProducts
                         join o1 in _lookup_categoryRepository.GetAll() on o.CategoryId equals o1.Id into j1
                         from s1 in j1.DefaultIfEmpty()

                         select new GetProductForViewDto()
            {
                Product = new ProductDto
                {
                    Name = o.Name,
                    Description = o.Description,
                    Stock = o.Stock,
                    Uom = o.Uom,
                    IsApproved = o.IsApproved,
                    IsActive = o.IsActive,
                    Remark = o.Remark,
                    Id = o.Id
                },
                CategoryName = s1 == null ? "" : s1.Name.ToString()
            });


            var productListDtos = await query.ToListAsync();

            return(_productsExcelExporter.ExportToFile(productListDtos));
        }