From e58bda8e9e58bff7c029be10cb2660535c216970 Mon Sep 17 00:00:00 2001 From: Bright Date: Wed, 9 Jul 2025 16:14:15 +0700 Subject: [PATCH] =?UTF-8?q?Fix=20=E0=B8=A3=E0=B8=B2=E0=B8=A2=E0=B8=87?= =?UTF-8?q?=E0=B8=B2=E0=B8=99=E0=B9=83=E0=B8=AB=E0=B9=89=E0=B9=81=E0=B8=AA?= =?UTF-8?q?=E0=B8=94=E0=B8=87=E0=B8=A3=E0=B8=B2=E0=B8=A2=E0=B8=8A=E0=B8=B7?= =?UTF-8?q?=E0=B9=88=E0=B8=AD=E0=B8=95=E0=B8=A3=E0=B8=87=E0=B8=AA=E0=B8=B1?= =?UTF-8?q?=E0=B8=87=E0=B8=81=E0=B8=B1=E0=B8=94=E0=B8=97=E0=B8=B5=E0=B9=88?= =?UTF-8?q?=E0=B9=80=E0=B8=A5=E0=B8=B7=E0=B8=AD=E0=B8=81=20issue=20#1606?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LeaveRequests/LeaveRequestRepository.cs | 12 +++++++++--- .../ProcessUserTimeStampRepository.cs | 17 ++++++++++++++--- .../Profiles/GetProfileByKeycloakIdRootDto.cs | 6 ++++++ .../Controllers/LeaveReportController.cs | 19 ++++++++++++++++--- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index 6845fb61..41899555 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -1461,7 +1461,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return res; } - public async Task> GetSumApproveLeaveByRootAndRange(DateTime startDate, DateTime endDate, string type, string role, string? nodeId, int? node) + public async Task> GetSumApproveLeaveByRootAndRange(DateTime startDate, DateTime endDate, string type, string role, string? nodeId, int? node, string? nodeIdByReq, int? nodeByReq) { // var _nodeId = Guid.Parse(nodeId); var data = new List(); @@ -1489,7 +1489,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests .Where(x => x.ProfileType == type.Trim().ToUpper()) .Where(x => x.LeaveStartDate.Date >= startDate.Date && x.LeaveStartDate.Date <= endDate.Date) .Where(x => x.LeaveStatus == "APPROVE" || x.LeaveStatus == "DELETING").ToListAsync(); - + // กรองตามสิทธิ์ admin ก่อน if (role == "OWNER") { node = null; @@ -1519,7 +1519,13 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests true ).ToList(); } - + // กรองตามที่ fe ส่งมา + if (role == "ROOT" || role == "OWNER" || role == "CHILD") + { + data = data + .Where(x => nodeByReq == 4 ? x.Child4Id == Guid.Parse(nodeIdByReq) : nodeByReq == 3 ? x.Child3Id == Guid.Parse(nodeIdByReq) : nodeByReq == 2 ? x.Child2Id == Guid.Parse(nodeIdByReq) : nodeByReq == 1 ? x.Child1Id == Guid.Parse(nodeIdByReq) : nodeByReq == 0 ? x.RootId == Guid.Parse(nodeIdByReq) : true) + .ToList(); + } var res = (from d in data group d by new { d.Root, d.Child1, d.Child2, d.Child3, d.Child4 } into grp orderby grp.Key.Root, grp.Key.Child1, grp.Key.Child2, grp.Key.Child3, grp.Key.Child4 diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs index 2e708df8..3117a8b1 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs @@ -139,9 +139,9 @@ 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, string nodeIdByReq, int? nodeByReq, DateTime StartDate, DateTime EndDate) { - var _nodeId = Guid.Parse(nodeId); + var _nodeId = role != "OWNER" ? Guid.Parse(nodeId) : Guid.Parse("00000000-0000-0000-0000-000000000000"); var data = new List(); //if (role == "OWNER" || role == "CHILD") //{ @@ -166,7 +166,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants .Where(x => x.CheckInStatus == "LATE") .Where(u => u.CheckIn.Date >= StartDate && u.CheckIn.Date <= EndDate) .Where(x => x.ProfileType == type.Trim().ToUpper()).ToListAsync(); - + // กรองตามสิทธิ์ admin ก่อน if (role == "OWNER") { node = null; @@ -196,6 +196,17 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants true ).ToList(); } + // กรองตามที่ fe ส่งมา + if (role == "ROOT" || role == "OWNER" || role == "CHILD") + { + data = data.Where(x => + nodeByReq == 4 ? x.Child4Id == Guid.Parse(nodeIdByReq) : + nodeByReq == 3 ? x.Child3Id == Guid.Parse(nodeIdByReq) : + nodeByReq == 2 ? x.Child2Id == Guid.Parse(nodeIdByReq) : + nodeByReq == 1 ? x.Child1Id == Guid.Parse(nodeIdByReq) : + nodeByReq == 0 ? x.RootId == Guid.Parse(nodeIdByReq) : true + ).ToList(); + } return data; } diff --git a/BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs b/BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs index a1d9c7ce..616295bb 100644 --- a/BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs +++ b/BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs @@ -16,5 +16,11 @@ namespace BMA.EHR.Application.Responses.Profiles public string? PositionLevel { get; set; } public string? PositionType { get; set; } public string? Oc { get; set; } + public string? OrgRootId { get; set; } + public string? OrgChild1Id { get; set; } + public string? OrgChild2Id { get; set; } + public string? OrgChild3Id { get; set; } + public string? OrgChild4Id { get; set; } + } } diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 8c2e8412..b11c80a1 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -997,7 +997,13 @@ namespace BMA.EHR.Leave.Service.Controllers var count = 1; var employees = new List(); - + // กรองตามที่ fe ส่งมา + if (role == "ROOT" || role == "OWNER" || role == "CHILD") + { + profile = profile + .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) + .ToList(); + } foreach (var p in profile) { var keycloakUserId = p.Keycloak ?? Guid.Empty; @@ -1457,6 +1463,13 @@ namespace BMA.EHR.Leave.Service.Controllers var studyTotal = 0; var workTotal = 0; var seminarTotal = 0; + // กรองตามที่ fe ส่งมา + if (role == "ROOT" || role == "OWNER" || role == "CHILD") + { + profile = profile + .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) + .ToList(); + } foreach (var dd in dateList) { foreach (var p in profile) @@ -1702,7 +1715,7 @@ 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 _processUserTimeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper(), role, nodeId, profileAdmin.Node, req.StartDate, req.EndDate); + var userTimeStamps = await _processUserTimeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper(), role, nodeId, profileAdmin.Node, req.nodeId, req.node, req.StartDate, req.EndDate); foreach (var p in userTimeStamps) { var fullName = $"{p.Prefix}{p.FirstName} {p.LastName}"; @@ -1807,7 +1820,7 @@ namespace BMA.EHR.Leave.Service.Controllers { nodeId = profileAdmin?.RootDnaId; } - var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByRootAndRange(req.StartDate, req.EndDate, type, jsonData["result"]?.ToString(), nodeId, profileAdmin?.Node); + var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByRootAndRange(req.StartDate, req.EndDate, type, jsonData["result"]?.ToString(), nodeId, profileAdmin?.Node, req.nodeId, req.node); var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}"; var result = new {