diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs
index 9db67fce..5b8a5b43 100644
--- a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs
+++ b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs
@@ -1,4 +1,5 @@
-using Amazon.S3.Model.Internal.MarshallTransformations;
+using Amazon.S3.Model;
+using Amazon.S3.Model.Internal.MarshallTransformations;
using BMA.EHR.Application.Repositories;
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
using BMA.EHR.Domain.Common;
@@ -957,6 +958,112 @@ namespace BMA.EHR.Leave.Service.Controllers
return Success(new { data = pageResult, total = result.Count });
}
+ ///
+ /// LV1_019 - อนุมัติลงเวลากรณีพิเศษ (ADMIN)
+ ///
+ ///
+ ///
+ /// เมื่อทำรายการสำเร็จ
+ /// ไม่ได้ Login เข้าระบบ
+ /// เมื่อเกิดข้อผิดพลาดในการทำงาน
+ [HttpPut("admin/edit/approve/{id:guid}")]
+ public async Task> ApproveRequestAsync(Guid id, [FromBody] ApproveRequestDto req)
+ {
+ if (req.Reason == null || req.Reason == string.Empty)
+ {
+ return Error("กรุณากรอกเหตุผล", (int)StatusCodes.Status400BadRequest);
+ }
+
+ var requestData = await _additionalCheckRequestRepository.GetByIdAsync(id);
+ if (requestData == null)
+ {
+ return Error(GlobalMessages.DataNotFound, (int)StatusCodes.Status404NotFound);
+ }
+
+ requestData.Status = "APPROVE";
+ requestData.Comment = req.Reason;
+ await _additionalCheckRequestRepository.UpdateAsync(requestData);
+
+ // change user timestamp
+ var processTimeStamp = await _processUserTimeStampRepository.GetTimestampByDateAsync(requestData.KeycloakUserId, requestData.CheckDate.Date);
+
+ if (processTimeStamp == null)
+ {
+ processTimeStamp = new ProcessUserTimeStamp
+ {
+ KeycloakUserId = requestData.KeycloakUserId,
+ CheckIn = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckInTime}"),
+ CheckOut = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckOutTime}"),
+ CheckInRemark = req.Reason,
+ CheckOutRemark = req.Reason,
+
+ CheckInLat = 0,
+ CheckInLon = 0,
+ CheckOutLat = 0,
+ CheckOutLon = 0,
+ CheckInPOI = "ลงเวลากรณีพิเศษ",
+ CheckOutPOI = "ลงเวลากรณีพิเศษ",
+
+ };
+
+ await _processUserTimeStampRepository.AddAsync(processTimeStamp);
+ }
+ else
+ {
+ if (requestData.CheckInEdit)
+ {
+ processTimeStamp.CheckIn = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckInTime}");
+ processTimeStamp.CheckInRemark = req.Reason;
+ processTimeStamp.CheckInLat = 0;
+ processTimeStamp.CheckInLon = 0;
+ processTimeStamp.CheckInPOI = "ลงเวลากรณีพิเศษ";
+ }
+
+ if (requestData.CheckOutEdit)
+ {
+ processTimeStamp.CheckOut = DateTime.Parse($"{requestData.CheckDate.Date.ToString("yyyy-MM-dd")} {req.CheckOutTime}");
+ processTimeStamp.CheckOutRemark = req.Reason;
+ processTimeStamp.CheckOutLat = 0;
+ processTimeStamp.CheckOutLon = 0;
+ processTimeStamp.CheckOutPOI = "ลงเวลากรณีพิเศษ";
+ }
+
+ await _processUserTimeStampRepository.UpdateAsync(processTimeStamp);
+ }
+
+ return Success();
+ }
+
+ ///
+ /// LV1_020 - ไม่อนุมัติลงเวลากรณีพิเศษ (ADMIN)
+ ///
+ ///
+ ///
+ /// เมื่อทำรายการสำเร็จ
+ /// ไม่ได้ Login เข้าระบบ
+ /// เมื่อเกิดข้อผิดพลาดในการทำงาน
+ [HttpPut("admin/edit/reject/{id:guid}")]
+ public async Task> RejectRequestAsync(Guid id, [FromBody] RejectRequestDto req)
+ {
+ if (req.Reason == null || req.Reason == string.Empty)
+ {
+ return Error("กรุณากรอกเหตุผล", (int)StatusCodes.Status400BadRequest);
+ }
+
+ var requestData = await _additionalCheckRequestRepository.GetByIdAsync(id);
+ if (requestData == null)
+ {
+ return Error(GlobalMessages.DataNotFound, (int)StatusCodes.Status404NotFound);
+ }
+
+ requestData.Status = "REJECT";
+ requestData.Comment = req.Reason;
+ await _additionalCheckRequestRepository.UpdateAsync(requestData);
+
+ return Success();
+ }
+
+
#endregion
#endregion
diff --git a/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/ApproveRequestDto.cs b/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/ApproveRequestDto.cs
new file mode 100644
index 00000000..7b50313b
--- /dev/null
+++ b/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/ApproveRequestDto.cs
@@ -0,0 +1,15 @@
+namespace BMA.EHR.Leave.Service.DTOs.AdditionalCheck
+{
+ public class ApproveRequestDto
+ {
+ public string CheckInTime { get; set; }
+
+ public string CheckOutTime { get; set; }
+
+ public string CheckInStatus { get; set; }
+
+ public string CheckOutStatus { get; set; }
+
+ public string Reason { get; set; }
+ }
+}
diff --git a/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/RejectRequestDto.cs b/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/RejectRequestDto.cs
new file mode 100644
index 00000000..1779f7ac
--- /dev/null
+++ b/BMA.EHR.Leave.Service/DTOs/AdditionalCheck/RejectRequestDto.cs
@@ -0,0 +1,7 @@
+namespace BMA.EHR.Leave.Service.DTOs.AdditionalCheck
+{
+ public class RejectRequestDto
+ {
+ public string Reason { get; set; }
+ }
+}