fix LeaveBeggining Add รายการใหม่เมื่อมีการตรวจสอบ auto ไม่ต้องใช้ cronjob เพราะว่ารายการจะเขอะเกินไป
This commit is contained in:
parent
746f435ca8
commit
749b2b68a1
3 changed files with 172 additions and 83 deletions
|
|
@ -1,6 +1,10 @@
|
|||
using BMA.EHR.Application.Common.Interfaces;
|
||||
using Amazon.S3.Model;
|
||||
using BMA.EHR.Application.Common.Interfaces;
|
||||
using BMA.EHR.Application.Messaging;
|
||||
using BMA.EHR.Domain.Extensions;
|
||||
using BMA.EHR.Domain.Models.Leave.Commons;
|
||||
using BMA.EHR.Domain.Models.Leave.Requests;
|
||||
using BMA.EHR.Domain.Shared;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
|
@ -64,9 +68,81 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests
|
|||
|
||||
public async Task<LeaveBeginning?> GetByYearAndTypeIdAsync(int year, Guid typeId)
|
||||
{
|
||||
return await _dbContext.Set<LeaveBeginning>()
|
||||
var data = await _dbContext.Set<LeaveBeginning>()
|
||||
.Include(x => x.LeaveType)
|
||||
.FirstOrDefaultAsync(x => x.LeaveYear == year && x.LeaveTypeId == typeId);
|
||||
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
public async Task<LeaveBeginning?> GetByYearAndTypeIdForUserAsync(int year, Guid typeId, Guid userId)
|
||||
{
|
||||
var pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
|
||||
if (pf == null)
|
||||
{
|
||||
throw new Exception(GlobalMessages.DataNotFound);
|
||||
}
|
||||
|
||||
var govAge = (pf?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
|
||||
|
||||
var leaveType = await _dbContext.Set<LeaveType>().FirstOrDefaultAsync(x => x.Id == typeId);
|
||||
|
||||
var data = await _dbContext.Set<LeaveBeginning>()
|
||||
.Include(x => x.LeaveType)
|
||||
.FirstOrDefaultAsync(x => x.LeaveYear == year && x.LeaveTypeId == typeId && x.ProfileId == pf.Id);
|
||||
|
||||
if (data == null)
|
||||
{
|
||||
var limit = 0.0;
|
||||
|
||||
var prev = await _dbContext.Set<LeaveBeginning>()
|
||||
.Include(x => x.LeaveType)
|
||||
.FirstOrDefaultAsync(x => x.LeaveYear == year - 1 && x.LeaveTypeId == typeId && x.ProfileId == pf.Id);
|
||||
|
||||
var prevRemain = 0.0;
|
||||
if (prev != null)
|
||||
{
|
||||
prevRemain = prev.LeaveDays - prev.LeaveDaysUsed;
|
||||
}
|
||||
|
||||
if (govAge >= 180)
|
||||
{
|
||||
if (govAge >= 3650)
|
||||
{
|
||||
limit = 10 + prevRemain;
|
||||
if (limit > 30) limit = 30;
|
||||
}
|
||||
else
|
||||
{
|
||||
limit = 10 + prevRemain;
|
||||
if (limit > 20) limit = 20;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
limit = 0.0;
|
||||
}
|
||||
|
||||
data = new LeaveBeginning
|
||||
{
|
||||
LeaveYear = year,
|
||||
LeaveTypeId = typeId,
|
||||
ProfileId = pf.Id,
|
||||
Prefix = pf.Prefix,
|
||||
FirstName = pf.FirstName,
|
||||
LastName = pf.LastName,
|
||||
LeaveDaysUsed = 0,
|
||||
LeaveDays = leaveType?.Code == "LV-005" ? limit : 0
|
||||
};
|
||||
|
||||
_dbContext.Set<LeaveBeginning>().Add(data);
|
||||
await _dbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -597,7 +597,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
|
||||
**/
|
||||
|
||||
|
||||
|
||||
|
||||
// switch from leave type
|
||||
switch (leaveType.Code.Trim().ToUpper())
|
||||
|
|
@ -840,46 +840,52 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
if (profile.Root != null && profile.Root != "")
|
||||
orgName += $" {profile.Root}";
|
||||
|
||||
|
||||
var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(thisYear, req.Type, userId);
|
||||
|
||||
|
||||
if (leaveType.Code.Trim().ToUpper() == "LV-005")
|
||||
{
|
||||
var beginningLeave = await _leaveBeginningRepository.GetByYearAndTypeIdAsync(thisYear, leaveType.Id);
|
||||
leaveLimit = leaveData == null ? 0 : leaveData.LeaveDays;
|
||||
|
||||
if (govAge >= 180)
|
||||
{
|
||||
var leavePrevYear = (await _leaveRequestRepository.GetSumApproveLeaveAsync(thisYear)).Where(x => x.LeaveTypeCode == "LV-005" && x.KeycloakUserId == userId).FirstOrDefault();
|
||||
if (govAge >= 3650)
|
||||
{
|
||||
leaveLimit = beginningLeave != null ? beginningLeave.LeaveDays : 30 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay);
|
||||
remainPrev = beginningLeave != null ? beginningLeave.LeaveDays : 30 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
if (remainPrev >= 20) remainPrev = 20;
|
||||
}
|
||||
else
|
||||
{
|
||||
leaveLimit = beginningLeave != null ? beginningLeave.LeaveDays : 20 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay);
|
||||
remainPrev = beginningLeave != null ? beginningLeave.LeaveDays : 20 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
if (remainPrev >= 10) remainPrev = 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
leaveLimit = 0;
|
||||
}
|
||||
|
||||
//var beginningLeave = await _leaveBeginningRepository.GetByYearAndTypeIdAsync(thisYear, leaveType.Id);
|
||||
|
||||
//if (govAge >= 180)
|
||||
//{
|
||||
// var leavePrevYear = (await _leaveRequestRepository.GetSumApproveLeaveAsync(thisYear)).Where(x => x.LeaveTypeCode == "LV-005" && x.KeycloakUserId == userId).FirstOrDefault();
|
||||
// if (govAge >= 3650)
|
||||
// {
|
||||
// leaveLimit = beginningLeave != null ? beginningLeave.LeaveDays : 30 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay);
|
||||
// remainPrev = beginningLeave != null ? beginningLeave.LeaveDays : 30 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
// if (remainPrev >= 20) remainPrev = 20;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// leaveLimit = beginningLeave != null ? beginningLeave.LeaveDays : 20 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay);
|
||||
// remainPrev = beginningLeave != null ? beginningLeave.LeaveDays : 20 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
// if (remainPrev >= 10) remainPrev = 10;
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// leaveLimit = 0;
|
||||
//}
|
||||
}
|
||||
else
|
||||
leaveLimit = leaveType.Limit;
|
||||
|
||||
|
||||
var sumLeave = await _leaveRequestRepository.GetSumLeaveByTypeForUserAsync(userId, req.Type, thisYear);
|
||||
var restOldDay = 0.00;
|
||||
if (leaveType.Code.Trim().ToUpper() == "LV-005")
|
||||
{
|
||||
restOldDay = remainPrev;
|
||||
}
|
||||
else
|
||||
restOldDay = await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear - 1);
|
||||
//var sumLeave = await _leaveRequestRepository.GetSumLeaveByTypeForUserAsync(userId, req.Type, thisYear);
|
||||
var restOldDay = leaveData == null ? 0 : leaveData.LeaveDays - 10;
|
||||
var restCurrentDay = 10.0;
|
||||
var sumLeave = leaveData == null ? 0 : leaveData.LeaveDaysUsed;
|
||||
|
||||
//if (leaveType.Code.Trim().ToUpper() == "LV-005")
|
||||
//{
|
||||
// restOldDay = remainPrev;
|
||||
//}
|
||||
//else
|
||||
// restOldDay = await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear - 1);
|
||||
|
||||
var lastSalary = profile.ProfileSalary;
|
||||
|
||||
|
|
@ -913,6 +919,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
LeaveTotal = sumLeave,
|
||||
LeaveRemain = leaveLimit - sumLeave,
|
||||
RestDayTotalOld = restOldDay,
|
||||
RestDayTotalCurrent = restCurrentDay,
|
||||
BirthDate = profile.BirthDate.Date,
|
||||
DateAppoint = profile.DateAppoint == null ? null : profile.DateAppoint.Value.Date,
|
||||
Salary = lastSalary == null ? 0 : lastSalary.Amount == null ? 0 : (int)lastSalary.Amount.Value,
|
||||
|
|
@ -946,11 +953,6 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
{
|
||||
var totalDay = (double)req.StartLeaveDate.DiffDay(req.EndLeaveDate.Date);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId);
|
||||
|
||||
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
|
||||
|
|
@ -981,6 +983,8 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
|
||||
var sumApproveLeave = await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(userId, req.Type, req.StartLeaveDate.Year);
|
||||
|
||||
// อ่านค่าจากตาราง beginning ทั้ง limit และ usage
|
||||
var sumLeaveDay = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(req.StartLeaveDate.Year, req.Type, userId);
|
||||
|
||||
|
||||
var minLeave = (await _context.Set<LeaveRequest>().Where(x => x.Type.Id == req.Type &&
|
||||
|
|
@ -1003,16 +1007,15 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
}
|
||||
|
||||
var isLeave = false;
|
||||
|
||||
|
||||
|
||||
|
||||
var approveDay = sumLeaveDay == null ? 0.0 : sumLeaveDay.LeaveDaysUsed;
|
||||
var limitDay = sumLeaveDay == null ? 0.0 : sumLeaveDay.LeaveDays;
|
||||
|
||||
switch (leaveType.Code.ToUpper().Trim())
|
||||
{
|
||||
case "LV-001":
|
||||
// fix issue : ระบบลา (ขรก.) >> ลาป่วย (กรณียื่นขอลาเกิน 120 วัน/ปี) #828
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= 120;
|
||||
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + approveDay) <= 120;
|
||||
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
//isLeave = true;
|
||||
break;
|
||||
|
|
@ -1021,13 +1024,13 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
// fix issue : ระบบลา (ขรก.) >> ลากิจส่วนตัว (กรณีผู้เข้ารับราชการไม่เกิน 1 ปี ยื่นขอลาเกิน 15 วัน/ปี) #831
|
||||
if (govAge <= 365)
|
||||
{
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= 15;
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + approveDay) <= 15;
|
||||
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= 45;
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + approveDay) <= 45;
|
||||
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
}
|
||||
|
||||
|
|
@ -1041,7 +1044,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
break;
|
||||
case "LV-004":
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= 15;
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + approveDay) <= 15;
|
||||
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
break;
|
||||
case "LV-005":
|
||||
|
|
@ -1050,23 +1053,27 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
//var leavePrevYearRemain = 10 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
|
||||
if (govAge >= 180)
|
||||
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 = "จำนวนวันลาเกินที่กำหนด";
|
||||
}
|
||||
//if (govAge >= 3650)
|
||||
//{
|
||||
// // ถ้าอายุราชการเกิน 10 ปี ได้บวกเพิ่มอีก 10 วัน
|
||||
// //var leavePrevYearRemain = 30 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
// //if (leavePrevYearRemain >= 20) leavePrevYearRemain = 20;
|
||||
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= (10 + leavePrevYearRemain);
|
||||
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
}
|
||||
else
|
||||
{
|
||||
var leavePrevYearRemain = 20 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
if (leavePrevYearRemain >= 10) leavePrevYearRemain = 10;
|
||||
// isLeave = (totalDay - (sumWorkDay + sumWeekend) + approveDay) <= (limitDay);
|
||||
// if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// //var leavePrevYearRemain = 20 - (leavePrevYear == null ? 0 : leavePrevYear.SumLeaveDay); // หายอดวันลาที่เหลือของปีก่อน
|
||||
// //if (leavePrevYearRemain >= 10) leavePrevYearRemain = 10;
|
||||
|
||||
isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= (10 + leavePrevYearRemain);
|
||||
if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
}
|
||||
// isLeave = (totalDay - (sumWorkDay + sumWeekend) + sumApproveLeave) <= (10 + leavePrevYearRemain);
|
||||
// if (!isLeave) message = "จำนวนวันลาเกินที่กำหนด";
|
||||
//}
|
||||
|
||||
else
|
||||
{
|
||||
|
|
@ -2350,34 +2357,38 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
// fix issue : SIT ระบบบันทึกการลา>> สิทธิ์การลา(โอนสิทธิ์การลา) #974
|
||||
|
||||
var extendLeave = 0.0;
|
||||
var leaveLimit = leaveType.Limit;
|
||||
var leaveLimit = (double)leaveType.Limit;
|
||||
|
||||
if (leaveType.Code == "LV-005")
|
||||
{
|
||||
var beginningLeave = await _leaveBeginningRepository.GetByYearAndTypeIdAsync(thisYear, leaveType.Id);
|
||||
var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(thisYear, leaveType.Id, userId);
|
||||
leaveLimit = leaveData == null ? 0.0 : leaveData.LeaveDays;
|
||||
extendLeave = leaveLimit - 10;
|
||||
|
||||
var apprvPrevData = approvePrevYear.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id);
|
||||
var apprvPrev = apprvPrevData == null ? 0 : apprvPrevData.SumLeaveDay;
|
||||
//var beginningLeave = await _leaveBeginningRepository.GetByYearAndTypeIdAsync(thisYear, leaveType.Id);
|
||||
|
||||
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
|
||||
var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
|
||||
//var apprvPrevData = approvePrevYear.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id);
|
||||
//var apprvPrev = apprvPrevData == null ? 0 : apprvPrevData.SumLeaveDay;
|
||||
|
||||
if (govAge >= 180)
|
||||
{
|
||||
if (govAge >= 3650)
|
||||
{
|
||||
// ถ้าอายุราชการเกิน 10 ปี ได้บวกเพิ่มอีก 10 วัน
|
||||
extendLeave = beginningLeave != null ? beginningLeave.LeaveDays : 30 - apprvPrev; // หายอดวันลาที่เหลือของปีก่อน
|
||||
if (extendLeave >= 20) extendLeave = 20;
|
||||
}
|
||||
else
|
||||
{
|
||||
extendLeave = beginningLeave != null ? beginningLeave.LeaveDays : 20 - apprvPrev; // หายอดวันลาที่เหลือของปีก่อน
|
||||
if (extendLeave >= 10) extendLeave = 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
leaveLimit = 0;
|
||||
//var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
|
||||
//var govAge = (profile?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date);
|
||||
|
||||
//if (govAge >= 180)
|
||||
//{
|
||||
// if (govAge >= 3650)
|
||||
// {
|
||||
// // ถ้าอายุราชการเกิน 10 ปี ได้บวกเพิ่มอีก 10 วัน
|
||||
// extendLeave = beginningLeave != null ? beginningLeave.LeaveDays : 30 - apprvPrev; // หายอดวันลาที่เหลือของปีก่อน
|
||||
// if (extendLeave >= 20) extendLeave = 20;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// extendLeave = beginningLeave != null ? beginningLeave.LeaveDays : 20 - apprvPrev; // หายอดวันลาที่เหลือของปีก่อน
|
||||
// if (extendLeave >= 10) extendLeave = 10;
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
// leaveLimit = 0;
|
||||
}
|
||||
|
||||
var data = new
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
public double RestDayTotalOld { get; set; }
|
||||
|
||||
public double RestDayTotalCurrent { get; set; }
|
||||
|
||||
public DateTime BirthDate { get; set; }
|
||||
|
||||
public DateTime? DateAppoint { get; set; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue