From 66d4a08f3ce27e6db4f04598253bf7192df5fc6b Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Fri, 2 May 2025 12:03:56 +0700 Subject: [PATCH] =?UTF-8?q?fix=20#1462=20=E0=B9=81=E0=B8=A5=E0=B8=B0=20#14?= =?UTF-8?q?97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LeaveRequests/LeaveRequestRepository.cs | 30 ++++++++++++++++++- BMA.EHR.Leave/BMA.EHR.Leave.csproj | 3 +- .../Controllers/LeaveRequestController.cs | 25 ++++++++++++++-- .../GetLeaveRequestForAdminDto.cs | 6 ++++ 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index 5d2f76e2..811b41c8 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -308,6 +308,33 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return await rawData.ToListAsync(); } + public async Task> GetLeaveRequestForAdminWithAuthAsync(int year, Guid type, string status, DateTime startDate, DateTime endDate,List keycloakIdList) + { + var rawData = _dbContext.Set().AsNoTracking() + .Include(x => x.Type) + .Where(x => keycloakIdList.Contains(x.KeycloakUserId)) + .Where(x => x.LeaveStatus != "DRAFT") + .OrderByDescending(x => x.CreatedAt) + .AsQueryable(); + + if (year != 0) + rawData = rawData.Where(x => x.LeaveStartDate.Year == year); + + if (type != Guid.Empty) + rawData = rawData.Where(x => x.Type.Id == type); + + if (status.Trim().ToUpper() != "ALL") + rawData = rawData.Where(x => x.LeaveStatus == status); + + if (startDate != DateTime.MinValue) + rawData = rawData.Where(x => x.LeaveStartDate >= startDate); + + if (endDate != DateTime.MinValue) + rawData = rawData.Where(x => x.LeaveEndDate <= endDate); + + return await rawData.ToListAsync(); + } + public async Task GetRestDayTotalByYearForUserAsync(Guid keycloakUserId, int year) { var startFiscalDate = new DateTime(year - 1, 10, 1); @@ -425,7 +452,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return await rawData.ToListAsync(); } - public async Task ApproveCancelLeaveRequestAsync(LeaveRequest data, string Reason) + public async Task ApproveCancelLeaveRequestAsync(LeaveRequest data, string Reason,string LeaveReason) { try { @@ -438,6 +465,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests data.LeaveCancelStatus = "APPROVE"; data.LeaveDirectorComment = Reason; + data.LeaveCancelComment = LeaveReason; // TODO : Update ไปตาราง beginning if (data.ApproveStep == "st4") // ถ้ามีการอนุมัติจากผู้มีอำนาจแล้ว diff --git a/BMA.EHR.Leave/BMA.EHR.Leave.csproj b/BMA.EHR.Leave/BMA.EHR.Leave.csproj index 07324011..621e568f 100644 --- a/BMA.EHR.Leave/BMA.EHR.Leave.csproj +++ b/BMA.EHR.Leave/BMA.EHR.Leave.csproj @@ -11,7 +11,8 @@ BMA.EHR.Leave.Service BMA.EHR.Leave - $(NoWarn); + false + $(NoWarn);$(WarningsNotAsErrors) diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index e4e3b130..19d0b8cb 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -3,6 +3,7 @@ using BMA.EHR.Application.Repositories.Commands; using BMA.EHR.Application.Repositories.Leaves.LeaveRequests; using BMA.EHR.Application.Repositories.Leaves.TimeAttendants; using BMA.EHR.Application.Repositories.MetaData; +using BMA.EHR.Application.Responses.Profiles; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Leave.Commons; @@ -1552,7 +1553,27 @@ namespace BMA.EHR.Leave.Service.Controllers { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } - var rawData = await _leaveRequestRepository.GetLeaveRequestForAdminAsync(req.Year, req.Type, req.Status, req.StartDate, req.EndDate); + + // เพิ่มเติมการดึงคนตามสิทธิ์แบบที่ bright ทำ #1462 + var profileList = new List(); + if (req.ProfileType.Trim().ToUpper() == "OFFICER") + { + + profileList = await _userProfileRepository.GetProfileWithNoneValidateKeycloakAllOfficerAndRevision(AccessToken, req.Node, req.NodeId, jsonData["result"] == "OWNER" || jsonData["result"] == "CHILD", req.RevisionId); + } + else + { + + profileList = await _userProfileRepository.GetProfileWithNoneValidateKeycloakAllEmployeeAndRevision(AccessToken, req.Node, req.NodeId, jsonData["result"] == "OWNER" || jsonData["result"] == "CHILD", req.RevisionId); + } + + var keycloakList = new List(); + if(profileList != null) + { + keycloakList = profileList.Where(x => x.Keycloak != null).Select(x => x.Keycloak!.Value).ToList(); + } + + var rawData = await _leaveRequestRepository.GetLeaveRequestForAdminWithAuthAsync(req.Year, req.Type, req.Status, req.StartDate, req.EndDate, keycloakList); var result = new List(); @@ -1650,7 +1671,7 @@ namespace BMA.EHR.Leave.Service.Controllers } else { - data = await _leaveRequestRepository.ApproveCancelLeaveRequestAsync(data, "อนุมัติการขอยกเลิกการลา โดยระบบ"); + data = await _leaveRequestRepository.ApproveCancelLeaveRequestAsync(data, "อนุมัติการขอยกเลิกการลา โดยระบบ", req.Reason ?? ""); } // upload leave cancel document diff --git a/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminDto.cs b/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminDto.cs index 2a8e4acf..cadeea86 100644 --- a/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminDto.cs +++ b/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminDto.cs @@ -28,5 +28,11 @@ namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest public string ProfileType { get; set; } = string.Empty; + public string NodeId { get; set; } = string.Empty; + + public int Node { get; set; } + + public string? RevisionId { get; set; } = string.Empty; + } }