public async Task <QueryResult <TrainingRequest> > GetTrainingRequests(TrainingRequestsQuery queryObj)
        {
            var result = new QueryResult <TrainingRequest>();

            IQueryable <TrainingRequest> query = null;

            if (queryObj.ViewAll.HasValue && queryObj.EmployeeId.HasValue == false)
            {
                query = GetQueryableAllTrainingRequests();
            }
            if (queryObj.ViewAll.HasValue == false && queryObj.EmployeeId.HasValue)
            {
                if (queryObj.EmployeeId != null)
                {
                    query = GetQueryableUsersTrainingRequests(queryObj.EmployeeId.Value);
                }
            }
            if (queryObj.ViewAll.HasValue == false && queryObj.EmployeeId.HasValue == false)
            {
                query = GetQueryableAllTrainingRequests();
            }

            query = ApplyFiltering(query, queryObj);
            var columnsMap = new Dictionary <string, Expression <Func <TrainingRequest, object> > >()
            {
                ["status"]       = trainingRequest => trainingRequest.Status,
                ["type"]         = trainingRequest => trainingRequest.TrainingRequestTypeTitle,
                ["date"]         = trainingRequest => trainingRequest.DateCreated,
                ["employeeName"] = trainingRequest => trainingRequest.EmployeeName,
            };

            query             = _queryableExtensions.ApplyOrderingColumnMap(query, queryObj, columnsMap);
            result.TotalItems = await query.CountAsync();

            query        = _queryableExtensions.ApplyPaging(query, queryObj);
            result.Items = await query.ToListAsync();

            return(result);
        }
        private IQueryable <TrainingRequest> ApplyFiltering(IQueryable <TrainingRequest> query, TrainingRequestsQuery queryObj)
        {
            // Wild search
            if (!string.IsNullOrWhiteSpace(queryObj.Search))
            {
                query = query.Where(a => a.DateCreated.ToString().Contains(queryObj.Search) ||
                                    a.Status.Contains(queryObj.Search) ||
                                    a.TrainingRequestTypeTitle.Contains(queryObj.Search) ||
                                    a.EmployeeName.Contains(queryObj.Search)

                                    );
            }

            if (!string.IsNullOrWhiteSpace(queryObj.Status))
            {
                query = query.Where(v => v.Status.Contains(queryObj.Status));
            }
            if (!string.IsNullOrWhiteSpace(queryObj.EmployeeName))
            {
                query = query.Where(v => v.Status.Contains(queryObj.Status));
            }

            if (!string.IsNullOrWhiteSpace(queryObj.Type))
            {
                query = query.Where(v => v.TrainingRequestTypeTitle.Contains(queryObj.Type));
            }


            return(query);
        }
        public async Task <ActionResult> GetLetterRequests([FromQuery] TrainingRequestsQuery queryObj)
        {
            var queryResult = await _trainingRequestService.GetTrainingRequests(queryObj);

            return(Ok(queryResult));
        }