แก้ไขการเช็ค 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)

View file

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