Na most jó a lapozás
This commit is contained in:
@@ -82,59 +82,67 @@ namespace WorkFlowCheck.BL.Services
|
||||
|
||||
return retVal;
|
||||
}
|
||||
public async Task<ApiResponseListDTO<List<CheckListHeaderDTO>>> GetFilteredCheckListHeaderAsync(DataTablesRequest dataTablesRequest)
|
||||
public async Task<ApiResponseListDTO<List<CheckListHeaderDTO>>> GetFilteredCheckListHeaderAsync(DataTablesRequest req)
|
||||
{
|
||||
var retVal = new ApiResponseListDTO<List<CheckListHeaderDTO>>();
|
||||
|
||||
try
|
||||
{
|
||||
IQueryable<CheckListHeader> 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<CheckListHeader> 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<CheckListHeader> 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<CheckListHeaderDTO>>(list);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex.Message);
|
||||
Log.Error(ex, "GetFilteredCheckListHeaderAsync failed");
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
public async Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync(int mode = 0)
|
||||
|
||||
Reference in New Issue
Block a user