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;
|
fiscalYear = req.StartLeaveDate.Year + 1;
|
||||||
|
|
||||||
var sumLeaveDay = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(fiscalYear, req.Type, userId);
|
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;
|
var isBetween = false;
|
||||||
if (minLeave != null && maxLeave != null)
|
var existingLeaves = await _context.Set<LeaveRequest>()
|
||||||
{
|
.Where(x => x.Type.Id == req.Type &&
|
||||||
isBetween = (req.StartLeaveDate.Date >= minLeave.LeaveStartDate.Date && req.StartLeaveDate.Date <= maxLeave.LeaveEndDate.Date) ||
|
(x.LeaveStatus == "PENDING" || x.LeaveStatus == "APPROVE") &&
|
||||||
(req.EndLeaveDate.Date >= minLeave.LeaveStartDate.Date && req.EndLeaveDate.Date <= maxLeave.LeaveEndDate.Date);
|
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 isLeave = false;
|
||||||
var approveDay = sumLeaveDay == null ? 0.0 : sumLeaveDay.LeaveDaysUsed;
|
var approveDay = sumLeaveDay == null ? 0.0 : sumLeaveDay.LeaveDaysUsed;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue