Add GetDifference method to DateTimeExtension and implement TimeCheck endpoint in LeaveRequestController
All checks were successful
Build & Deploy Leave Service / build (push) Successful in 1m35s

This commit is contained in:
Suphonchai Phoonsawat 2026-02-23 10:09:36 +07:00
parent 5b054f9948
commit c20e1b48bd
2 changed files with 60 additions and 33 deletions

View file

@ -174,6 +174,29 @@ namespace BMA.EHR.Domain.Extensions
}
}
public static (int Years, int Months, int Days) GetDifference(this DateTime from, DateTime to)
{
if (from > to) (from, to) = (to, from); // swap ถ้าลำดับสลับ
int years = to.Year - from.Year;
int months = to.Month - from.Month;
int days = to.Day - from.Day;
if (days < 0)
{
months--;
days += DateTime.DaysInMonth(to.Year, to.Month == 1 ? 12 : to.Month - 1);
}
if (months < 0)
{
years--;
months += 12;
}
return (years, months, days);
}
public static int CalculateAge(this DateTime date, int plusYear = 0, int subtractYear = 0)
{
try

View file

@ -966,6 +966,33 @@ namespace BMA.EHR.Leave.Service.Controllers
return Success(result);
}
[HttpGet("time-check")]
[AllowAnonymous]
public async Task<ActionResult<ResponseObject>> TimeCheckAsync()
{
var startDate = new DateTime(2017, 1, 6);
var govAge = (startDate).DiffDay(DateTime.Now.Date);
var date1Raw = startDate;
var date1 = new LocalDate(date1Raw.Year, date1Raw.Month, date1Raw.Day);
var date2 = new LocalDate(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
var (yy, mm, dd) = startDate.GetDifference(DateTime.Now.Date);
// Period period = Period.Between(date1, date2);
// var govAgeMonth = period.Months;
// var govAgeYear = period.Years;
return Success(new
{
GovAge = govAge,
GovAgeDay = dd,
GovAgeMonth = mm,
GovAgeYear = yy
});
}
/// <summary>
/// LV2_003 - เช็คการยืนขอลา (USER)
/// </summary>
@ -987,12 +1014,15 @@ namespace BMA.EHR.Leave.Service.Controllers
// var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
var profile = await _userProfileRepository.GetProfileByKeycloakIdNewAsync(userId, AccessToken);
var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
var date1Raw = profile?.DateStart?.Date ?? DateTime.Now.Date;
var date1 = new LocalDate(date1Raw.Year, date1Raw.Month, date1Raw.Day);
var date2 = new LocalDate(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
Period period = Period.Between(date1, date2);
var govAgeMonth = period.Months;
var govAgeYear = period.Years;
var startDate = profile?.DateStart?.Date ?? DateTime.Now.Date;
// var date1Raw = profile?.DateStart?.Date ?? DateTime.Now.Date;
// var date1 = new LocalDate(date1Raw.Year, date1Raw.Month, date1Raw.Day);
// var date2 = new LocalDate(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
// Period period = Period.Between(date1, date2);
// var govAgeMonth = period.Months;
// var govAgeYear = period.Years;
var (govAgeYear, govAgeMonth, govAgeDay) = startDate.GetDifference(DateTime.Now.Date);
var thisYear = DateTime.Now.Year;
@ -1089,37 +1119,11 @@ namespace BMA.EHR.Leave.Service.Controllers
break;
case "LV-005":
// fix issue : ระบบลา (ขรก.) >> ลาพักผ่อน (กรณีรับราชการไม่ถึง 6 เดือน) #838
//var leavePrevYear = (await _leaveRequestRepository.GetSumApproveLeaveAsync(fiscalYear - 1)).Where(x => x.LeaveTypeCode == "LV-005" && x.KeycloakUserId == userId).FirstOrDefault();
//var leavePrevYearRemain = 10 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
// if (profile.IsProbation! == true)
// {
// isLeave = false;
// if (!isLeave) message = "ยังอยู่ในช่วงทดลองปฏิบัติราชการ ไม่สามารถลาพักผ่อนได้";
// }
// else
if (govAgeMonth >= 6)
//else
if (govAgeYear >= 1 || (govAgeYear == 0 && govAgeMonth >= 6))
{
isLeave = (totalDay - (sumWorkDay + sumWeekend) + approveDay) <= (limitDay);
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
}
// else if (govAge >= 3650)
// {
// // ถ้าอายุราชการเกิน 10 ปี ได้บวกเพิ่มอีก 10 วัน
// var leavePrevYearRemain = 30 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
// if (leavePrevYearRemain >= 20) leavePrevYearRemain = 20;
// isLeave = (totalDay - (sumWorkDay + sumWeekend) + approveDay) <= (limitDay);
// if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
// }
// else if
// {
// //var leavePrevYearRemain = 20 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
// //if (leavePrevYearRemain >= 10) leavePrevYearRemain = 10;
// isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= (10 + leavePrevYearRemain);
// if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
// }
else
{
isLeave = false;