From 08fb06ca847f446bc504f262cd60d6254618bd55 Mon Sep 17 00:00:00 2001 From: harid Date: Mon, 8 Dec 2025 12:12:04 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=81=E0=B8=A3?= =?UTF-8?q?=E0=B8=AD=E0=B8=87=E0=B8=95=E0=B8=B2=E0=B8=A1=E0=B8=AA=E0=B8=B4?= =?UTF-8?q?=E0=B8=97=E0=B8=98=E0=B8=B4=E0=B9=8C=20#2104?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LeaveRequests/LeaveRequestRepository.cs | 40 +++++++++++++++++++ .../Controllers/LeaveRequestController.cs | 33 ++++++++++++++- 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index a4398db2..9cc0f65a 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -273,6 +273,46 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return data; } + public async Task> GetLeaveRequestByYearForAdminAsync(int year, string role, string? nodeId, int? node) + { + var rawData = await _dbContext.Set().AsQueryable().AsNoTracking() + .Include(x => x.Type) + .Where(x => x.LeaveStartDate.Year == year) + .Where(x => x.LeaveStatus != "REJECT" && x.LeaveStatus != "DELETE") + .ToListAsync(); + if (role == "OWNER") + { + node = null; + } + if (role == "OWNER" || role == "CHILD") + { + rawData = rawData + .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 if (role == "ROOT") + { + rawData = rawData + .Where(x => x.RootDnaId == Guid.Parse(nodeId!)).ToList(); + } + else if (role == "PARENT") + { + rawData = rawData + .Where(x => x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId != null).ToList(); + } + else if (role == "NORMAL") + { + rawData = rawData + .Where(x => + node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId == null : + node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) && x.Child2DnaId == null : + node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) && x.Child3DnaId == null : + node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) && x.Child4DnaId == null : + node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : true).ToList(); + } + + return rawData; + } + public async Task> GetLeaveRequestByUserIdAsync(Guid keycloakUserId, int year, Guid type, string status) { var rawData = _dbContext.Set().AsQueryable().AsNoTracking() diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index a575de6e..d5cc9838 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -1222,11 +1222,40 @@ namespace BMA.EHR.Leave.Service.Controllers public async Task> GetLeaveRequestCalendarAsync( [FromBody] GetLeaveRequestCalendarDto req) { + var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_LEAVE_LIST"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } - var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); + string role = jsonData["result"]?.ToString(); + var nodeId = string.Empty; + var profileAdmin = new GetUserOCAllDto(); + profileAdmin = await _userProfileRepository.GetUserOCAll(Guid.Parse(UserId!), AccessToken); + if (role == "NORMAL" || role == "CHILD") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child4DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 1 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } + else if (role == "ROOT" || role == "PARENT") + { + nodeId = profileAdmin?.RootDnaId; + } + //var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); //var thisYear = DateTime.Now.Year; - var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year, userId); + //var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year, userId); + var data = await _leaveRequestRepository.GetLeaveRequestByYearForAdminAsync(req.Year, role, nodeId, profileAdmin.Node); // var profileList = await _userProfileRepository.GetProfileWithKeycloak(AccessToken);