From 82e6ce6d11f2fb4110ce28662011f0f626967c06 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Mon, 15 Jan 2024 10:52:39 +0700 Subject: [PATCH] =?UTF-8?q?fix=20defect=20=E0=B9=80=E0=B8=9E=E0=B8=B4?= =?UTF-8?q?=E0=B9=88=E0=B8=A1=20api=20=E0=B8=95=E0=B8=B2=E0=B8=A1=20spec?= =?UTF-8?q?=20=E0=B9=83=E0=B8=AB=E0=B8=A1=E0=B9=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LeaveRequests/LeaveRequestRepository.cs | 15 +++- .../Controllers/LeaveController.cs | 62 +++++++++++--- .../Controllers/LeaveRequestController.cs | 81 ++++++++++++++++++- .../LeaveRequest/DeleteLeaveDocumentDto.cs | 13 +++ .../LeaveRequest/GetLeaveRequestByIdDto.cs | 2 +- .../GetLeaveRequestForAdminByIdDto.cs | 2 +- .../DTOs/LeaveRequest/LeaveDocumentDto.cs | 9 +++ 7 files changed, 166 insertions(+), 18 deletions(-) create mode 100644 BMA.EHR.Leave.Service/DTOs/LeaveRequest/DeleteLeaveDocumentDto.cs create mode 100644 BMA.EHR.Leave.Service/DTOs/LeaveRequest/LeaveDocumentDto.cs diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index ac1df068..f6469452 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -1,4 +1,5 @@ -using BMA.EHR.Application.Common.Interfaces; +using System.Drawing; +using BMA.EHR.Application.Common.Interfaces; using BMA.EHR.Application.Messaging; using BMA.EHR.Domain.Models.HR; using BMA.EHR.Domain.Models.Leave.Commons; @@ -575,6 +576,18 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return data.Count > 0; } + public async Task DeleteLeaveDocumentAsync(Guid Id) + { + var doc = await _dbContext.Set() + .Where(x => x.Id == Id) + .FirstOrDefaultAsync(); + if (doc != null) + { + _dbContext.Set().Remove(doc); + await _dbContext.SaveChangesAsync(); + } + } + #endregion } } diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs index 106d0aed..aab9a70f 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs @@ -448,7 +448,7 @@ namespace BMA.EHR.Leave.Service.Controllers if (currentCheckIn != null) { - return Error(new Exception("ไม่สามารถลงเวลาได้ เนืองจากมีการลงเวลาในวันนี้แล้ว!"), StatusCodes.Status400BadRequest); + return Error(new Exception("ไม่สามารถลงเวลาได้ เนื่องจากมีการลงเวลาในวันนี้แล้ว!"), StatusCodes.Status400BadRequest); } @@ -467,7 +467,12 @@ namespace BMA.EHR.Leave.Service.Controllers var checkInStatus = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? + + DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) > + DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "LATE" : + "NORMAL"; // process - รอทำใน queue @@ -519,7 +524,7 @@ namespace BMA.EHR.Leave.Service.Controllers var checkOutStatus = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : + "ABSENT" : DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{currentDate.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? "ABSENT" : @@ -766,7 +771,12 @@ namespace BMA.EHR.Leave.Service.Controllers CheckInStatus = d.CheckInStatus != null || d.CheckInStatus != "" ? d.CheckInStatus : DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? + + DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > + DateTime.Parse($"{d.CheckIn.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "LATE" : + "NORMAL", CheckInDescription = d.CheckInRemark ?? "", IsLocationCheckIn = d.IsLocationCheckIn, @@ -783,11 +793,11 @@ namespace BMA.EHR.Leave.Service.Controllers d.CheckOutStatus != null || d.CheckOutStatus != "" ? d.CheckOutStatus : DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : - DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < - DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? - "ABSENT" : - "NORMAL", + "ABSENT" : + DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < + DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : + "NORMAL", CheckOutDescription = d.CheckOutRemark ?? "", IsLocationCheckOut = d.IsLocationCheckOut, @@ -860,7 +870,13 @@ namespace BMA.EHR.Leave.Service.Controllers CheckInStatus = d.CheckInStatus != "" ? d.CheckInStatus : DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? - "LATE" : + + DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > + DateTime.Parse($"{d.CheckIn.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : + "LATE" : + + "NORMAL", CheckInIsLocation = d.IsLocationCheckIn, CheckInLocationName = d.CheckInLocationName, @@ -874,7 +890,7 @@ namespace BMA.EHR.Leave.Service.Controllers CheckOutStatus = d.CheckOutStatus != "" ? d.CheckOutStatus : d.CheckOut == null ? null : DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : + "ABSENT" : DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? "ABSENT" : @@ -1130,14 +1146,22 @@ namespace BMA.EHR.Leave.Service.Controllers CheckInStatus = checkInData == null ? null : DateTime.Parse(checkInData.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? + + DateTime.Parse(checkInData.CheckIn.ToString("yyyy-MM-dd HH:mm")) > + DateTime.Parse($"{checkInData.CheckIn.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "LATE" : + "NORMAL", CheckOutStatus = checkInData == null ? null : checkInData.CheckOut == null ? null : DateTime.Parse(checkInData.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : + "ABSENT" : + DateTime.Parse(checkInData.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < + DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "NORMAL", StartTimeMorning = duty.StartTimeMorning, @@ -1359,7 +1383,12 @@ namespace BMA.EHR.Leave.Service.Controllers CheckInImg = $"{imgUrl}/{d.CheckInImageUrl}", CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? + + DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > + DateTime.Parse($"{d.CheckIn.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "LATE" : + "NORMAL", CheckInDescription = d.CheckInRemark ?? "", @@ -1373,7 +1402,10 @@ namespace BMA.EHR.Leave.Service.Controllers CheckOutStatus = d.CheckOut == null ? null : DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : + "ABSENT" : + DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < + DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "NORMAL", CheckOutDescription = d.CheckOutRemark ?? "", }; @@ -1470,6 +1502,9 @@ namespace BMA.EHR.Leave.Service.Controllers CheckInStatus = checkInData == null ? null : DateTime.Parse(checkInData.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? + DateTime.Parse(checkInData.CheckIn.ToString("yyyy-MM-dd HH:mm")) > + DateTime.Parse($"{checkInData.CheckIn.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "LATE" : "NORMAL", @@ -1477,7 +1512,10 @@ namespace BMA.EHR.Leave.Service.Controllers checkInData.CheckOut == null ? null : DateTime.Parse(checkInData.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : + "ABSENT" : + DateTime.Parse(checkInData.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < + DateTime.Parse($"{checkInData.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? + "ABSENT" : "NORMAL", CheckInLocation = checkInData == null ? "" : checkInData.CheckInPOI, diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs index 57268348..bbd34dd4 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs @@ -14,6 +14,7 @@ using System.Security.Claims; using BMA.EHR.Application.Repositories.Commands; using BMA.EHR.Application.Repositories.Leaves.TimeAttendants; using Org.BouncyCastle.Ocsp; +using System.Runtime.CompilerServices; namespace BMA.EHR.Leave.Service.Controllers { @@ -390,6 +391,11 @@ namespace BMA.EHR.Leave.Service.Controllers ApproveStep = oldData.ApproveStep }; + // assign old upload documents to new request + leaveRequest.LeaveDraftDocument = oldData.LeaveDraftDocument; + leaveRequest.LeaveDocument.AddRange(oldData.LeaveDocument); + leaveRequest.LeaveCancelDocument = oldData.LeaveCancelDocument; + // get leave last leaveRequest.LeaveLast = await _leaveRequestRepository.GetLeaveLastByTypeForUserAsync(userId, req.Type); @@ -526,7 +532,9 @@ namespace BMA.EHR.Leave.Service.Controllers leaveRequest.PositionLevelName = profile.PositionLevel == null ? "" : profile.PositionLevel.Name; leaveRequest.OrganizationName = profile.Oc ?? ""; - // delet old + + + // delete old await _leaveRequestRepository.DeleteAsync(oldData); // save to database @@ -535,6 +543,35 @@ namespace BMA.EHR.Leave.Service.Controllers return Success(new { id = leaveRequest.Id }); } + + /// + /// LV2_038 - ลบรายการการลา (USER) + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpDelete("user/{id:guid}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> DeleteLeaveRequestAsync(Guid id) + { + var deleted = await _leaveRequestRepository.GetByIdAsync(id); + if (deleted == null) + return Error(GlobalMessages.DataNotFound); + + if (deleted.LeaveStatus != "DRAFT") + { + return Error("ไม่สามารถลบคำร้องขอลาที่นำส่งแล้วได้"); + } + + await _leaveRequestRepository.DeleteAsync(deleted); + return Success(); + } + + /// /// LV2_002 - ข้อมูลที่ user ขอยื่นลา (USER) /// @@ -880,7 +917,11 @@ namespace BMA.EHR.Leave.Service.Controllers foreach (var d in rawData.LeaveDocument) { var file = await _minIOService.ImagesPath(d.Document.Id); - result.LeaveDocument.Add(file); + result.LeaveDocument.Add(new LeaveDocumentDto + { + DocId = d.Document.Id, + Path = file + }); } } @@ -1375,7 +1416,11 @@ namespace BMA.EHR.Leave.Service.Controllers foreach (var d in rawData.LeaveDocument) { var file = await _minIOService.ImagesPath(d.Document.Id); - result.LeaveDocument.Add(file); + result.LeaveDocument.Add(new LeaveDocumentDto + { + DocId = d.Document.Id, + Path = file + }); } } @@ -1434,6 +1479,36 @@ namespace BMA.EHR.Leave.Service.Controllers return Success(result); } + + /// + /// LV2_037 - ลบเอกสารประกอบรายละเอียดการลา (USER) + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpDelete("user/file/document/{id:guid}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> DeleteLeaveDocumentByIdAsync(Guid id, [FromBody] DeleteLeaveDocumentDto req) + { + var leaveReq = await _leaveRequestRepository.GetByIdAsync(id); + if (leaveReq == null) + return Error(GlobalMessages.DataNotFound); + + var doc = leaveReq.LeaveDocument.Where(x => x.Document.Id == req.DocId).FirstOrDefault(); + if (doc != null) + { + await _minIOService.DeleteFileAsync(doc.Document.Id); + await _leaveRequestRepository.DeleteLeaveDocumentAsync(doc.Id); + return Success(); + } + else + return Error("Document not found"); + } + #endregion } } \ No newline at end of file diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/DeleteLeaveDocumentDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/DeleteLeaveDocumentDto.cs new file mode 100644 index 00000000..ba514aae --- /dev/null +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/DeleteLeaveDocumentDto.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; + +namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest +{ + public class DeleteLeaveDocumentDto + { + [Required] + public Guid Id { get; set; } = Guid.Empty; + + [Required] + public Guid DocId { get; set; } = Guid.Empty; + } +} \ No newline at end of file diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestByIdDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestByIdDto.cs index e45734e6..1cb5d161 100644 --- a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestByIdDto.cs +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestByIdDto.cs @@ -31,7 +31,7 @@ namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest public string LeaveDetail { get; set; } = string.Empty; - public List LeaveDocument { get; set; } = new(); + public List LeaveDocument { get; set; } = new(); public string LeaveDraftDocument { get; set; } diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs index 14a8de7b..6a9b6b8c 100644 --- a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs @@ -38,7 +38,7 @@ namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest public string LeaveDetail { get; set; } = string.Empty; - public List LeaveDocument { get; set; } = new(); + public List LeaveDocument { get; set; } = new(); public string LeaveDraftDocument { get; set; } diff --git a/BMA.EHR.Leave.Service/DTOs/LeaveRequest/LeaveDocumentDto.cs b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/LeaveDocumentDto.cs new file mode 100644 index 00000000..e9d7392a --- /dev/null +++ b/BMA.EHR.Leave.Service/DTOs/LeaveRequest/LeaveDocumentDto.cs @@ -0,0 +1,9 @@ +namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest +{ + public class LeaveDocumentDto + { + public Guid DocId { get; set; } = Guid.Empty; + + public string Path { get; set; } = string.Empty; + } +} \ No newline at end of file