diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index 41c81228..1698ce7c 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -514,6 +514,93 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests await _appDbContext.SaveChangesAsync(); } + public async Task> GetSumSendLeaveAsync(int year) + { + var data = await _dbContext.Set().AsQueryable().AsNoTracking() + .Include(x => x.Type) + .Where(x => x.LeaveStartDate.Year == year) + .ToListAsync(); + + var res = (from d in data + group d by new { d.KeycloakUserId, LeaveTypeId = d.Type.Id, LeaveTypeCode = d.Type.Code } into grp + select new GetSumApproveLeaveByTypeDto + { + KeycloakUserId = grp.Key.KeycloakUserId, + LeaveTypeId = grp.Key.LeaveTypeId, + LeaveTypeCode = grp.Key.LeaveTypeCode, + SumLeaveDay = grp.Sum(x => x.LeaveTotal) + }) + .ToList(); + + return res; + } + + public async Task> GetSumApproveLeaveAsync(int year) + { + var data = await _dbContext.Set().AsQueryable().AsNoTracking() + .Include(x => x.Type) + .Where(x => x.LeaveStartDate.Year == year) + .Where(x => x.LeaveStatus == "APPROVE") + .ToListAsync(); + + var res = (from d in data + group d by new { d.KeycloakUserId, LeaveTypeId = d.Type.Id, LeaveTypeCode = d.Type.Code } into grp + select new GetSumApproveLeaveByTypeDto + { + KeycloakUserId = grp.Key.KeycloakUserId, + LeaveTypeId = grp.Key.LeaveTypeId, + LeaveTypeCode = grp.Key.LeaveTypeCode, + SumLeaveDay = grp.Sum(x => x.LeaveTotal) + }) + .ToList(); + + return res; + } + + public async Task> GetSumRejectLeaveAsync(int year) + { + var data = await _dbContext.Set().AsQueryable().AsNoTracking() + .Include(x => x.Type) + .Where(x => x.LeaveStartDate.Year == year) + .Where(x => x.LeaveStatus == "REJECT") + .ToListAsync(); + + var res = (from d in data + group d by new { d.KeycloakUserId, LeaveTypeId = d.Type.Id, LeaveTypeCode = d.Type.Code } into grp + select new GetSumApproveLeaveByTypeDto + { + KeycloakUserId = grp.Key.KeycloakUserId, + LeaveTypeId = grp.Key.LeaveTypeId, + LeaveTypeCode = grp.Key.LeaveTypeCode, + SumLeaveDay = grp.Sum(x => x.LeaveTotal) + }) + .ToList(); + + return res; + } + + public async Task> GetSumDeleteLeaveAsync(int year) + { + var data = await _dbContext.Set().AsQueryable().AsNoTracking() + .Include(x => x.Type) + .Where(x => x.LeaveStartDate.Year == year) + .Where(x => x.LeaveStatus == "DELETE") + .ToListAsync(); + + var res = (from d in data + group d by new { d.KeycloakUserId, LeaveTypeId = d.Type.Id, LeaveTypeCode = d.Type.Code } into grp + select new GetSumApproveLeaveByTypeDto + { + KeycloakUserId = grp.Key.KeycloakUserId, + LeaveTypeId = grp.Key.LeaveTypeId, + LeaveTypeCode = grp.Key.LeaveTypeCode, + SumLeaveDay = grp.Sum(x => x.LeaveTotal) + }) + .ToList(); + + return res; + } + public async Task GetSumSendLeaveByTypeForUserAsync(Guid keycloakUserId, Guid leaveTypeId, int year) { var data = await _dbContext.Set().AsQueryable() diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs index 77827ca6..1ccbf29c 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs @@ -15,6 +15,7 @@ using BMA.EHR.Application.Repositories.Commands; using BMA.EHR.Application.Repositories.Leaves.TimeAttendants; using BMA.EHR.Domain.Models.Leave.Commons; using Microsoft.EntityFrameworkCore; +using BMA.EHR.Application.Responses.Profiles; namespace BMA.EHR.Leave.Service.Controllers { @@ -817,12 +818,19 @@ namespace BMA.EHR.Leave.Service.Controllers { //var thisYear = DateTime.Now.Year; var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year); + var personList = new List(); var result = new List(); foreach (var item in data) { - var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(item.KeycloakUserId, AccessToken); + var profile = personList.FirstOrDefault(x => x.Keycloak == item.KeycloakUserId); + if(profile == null) + { + profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(item.KeycloakUserId, AccessToken); + personList.Add(profile); + } + //var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(item.KeycloakUserId, AccessToken); var resData = new GetLeaveRequestCalendarResultDto { @@ -1571,20 +1579,25 @@ namespace BMA.EHR.Leave.Service.Controllers var leaveTypes = await _leaveTypeRepository.GetAllAsync(); var thisYear = DateTime.Now.Year; + var sendList = await _leaveRequestRepository.GetSumSendLeaveAsync(thisYear); + var approveList = await _leaveRequestRepository.GetSumApproveLeaveAsync(thisYear); + var rejectList = await _leaveRequestRepository.GetSumRejectLeaveAsync(thisYear); + var deleteList = await _leaveRequestRepository.GetSumDeleteLeaveAsync(thisYear); + var result = new List(); foreach (var leaveType in leaveTypes) { - var send = await _leaveRequestRepository.GetSumSendLeaveByTypeForUserAsync(userId, leaveType.Id, - thisYear); + var sendData = sendList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); + var send = sendData == null ? 0 : sendData.SumLeaveDay; - var approve = - await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear); + var approveData = approveList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); + var approve = approveData == null ? 0 : approveData.SumLeaveDay; - var reject = - await _leaveRequestRepository.GetSumRejectLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear); + var rejectData = rejectList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); + var reject = rejectData == null ? 0 : rejectData.SumLeaveDay; - var delete = - await _leaveRequestRepository.GetSumDeleteLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear); + var deleteData = deleteList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); + var delete = deleteData == null ? 0 : deleteData.SumLeaveDay; var data = new {