Refactor leave date overlap check in LeaveRequestController for improved readability and performance
All checks were successful
Build & Deploy Leave Service / build (push) Successful in 1m51s
All checks were successful
Build & Deploy Leave Service / build (push) Successful in 1m51s
This commit is contained in:
parent
19b79a162d
commit
3e3bfff7ba
1 changed files with 31 additions and 19 deletions
|
|
@ -1070,26 +1070,38 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
fiscalYear = req.StartLeaveDate.Year + 1;
|
||||
|
||||
var sumLeaveDay = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(fiscalYear, req.Type, userId);
|
||||
|
||||
|
||||
var minLeave = (await _context.Set<LeaveRequest>().Where(x => x.Type.Id == req.Type &&
|
||||
(x.LeaveStatus == "PENDING" || x.LeaveStatus == "APPROVE") &&
|
||||
x.KeycloakUserId == userId)
|
||||
.OrderBy(x => x.LeaveStartDate)
|
||||
.FirstOrDefaultAsync());
|
||||
|
||||
var maxLeave = (await _context.Set<LeaveRequest>().Where(x => x.Type.Id == req.Type &&
|
||||
(x.LeaveStatus == "PENDING" || x.LeaveStatus == "APPROVE") &&
|
||||
x.KeycloakUserId == userId)
|
||||
.OrderByDescending(x => x.LeaveEndDate)
|
||||
.FirstOrDefaultAsync());
|
||||
|
||||
var isBetween = false;
|
||||
if (minLeave != null && maxLeave != null)
|
||||
{
|
||||
isBetween = (req.StartLeaveDate.Date >= minLeave.LeaveStartDate.Date && req.StartLeaveDate.Date <= maxLeave.LeaveEndDate.Date) ||
|
||||
(req.EndLeaveDate.Date >= minLeave.LeaveStartDate.Date && req.EndLeaveDate.Date <= maxLeave.LeaveEndDate.Date);
|
||||
}
|
||||
var existingLeaves = await _context.Set<LeaveRequest>()
|
||||
.Where(x => x.Type.Id == req.Type &&
|
||||
(x.LeaveStatus == "PENDING" || x.LeaveStatus == "APPROVE") &&
|
||||
x.KeycloakUserId == userId)
|
||||
.ToListAsync();
|
||||
|
||||
isBetween = existingLeaves.Any(leave =>
|
||||
req.StartLeaveDate.Date <= leave.LeaveEndDate.Date &&
|
||||
req.EndLeaveDate.Date >= leave.LeaveStartDate.Date);
|
||||
|
||||
// var minLeave = (await _context.Set<LeaveRequest>().Where(x => x.Type.Id == req.Type &&
|
||||
// (x.LeaveStatus == "PENDING" || x.LeaveStatus == "APPROVE") &&
|
||||
// x.KeycloakUserId == userId)
|
||||
// .OrderBy(x => x.LeaveStartDate)
|
||||
// .FirstOrDefaultAsync());
|
||||
|
||||
// var maxLeave = (await _context.Set<LeaveRequest>().Where(x => x.Type.Id == req.Type &&
|
||||
// (x.LeaveStatus == "PENDING" || x.LeaveStatus == "APPROVE") &&
|
||||
// x.KeycloakUserId == userId)
|
||||
// .OrderByDescending(x => x.LeaveEndDate)
|
||||
// .FirstOrDefaultAsync());
|
||||
|
||||
// var isBetween = false;
|
||||
// if (minLeave != null && maxLeave != null)
|
||||
// {
|
||||
// // isBetween = (req.StartLeaveDate.Date >= minLeave.LeaveStartDate.Date && req.StartLeaveDate.Date <= maxLeave.LeaveEndDate.Date) ||
|
||||
// // (req.EndLeaveDate.Date >= minLeave.LeaveStartDate.Date && req.EndLeaveDate.Date <= maxLeave.LeaveEndDate.Date);
|
||||
// isBetween = req.StartLeaveDate.Date <= maxLeave.LeaveEndDate.Date &&
|
||||
// req.EndLeaveDate.Date >= minLeave.LeaveStartDate.Date;
|
||||
|
||||
// }
|
||||
|
||||
var isLeave = false;
|
||||
var approveDay = sumLeaveDay == null ? 0.0 : sumLeaveDay.LeaveDaysUsed;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue