From 9e84bddb6577483fa59d295f35d8ea9d6f353b7e Mon Sep 17 00:00:00 2001 From: Bright Date: Wed, 18 Jun 2025 15:23:41 +0700 Subject: [PATCH] update issue #1578 --- .../ProcessUserTimeStampRepository.cs | 64 ++++++++++++++----- BMA.EHR.Leave/Controllers/LeaveController.cs | 2 +- .../Controllers/LeaveReportController.cs | 6 +- 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs index 17d07e75..ebf61de0 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs @@ -139,28 +139,62 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants return data; } - public async Task> GetTimestampByDateLateAsync(string type, string role, string nodeId, int node, DateTime StartDate, DateTime EndDate) + public async Task> GetTimestampByDateLateAsync(string type, string role, string nodeId, int? node, DateTime StartDate, DateTime EndDate) { var _nodeId = Guid.Parse(nodeId); var data = new List(); + //if (role == "OWNER" || role == "CHILD") + //{ + // data = await _dbContext.Set().AsQueryable() + // .Where(x => x.CheckInStatus == "LATE") + // .Where(u => u.CheckIn.Date >= StartDate && u.CheckIn.Date <= EndDate) + // .Where(x => x.ProfileType == type.Trim().ToUpper()) + // .Where(x => node == 4 ? x.Child4Id == _nodeId : (node == 3 ? x.Child3Id == _nodeId : (node == 2 ? x.Child2Id == _nodeId : (node == 1 ? x.Child1Id == _nodeId : (node == 0 ? x.RootId == _nodeId : true))))) + // .ToListAsync(); + //} + //else + //{ + // data = await _dbContext.Set().AsQueryable() + // .Where(x => x.CheckInStatus == "LATE") + // .Where(u => u.CheckIn.Date >= StartDate && u.CheckIn.Date <= EndDate) + // .Where(x => x.ProfileType == type.Trim().ToUpper()) + // .Where(x => node == 4 ? x.Child4Id == _nodeId : (node == 3 ? x.Child3Id == _nodeId : (node == 2 ? x.Child2Id == _nodeId : (node == 1 ? x.Child1Id == _nodeId : (node == 0 ? x.RootId == _nodeId : true))))) + // .Where(x => node == 0 ? x.Child1Id == null : (node == 1 ? x.Child2Id == null : (node == 2 ? x.Child3Id == null : (node == 3 ? x.Child4Id == null : true)))) + // .ToListAsync(); + //} + data = await _dbContext.Set().AsQueryable() + .Where(x => x.CheckInStatus == "LATE") + .Where(u => u.CheckIn.Date >= StartDate && u.CheckIn.Date <= EndDate) + .Where(x => x.ProfileType == type.Trim().ToUpper()).ToListAsync(); + + if (role == "OWNER") + { + node = null; + } if (role == "OWNER" || role == "CHILD") { - data = await _dbContext.Set().AsQueryable() - .Where(x => x.CheckInStatus == "LATE") - .Where(u => u.CheckIn.Date >= StartDate && u.CheckIn.Date <= EndDate) - .Where(x => x.ProfileType == type.Trim().ToUpper()) - .Where(x => node == 4 ? x.Child4Id == _nodeId : (node == 3 ? x.Child3Id == _nodeId : (node == 2 ? x.Child2Id == _nodeId : (node == 1 ? x.Child1Id == _nodeId : (node == 0 ? x.RootId == _nodeId : true))))) - .ToListAsync(); + data = data.Where(x => + node == 4 ? x.Child4DnaId == Guid.Parse(nodeId) : + node == 3 ? x.Child3DnaId == Guid.Parse(nodeId) : + node == 2 ? x.Child2DnaId == Guid.Parse(nodeId) : + node == 1 ? x.Child1DnaId == Guid.Parse(nodeId) : + node == 0 ? x.RootDnaId == Guid.Parse(nodeId) : + node == null ? true : true + ).ToList(); } - else + else if (role == "ROOT") { - data = await _dbContext.Set().AsQueryable() - .Where(x => x.CheckInStatus == "LATE") - .Where(u => u.CheckIn.Date >= StartDate && u.CheckIn.Date <= EndDate) - .Where(x => x.ProfileType == type.Trim().ToUpper()) - .Where(x => node == 4 ? x.Child4Id == _nodeId : (node == 3 ? x.Child3Id == _nodeId : (node == 2 ? x.Child2Id == _nodeId : (node == 1 ? x.Child1Id == _nodeId : (node == 0 ? x.RootId == _nodeId : true))))) - .Where(x => node == 0 ? x.Child1Id == null : (node == 1 ? x.Child2Id == null : (node == 2 ? x.Child3Id == null : (node == 3 ? x.Child4Id == null : true)))) - .ToListAsync(); + data = data.Where(x => x.RootDnaId == Guid.Parse(nodeId)).ToList(); + } + else if (role == "NORMAL") + { + data = data.Where(x => + node == 0 ? x.Child1DnaId == null : + node == 1 ? x.Child2DnaId == null : + node == 2 ? x.Child3DnaId == null : + node == 3 ? x.Child4DnaId == null : + true + ).ToList(); } return data; } diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index 277b1eeb..1f68d06a 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -904,7 +904,7 @@ namespace BMA.EHR.Leave.Service.Controllers ProfileType = profile.ProfileType, - RootDnaId = profile.RootId, + RootDnaId = profile.RootDnaId, Child1DnaId = profile.Child1DnaId, Child2DnaId = profile.Child2DnaId, Child3DnaId = profile.Child3DnaId, diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index c2aceda1..260fe484 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -1701,8 +1701,8 @@ namespace BMA.EHR.Leave.Service.Controllers { nodeId = profileAdmin?.RootDnaId; } - var userTimeStamps = await _processUserTimeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper(), jsonData["result"]?.ToString(), req.nodeId, req.node, req.StartDate, req.EndDate); - //var userTimeStamps = await _processUserTikmeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper(), role, nodeId, profileAdmin?.Node, req.StartDate, req.EndDate); + //var userTimeStamps = await _processUserTimeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper(), jsonData["result"]?.ToString(), req.nodeId, req.node, req.StartDate, req.EndDate); + var userTimeStamps = await _processUserTimeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper(), role, nodeId, profileAdmin.Node, req.StartDate, req.EndDate); foreach (var p in userTimeStamps) { var fullName = $"{p.Prefix}{p.FirstName} {p.LastName}"; @@ -1720,7 +1720,7 @@ namespace BMA.EHR.Leave.Service.Controllers return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound); } } - DateTime? checkIn = p.CheckIn ?? null; + DateTime? checkIn = p.CheckIn; DateTime? checkOut = p.CheckOut ?? null; var emp = new {