diff --git a/src/WorkFlowCheck.BL/Services/CheckListService.cs b/src/WorkFlowCheck.BL/Services/CheckListService.cs index 70f9206..070893c 100644 --- a/src/WorkFlowCheck.BL/Services/CheckListService.cs +++ b/src/WorkFlowCheck.BL/Services/CheckListService.cs @@ -82,59 +82,67 @@ namespace WorkFlowCheck.BL.Services return retVal; } - public async Task>> GetFilteredCheckListHeaderAsync(DataTablesRequest dataTablesRequest) + public async Task>> GetFilteredCheckListHeaderAsync(DataTablesRequest req) { var retVal = new ApiResponseListDTO>(); + try { - IQueryable query = _dbContext.CheckListHeaders - .Include(i => i.CheckListRows) - .Include(i => i.User) - .Include(i => i.AcceptUser) - .AsNoTracking(); - switch (dataTablesRequest.Mode) + var baseQuery = _dbContext.CheckListHeaders + .AsNoTracking() + .Where(x => !x.IsDeleted); + + // MODE szűrés (csak WHERE, ORDER BY nélkül) + + IQueryable modeQuery = req.Mode switch { - case 0: - query = query.Where(w => w.CheckStatus == CheckStatus.InProgress || w.CheckStatus == CheckStatus.Open).OrderByDescending(o => o.CreatedAt); - break; + 0 => baseQuery.Where(w => w.CheckStatus == CheckStatus.InProgress || w.CheckStatus == CheckStatus.Open), + 1 => baseQuery.Where(w => w.CheckStatus == CheckStatus.Sent), + 2 => baseQuery.Where(w => w.CheckStatus == CheckStatus.Closed), + 3 => baseQuery.Where(w => w.CheckStatus == CheckStatus.Signed), + _ => baseQuery + }; - case 1: - query = query.Where(w => w.CheckStatus == CheckStatus.Sent).OrderByDescending(o => o.CreatedAt); - break; + // Total = mode szűrés után, keresés előtt + retVal.Total = await modeQuery.CountAsync(); - case 2: - query = query.Where(w => w.CheckStatus == CheckStatus.Closed).OrderByDescending(o => o.CreatedAt); - break; - case 3: - query = query.Where(w => w.CheckStatus == CheckStatus.Signed).OrderByDescending(o => o.CreatedAt); - break; + // Search + var search = req.Search?.Value?.Trim(); + IQueryable filteredQuery = modeQuery; - default: - query = query.OrderByDescending(o => o.CreatedAt); - break; - } - retVal.Total = await query.CountAsync(); - - if (!string.IsNullOrWhiteSpace(dataTablesRequest.Search.Value)) + if (!string.IsNullOrWhiteSpace(search)) { - query = query.Where(x => - x.DocumentNumber.Contains(dataTablesRequest.Search.Value) || - x.ShortName.Contains(dataTablesRequest.Search.Value) || - x.Description.Contains(dataTablesRequest.Search.Value) || - x.CreatedBy.Contains(dataTablesRequest.Search.Value) || - (x.AcceptUser != null && x.AcceptUser.UserName.Contains(dataTablesRequest.Search.Value)) + filteredQuery = filteredQuery.Where(x => + x.DocumentNumber.Contains(search) || + (x.ShortName != null && x.ShortName.Contains(search)) || + (x.Description != null && x.Description.Contains(search)) || + (x.CreatedBy != null && x.CreatedBy.Contains(search)) || + (x.AcceptUser != null && x.AcceptUser.UserName.Contains(search)) ); } - retVal.Filtered = await query.CountAsync(); - - var list = await query.Skip(dataTablesRequest.Start).Take(dataTablesRequest.Length).ToListAsync(); - + + retVal.Filtered = await filteredQuery.CountAsync(); + + // Ordering (itt már jöhet) + filteredQuery = filteredQuery.OrderByDescending(o => o.CreatedAt); + + // Paging + var list = await filteredQuery + .Include(x => x.CheckListRows) + .Include(x => x.User) + .Include(x => x.AcceptUser) + .AsSplitQuery() + .Skip(req.Start) + .Take(req.Length) + .ToListAsync(); + retVal.Data = _mapper.Map>(list); } catch (Exception ex) { - Log.Error(ex.Message); + Log.Error(ex, "GetFilteredCheckListHeaderAsync failed"); } + return retVal; } public async Task> GetAllCheckListHeaderAsync(int mode = 0)