diff --git a/src/WorkFlowCheck.API/Controllers/CheckListController.cs b/src/WorkFlowCheck.API/Controllers/CheckListController.cs index 27f5cb4..e49e1ee 100644 --- a/src/WorkFlowCheck.API/Controllers/CheckListController.cs +++ b/src/WorkFlowCheck.API/Controllers/CheckListController.cs @@ -2,6 +2,7 @@ using Serilog; using WorkFlowCheck.BL.Services; using WorkFlowCheck.BL.Services.Interfaces; +using WorkFlowCheck.Common.DataTables; using WorkFlowCheck.Common.DTO; namespace WorkFlowCheck.API.Controllers @@ -39,6 +40,28 @@ namespace WorkFlowCheck.API.Controllers return retVal; } + [HttpPost("GetFilteredCheckListHeader")] + public async Task>> GetFilteredCheckListHeader([FromBody] DataTablesRequest dataTablesRequest) + { + var retVal = new ApiResponseListDTO>() + { + IsSuccess = true + }; + + try + { + var result = await _checkListService.GetFilteredCheckListHeaderAsync(dataTablesRequest); + retVal.Data = result.Data; + retVal.Total = result.Total; + retVal.Filtered = result.Filtered; + } + catch (Exception ex) + { + retVal.IsSuccess = false; + Log.Error(ex.Message); + } + return retVal; + } [HttpGet("CreatePDF/{id}")] public async Task> CreatePDF(int id) { diff --git a/src/WorkFlowCheck.BL/Services/CheckListService.cs b/src/WorkFlowCheck.BL/Services/CheckListService.cs index 41e0ed5..70f9206 100644 --- a/src/WorkFlowCheck.BL/Services/CheckListService.cs +++ b/src/WorkFlowCheck.BL/Services/CheckListService.cs @@ -15,6 +15,7 @@ using System.Text; using System.Threading.Tasks; using WorkFlowCheck.BL.DocumentGenerator; using WorkFlowCheck.BL.Services.Interfaces; +using WorkFlowCheck.Common.DataTables; using WorkFlowCheck.Common.DTO; using WorkFlowCheck.Common.Enums; using WorkFlowCheck.DL; @@ -81,6 +82,61 @@ namespace WorkFlowCheck.BL.Services return retVal; } + public async Task>> GetFilteredCheckListHeaderAsync(DataTablesRequest dataTablesRequest) + { + 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) + { + case 0: + query = query.Where(w => w.CheckStatus == CheckStatus.InProgress || w.CheckStatus == CheckStatus.Open).OrderByDescending(o => o.CreatedAt); + break; + + case 1: + query = query.Where(w => w.CheckStatus == CheckStatus.Sent).OrderByDescending(o => o.CreatedAt); + break; + + 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; + + default: + query = query.OrderByDescending(o => o.CreatedAt); + break; + } + retVal.Total = await query.CountAsync(); + + if (!string.IsNullOrWhiteSpace(dataTablesRequest.Search.Value)) + { + 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)) + ); + } + retVal.Filtered = await query.CountAsync(); + + var list = await query.Skip(dataTablesRequest.Start).Take(dataTablesRequest.Length).ToListAsync(); + + retVal.Data = _mapper.Map>(list); + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return retVal; + } public async Task> GetAllCheckListHeaderAsync(int mode = 0) { var retVal = new List(); diff --git a/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs b/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs index e1d5701..10c955b 100644 --- a/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs +++ b/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Mvc.Rendering; +using WorkFlowCheck.Common.DataTables; using WorkFlowCheck.Common.DTO; namespace WorkFlowCheck.BL.Services.Interfaces @@ -6,6 +7,7 @@ namespace WorkFlowCheck.BL.Services.Interfaces public interface ICheckListService { Task GetCheckListHeaderAsync(int Id); + Task>> GetFilteredCheckListHeaderAsync(DataTablesRequest dataTablesRequest); Task> GetAllCheckListHeaderAsync(int mode = 0); Task UpdateCheckListHeaderAsync(CheckListHeaderDTO checkListHeaderDTO); Task AcceptCheckListHeaderAsync(int id, int userid); diff --git a/src/WorkFlowCheck.Common/DTO/ApiResponseDTO.cs b/src/WorkFlowCheck.Common/DTO/ApiResponseDTO.cs index c5c5e1d..3cc1baf 100644 --- a/src/WorkFlowCheck.Common/DTO/ApiResponseDTO.cs +++ b/src/WorkFlowCheck.Common/DTO/ApiResponseDTO.cs @@ -35,9 +35,11 @@ namespace WorkFlowCheck.Common.DTO { public T Data { get; set; } } + public class ApiResponseListDTO : ApiResponseBaseDTO { - public T[] Data { get; set; } + public T Data { get; set; } public int Total { get; set; } + public int Filtered { get; set; } } } diff --git a/src/WorkFlowCheck.Common/DataTables/DataTablesRequest.cs b/src/WorkFlowCheck.Common/DataTables/DataTablesRequest.cs new file mode 100644 index 0000000..1554473 --- /dev/null +++ b/src/WorkFlowCheck.Common/DataTables/DataTablesRequest.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WorkFlowCheck.Common.DataTables +{ + public class DataTablesRequest + { + public int Mode { get; set; } + public int Draw { get; set; } + public int Start { get; set; } + public int Length { get; set; } + public DataTablesSearch Search { get; set; } = new(); + public List Order { get; set; } = new(); + public List Columns { get; set; } = new(); + } + public class DataTablesSearch { public string? Value { get; set; } } + public class DataTablesOrder { public int Column { get; set; } public string? Dir { get; set; } } + public class DataTablesColumn { public string? Data { get; set; } public bool Searchable { get; set; } public bool Orderable { get; set; } } +} diff --git a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml index afd1a83..8f9beb1 100644 --- a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml +++ b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml @@ -58,6 +58,7 @@