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

View file

@ -1617,15 +1617,15 @@ namespace BMA.EHR.Leave.Service.Controllers
} }
[HttpGet("holiday/test")] // [HttpGet("holiday/test")]
public async Task<ActionResult<ResponseObject>> GetHolidayTestAsync() // public async Task<ActionResult<ResponseObject>> GetHolidayTestAsync()
{ // {
var start = new DateTime(2024, 1, 1); // var start = new DateTime(2024, 1, 1);
var end = new DateTime(2024, 1, 3); // var end = new DateTime(2024, 1, 3);
var count = await _holidayRepository.GetHolidayCountAsync(start, end); // var count = await _holidayRepository.GetHolidayCountAsync(start, end);
return Success(new { holiday = count }); // return Success(new { holiday = count });
} // }
#endregion #endregion
} }