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; } + } +}