Update leave calculations to use DateAppoint and adjust leave limits based on government age #2266

This commit is contained in:
Suphonchai Phoonsawat 2026-02-03 20:46:20 +07:00
parent 659e06a08d
commit 10d6ee160e
3 changed files with 21 additions and 8 deletions

View file

@ -108,7 +108,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
throw new Exception(GlobalMessages.DataNotFound); throw new Exception(GlobalMessages.DataNotFound);
} }
var govAge = (pf?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var govAge = (pf?.DateAppoint?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId); var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId);
@ -174,7 +174,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
public async Task<LeaveBeginning?> GetByYearAndTypeIdForUser(int year, Guid typeId, GetProfileByKeycloakIdDto? pf) public async Task<LeaveBeginning?> GetByYearAndTypeIdForUser(int year, Guid typeId, GetProfileByKeycloakIdDto? pf)
{ {
var govAge = (pf?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var govAge = (pf?.DateAppoint?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId); var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId);
@ -247,7 +247,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
return null; return null;
} }
var govAge = (pf?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var govAge = (pf?.DateAppoint?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId); var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId);
@ -337,7 +337,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
return null; return null;
} }
var govAge = (pf?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var govAge = (pf?.DateAppoint?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId); var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId);
@ -416,5 +416,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
public string LastName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty;
public DateTime? DateStart { get; set; } = null; public DateTime? DateStart { get; set; } = null;
public DateTime? DateAppoint { get; set; } = null;
} }
} }

View file

@ -1360,6 +1360,7 @@ namespace BMA.EHR.Leave.Service.Controllers
FirstName = x.FirstName ?? "", FirstName = x.FirstName ?? "",
LastName = x.LastName ?? "", LastName = x.LastName ?? "",
DateStart = x.DateStart ?? x.DateAppoint, DateStart = x.DateStart ?? x.DateAppoint,
DateAppoint = x.DateAppoint,
}).Distinct().ToList(); }).Distinct().ToList();
var beginningData = await _leaveBeginningRepository.GetAllByYearAsync(year); var beginningData = await _leaveBeginningRepository.GetAllByYearAsync(year);

View file

@ -869,7 +869,7 @@ namespace BMA.EHR.Leave.Service.Controllers
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
} }
var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var govAge = (profile?.DateAppoint?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var leaveType = await _leaveTypeRepository.GetByIdAsync(req.Type); var leaveType = await _leaveTypeRepository.GetByIdAsync(req.Type);
if (leaveType == null) if (leaveType == null)
@ -897,13 +897,23 @@ namespace BMA.EHR.Leave.Service.Controllers
if (leaveType.Code.Trim().ToUpper() == "LV-005") if (leaveType.Code.Trim().ToUpper() == "LV-005")
{ {
leaveLimit = leaveData == null ? 0 : leaveData.LeaveDays; if (govAge < 180)
leaveLimit = 0;
else
leaveLimit = leaveData == null ? 0 : leaveData.LeaveDays;
} }
else else
leaveLimit = leaveType.Limit; leaveLimit = leaveType.Limit;
var restOldDay = leaveData == null ? 0 : leaveData.LeaveDays - 10; var restOldDay = leaveData == null ? 0 : leaveData.LeaveDays - 10;
var restCurrentDay = 10.0; var restCurrentDay = 10.0;
if (govAge < 180)
{
restOldDay = 0;
restCurrentDay = 0;
}
if(restOldDay < 0)
restOldDay = 0;
var sumLeave = leaveData == null ? 0 : leaveData.LeaveDaysUsed; var sumLeave = leaveData == null ? 0 : leaveData.LeaveDaysUsed;
// var lastSalary = profile.ProfileSalary; // var lastSalary = profile.ProfileSalary;
@ -970,7 +980,7 @@ namespace BMA.EHR.Leave.Service.Controllers
// var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken); // var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
var profile = await _userProfileRepository.GetProfileByKeycloakIdNewAsync(userId, AccessToken); var profile = await _userProfileRepository.GetProfileByKeycloakIdNewAsync(userId, AccessToken);
var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var govAge = (profile?.DateAppoint?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var thisYear = DateTime.Now.Year; var thisYear = DateTime.Now.Year;
var message = string.Empty; var message = string.Empty;
@ -1527,7 +1537,7 @@ namespace BMA.EHR.Leave.Service.Controllers
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
} }
var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var govAge = (profile?.DateAppoint?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var userCalendar = await _userCalendarRepository.GetExist(profile.Id); var userCalendar = await _userCalendarRepository.GetExist(profile.Id);
var category = userCalendar == null ? "NORMAL" : userCalendar.Calendar; var category = userCalendar == null ? "NORMAL" : userCalendar.Calendar;