แก้ไขการเช็ค duplicate กรณีลาครึ่งวัน ให้ตรวจสอบว่ามีการลาครึ่งวันซ้ำกันหรือไม่ ถ้ากรณีลาเต็มวัน เช็คทุกกรณี

This commit is contained in:
Suphonchai Phoonsawat 2024-01-22 13:10:29 +07:00
parent 47c1f7dac0
commit f2a0d1ca86
2 changed files with 34 additions and 17 deletions

View file

@ -344,7 +344,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
throw new Exception(GlobalMessages.DataNotFound);
}
var isDuplicate = await CheckDuplicateLeave(rawData.KeycloakUserId, rawData.LeaveStartDate.Date, rawData.LeaveEndDate.Date);
var isDuplicate = await CheckDuplicateLeave(rawData.KeycloakUserId, rawData.LeaveStartDate.Date, rawData.LeaveEndDate.Date, rawData.LeaveRange ?? "ALL");
if (isDuplicate)
{
throw new Exception("ไม่สามารถขอลาในช่วงเวลาเดียวกันได้ เนื่องจากมีการขอลาในช่วงเวลาดังกล่าวแล้ว");
@ -577,17 +577,34 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
return 0;
}
public async Task<bool> CheckDuplicateLeave(Guid keycloakUserId, DateTime startDate, DateTime endDate)
public async Task<bool> CheckDuplicateLeave(Guid keycloakUserId, DateTime startDate, DateTime endDate, string range)
{
var leaveStatus = new List<string>() { "NEW", "PENDING", "APPROVE" };
var data = await _dbContext.Set<LeaveRequest>().AsQueryable()
.Include(x => x.Type)
.Where(x => x.KeycloakUserId == keycloakUserId)
.Where(x => x.LeaveStartDate.Date == startDate.Date || x.LeaveEndDate.Date == endDate.Date)
.Where(x => leaveStatus.Contains(x.LeaveStatus))
.ToListAsync();
if (range == "ALL")
{
var data = await _dbContext.Set<LeaveRequest>().AsQueryable()
.Include(x => x.Type)
//.Where(x => x.LeaveRange == "ALL")
.Where(x => x.KeycloakUserId == keycloakUserId)
.Where(x => x.LeaveStartDate.Date == startDate.Date || x.LeaveEndDate.Date == endDate.Date)
.Where(x => leaveStatus.Contains(x.LeaveStatus))
.ToListAsync();
return data.Count > 0;
}
else
{
var data = await _dbContext.Set<LeaveRequest>().AsQueryable()
.Include(x => x.Type)
.Where(x => x.LeaveRange == range)
.Where(x => x.KeycloakUserId == keycloakUserId)
.Where(x => x.LeaveStartDate.Date == startDate.Date || x.LeaveEndDate.Date == endDate.Date)
.Where(x => leaveStatus.Contains(x.LeaveStatus))
.ToListAsync();
return data.Count > 0;
}
return data.Count > 0;
}
public async Task DeleteLeaveDocumentAsync(Guid Id)