Add admin endpoints for processing leave tasks, including retrieval, deletion, and updates

This commit is contained in:
Suphonchai Phoonsawat 2026-03-31 09:46:44 +07:00
parent 759a51ab58
commit 2cd7798dd9
2 changed files with 189 additions and 28 deletions

View file

@ -4200,6 +4200,139 @@ namespace BMA.EHR.Leave.Service.Controllers
return Success();
}
/// <summary>
/// แสดงรายการ Task สำหรับ Process ข้อมูลวันลาและขาดราชการ (ADMIN)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("admin/leave-task/process")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetProcessTaskAsync()
{
var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId);
var tasks = await _leaveProcessJobStatusRepository.GetByUserIdAsync(userId);
var result = tasks.Select(t => new
{
t.Id,
t.CreatedFullName,
t.CreatedAt,
t.Status,
t.StartDate,
t.EndDate,
t.ProcessingDate,
t.CompletedDate,
t.ErrorMessage
});
return Success(result);
}
/// <summary>
/// แสดงรายการ Task สำหรับ Process ข้อมูลวันลาและขาดราชการ (ADMIN)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("admin/leave-task/process/{id:guid}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> GetProcessTaskByIdAsync(Guid id)
{
var task = await _leaveProcessJobStatusRepository.GetByTaskIdAsync(id);
if (task == null)
{
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
}
var result = new
{
task.Id,
task.CreatedFullName,
task.CreatedAt,
task.Status,
task.StartDate,
task.EndDate,
task.ProcessingDate,
task.CompletedDate,
task.ErrorMessage
};
return Success(result);
}
/// <summary>
/// ลบ Task สำหรับ Process ข้อมูลวันลาและขาดราชการ (ADMIN)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpDelete("admin/leave-task/process/{id:guid}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> DeleteProcessTaskByIdAsync(Guid id)
{
var task = await _leaveProcessJobStatusRepository.GetByTaskIdAsync(id);
if (task == null)
{
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
}
await _leaveProcessJobStatusRepository.DeleteAsync(task);
return Success();
}
/// <summary>
/// อัปเดต Task สำหรับ Process ข้อมูลวันลาและขาดราชการ (ADMIN)
/// </summary>
/// <returns>
/// </returns>
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPut("admin/leave-task/process/{id:guid}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> UpdateProcessTaskByIdAsync(Guid id,[FromBody] CreateLeaveProcessJobDto req)
{
var task = await _leaveProcessJobStatusRepository.GetByTaskIdAsync(id);
if (task == null)
{
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
}
if(task.Status != "PENDING")
{
return Error("ไม่สามารถแก้ไขได้เนื่องจาก Task อยู่ในสถานะกำลังดำเนินการหรือดำเนินการเสร็จสิ้นแล้ว");
}
task.StartDate = req.StartDate;
task.EndDate = req.EndDate;
await _leaveProcessJobStatusRepository.UpdateAsync(task);
return Success();
}
#endregion
#endregion