diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs index 8e0429c7..575a85bb 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveBeginingRepository.cs @@ -293,7 +293,12 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests FirstName = pf.FirstName, LastName = pf.LastName, LeaveDaysUsed = 0, - LeaveDays = leaveType?.Code == "LV-005" ? limit : 0 + LeaveDays = leaveType?.Code == "LV-005" ? limit : 0, + RootDnaId = pf.RootDnaId, + Child1DnaId = pf.Child1DnaId, + Child2DnaId = pf.Child2DnaId, + Child3DnaId = pf.Child3DnaId, + Child4DnaId = pf.Child4DnaId }; _dbContext.Set().Add(data); @@ -305,6 +310,8 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests public async Task> GetAllByYearAndTypeAsync(int year, Guid typeId, List userIdList) { + + var updateList = new List(); var result = new List(); @@ -321,6 +328,12 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests // continue; // Goto Next Id //} + var profile = await _userProfileRepository.GetProfileByProfileIdAsync(pf.Id, AccessToken); + if (profile == null) + { + return null; + } + var govAge = (pf?.DateStart?.Date ?? DateTime.Now.Date).DiffDay(DateTime.Now.Date); var leaveType = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == typeId); @@ -368,7 +381,12 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests FirstName = pf.FirstName, LastName = pf.LastName, LeaveDaysUsed = 0, - LeaveDays = leaveType?.Code == "LV-005" ? limit : 0 + LeaveDays = leaveType?.Code == "LV-005" ? limit : 0, + RootDnaId = profile.RootDnaId, + Child1DnaId = profile.Child1DnaId, + Child2DnaId = profile.Child2DnaId, + Child3DnaId = profile.Child3DnaId, + Child4DnaId = profile.Child4DnaId }; updateList.Add(data); diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index a4398db2..6223d786 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -273,6 +273,46 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return data; } + public async Task> GetLeaveRequestByYearForAdminAsync(int year, string role, string? nodeId, int? node) + { + var rawData = await _dbContext.Set().AsQueryable().AsNoTracking() + .Include(x => x.Type) + .Where(x => x.LeaveStartDate.Year == year) + .Where(x => x.LeaveStatus != "REJECT" && x.LeaveStatus != "DELETE") + .ToListAsync(); + if (role == "OWNER") + { + node = null; + } + if (role == "OWNER" || role == "CHILD") + { + rawData = rawData + .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))).ToList(); + } + else if (role == "ROOT") + { + rawData = rawData + .Where(x => x.RootDnaId == Guid.Parse(nodeId!)).ToList(); + } + else if (role == "PARENT") + { + rawData = rawData + .Where(x => x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId != null).ToList(); + } + else if (role == "NORMAL") + { + rawData = rawData + .Where(x => + node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId == null : + node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) && x.Child2DnaId == null : + node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) && x.Child3DnaId == null : + node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) && x.Child4DnaId == null : + node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : true).ToList(); + } + + return rawData; + } + public async Task> GetLeaveRequestByUserIdAsync(Guid keycloakUserId, int year, Guid type, string status) { var rawData = _dbContext.Set().AsQueryable().AsNoTracking() @@ -1063,9 +1103,17 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests throw new Exception(GlobalMessages.DataNotFound); } - if (rawData.ApproveStep != "st3") + // ถ้าไม่มี commander ข้ามไปเช็ค approver ได้เลย + var commanders = rawData.Approvers + .Where(x => x.ApproveType!.ToUpper() == "COMMANDER") + .OrderBy(x => x.Seq) + .ToList(); + if(commanders.Count > 0 || commanders != null) { - throw new Exception("คำขอนี้ยังไม่ได้อยู่ในขั้นตอนที่สามารถอนุมัติได้ ไม่สามารถทำรายการได้"); + if (rawData.ApproveStep != "st3") + { + throw new Exception("คำขอนี้ยังไม่ได้อยู่ในขั้นตอนที่สามารถอนุมัติได้ ไม่สามารถทำรายการได้"); + } } // check commander approve diff --git a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs index 83bd79d2..d61d82d2 100644 --- a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs @@ -311,6 +311,35 @@ namespace BMA.EHR.Leave.Service.Controllers } } + [HttpGet("update-dna")] + public async Task> UpdateDnaAsync() + { + try + { + var leaveBeginnings = await _context.LeaveBeginnings.ToListAsync(); + foreach (var item in leaveBeginnings) + { + var profile = await _userProfileRepository.GetProfileByProfileIdAsync(item.ProfileId, AccessToken); + if (profile != null) + { + item.RootDnaId = profile.RootDnaId; + item.Child1DnaId = profile.Child1DnaId; + item.Child2DnaId = profile.Child2DnaId; + item.Child3DnaId = profile.Child3DnaId; + item.Child4DnaId = profile.Child4DnaId; + _context.LeaveBeginnings.Update(item); + } + + } + await _context.SaveChangesAsync(); + return Success("อัพเดทข้อมูลสำเร็จ"); + } + catch (Exception ex) + { + return Error(ex); + } + } + // /// แก้ไขรายการ @@ -358,6 +387,12 @@ namespace BMA.EHR.Leave.Service.Controllers leaveBeginning.LastUpdateFullName = FullName ?? ""; leaveBeginning.LastUpdatedAt = DateTime.Now; + leaveBeginning.RootDnaId = profile.RootDnaId; + leaveBeginning.Child1DnaId = profile.Child1DnaId; + leaveBeginning.Child2DnaId = profile.Child2DnaId; + leaveBeginning.Child3DnaId = profile.Child3DnaId; + leaveBeginning.Child4DnaId = profile.Child4DnaId; + await _leaveBeginningRepository.UpdateAsync(leaveBeginning); return Success("แก้ไขข้อมูลสำเร็จ"); } diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 3b71a529..9df655d5 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -238,11 +238,13 @@ namespace BMA.EHR.Leave.Service.Controllers 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 = await _leaveRequestRepository.GetSumApproveLeaveTotalByTypeAndRangeForUser(data.KeycloakUserId, data.Type.Id, startFiscalYear, endFiscalYear); + var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUser2Async(thisYear, data.Type.Id, data.KeycloakUserId); + //var leaveData = await _leaveBeginningRepository.GetByYearAndTypeIdForUser2Async(thisYear, rawData.Type.Id, rawData.KeycloakUserId); + //var leaveSummary = leaveData == null ? 0.0 : leaveData.LeaveDaysUsed; + //var sumLeave = await _leaveRequestRepository.GetSumApproveLeaveTotalByTypeAndRangeForUser(data.KeycloakUserId, data.Type.Id, startFiscalYear, endFiscalYear); + var sumLeave = leaveData == null ? 0.0 : leaveData.LeaveDaysUsed; var leaveLimit = leaveData == null ? 0.0 : leaveData.LeaveDays; var extendLeave = leaveLimit - 10; @@ -938,7 +940,7 @@ namespace BMA.EHR.Leave.Service.Controllers var count = 1; var employees = new List(); // กรองตามที่ fe ส่งมา - if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") && req.node > profileAdmin?.Node) + if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") /*&& req.node > profileAdmin?.Node*/) { profile = profile .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) @@ -1609,7 +1611,7 @@ namespace BMA.EHR.Leave.Service.Controllers var workTotal = 0; var seminarTotal = 0; // กรองตามที่ fe ส่งมา - if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") && req.node > profileAdmin?.Node) + if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") /*&& req.node > profileAdmin?.Node*/) { profile = profile .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) @@ -1875,7 +1877,7 @@ namespace BMA.EHR.Leave.Service.Controllers profile = await _userProfileRepository.GetEmployeeByAdminRole(AccessToken, profileAdmin?.Node, nodeId, role, req.revisionId, req.node, req.nodeId); } // Child กรองตามที่ fe ส่งมาอีกชั้น - if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") && req.node > profileAdmin?.Node) + if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") /*&& req.node > profileAdmin?.Node*/) { profile = profile .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index a575de6e..da9ceb43 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -1208,7 +1208,7 @@ namespace BMA.EHR.Leave.Service.Controllers /// - /// LV2_004 - รายการลา Calendar (USER/ADMIN) + /// LV2_004 - รายการลา Calendar (USER) /// /// /// @@ -1222,14 +1222,9 @@ namespace BMA.EHR.Leave.Service.Controllers public async Task> GetLeaveRequestCalendarAsync( [FromBody] GetLeaveRequestCalendarDto req) { - var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); - - //var thisYear = DateTime.Now.Year; var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year, userId); - // var profileList = await _userProfileRepository.GetProfileWithKeycloak(AccessToken); - var resultData = (from d in data //join p in profileList on d.KeycloakUserId equals p.Keycloak select new GetLeaveRequestCalendarResultDto @@ -1248,38 +1243,72 @@ namespace BMA.EHR.Leave.Service.Controllers .ToList(); return Success(resultData); + } - //var personList = new List(); + /// + /// LV2_004 - รายการลา Calendar (ADMIN) + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("admin/calendar")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetLeaveRequestCalendarAdminAsync( + [FromBody] GetLeaveRequestCalendarDto req) + { + var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_LEAVE_LIST"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } - //var result = new List(); + string role = jsonData["result"]?.ToString(); + var nodeId = string.Empty; + var profileAdmin = new GetUserOCAllDto(); + profileAdmin = await _userProfileRepository.GetUserOCAll(Guid.Parse(UserId!), AccessToken); + if (role == "NORMAL" || role == "CHILD") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child4DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 1 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } + else if (role == "ROOT" || role == "PARENT") + { + nodeId = profileAdmin?.RootDnaId; + } + var data = await _leaveRequestRepository.GetLeaveRequestByYearForAdminAsync(req.Year, role, nodeId, profileAdmin.Node); - //foreach (var item in data) - //{ - // var profile = personList.FirstOrDefault(x => x.Keycloak == item.KeycloakUserId); - // if (profile == null) - // { - // profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(item.KeycloakUserId, AccessToken); - // personList.Add(profile); - // } - // //var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(item.KeycloakUserId, AccessToken); + var resultData = (from d in data + //join p in profileList on d.KeycloakUserId equals p.Keycloak + select new GetLeaveRequestCalendarResultDto + { + Id = d.Id, + LeaveTypeId = d.Type.Id, + LeaveTypeName = d.Type.Name, + DateSendLeave = d.CreatedAt.Date, + Status = d.LeaveStatus, + FullName = $"{d.Prefix}{d.FirstName} {d.LastName}", + LeaveEndDate = d.LeaveEndDate, + LeaveStartDate = d.LeaveStartDate, + KeycloakId = d.KeycloakUserId - // var resData = new GetLeaveRequestCalendarResultDto - // { - // Id = item.Id, - // LeaveTypeName = item.Type.Name, - // LeaveTypeId = item.Type.Id, - // DateSendLeave = item.CreatedAt.Date, - // Status = item.LeaveStatus, - // FullName = $"{profile.Prefix}{profile.FirstName} {profile.LastName}", - // LeaveStartDate = item.LeaveStartDate, - // LeaveEndDate = item.LeaveEndDate, - // KeycloakId = item.KeycloakUserId - // }; + }) + .ToList(); - // result.Add(resData); - //} - - //return Success(result); + return Success(resultData); } ///