From 193cffa7c4b73cd7d459fdb25812b7413e710bc3 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Tue, 22 Apr 2025 13:46:35 +0700 Subject: [PATCH] fix #1335 --- .../Controllers/LeaveReportController.cs | 66 +++++++++++++++++-- 1 file changed, 59 insertions(+), 7 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 0adcd9e5..a8a2a0d0 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -3,6 +3,7 @@ using BMA.EHR.Application.Repositories.Commands; using BMA.EHR.Application.Repositories.Leaves.LeaveRequests; using BMA.EHR.Application.Repositories.Leaves.TimeAttendants; using BMA.EHR.Application.Repositories.MetaData; +using BMA.EHR.Application.Responses.Profiles; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Leave.Requests; @@ -10,13 +11,15 @@ using BMA.EHR.Domain.Shared; using BMA.EHR.Leave.Service.DTOs.Reports; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json.Linq; +using Microsoft.OpenApi.Any; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Org.BouncyCastle.Asn1.Pkcs; +using Org.BouncyCastle.Ocsp; +using Sentry; using Swashbuckle.AspNetCore.Annotations; using System.Globalization; using System.Security.Claims; -using BMA.EHR.Application.Responses.Profiles; -using Microsoft.OpenApi.Any; namespace BMA.EHR.Leave.Service.Controllers { @@ -228,12 +231,17 @@ namespace BMA.EHR.Leave.Service.Controllers private async Task GetReport03(LeaveRequest data) { + + + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(data.KeycloakUserId, AccessToken); if (profile == null) { return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); } + + var fullName = $"{profile!.Prefix}{profile!.FirstName} {profile!.LastName}"; //var rootOc = _userProfileRepository.GetRootOcId(profile.OcId ?? Guid.Empty, AccessToken); @@ -247,6 +255,46 @@ namespace BMA.EHR.Leave.Service.Controllers var sumLeave = await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(data.KeycloakUserId, data.Type.Id, data.LeaveStartDate.Year); + //var userCalendar = await _userCalendarRepository.GetExist(profile.Id); + //var category = userCalendar == null ? "NORMAL" : userCalendar.Calendar; + + //var sumWorkDay = await _holidayRepository.GetHolidayCountAsync(data.LeaveStartDate.Date, data.LeaveEndDate.Date, category); + + //var sumWeekend = _holidayRepository.GetWeekEndCount(data.LeaveStartDate.Date, data.LeaveEndDate.Date, category); + + + + var extendLeave = 0.0; + var leaveLimit = data.Type.Limit; + + var approvePrevYear = await _leaveRequestRepository.GetSumApproveLeaveAsync(data.LeaveStartDate.Year - 1); + + if (data.Type.Code == "LV-005") + { + var apprvPrevData = approvePrevYear.FirstOrDefault(x => x.KeycloakUserId == data.KeycloakUserId && x.LeaveTypeId == data.Type.Id); + var apprvPrev = apprvPrevData == null ? 0 : apprvPrevData.SumLeaveDay; + + //var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(data.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; + } + return new { template = "leave11", @@ -263,17 +311,21 @@ namespace BMA.EHR.Leave.Service.Controllers positionLeaveName = profile!.PositionLeaveName == null ? "-" : profile!.PositionLeaveName.ToThaiNumber(), organizationName = profile!.Oc!.ToThaiNumber() ?? "", - restDayOldTotal = data.RestDayOldTotal.ToString().ToThaiNumber(), - restDayCurrentTotal = data.RestDayCurrentTotal.ToString().ToThaiNumber(), + restDayOldTotal = extendLeave.ToString().ToThaiNumber(), + restDayCurrentTotal = leaveLimit.ToString().ToThaiNumber(), + + //restDayOldTotal = data.RestDayOldTotal.ToString().ToThaiNumber(), + //restDayCurrentTotal = data.RestDayCurrentTotal.ToString().ToThaiNumber(), leaveDateStart = data.LeaveStartDate.Date.ToThaiShortDate().ToThaiNumber(), leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), - LeaveTotal = data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + leaveTotal = data.LeaveTotal.ToString().ToThaiNumber(), + //LeaveTotal = data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), leaveAddress = data.LeaveAddress.ToThaiNumber(), leaveNumber = data.LeaveNumber.ToThaiNumber(), LeaveSummary = sumLeave.ToString().ToThaiNumber(), - LeaveRemain = (data.Type.Limit - sumLeave).ToString().ToThaiNumber(), + LeaveRemain = (data.Type.Limit + extendLeave - sumLeave).ToString().ToThaiNumber(), } }; }