From 5ae67ee02e0497e1e1fa954a9a2f6fabff096872 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Fri, 24 Nov 2023 13:05:22 +0700 Subject: [PATCH] =?UTF-8?q?Approve=20+=20Reject=20=E0=B8=A5=E0=B8=87?= =?UTF-8?q?=E0=B9=80=E0=B8=A7=E0=B8=A5=E0=B8=B2=E0=B8=81=E0=B8=A3=E0=B8=93?= =?UTF-8?q?=E0=B8=B5=E0=B8=9E=E0=B8=B4=E0=B9=80=E0=B8=A8=E0=B8=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/LeaveController.cs | 109 +++++++++++++++++- .../DTOs/AdditionalCheck/ApproveRequestDto.cs | 15 +++ .../DTOs/AdditionalCheck/RejectRequestDto.cs | 7 ++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 BMA.EHR.Leave.Service/DTOs/AdditionalCheck/ApproveRequestDto.cs create mode 100644 BMA.EHR.Leave.Service/DTOs/AdditionalCheck/RejectRequestDto.cs 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; } + } +}