From 7d3ec6c74e8d71a4b4858068982b51bcbb74320d Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Wed, 18 Feb 2026 16:34:35 +0700 Subject: [PATCH 1/3] Refactor ScheduleUpdateLeaveBeginningAsync to use ScheduleEditLeaveBeginningDto and remove unused profile checks --- .../Controllers/LeaveBeginningController.cs | 40 +++++++++---------- .../LeaveBeginnings/EditLeaveBeginningDto.cs | 16 ++++++++ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs index 245176da..28f88302 100644 --- a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs @@ -500,15 +500,15 @@ namespace BMA.EHR.Leave.Service.Controllers [HttpPut("schedule")] [AllowAnonymous] - public async Task> ScheduleUpdateLeaveBeginningAsync([FromBody] EditLeaveBeginningDto req) + public async Task> ScheduleUpdateLeaveBeginningAsync([FromBody] ScheduleEditLeaveBeginningDto req) { try { - var profile = await _userProfileRepository.GetProfileByProfileIdNoAuthAsync(req.ProfileId, AccessToken); - if(profile == null) - { - return Error("ไม่พบข้อมูลข้าราชการหรือลูกจ้าง", StatusCodes.Status404NotFound); - } + // var profile = await _userProfileRepository.GetProfileByProfileIdNoAuthAsync(req.ProfileId, AccessToken); + // if(profile == null) + // { + // return Error("ไม่พบข้อมูลข้าราชการหรือลูกจ้าง", StatusCodes.Status404NotFound); + // } // check duplicate var oldData = await _context.LeaveBeginnings.FirstOrDefaultAsync(x => x.ProfileId == req.ProfileId && x.LeaveTypeId == req.LeaveTypeId @@ -520,23 +520,23 @@ namespace BMA.EHR.Leave.Service.Controllers oldData.LeaveTypeId = req.LeaveTypeId; oldData.LeaveYear = req.LeaveYear; oldData.LeaveDays = req.LeaveDays; - oldData.LeaveDaysUsed = req.LeaveDaysUsed; - oldData.LeaveCount = req.LeaveCount; - oldData.BeginningLeaveDays = req.BeginningLeaveDays; - oldData.BeginningLeaveCount = req.BeginningLeaveCount; + // oldData.LeaveDaysUsed = req.LeaveDaysUsed; + // oldData.LeaveCount = req.LeaveCount; + // oldData.BeginningLeaveDays = req.BeginningLeaveDays; + // oldData.BeginningLeaveCount = req.BeginningLeaveCount; - oldData.ProfileId = req.ProfileId; - oldData.Prefix = profile.Prefix; - oldData.FirstName = profile.FirstName; - oldData.LastName = profile.LastName; - oldData.RootDnaId = profile.RootDnaId; - oldData.Child1DnaId = profile.Child1DnaId; - oldData.Child2DnaId = profile.Child2DnaId; - oldData.Child3DnaId = profile.Child3DnaId; - oldData.Child4DnaId = profile.Child4DnaId; + // oldData.ProfileId = req.ProfileId; + // oldData.Prefix = profile.Prefix; + // oldData.FirstName = profile.FirstName; + // oldData.LastName = profile.LastName; + // oldData.RootDnaId = profile.RootDnaId; + // oldData.Child1DnaId = profile.Child1DnaId; + // oldData.Child2DnaId = profile.Child2DnaId; + // oldData.Child3DnaId = profile.Child3DnaId; + // oldData.Child4DnaId = profile.Child4DnaId; oldData.LastUpdateUserId = ""; - oldData.LastUpdateFullName = FullName ?? ""; + oldData.LastUpdateFullName = "System"; oldData.LastUpdatedAt = DateTime.Now; await _leaveBeginningRepository.UpdateAsync(oldData); diff --git a/BMA.EHR.Leave/DTOs/LeaveBeginnings/EditLeaveBeginningDto.cs b/BMA.EHR.Leave/DTOs/LeaveBeginnings/EditLeaveBeginningDto.cs index d4a2661f..fe0c433f 100644 --- a/BMA.EHR.Leave/DTOs/LeaveBeginnings/EditLeaveBeginningDto.cs +++ b/BMA.EHR.Leave/DTOs/LeaveBeginnings/EditLeaveBeginningDto.cs @@ -29,4 +29,20 @@ namespace BMA.EHR.Leave.Service.DTOs.LeaveBeginnings [Comment("จำนวนครั้งที่ลายกมา")] public int BeginningLeaveCount { get; set; } = 0; } + + + public class ScheduleEditLeaveBeginningDto + { + [Required] + public Guid ProfileId { get; set; } = Guid.Empty; + + [Required] + public Guid LeaveTypeId { get; set; } = Guid.Empty; + + [Required, Comment("ปีงบประมาณ")] + public int LeaveYear { get; set; } = 0; + + [Required, Comment("จำนวนวันลายกมา")] + public double LeaveDays { get; set; } = 0.0; + } } From de91fd0fa215d6e883c68a54d2268702832c68c2 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Wed, 18 Feb 2026 16:47:14 +0700 Subject: [PATCH 2/3] Refactor LeaveBeginningController to restore profile checks and reset leave days to zero --- .../Controllers/LeaveBeginningController.cs | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs index 28f88302..559a784d 100644 --- a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs @@ -504,11 +504,11 @@ namespace BMA.EHR.Leave.Service.Controllers { try { - // var profile = await _userProfileRepository.GetProfileByProfileIdNoAuthAsync(req.ProfileId, AccessToken); - // if(profile == null) - // { - // return Error("ไม่พบข้อมูลข้าราชการหรือลูกจ้าง", StatusCodes.Status404NotFound); - // } + var profile = await _userProfileRepository.GetProfileByProfileIdNoAuthAsync(req.ProfileId, AccessToken); + if(profile == null) + { + return Error("ไม่พบข้อมูลข้าราชการหรือลูกจ้าง", StatusCodes.Status404NotFound); + } // check duplicate var oldData = await _context.LeaveBeginnings.FirstOrDefaultAsync(x => x.ProfileId == req.ProfileId && x.LeaveTypeId == req.LeaveTypeId @@ -525,15 +525,15 @@ namespace BMA.EHR.Leave.Service.Controllers // oldData.BeginningLeaveDays = req.BeginningLeaveDays; // oldData.BeginningLeaveCount = req.BeginningLeaveCount; - // oldData.ProfileId = req.ProfileId; - // oldData.Prefix = profile.Prefix; - // oldData.FirstName = profile.FirstName; - // oldData.LastName = profile.LastName; - // oldData.RootDnaId = profile.RootDnaId; - // oldData.Child1DnaId = profile.Child1DnaId; - // oldData.Child2DnaId = profile.Child2DnaId; - // oldData.Child3DnaId = profile.Child3DnaId; - // oldData.Child4DnaId = profile.Child4DnaId; + oldData.ProfileId = req.ProfileId; + oldData.Prefix = profile.Prefix; + oldData.FirstName = profile.FirstName; + oldData.LastName = profile.LastName; + oldData.RootDnaId = profile.RootDnaId; + oldData.Child1DnaId = profile.Child1DnaId; + oldData.Child2DnaId = profile.Child2DnaId; + oldData.Child3DnaId = profile.Child3DnaId; + oldData.Child4DnaId = profile.Child4DnaId; oldData.LastUpdateUserId = ""; oldData.LastUpdateFullName = "System"; @@ -547,10 +547,10 @@ namespace BMA.EHR.Leave.Service.Controllers leaveBeginning.LeaveTypeId = req.LeaveTypeId; leaveBeginning.LeaveYear = req.LeaveYear; leaveBeginning.LeaveDays = req.LeaveDays; - leaveBeginning.LeaveDaysUsed = req.LeaveDaysUsed; - leaveBeginning.LeaveCount = req.LeaveCount; - leaveBeginning.BeginningLeaveDays = req.BeginningLeaveDays; - leaveBeginning.BeginningLeaveCount = req.BeginningLeaveCount; + leaveBeginning.LeaveDaysUsed = 0; + leaveBeginning.LeaveCount = 0; + leaveBeginning.BeginningLeaveDays = 0; + leaveBeginning.BeginningLeaveCount = 0; leaveBeginning.ProfileId = req.ProfileId; leaveBeginning.Prefix = profile.Prefix; @@ -564,7 +564,7 @@ namespace BMA.EHR.Leave.Service.Controllers leaveBeginning.Child4DnaId = profile.Child4DnaId; leaveBeginning.CreatedUserId = ""; - leaveBeginning.CreatedFullName = FullName ?? ""; + leaveBeginning.CreatedFullName = "System"; leaveBeginning.CreatedAt = DateTime.Now; await _leaveBeginningRepository.AddAsync(leaveBeginning); From d70ed254c0f6a3816edfeae47c028d28fbb8ac8d Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Wed, 18 Feb 2026 16:56:48 +0700 Subject: [PATCH 3/3] Enhance LeaveRequestController to restore profile checks and implement officer notification logic #2164 --- .../Controllers/LeaveRequestController.cs | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index 6580dd53..a8a5e9b4 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -2323,12 +2323,31 @@ namespace BMA.EHR.Leave.Service.Controllers await _leaveRequestRepository.SendToOfficerAsync(id); // Remove Workflow Integration - // var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); - // var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken); - // if (profile == null) - // { - // return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); - // } + var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken); + if (profile == null) + { + return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); + } + + // Get Officer List + var officers = await _userProfileRepository.GetOCStaffAsync(profile.Id, AccessToken); + if(officers != null && officers.Count > 0) + { + foreach (var officer in officers) + { + // Send Notification + var noti = new Notification + { + Body = $"มีคำร้องขอลาจาก {profile.Prefix}{profile.FirstName} {profile.LastName} รอรับการอนุมัติจากคุณ", + ReceiverUserId = officer.ProfileId, + Type = "", + Payload = $"{URL}/leave/detail/{id}", + }; + _appDbContext.Set().Add(noti); + } + await _appDbContext.SaveChangesAsync(); + } // var baseAPIOrg = _configuration["API"]; // var apiUrlOrg = $"{baseAPIOrg}/org/workflow/add-workflow"; // if (profile.ProfileType == "OFFICER")