public async Task <PagedForecastingTask> SearchForecastingTaskRecords(SearchForecastingTaskRecords searchRequest)
        {
            var taskFields = await _database.GetCollection <Model.ForecastingTaskFieldValues>(searchRequest.TaskEntityName).Find(x => true).ToListAsync();

            var filteredRecords = new List <Model.ForecastingTaskFieldValues>();

            if (searchRequest.Filters?.Count != 0)
            {
                foreach (var filter in searchRequest.Filters.Distinct())
                {
                    filteredRecords.AddRange(taskFields.Where(x => x.FieldsValue.Any(x => x.FieldId == filter.FieldId && x.Value.ToLower() == filter.Value.ToLower())));
                }
            }
            else
            {
                filteredRecords = taskFields;
            }

            foreach (var taskRecord in filteredRecords)
            {
                taskRecord.FieldsValue = taskRecord.FieldsValue.OrderBy(x => x.FieldId).ToList();
            }

            var pagedForecastingTask = new PagedForecastingTask
            {
                Name       = searchRequest.TaskEntityName,
                Records    = _mapper.Map <List <DomainModel.ForecastingTasks.ForecastingTaskRecord> >(filteredRecords.Skip((searchRequest.PageNumber - 1) * searchRequest.PerPage).Take(searchRequest.PerPage)),
                TotalCount = filteredRecords.Count
            };

            return(pagedForecastingTask);
        }
        public async Task <PagedForecastingTask> SearchForecastingTaskRecords(SearchForecastingTaskRecords searchRequest)
        {
            searchRequest.TaskEntityName = searchRequest.TaskEntityName?.Trim();
            if (searchRequest.PageNumber <= 0)
            {
                throw new DomainErrorException("Page number should be greater than 0!");
            }
            if (searchRequest.PerPage <= 0)
            {
                throw new DomainErrorException("Per page amount should be greater than 0!");
            }
            if (!await DoesForecastingTaskEntityExist(searchRequest.TaskEntityName))
            {
                throw new DomainErrorException($"Forecasting task with name {searchRequest.TaskEntityName} doesn't exist!");
            }

            foreach (var filter in searchRequest.Filters)
            {
                filter.Value = filter.Value?.Trim();
            }
            return(await _forecastingTasksRepository.SearchForecastingTaskRecords(searchRequest));
        }