From e1c7688913936a8e062712e69704d375911c26aa Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Fri, 23 Jan 2026 20:27:22 +0700 Subject: [PATCH 1/2] Update LeaveController to set end times based on duty schedule for check-in/check-out #2228 --- BMA.EHR.Leave/Controllers/LeaveController.cs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index 8faf42c2..7f90fbe1 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -1015,13 +1015,18 @@ namespace BMA.EHR.Leave.Service.Controllers }; var startTime = ""; + var endTime = ""; if (!data.IsLocation && data.LocationName == "ไปประชุม / อบรม / สัมมนา") { //startTime = "09:30"; startTime = "10:30"; + endTime = "12:00"; } else + { startTime = duty.StartTimeMorning; + endTime = duty.EndTimeMorning; + } string checkInStatus = "NORMAL"; var leaveReq = await _leaveRequestRepository.GetLeavePeriodAsync(userId, currentDate.Date); @@ -1126,15 +1131,22 @@ namespace BMA.EHR.Leave.Service.Controllers } var endTime = ""; + var startTime = ""; + var endTimeMorning = ""; if (!data.IsLocation && data.LocationName == "ไปประชุม / อบรม / สัมมนา") { - //startTime = "09:30"; + startTime = "13:00"; endTime = "14:30"; + endTimeMorning = "12:00"; } else + { endTime = duty.EndTimeAfternoon; + startTime = duty.StartTimeAfternoon; + endTimeMorning = duty.EndTimeMorning; + } - var endTimeMorning = duty.EndTimeMorning; + string checkOutStatus = "NORMAL"; var leaveReq = await _leaveRequestRepository.GetLeavePeriodAsync(userId, currentDate.Date); @@ -1161,7 +1173,7 @@ namespace BMA.EHR.Leave.Service.Controllers "NORMAL" : "ABSENT" : DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) < - DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {endTimeMorning}") ? "ABSENT" : "NORMAL"; } @@ -1178,7 +1190,7 @@ namespace BMA.EHR.Leave.Service.Controllers "NORMAL" : "ABSENT" : DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) < - DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {endTimeMorning}") ? "ABSENT" : "NORMAL"; } From 9bd6017ded190cf9e87a4c31d21bc95304c41fc0 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Fri, 23 Jan 2026 20:35:54 +0700 Subject: [PATCH 2/2] Update LeaveController to adjust check-in/check-out times based on user duty schedule #2223 --- BMA.EHR.Leave/Controllers/LeaveController.cs | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index 7f90fbe1..ebfd5c96 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -3634,6 +3634,30 @@ namespace BMA.EHR.Leave.Service.Controllers var data = await _processUserTimeStampRepository.GetByIdAsync(id); if (data == null) return Error(GlobalMessages.DataNotFound); + + if (data.CheckInStatus == "NORMAL" || data.CheckOutStatus == "NORMAL") + { + var profile = await _userProfileRepository.GetProfileByKeycloakIdNewAsync(id, AccessToken); + var defaultRound = await _dutyTimeRepository.GetDefaultAsync(); + if (defaultRound == null) + { + return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound); + } + var effectiveDate = await _userDutyTimeRepository.GetLastEffectRound(profile!.Id); + var roundId = effectiveDate != null ? effectiveDate.DutyTimeId : Guid.Empty; + var userRound = await _dutyTimeRepository.GetByIdAsync(roundId); + + var duty = userRound ?? defaultRound; + if (req.CheckInStatus == "NORMAL") + { + data.CheckIn = DateTime.Parse($"{data.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}"); + } + if (req.CheckOutStatus == "NORMAL" ) + { + var checkOutTime = data.CheckOut != null ? data.CheckOut.Value : data.CheckIn; + data.CheckOut = DateTime.Parse($"{checkOutTime.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}"); + } + } data.CheckInStatus = req.CheckInStatus; data.CheckOutStatus = req.CheckOutStatus;