fix : Optimize Leave API
This commit is contained in:
parent
12733ea779
commit
b3fb153bbf
2 changed files with 109 additions and 9 deletions
|
|
@ -514,6 +514,93 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
|
||||||
await _appDbContext.SaveChangesAsync();
|
await _appDbContext.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<List<GetSumApproveLeaveByTypeDto>> GetSumSendLeaveAsync(int year)
|
||||||
|
{
|
||||||
|
var data = await _dbContext.Set<LeaveRequest>().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<List<GetSumApproveLeaveByTypeDto>> GetSumApproveLeaveAsync(int year)
|
||||||
|
{
|
||||||
|
var data = await _dbContext.Set<LeaveRequest>().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<List<GetSumApproveLeaveByTypeDto>> GetSumRejectLeaveAsync(int year)
|
||||||
|
{
|
||||||
|
var data = await _dbContext.Set<LeaveRequest>().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<List<GetSumApproveLeaveByTypeDto>> GetSumDeleteLeaveAsync(int year)
|
||||||
|
{
|
||||||
|
var data = await _dbContext.Set<LeaveRequest>().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<double> GetSumSendLeaveByTypeForUserAsync(Guid keycloakUserId, Guid leaveTypeId, int year)
|
public async Task<double> GetSumSendLeaveByTypeForUserAsync(Guid keycloakUserId, Guid leaveTypeId, int year)
|
||||||
{
|
{
|
||||||
var data = await _dbContext.Set<LeaveRequest>().AsQueryable()
|
var data = await _dbContext.Set<LeaveRequest>().AsQueryable()
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ using BMA.EHR.Application.Repositories.Commands;
|
||||||
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
|
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
|
||||||
using BMA.EHR.Domain.Models.Leave.Commons;
|
using BMA.EHR.Domain.Models.Leave.Commons;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using BMA.EHR.Application.Responses.Profiles;
|
||||||
|
|
||||||
namespace BMA.EHR.Leave.Service.Controllers
|
namespace BMA.EHR.Leave.Service.Controllers
|
||||||
{
|
{
|
||||||
|
|
@ -817,12 +818,19 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
{
|
{
|
||||||
//var thisYear = DateTime.Now.Year;
|
//var thisYear = DateTime.Now.Year;
|
||||||
var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year);
|
var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year);
|
||||||
|
var personList = new List<GetProfileByKeycloakIdDto>();
|
||||||
|
|
||||||
var result = new List<GetLeaveRequestCalendarResultDto>();
|
var result = new List<GetLeaveRequestCalendarResultDto>();
|
||||||
|
|
||||||
foreach (var item in data)
|
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
|
var resData = new GetLeaveRequestCalendarResultDto
|
||||||
{
|
{
|
||||||
|
|
@ -1571,20 +1579,25 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
var leaveTypes = await _leaveTypeRepository.GetAllAsync();
|
var leaveTypes = await _leaveTypeRepository.GetAllAsync();
|
||||||
var thisYear = DateTime.Now.Year;
|
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<dynamic>();
|
var result = new List<dynamic>();
|
||||||
foreach (var leaveType in leaveTypes)
|
foreach (var leaveType in leaveTypes)
|
||||||
{
|
{
|
||||||
var send = await _leaveRequestRepository.GetSumSendLeaveByTypeForUserAsync(userId, leaveType.Id,
|
var sendData = sendList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id);
|
||||||
thisYear);
|
var send = sendData == null ? 0 : sendData.SumLeaveDay;
|
||||||
|
|
||||||
var approve =
|
var approveData = approveList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id);
|
||||||
await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear);
|
var approve = approveData == null ? 0 : approveData.SumLeaveDay;
|
||||||
|
|
||||||
var reject =
|
var rejectData = rejectList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id);
|
||||||
await _leaveRequestRepository.GetSumRejectLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear);
|
var reject = rejectData == null ? 0 : rejectData.SumLeaveDay;
|
||||||
|
|
||||||
var delete =
|
var deleteData = deleteList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id);
|
||||||
await _leaveRequestRepository.GetSumDeleteLeaveByTypeForUserAsync(userId, leaveType.Id, thisYear);
|
var delete = deleteData == null ? 0 : deleteData.SumLeaveDay;
|
||||||
|
|
||||||
var data = new
|
var data = new
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue