แก้ไข

- format response
- ส่ง noti โดยมีการแนบลิงค์
This commit is contained in:
Suphonchai Phoonsawat 2025-04-24 10:59:31 +07:00
parent 19c30e69df
commit 92847e6be2
6 changed files with 211 additions and 21 deletions

View file

@ -57,6 +57,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
public async Task<List<LeaveBeginning>> GetAllByYearAsync(int year)
{
return await _dbContext.Set<LeaveBeginning>()
.Include(x => x.LeaveType)
.Where(x => x.LeaveYear == year)
.ToListAsync();
}

View file

@ -28,6 +28,8 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
private readonly IApplicationDBContext _appDbContext;
private readonly string URL = string.Empty;
#endregion
#region " Constructor and Destuctor "
@ -47,6 +49,8 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
_configuration = configuration;
_emailSenderService = emailSenderService;
_appDbContext = appDbContext;
URL = (_configuration["API"]).Replace("/api/v1", "");
}
#endregion
@ -506,6 +510,22 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
rawData.ApproveStep = "st2";
await UpdateAsync(rawData);
// TODO: Send notification to 1st Commander
var firstCommander = rawData.Approvers
.Where(x => x.ApproveType!.ToUpper() == "COMMANDER")
.OrderBy(x => x.Seq)
.FirstOrDefault();
// Send Notification
var noti1 = new Notification
{
Body = $"การขอลาของคุณ {rawData.FirstName} {rawData.LastName} รอรับการอนุมัติจากคุณ",
ReceiverUserId = firstCommander!.ProfileId,
Type = "",
Payload = $"{URL}/leave/detail/{id}",
};
_appDbContext.Set<Notification>().Add(noti1);
await _appDbContext.SaveChangesAsync();
}
public async Task CommanderApproveLeaveRequest(Guid id, string reason)
@ -527,7 +547,6 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
// check commander approve
var approvers = rawData.Approvers.Where(x => x.ApproveType!.ToUpper() == "COMMANDER").OrderBy(x => x.Seq).ToList();
var maxSeq = approvers.Max(x => x.Seq);
var approver = approvers.FirstOrDefault(x => x.KeycloakId == userId);
if (approver == null)
@ -535,21 +554,34 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
throw new Exception("คุณไม่มีสิทธิ์อนุมัติการลาในขั้นตอนนี้");
}
// check prev approver มี action แล้วหรือไม่?
var prevApprover = approvers.FirstOrDefault(x => x.Seq == approver.Seq - 1);
if (prevApprover != null)
{
if (prevApprover.ApproveStatus == "PENDING")
{
throw new Exception("ไม่สามารถทำการอนุมัติได้ เนื่องจากยังอยู่ระหว่างการพิจารณาโดยผู้บังคับบัญชารายก่อนหน้า");
}
}
var maxSeq = approvers.Max(x => x.Seq);
approver.ApproveStatus = "APPROVE";
approver.Comment = reason;
if (approver.Seq != maxSeq)
{
var nextApprover = approvers.FirstOrDefault(x => x.Seq == approver.Seq + 1);
// Send Noti
var noti = new Notification
{
Body = $"การขอลาของคุณ {rawData.FirstName} {rawData.LastName} รอรับการอนุมัติจากคุณ",
ReceiverUserId = nextApprover!.ProfileId,
Type = "",
Payload = "",
Payload = $"{URL}/leave/detail/{id}",
};
_appDbContext.Set<Notification>().Add(noti);
await _appDbContext.SaveChangesAsync();
@ -564,6 +596,22 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
rawData.ApproveStep = "st3";
await UpdateAsync(rawData);
// TODO: Send notification to 1st Approver
var firstCommander = rawData.Approvers
.Where(x => x.ApproveType!.ToUpper() == "APPROVER")
.OrderBy(x => x.Seq)
.FirstOrDefault();
// Send Notification
var noti1 = new Notification
{
Body = $"การขอลาของคุณ {rawData.FirstName} {rawData.LastName} รอรับการอนุมัติจากคุณ",
ReceiverUserId = firstCommander!.ProfileId,
Type = "",
Payload = $"{URL}/leave/detail/{id}",
};
_appDbContext.Set<Notification>().Add(noti1);
await _appDbContext.SaveChangesAsync();
}
}
@ -587,7 +635,6 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
// check commander approve
var approvers = rawData.Approvers.Where(x => x.ApproveType!.ToUpper() == "COMMANDER").OrderBy(x => x.Seq).ToList();
var maxSeq = approvers.Max(x => x.Seq);
var approver = approvers.FirstOrDefault(x => x.KeycloakId == userId);
if (approver == null)
@ -595,6 +642,20 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
throw new Exception("คุณไม่มีสิทธิ์อนุมัติการลาในขั้นตอนนี้");
}
// check prev approver มี action แล้วหรือไม่?
var prevApprover = approvers.FirstOrDefault(x => x.Seq == approver.Seq - 1);
if (prevApprover != null)
{
if (prevApprover.ApproveStatus == "PENDING")
{
throw new Exception("ไม่สามารถทำการอนุมัติได้ เนื่องจากยังอยู่ระหว่างการพิจารณาโดยผู้บังคับบัญชารายก่อนหน้า");
}
}
var maxSeq = approvers.Max(x => x.Seq);
approver.ApproveStatus = "REJECT";
approver.Comment = reason;
@ -609,7 +670,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
Body = $"การขอลาของคุณ {rawData.FirstName} {rawData.LastName} รอรับการอนุมัติจากคุณ",
ReceiverUserId = nextApprover!.ProfileId,
Type = "",
Payload = "",
Payload = $"{URL}/leave/detail/{id}",
};
_appDbContext.Set<Notification>().Add(noti);
await _appDbContext.SaveChangesAsync();
@ -624,6 +685,22 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
rawData.ApproveStep = "st3";
await UpdateAsync(rawData);
// TODO: Send notification to 1st Approver
var firstCommander = rawData.Approvers
.Where(x => x.ApproveType!.ToUpper() == "APPROVER")
.OrderBy(x => x.Seq)
.FirstOrDefault();
// Send Notification
var noti1 = new Notification
{
Body = $"การขอลาของคุณ {rawData.FirstName} {rawData.LastName} รอรับการอนุมัติจากคุณ",
ReceiverUserId = firstCommander!.ProfileId,
Type = "",
Payload = $"{URL}/leave/detail/{id}",
};
_appDbContext.Set<Notification>().Add(noti1);
await _appDbContext.SaveChangesAsync();
}
}
@ -646,7 +723,6 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
// check commander approve
var approvers = rawData.Approvers.Where(x => x.ApproveType!.ToUpper() == "APPROVER").OrderBy(x => x.Seq).ToList();
var maxSeq = approvers.Max(x => x.Seq);
var approver = approvers.FirstOrDefault(x => x.KeycloakId == userId);
if (approver == null)
@ -654,6 +730,20 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
throw new Exception("คุณไม่มีสิทธิ์อนุมัติการลาในขั้นตอนนี้");
}
// check prev approver มี action แล้วหรือไม่?
var prevApprover = approvers.FirstOrDefault(x => x.Seq == approver.Seq - 1);
if (prevApprover != null)
{
if (prevApprover.ApproveStatus == "PENDING")
{
throw new Exception("ไม่สามารถทำการอนุมัติได้ เนื่องจากยังอยู่ระหว่างการพิจารณาโดยผู้บังคับบัญชารายก่อนหน้า");
}
}
var maxSeq = approvers.Max(x => x.Seq);
approver.ApproveStatus = "APPROVE";
approver.Comment = reason;
@ -773,7 +863,6 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
// check commander approve
var approvers = rawData.Approvers.Where(x => x.ApproveType!.ToUpper() == "APPROVER").OrderBy(x => x.Seq).ToList();
var maxSeq = approvers.Max(x => x.Seq);
var approver = approvers.FirstOrDefault(x => x.KeycloakId == userId);
if (approver == null)
@ -781,6 +870,20 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
throw new Exception("คุณไม่มีสิทธิ์อนุมัติการลาในขั้นตอนนี้");
}
// check prev approver มี action แล้วหรือไม่?
var prevApprover = approvers.FirstOrDefault(x => x.Seq == approver.Seq - 1);
if (prevApprover != null)
{
if (prevApprover.ApproveStatus == "PENDING")
{
throw new Exception("ไม่สามารถทำการอนุมัติได้ เนื่องจากยังอยู่ระหว่างการพิจารณาโดยผู้บังคับบัญชารายก่อนหน้า");
}
}
var maxSeq = approvers.Max(x => x.Seq);
approver.ApproveStatus = "REJECT";
approver.Comment = reason;
@ -824,7 +927,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
};
_appDbContext.Set<Notification>().Add(noti);
await _appDbContext.SaveChangesAsync();
}
}
}
public async Task<List<GetSumApproveLeaveByTypeDto>> GetSumSendLeaveAsync(int year)