แก้ไข /leave/user/check

เพิ่ม range and rangeEnd เพื่อตรวจสอบการลา เพื่อให้สามารถลาครึ่งวัน รวมกับลาเต็มวันได้
This commit is contained in:
Suphonchai Phoonsawat 2025-04-22 10:39:17 +07:00
parent cd54079a47
commit 3659d03d94
6 changed files with 1590 additions and 3 deletions

View file

@ -868,6 +868,13 @@ namespace BMA.EHR.Leave.Service.Controllers
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> CheckUserLeaveAsync([FromBody] GetLeaveCheckDto req)
{
var totalDay = (double)req.StartLeaveDate.DiffDay(req.EndLeaveDate.Date);
var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId);
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
@ -893,7 +900,7 @@ namespace BMA.EHR.Leave.Service.Controllers
var sumLeave =
await _leaveRequestRepository.GetSumLeaveByTypeForUserAsync(userId, req.Type, req.StartLeaveDate.Year);
var sumWorkDay = await _holidayRepository.GetHolidayCountAsync(req.StartLeaveDate.Date, req.EndLeaveDate.Date, category);
var totalDay = req.StartLeaveDate.DiffDay(req.EndLeaveDate.Date);
var sumWeekend = _holidayRepository.GetWeekEndCount(req.StartLeaveDate.Date, req.EndLeaveDate.Date, category);
var sumApproveLeave = await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(userId, req.Type, req.StartLeaveDate.Year);
@ -921,6 +928,10 @@ namespace BMA.EHR.Leave.Service.Controllers
var isLeave = false;
switch (leaveType.Code.ToUpper().Trim())
{
case "LV-001":
@ -1086,6 +1097,35 @@ namespace BMA.EHR.Leave.Service.Controllers
break;
}
if (totalDay > 1)
{
if (req.LeaveRange == "MORNING" || req.LeaveRangeEnd == "AFTERNOON")
{
isLeave = false;
message = "ช่วงวันลาที่ระบุไม่ถูกต้อง";
}
if (req.LeaveRange != "ALL")
totalDay -= 0.5;
if (req.LeaveRangeEnd != "ALL")
totalDay -= 0.5;
}
else if (totalDay == 1)
{
if (req.LeaveRange != req.LeaveRangeEnd)
{
isLeave = false;
message = "ช่วงวันลาที่ระบุไม่ถูกต้อง";
}
if (req.LeaveRange != "ALL")
totalDay -= 0.5;
}
//var isLeave = sumLeave + (totalDay - sumWorkDay - sumWeekend) <= leaveType.Limit;
var result = new GetLeaveCheckResultDto