diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs index 4fdd66ca..0fe5df08 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs @@ -1,6 +1,7 @@ using Amazon.S3.Model; using BMA.EHR.Application.Common.Interfaces; using BMA.EHR.Application.Messaging; +using BMA.EHR.Application.Responses.Profiles; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Leave.Commons; using BMA.EHR.Domain.Models.Leave.Requests; @@ -97,7 +98,6 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests await _dbContext.SaveChangesAsync(); } - public async Task GetByYearAndTypeIdForUserAsync(int year, Guid typeId, Guid userId) { var pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken); @@ -165,6 +165,67 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return data; } + public async Task GetByYearAndTypeIdForUser(int year, Guid typeId, GetProfileByKeycloakIdDto? pf) + { + var govAge = (pf?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); + + var leaveType = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == typeId); + + var data = await _dbContext.Set() + .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() + .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().Add(data); + await _dbContext.SaveChangesAsync(); + } + + return data; + } + public async Task GetByYearAndTypeIdForUser2Async(int year, Guid typeId, Guid userId) { var pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken); diff --git a/BMA.EHR.Application/Repositories/UserProfileRepository.cs b/BMA.EHR.Application/Repositories/UserProfileRepository.cs index 990ec400..01ad610e 100644 --- a/BMA.EHR.Application/Repositories/UserProfileRepository.cs +++ b/BMA.EHR.Application/Repositories/UserProfileRepository.cs @@ -9,7 +9,6 @@ using BMA.EHR.Domain.Models.Organizations; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; -using Nest; using Newtonsoft.Json; namespace BMA.EHR.Application.Repositories diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 27f6bf4a..bc68ff74 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -149,24 +149,8 @@ namespace BMA.EHR.Leave.Service.Controllers await _leaveRequestRepository.GetLastLeaveRequestByTypeForUserAsync(data.KeycloakUserId, data.Type.Id, data.LeaveStartDate.Date); - //var rootOc = _userProfileRepository.GetRootOcId(profile.OcId ?? Guid.Empty, AccessToken); - //var approver = string.Empty; - //if (rootOc != null) - //{ - // var list = await _commandRepository.GetOrgApproverAsync(rootOc ?? Guid.Empty); - // if (list.Count > 0) - // approver = list.First().Name; - //} - - //var sumLeave = await _leaveRequestRepository.GetSumApproveLeaveByTypeForUserAsync(data.KeycloakUserId, data.Type.Id, data.LeaveStartDate.Year); - //GetSumApproveLeaveByRangeForUser - var startFiscalYear = new DateTime(data.LeaveStartDate.Year - 1, 10, 1); var endFiscalYear = data.LeaveStartDate.Date.AddDays(-1); // นับจากวันที่ยื่นลา - - var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(data.LeaveStartDate.Year, data.Type.Id, data.KeycloakUserId); - //var sumLeave = leaveData == null ? 0 : leaveData.LeaveDaysUsed; - var sumLeave = await _leaveRequestRepository.GetSumApproveLeaveTotalByTypeAndRangeForUser(data.KeycloakUserId, data.Type.Id, startFiscalYear, endFiscalYear); return new @@ -211,17 +195,6 @@ namespace BMA.EHR.Leave.Service.Controllers var fullName = $"{profile!.Prefix}{profile!.FirstName} {profile!.LastName}"; - //var rootOc = _userProfileRepository.GetRootOcId(profile.OcId ?? Guid.Empty, AccessToken); - //var approver = string.Empty; - //if (rootOc != null) - //{ - // var list = await _commandRepository.GetOrgApproverAsync(rootOc ?? Guid.Empty); - // if (list.Count > 0) - // approver = list.First().Name; - //} - - - return new { template = "leave10", @@ -250,47 +223,22 @@ 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); - //var approver = string.Empty; - //if (rootOc != null) - //{ - // var list = await _commandRepository.GetOrgApproverAsync(rootOc ?? Guid.Empty); - // if (list.Count > 0) - // approver = list.First().Name; - //} - - //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 startFiscalYear = new DateTime(data.LeaveStartDate.Year - 1, 10, 1); var endFiscalYear = data.LeaveStartDate.Date.AddDays(-1); // นับจากวันที่ยื่นลา var thisYear = data.LeaveStartDate.Year; var toDay = data.LeaveStartDate.Date; - if(toDay >= new DateTime(toDay.Year, 10, 1) && toDay <= new DateTime(toDay.Year, 12, 31)) - thisYear = thisYear + 1; + if (toDay >= new DateTime(toDay.Year, 10, 1) && toDay <= new DateTime(toDay.Year, 12, 31)) + thisYear = thisYear + 1; var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(thisYear, data.Type.Id, data.KeycloakUserId); - //var sumLeave = leaveData == null ? 0 : leaveData.LeaveDaysUsed; var sumLeave = await _leaveRequestRepository.GetSumApproveLeaveTotalByTypeAndRangeForUser(data.KeycloakUserId, data.Type.Id, startFiscalYear, endFiscalYear); @@ -298,7 +246,6 @@ namespace BMA.EHR.Leave.Service.Controllers var leaveLimit = leaveData == null ? 0.0 : leaveData.LeaveDays; var extendLeave = leaveLimit - 10; - return new { template = "leave11", @@ -318,9 +265,6 @@ namespace BMA.EHR.Leave.Service.Controllers restDayOldTotal = extendLeave.ToString().ToThaiNumber(), restDayCurrentTotal = (10).ToString().ToThaiNumber(), - //restDayOldTotal = data.RestDayOldTotal.ToString().ToThaiNumber(), - //restDayCurrentTotal = data.RestDayCurrentTotal.ToString().ToThaiNumber(), - leaveDateStart = data.LeaveStartDate.Date.ToThaiShortDate().ToThaiNumber(), leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), @@ -2193,7 +2137,7 @@ namespace BMA.EHR.Leave.Service.Controllers range.Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center; range.Style.Font.Bold = true; } - + worksheet.Cells[2, 1].Value = organizationName; worksheet.Cells[3, 1].Value = dateTimeStamp; diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index 96c4981f..5c98d26c 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -848,7 +848,6 @@ namespace BMA.EHR.Leave.Service.Controllers } var leaveLimit = 0.0; - var remainPrev = 0.0; var orgName = ""; @@ -869,59 +868,16 @@ namespace BMA.EHR.Leave.Service.Controllers if (leaveType.Code.Trim().ToUpper() == "LV-005") { leaveLimit = leaveData == null ? 0 : leaveData.LeaveDays; - - - //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 = 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; - //var rootOc = _userProfileRepository.GetRootOcId(profile.OcId ?? Guid.Empty, AccessToken); - //var approver = profile.Commander ?? ""; - //var userOc = profile.Root ?? ""; - //if (rootOc != null) - //{ - // var list = await _commandRepository.GetOrgApproverAsync(rootOc ?? Guid.Empty); - // if (list.Count > 0) - // approver = list.First().Name; - //} - var leaveLast = await _leaveRequestRepository.GetLeaveLastByTypeForUserAsync(userId, req.Type); var result = new GetUserLeaveProfileResultDto @@ -1349,7 +1305,7 @@ namespace BMA.EHR.Leave.Service.Controllers // return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); // } - + var rawData = await _leaveRequestRepository.GetLeaveRequestByUserIdAsync(userId, req.Year, req.Type, req.Status); @@ -1477,8 +1433,6 @@ namespace BMA.EHR.Leave.Service.Controllers [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> GetLeaveRequestByIdAsync(Guid id) { - //var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); - var rawData = await _leaveRequestRepository.GetByIdAsync(id); var thisYear = DateTime.Now.Year; @@ -2297,8 +2251,8 @@ namespace BMA.EHR.Leave.Service.Controllers } var thisYear = DateTime.Now.Year; var toDay = DateTime.Now.Date; - if(toDay >= new DateTime(toDay.Year, 10, 1) && toDay <= new DateTime(toDay.Year, 12, 31)) - thisYear = thisYear + 1; + if (toDay >= new DateTime(toDay.Year, 10, 1) && toDay <= new DateTime(toDay.Year, 12, 31)) + thisYear = thisYear + 1; //var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(rawData.KeycloakUserId, AccessToken); @@ -2355,70 +2309,10 @@ namespace BMA.EHR.Leave.Service.Controllers if (rawData.Type.Code == "LV-005") { - //var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(thisYear, leaveType.Id, userId); leaveLimit = leaveData == null ? 0.0 : leaveData.LeaveDays; extendLeave = leaveLimit - 10; - - //var beginningLeave = await _leaveBeginningRepository.GetByYearAndTypeIdAsync(thisYear, leaveType.Id); - - //var apprvPrevData = approvePrevYear.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); - //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); - - //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; } - // #1136 - //var extendLeave = 0.0; - //var leaveLimit = rawData.Type.Limit; - - //var approvePrevYear = await _leaveRequestRepository.GetSumApproveLeaveAsync(thisYear - 1); - - //if (rawData.Type.Code == "LV-005") - //{ - // var beginningLeave = await _leaveBeginningRepository.GetByYearAndTypeIdAsync(thisYear, rawData.Type.Id); - - // 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 = 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 result = new GetLeaveRequestForAdminByIdDto { Id = rawData.Id, @@ -2594,22 +2488,21 @@ namespace BMA.EHR.Leave.Service.Controllers thisYear = thisYear + 1; var sendList = await _leaveRequestRepository.GetSumSendLeaveAsync(thisYear); - //var approveList = await _leaveRequestRepository.GetSumApproveLeaveAsync(thisYear); var rejectList = await _leaveRequestRepository.GetSumRejectLeaveAsync(thisYear); var deleteList = await _leaveRequestRepository.GetSumDeleteLeaveAsync(thisYear); - //var approvePrevYear = await _leaveRequestRepository.GetSumApproveLeaveAsync(thisYear - 1); - var result = new List(); + var pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken); + if (pf == null) + { + throw new Exception(GlobalMessages.DataNotFound); + } foreach (var leaveType in leaveTypes) { var sendData = sendList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); var send = sendData == null ? 0 : sendData.SumLeaveDay; - //var approveData = approveList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); - //var approve = approveData == null ? 0 : approveData.SumLeaveDay; - - var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(thisYear, leaveType.Id, userId); + var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUser(thisYear, leaveType.Id, pf); var approve = leaveData == null ? 0 : leaveData.LeaveDaysUsed; var rejectData = rejectList.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); @@ -2625,34 +2518,8 @@ namespace BMA.EHR.Leave.Service.Controllers if (leaveType.Code == "LV-005") { - //var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUserAsync(thisYear, leaveType.Id, userId); leaveLimit = leaveData == null ? 0.0 : leaveData.LeaveDays; extendLeave = leaveLimit - 10; - - //var beginningLeave = await _leaveBeginningRepository.GetByYearAndTypeIdAsync(thisYear, leaveType.Id); - - //var apprvPrevData = approvePrevYear.FirstOrDefault(x => x.KeycloakUserId == userId && x.LeaveTypeId == leaveType.Id); - //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); - - //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