Update LeaveController to refine check-in/check-out logic based on meeting location #2223

This commit is contained in:
Suphonchai Phoonsawat 2026-01-26 12:04:58 +07:00
parent c1d689ebfa
commit 04dbe6ee3b

View file

@ -3635,53 +3635,52 @@ namespace BMA.EHR.Leave.Service.Controllers
if (data == null) if (data == null)
return Error(GlobalMessages.DataNotFound); return Error(GlobalMessages.DataNotFound);
if (data.CheckInStatus == "NORMAL" || data.CheckOutStatus == "NORMAL")  //if (data.CheckInStatus == "NORMAL" || data.CheckOutStatus == "NORMAL")
var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId);
var profile = await _userProfileRepository.GetProfileByKeycloakIdNewAsync(userId, AccessToken);
var defaultRound = await _dutyTimeRepository.GetDefaultAsync();
if (defaultRound == null)
{ {
var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound);
var profile = await _userProfileRepository.GetProfileByKeycloakIdNewAsync(userId, AccessToken); }
var defaultRound = await _dutyTimeRepository.GetDefaultAsync(); var effectiveDate = await _userDutyTimeRepository.GetLastEffectRound(profile!.Id);
if (defaultRound == null) var roundId = effectiveDate != null ? effectiveDate.DutyTimeId : Guid.Empty;
{ var userRound = await _dutyTimeRepository.GetByIdAsync(roundId);
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; var duty = userRound ?? defaultRound;
if (req.CheckInStatus == "NORMAL") if (req.CheckInStatus == "NORMAL")
{
if(data.CheckInLocationName == "ไปประชุม / อบรม / สัมมนา")
{ {
if(data.CheckInLocationName == "ไปประชุม / อบรม / สัมมนา") data.CheckIn = DateTime.Parse($"{data.CheckIn.Date.ToString("yyyy-MM-dd")} 10:30");
{
data.CheckIn = DateTime.Parse($"{data.CheckIn.Date.ToString("yyyy-MM-dd")} 10:30");
}
else
{
data.CheckIn = DateTime.Parse($"{data.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}");
}
} }
if (req.CheckOutStatus == "NORMAL" ) else
{ {
var checkOutTime = data.CheckOut != null ? data.CheckOut.Value : data.CheckIn; data.CheckIn = DateTime.Parse($"{data.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}");
var oldCheckOutTime = data.CheckOut != null ? data.CheckOut.Value : DateTime.Now; }
var roundCheckOutTime = DateTime.Now;
if(data.CheckOutLocationName == "ไปประชุม / อบรม / สัมมนา") }
{ if (req.CheckOutStatus == "NORMAL" )
roundCheckOutTime = DateTime.Parse($"{checkOutTime.Date.ToString("yyyy-MM-dd")} 14:30"); {
} var checkOutTime = data.CheckOut != null ? data.CheckOut.Value : data.CheckIn;
else var oldCheckOutTime = data.CheckOut != null ? data.CheckOut.Value : DateTime.Now;
{ var roundCheckOutTime = DateTime.Now;
roundCheckOutTime = DateTime.Parse($"{checkOutTime.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}"); if(data.CheckOutLocationName == "ไปประชุม / อบรม / สัมมนา")
} {
roundCheckOutTime = DateTime.Parse($"{checkOutTime.Date.ToString("yyyy-MM-dd")} 14:30");
if (oldCheckOutTime < roundCheckOutTime) }
{ else
data.CheckOut = roundCheckOutTime; {
} roundCheckOutTime = DateTime.Parse($"{checkOutTime.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}");
}
if (oldCheckOutTime < roundCheckOutTime)
{
data.CheckOut = roundCheckOutTime;
} }
} }
data.CheckInStatus = req.CheckInStatus; data.CheckInStatus = req.CheckInStatus;
data.CheckOutStatus = req.CheckOutStatus; data.CheckOutStatus = req.CheckOutStatus;
data.EditReason = req.Reason; data.EditReason = req.Reason;