diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index 9cca6fc0..938e0c1e 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -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 CheckDuplicateLeave(Guid keycloakUserId, DateTime startDate, DateTime endDate) + public async Task CheckDuplicateLeave(Guid keycloakUserId, DateTime startDate, DateTime endDate, string range) { var leaveStatus = new List() { "NEW", "PENDING", "APPROVE" }; - var data = await _dbContext.Set().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().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().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) diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs index 4183f590..ad46b175 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs @@ -1617,15 +1617,15 @@ namespace BMA.EHR.Leave.Service.Controllers } - [HttpGet("holiday/test")] - public async Task> 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> 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 }