diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index 9472c635..665b7cab 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -12,10 +12,12 @@ using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Leave.Service.DTOs.LeaveRequest; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Org.BouncyCastle.Asn1.Pkcs; +using Sentry; using Swashbuckle.AspNetCore.Annotations; using System.Net.Http.Headers; using System.Security.Claims; @@ -1978,6 +1980,38 @@ namespace BMA.EHR.Leave.Service.Controllers if (rawData.Root != null && rawData.Root != "") orgName += $" {rawData.Root}"; + // #1136 + var extendLeave = 0.0; + var leaveLimit = rawData.Type.Limit; + + var approvePrevYear = await _leaveRequestRepository.GetSumApproveLeaveAsync(thisYear - 1); + + if (rawData.Type.Code == "LV-005") + { + var apprvPrevData = approvePrevYear.FirstOrDefault(x => x.KeycloakUserId == rawData.KeycloakUserId && x.LeaveTypeId == rawData.Type.Id); + var apprvPrev = apprvPrevData == null ? 0 : apprvPrevData.SumLeaveDay; + + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(rawData.KeycloakUserId, AccessToken); + var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); + + if (govAge >= 180) + { + if (govAge >= 3650) + { + // ถ้าอายุราชการเกิน 10 ปี ได้บวกเพิ่มอีก 10 วัน + extendLeave = 30 - apprvPrev; // หายอดวันลาที่เหลือของปีก่อน + if (extendLeave >= 20) extendLeave = 20; + } + else + { + extendLeave = 20 - apprvPrev; // หายอดวันลาที่เหลือของปีก่อน + if (extendLeave >= 10) extendLeave = 10; + } + } + else + leaveLimit = 0; + } + var result = new GetLeaveRequestForAdminByIdDto { Id = rawData.Id, @@ -2071,9 +2105,9 @@ namespace BMA.EHR.Leave.Service.Controllers ApproveStep = rawData.ApproveStep ?? "-", - LeaveLimit = rawData.Type.Limit, + LeaveLimit = rawData.Type.Limit + extendLeave, LeaveSummary = leaveSummary, - LeaveRemain = rawData.Type.Limit - leaveSummary + LeaveRemain = (rawData.Type.Limit + extendLeave) - leaveSummary }; if (rawData.LeaveDocument != null && rawData.LeaveDocument.Count > 0) @@ -2141,7 +2175,7 @@ namespace BMA.EHR.Leave.Service.Controllers if (leaveType.Code == "LV-005") { var apprvPrevData = approvePrevYear.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); - var apprvPrev = apprvPrevData == null ? 0 : approveData.SumLeaveDay; + var apprvPrev = apprvPrevData == null ? 0 : apprvPrevData.SumLeaveDay; var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken); var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);