using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Application.Responses.Profiles; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Retirement; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Retirement.Service.Requests; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Swashbuckle.AspNetCore.Annotations; using System.Net.Http.Headers; using System.Security.Claims; namespace BMA.EHR.Retirement.Service.Controllers { [Route("api/v{version:apiVersion}/retirement/resign-employee")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("ระบบลาออกลูกจ้าง")] public class RetirementResignEmployeeController : BaseController { private readonly RetirementEmployeeRepository _repository; private readonly NotificationRepository _repositoryNoti; private readonly ApplicationDBContext _context; private readonly MinIOService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; private readonly IConfiguration _configuration; private readonly UserProfileRepository _userProfileRepository; private readonly PermissionRepository _permission; public RetirementResignEmployeeController(RetirementEmployeeRepository repository, NotificationRepository repositoryNoti, ApplicationDBContext context, MinIOService documentService, IHttpContextAccessor httpContextAccessor, IConfiguration configuration, UserProfileRepository userProfileRepository, PermissionRepository permission) { _repository = repository; _repositoryNoti = repositoryNoti; _context = context; _documentService = documentService; _httpContextAccessor = httpContextAccessor; _configuration = configuration; _userProfileRepository = userProfileRepository; _permission = permission; } #region " Properties " private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; private string? token => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"]; private string? AccessToken => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"]; #endregion /// /// list รายการลาออกของ User /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("user")] public async Task> GetListByProfile() { var apiUrl = $"{_configuration["API"]}/org/profile-employee/keycloak/position"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) return Error("ไม่พบหน่วยงานของผู้ใช้งานคนนี้", 404); var retirementResignEmployees = await _context.RetirementResignEmployees.AsQueryable() .Where(x => x.profileId == org.result.profileId) .OrderByDescending(x => x.CreatedAt) .Select(p => new { p.Id, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.ReasonResign, p.Remark, p.ApproveReason, p.RejectReason, p.CancelReason, status = p.RetirementResignEmployeeCancels.FirstOrDefault() == null ? p.Status : p.RetirementResignEmployeeCancels.FirstOrDefault().Status, statusCancel = p.RetirementResignEmployeeCancels.FirstOrDefault() == null ? null : p.RetirementResignEmployeeCancels.FirstOrDefault().Status, p.IsActive, }) .ToListAsync(); return Success(retirementResignEmployees); } } /// /// list รายการลาออกของ User /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("user-cancel")] public async Task> GetListByProfileCancel() { var apiUrl = $"{_configuration["API"]}/org/profile-employee/keycloak/position"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) return Error("ไม่พบหน่วยงานของผู้ใช้งานคนนี้", 404); var retirementResignEmployees = await _context.RetirementResignEmployeeCancels.AsQueryable() .Where(x => x.profileId == org.result.profileId) .OrderByDescending(x => x.CreatedAt) .Select(p => new { p.Id, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.Remark, p.ApproveReason, p.RejectReason, p.CancelReason, p.Status, p.IsActive, }) .ToListAsync(); return Success(retirementResignEmployees); } } /// /// list รายการลาออกของ Admin /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet()] public async Task> GetListByAdmin(string type) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_RESIGN_EMP"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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 == "BROTHER") { nodeId = profileAdmin?.Node == 4 ? profileAdmin?.Child3DnaId : profileAdmin?.Node == 3 ? profileAdmin?.Child2DnaId : profileAdmin?.Node == 2 ? profileAdmin?.Child1DnaId : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 ? profileAdmin?.RootDnaId : ""; } else if (role == "ROOT" /*|| role == "PARENT"*/) { nodeId = profileAdmin?.RootDnaId; } var node = profileAdmin?.Node; var retirementResignEmployees = await _context.RetirementResignEmployees.AsQueryable() .Where(x => type.Trim().ToUpper() == "APPROVE" ? (x.Status == "APPROVE" || x.Status == "REJECT") : x.Status == type.Trim().ToUpper()) .OrderByDescending(x => x.CreatedAt) .Select(p => new { p.Id, p.citizenId, p.profileId, p.prefix, p.firstName, p.lastName, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.ReasonResign, p.Remark, p.Status, salary = p.AmountOld, p.PositionTypeOld, p.PositionLevelOld, p.PositionNumberOld, p.OrganizationPositionOld, p.RemarkHorizontal, statusCancel = p.RetirementResignEmployeeCancels.FirstOrDefault().Status ?? null, p.ApproveReason, p.RejectReason, p.CancelReason, p.IsActive, p.CreatedAt, p.ApproveStep, p.Group, p.rootDnaOldId, p.child1DnaOldId, p.child2DnaOldId, p.child3DnaOldId, p.child4DnaOldId, }) .ToListAsync(); if (role == "OWNER") { node = null; } if (role == "OWNER" || role == "CHILD") { retirementResignEmployees = retirementResignEmployees .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } else if (role == "BROTHER") { retirementResignEmployees = retirementResignEmployees .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); } else if (role == "ROOT") { retirementResignEmployees = retirementResignEmployees .Where(x => x.rootDnaOldId == nodeId).ToList(); } // else if (role == "PARENT") // { // retirementResignEmployees = retirementResignEmployees // .Where(x => x.rootDnaOldId == nodeId && x.child1DnaOldId != null).ToList(); // } else if (role == "NORMAL") { retirementResignEmployees = retirementResignEmployees.Where(x => node == 0 ? x.rootDnaOldId == nodeId && x.child1DnaOldId == null : node == 1 ? x.child1DnaOldId == nodeId && x.child2DnaOldId == null : node == 2 ? x.child2DnaOldId == nodeId && x.child3DnaOldId == null : node == 3 ? x.child3DnaOldId == nodeId && x.child4DnaOldId == null : node == 4 ? x.child4DnaOldId == nodeId : true ).ToList(); } return Success(retirementResignEmployees); } /// /// list รายการลาออกของ Admin /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("cancel")] public async Task> GetListByAdminCancel(string type) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_RESIGN_EMP"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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 == "BROTHER") { nodeId = profileAdmin?.Node == 4 ? profileAdmin?.Child3DnaId : profileAdmin?.Node == 3 ? profileAdmin?.Child2DnaId : profileAdmin?.Node == 2 ? profileAdmin?.Child1DnaId : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 ? profileAdmin?.RootDnaId : ""; } else if (role == "ROOT" /*|| role == "PARENT"*/) { nodeId = profileAdmin?.RootDnaId; } var node = profileAdmin?.Node; var retirementResignEmployees = await _context.RetirementResignEmployeeCancels.AsQueryable() .Where(x => type.Trim().ToUpper() == "APPROVE" ? (x.Status == "APPROVE" || x.Status == "REJECT") : x.Status == type.Trim().ToUpper()) .OrderByDescending(x => x.CreatedAt) .Select(p => new { p.Id, p.citizenId, p.profileId, p.prefix, p.firstName, p.lastName, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.Status, salary = p.AmountOld, p.PositionTypeOld, p.PositionLevelOld, p.PositionNumberOld, p.OrganizationPositionOld, p.RemarkHorizontal, statusMain = p.RetirementResignEmployee.Status, p.ApproveReason, p.RejectReason, p.CancelReason, p.IsActive, p.CreatedAt, p.ApproveStep, p.Group, p.rootDnaOldId, p.child1DnaOldId, p.child2DnaOldId, p.child3DnaOldId, p.child4DnaOldId, }) .ToListAsync(); if (role == "OWNER") { node = null; } if (role == "OWNER" || role == "CHILD") { retirementResignEmployees = retirementResignEmployees .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } else if (role == "BROTHER") { retirementResignEmployees = retirementResignEmployees .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); } else if (role == "ROOT") { retirementResignEmployees = retirementResignEmployees .Where(x => x.rootDnaOldId == nodeId).ToList(); } // else if (role == "PARENT") // { // retirementResignEmployees = retirementResignEmployees // .Where(x => x.rootDnaOldId == nodeId && x.child1DnaOldId != null).ToList(); // } else if (role == "NORMAL") { retirementResignEmployees = retirementResignEmployees.Where(x => node == 0 ? x.rootDnaOldId == nodeId && x.child1DnaOldId == null : node == 1 ? x.child1DnaOldId == nodeId && x.child2DnaOldId == null : node == 2 ? x.child2DnaOldId == nodeId && x.child3DnaOldId == null : node == 3 ? x.child3DnaOldId == nodeId && x.child4DnaOldId == null : node == 4 ? x.child4DnaOldId == nodeId : true ).ToList(); } return Success(retirementResignEmployees); } /// /// get รายละเอียดลาออก /// /// Id ลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{id:length(36)}")] public async Task> GetDetailByUser(Guid id) { var dataMain = await _context.RetirementResignEmployees.AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.IsCancel, }) .FirstOrDefaultAsync(); if (dataMain == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); // if (dataMain.IsCancel != true) // { var data = await _context.RetirementResignEmployees.AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.Id, p.prefix, p.firstName, p.lastName, p.profileId, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.ReasonResign, p.Remark, p.Status, salary = p.AmountOld, p.ApproveReason, p.RejectReason, p.IsActive, p.CreatedAt, p.PositionTypeOld, p.PositionLevelOld, p.PositionNumberOld, p.OrganizationPositionOld, p.OligarchReject, p.OligarchApproveReason, p.OligarchRejectReason, p.OligarchRejectDate, p.CommanderReject, p.CommanderApproveReason, p.CommanderRejectReason, p.CommanderRejectDate, p.OfficerReject, p.OfficerApproveReason, p.OfficerRejectReason, p.OfficerRejectDate, p.RemarkHorizontal, p.rootOld, p.rootOldId, p.rootShortNameOld, p.child1Old, p.child1OldId, p.child1ShortNameOld, p.child2Old, p.child2OldId, p.child2ShortNameOld, p.child3Old, p.child3OldId, p.child3ShortNameOld, p.child4Old, p.child4OldId, p.child4ShortNameOld, p.PositionOld, p.posMasterNoOld, p.posTypeOldId, p.posTypeNameOld, p.posLevelOldId, p.posLevelNameOld, p.IsNoDebt, p.IsNoBurden, p.IsDiscipline, p.CancelReason, p.ApproveStep, p.Group, Approvers = p.Approvers.Where(x => x.ApproveType.ToUpper() == "APPROVER"), Commanders = p.Approvers.Where(x => x.ApproveType.ToUpper() == "COMMANDER"), KeycloakUserId = p.CreatedUserId, RetirementResignEmployeeCancels = p.RetirementResignEmployeeCancels.FirstOrDefault(), RetirementResignEmployeeDocs = p.RetirementResignEmployeeDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); var retirementResignEmployeeDocs = new List(); foreach (var doc in data.RetirementResignEmployeeDocs) { var _doc = new { FileName = doc.FileName, PathName = await _documentService.ImagesPath(doc.Id), doc.Id, }; retirementResignEmployeeDocs.Add(_doc); } var _data = new { data.Id, data.profileId, data.prefix, data.firstName, data.lastName, data.Location, data.SendDate, data.ActiveDate, data.Reason, data.ReasonResign, data.Remark, data.Status, data.salary, data.PositionTypeOld, data.PositionLevelOld, data.PositionNumberOld, data.OrganizationPositionOld, data.ApproveReason, data.RejectReason, data.IsActive, data.CreatedAt, data.OligarchReject, data.OligarchApproveReason, data.OligarchRejectReason, data.OligarchRejectDate, data.CommanderReject, data.CommanderApproveReason, data.CommanderRejectReason, data.CommanderRejectDate, data.OfficerReject, data.OfficerApproveReason, data.OfficerRejectReason, data.OfficerRejectDate, data.RemarkHorizontal, data.rootOld, data.rootOldId, data.rootShortNameOld, data.child1Old, data.child1OldId, data.child1ShortNameOld, data.child2Old, data.child2OldId, data.child2ShortNameOld, data.child3Old, data.child3OldId, data.child3ShortNameOld, data.child4Old, data.child4OldId, data.child4ShortNameOld, data.PositionOld, data.posMasterNoOld, data.posTypeOldId, data.posTypeNameOld, data.posLevelOldId, data.posLevelNameOld, data.IsNoDebt, data.IsNoBurden, data.IsDiscipline, data.CancelReason, data.KeycloakUserId, data.Approvers, data.Commanders, data.ApproveStep, data.Group, idCancel = data.RetirementResignEmployeeCancels?.Id ?? Guid.Empty, statusCancel = data.RetirementResignEmployeeCancels?.Status ?? null, statusMain = data.Status == "CANCEL" ? "DONECANCEL" : data.Status, Docs = retirementResignEmployeeDocs, }; return Success(_data); } /// /// get รายละเอียดลาออก /// /// Id ลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("user/{id:length(36)}")] public async Task> GetDetailByUsers(Guid id) { var dataMain = await _context.RetirementResignEmployees.AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.IsCancel, }) .FirstOrDefaultAsync(); if (dataMain == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); if (dataMain.IsCancel != true) { var createdUserId = await _context.RetirementResignEmployees.AsQueryable() .Where(x => x.Id == id) .Where(x => x.CreatedUserId == UserId) .FirstOrDefaultAsync(); var data = await _context.RetirementResignEmployees.AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.Id, p.prefix, p.firstName, p.lastName, p.profileId, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.ReasonResign, p.Remark, p.Status, salary = p.AmountOld, p.ApproveReason, p.RejectReason, p.IsActive, p.CreatedAt, p.PositionTypeOld, p.PositionLevelOld, p.PositionNumberOld, p.OrganizationPositionOld, p.OligarchReject, p.OligarchApproveReason, p.OligarchRejectReason, p.OligarchRejectDate, p.CommanderReject, p.CommanderApproveReason, p.CommanderRejectReason, p.CommanderRejectDate, p.OfficerReject, p.OfficerApproveReason, p.OfficerRejectReason, p.OfficerRejectDate, p.RemarkHorizontal, p.rootOld, p.rootOldId, p.rootShortNameOld, p.child1Old, p.child1OldId, p.child1ShortNameOld, p.child2Old, p.child2OldId, p.child2ShortNameOld, p.child3Old, p.child3OldId, p.child3ShortNameOld, p.child4Old, p.child4OldId, p.child4ShortNameOld, p.PositionOld, p.posMasterNoOld, p.posTypeOldId, p.posTypeNameOld, p.posLevelOldId, p.posLevelNameOld, p.IsNoDebt, p.IsNoBurden, p.IsDiscipline, p.CancelReason, p.ApproveStep, p.Group, Approvers = p.Approvers.Where(x => x.ApproveType.ToUpper() == "APPROVER"), Commanders = p.Approvers.Where(x => x.ApproveType.ToUpper() == "COMMANDER"), CancelApprovers = new List(), CancelCommanders = new List(), KeycloakUserId = p.CreatedUserId, RetirementResignEmployeeCancels = p.RetirementResignEmployeeCancels.FirstOrDefault(), RetirementResignEmployeeDocs = p.RetirementResignEmployeeDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); var retirementResignEmployeeDocs = new List(); foreach (var doc in data.RetirementResignEmployeeDocs) { var _doc = new { FileName = doc.FileName, PathName = await _documentService.ImagesPath(doc.Id), doc.Id, }; retirementResignEmployeeDocs.Add(_doc); } var _data = new { data.Id, data.profileId, data.prefix, data.firstName, data.lastName, data.Location, data.SendDate, data.ActiveDate, data.Reason, data.ReasonResign, data.Remark, data.Status, data.salary, data.PositionTypeOld, data.PositionLevelOld, data.PositionNumberOld, data.OrganizationPositionOld, data.ApproveReason, data.RejectReason, data.IsActive, data.CreatedAt, data.OligarchReject, data.OligarchApproveReason, data.OligarchRejectReason, data.OligarchRejectDate, data.CommanderReject, data.CommanderApproveReason, data.CommanderRejectReason, data.CommanderRejectDate, data.OfficerReject, data.OfficerApproveReason, data.OfficerRejectReason, data.OfficerRejectDate, data.RemarkHorizontal, data.rootOld, data.rootOldId, data.rootShortNameOld, data.child1Old, data.child1OldId, data.child1ShortNameOld, data.child2Old, data.child2OldId, data.child2ShortNameOld, data.child3Old, data.child3OldId, data.child3ShortNameOld, data.child4Old, data.child4OldId, data.child4ShortNameOld, data.PositionOld, data.posMasterNoOld, data.posTypeOldId, data.posTypeNameOld, data.posLevelOldId, data.posLevelNameOld, data.IsNoDebt, data.IsNoBurden, data.IsDiscipline, data.CancelReason, data.KeycloakUserId, data.Approvers, data.Commanders, data.ApproveStep, data.CancelApprovers, data.CancelCommanders, data.Group, idCancel = data.RetirementResignEmployeeCancels?.Id ?? Guid.Empty, statusCancel = data.RetirementResignEmployeeCancels?.Status ?? null, statusMain = data.Status == "CANCEL" ? "DONECANCEL" : data.Status, Docs = retirementResignEmployeeDocs, }; return Success(_data); } else { var data = await _context.RetirementResignEmployeeCancels.AsQueryable() .Where(x => x.RetirementResignEmployee.Id == id) .Select(p => new { p.Id, p.prefix, p.firstName, p.lastName, p.profileId, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.Remark, p.Status, salary = p.AmountOld, p.ApproveReason, p.RejectReason, p.IsActive, p.CreatedAt, p.PositionTypeOld, p.PositionLevelOld, p.PositionNumberOld, p.OrganizationPositionOld, p.OligarchReject, p.OligarchApproveReason, p.OligarchRejectReason, p.OligarchRejectDate, p.CommanderReject, p.CommanderApproveReason, p.CommanderRejectReason, p.CommanderRejectDate, p.OfficerReject, p.OfficerApproveReason, p.OfficerRejectReason, p.OfficerRejectDate, p.RemarkHorizontal, p.rootOld, p.rootOldId, p.rootShortNameOld, p.child1Old, p.child1OldId, p.child1ShortNameOld, p.child2Old, p.child2OldId, p.child2ShortNameOld, p.child3Old, p.child3OldId, p.child3ShortNameOld, p.child4Old, p.child4OldId, p.child4ShortNameOld, p.PositionOld, p.posMasterNoOld, p.posTypeOldId, p.posTypeNameOld, p.posLevelOldId, p.posLevelNameOld, p.IsNoDebt, p.IsNoBurden, p.IsDiscipline, p.ApproveStep, p.Group, Approvers = p.RetirementResignEmployee.Approvers.Where(x => x.ApproveType.ToUpper() == "APPROVER"), Commanders = p.RetirementResignEmployee.Approvers.Where(x => x.ApproveType.ToUpper() == "COMMANDER"), CancelApprovers = p.Approvers.Where(x => x.ApproveType.ToUpper() == "APPROVER"), CancelCommanders = p.Approvers.Where(x => x.ApproveType.ToUpper() == "COMMANDER"), KeycloakUserId = p.CreatedUserId, p.CancelReason, idMain = p.RetirementResignEmployee.Id, statusMain = p.RetirementResignEmployee.Status, RetirementResignEmployeeDocs = p.RetirementResignEmployee.RetirementResignEmployeeDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); var retirementResignEmployeeDocs = new List(); foreach (var doc in data.RetirementResignEmployeeDocs) { var _doc = new { FileName = doc.FileName, PathName = await _documentService.ImagesPath(doc.Id), doc.Id, }; retirementResignEmployeeDocs.Add(_doc); } var _data = new { data.Id, data.profileId, data.prefix, data.firstName, data.lastName, data.Location, data.SendDate, data.ActiveDate, data.Reason, data.Remark, data.Status, data.salary, data.PositionTypeOld, data.PositionLevelOld, data.PositionNumberOld, data.OrganizationPositionOld, data.ApproveReason, data.RejectReason, data.IsActive, data.CreatedAt, data.OligarchReject, data.OligarchApproveReason, data.OligarchRejectReason, data.OligarchRejectDate, data.CommanderReject, data.CommanderApproveReason, data.CommanderRejectReason, data.CommanderRejectDate, data.OfficerReject, data.OfficerApproveReason, data.OfficerRejectReason, data.OfficerRejectDate, data.RemarkHorizontal, data.rootOld, data.rootOldId, data.rootShortNameOld, data.child1Old, data.child1OldId, data.child1ShortNameOld, data.child2Old, data.child2OldId, data.child2ShortNameOld, data.child3Old, data.child3OldId, data.child3ShortNameOld, data.child4Old, data.child4OldId, data.child4ShortNameOld, data.PositionOld, data.posMasterNoOld, data.posTypeOldId, data.posTypeNameOld, data.posLevelOldId, data.posLevelNameOld, data.IsNoDebt, data.IsNoBurden, data.IsDiscipline, data.CancelReason, data.idMain, data.statusMain, data.ApproveStep, data.Group, data.KeycloakUserId, data.Approvers, data.Commanders, data.CancelApprovers, data.CancelCommanders, statusCancel = data.Status, Docs = retirementResignEmployeeDocs, }; return Success(_data); } } /// /// get รายละเอียดลาออก /// /// Id ลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("cancel/{id:length(36)}")] public async Task> GetDetailByUserCancel(Guid id) { var data = await _context.RetirementResignEmployeeCancels.AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.Id, p.prefix, p.firstName, p.lastName, p.profileId, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.Remark, p.Status, salary = p.AmountOld, p.ApproveReason, p.RejectReason, p.IsActive, p.CreatedAt, p.PositionTypeOld, p.PositionLevelOld, p.PositionNumberOld, p.OrganizationPositionOld, p.OligarchReject, p.OligarchApproveReason, p.OligarchRejectReason, p.OligarchRejectDate, p.CommanderReject, p.CommanderApproveReason, p.CommanderRejectReason, p.CommanderRejectDate, p.OfficerReject, p.OfficerApproveReason, p.OfficerRejectReason, p.OfficerRejectDate, p.RemarkHorizontal, p.rootOld, p.rootOldId, p.rootShortNameOld, p.child1Old, p.child1OldId, p.child1ShortNameOld, p.child2Old, p.child2OldId, p.child2ShortNameOld, p.child3Old, p.child3OldId, p.child3ShortNameOld, p.child4Old, p.child4OldId, p.child4ShortNameOld, p.PositionOld, p.posMasterNoOld, p.posTypeOldId, p.posTypeNameOld, p.posLevelOldId, p.posLevelNameOld, p.IsNoDebt, p.IsNoBurden, p.IsDiscipline, p.CancelReason, p.ApproveStep, p.Group, Approvers = p.Approvers.Where(x => x.ApproveType.ToUpper() == "APPROVER"), Commanders = p.Approvers.Where(x => x.ApproveType.ToUpper() == "COMMANDER"), KeycloakUserId = p.CreatedUserId, idMain = p.RetirementResignEmployee.Id, statusMain = p.RetirementResignEmployee.Status, RetirementResignEmployeeDocs = p.RetirementResignEmployee.RetirementResignEmployeeDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); var retirementResignEmployeeDocs = new List(); foreach (var doc in data.RetirementResignEmployeeDocs) { var _doc = new { FileName = doc.FileName, PathName = await _documentService.ImagesPath(doc.Id), doc.Id, }; retirementResignEmployeeDocs.Add(_doc); } var _data = new { data.Id, data.profileId, data.prefix, // data.PrefixId, data.firstName, data.lastName, data.Location, data.SendDate, data.ActiveDate, data.Reason, data.Remark, data.Status, data.salary, data.PositionTypeOld, data.PositionLevelOld, data.PositionNumberOld, data.OrganizationPositionOld, data.ApproveReason, data.RejectReason, data.IsActive, data.CreatedAt, data.OligarchReject, data.OligarchApproveReason, data.OligarchRejectReason, data.OligarchRejectDate, data.CommanderReject, data.CommanderApproveReason, data.CommanderRejectReason, data.CommanderRejectDate, data.OfficerReject, data.OfficerApproveReason, data.OfficerRejectReason, data.OfficerRejectDate, data.RemarkHorizontal, data.rootOld, data.rootOldId, data.rootShortNameOld, data.child1Old, data.child1OldId, data.child1ShortNameOld, data.child2Old, data.child2OldId, data.child2ShortNameOld, data.child3Old, data.child3OldId, data.child3ShortNameOld, data.child4Old, data.child4OldId, data.child4ShortNameOld, data.PositionOld, data.posMasterNoOld, data.posTypeOldId, data.posTypeNameOld, data.posLevelOldId, data.posLevelNameOld, data.IsNoDebt, data.IsNoBurden, data.IsDiscipline, data.CancelReason, data.idMain, data.statusMain, data.KeycloakUserId, data.ApproveStep, data.Group, data.Approvers, data.Commanders, Docs = retirementResignEmployeeDocs, }; return Success(_data); } /// /// สร้างการลาออก /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost()] public async Task> Post([FromForm] RetirementResignEmployeeRequest req) { var Remark = req.Remark; if (req.Reason != null) { switch (req.Reason.Trim().ToUpper()) { case "CAREER": Remark = $"ประกอบอาชีพอื่น" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "MOVE": Remark = $"รับราชการสังกัดอื่น" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "FAMILY": Remark = $"ดูแลบิดามารดา" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "EDUCATION": Remark = $"ศึกษาต่อ" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "OTHER": Remark = $"อื่น ๆ" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; } } var retirementResignEmployee = new RetirementResignEmployee { ApproveStep = "st1", Location = req.Location, SendDate = DateTime.Now, ActiveDate = req.ActiveDate, Reason = req.Reason, ReasonResign = Remark, Remark = req.Remark, Status = "WAITTING", IsActive = true, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; var apiUrl = $"{_configuration["API"]}/org/profile-employee/keycloak/position"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) return Error("ไม่พบหน่วยงานของผู้ใช้งานคนนี้", 404); retirementResignEmployee.profileId = org.result.profileId; retirementResignEmployee.prefix = org.result.prefix; retirementResignEmployee.firstName = org.result.firstName; retirementResignEmployee.lastName = org.result.lastName; retirementResignEmployee.citizenId = org.result.citizenId; retirementResignEmployee.rootOld = org.result.root; retirementResignEmployee.rootOldId = org.result.rootId; retirementResignEmployee.rootDnaOldId = org.result.rootDnaId; retirementResignEmployee.rootShortNameOld = org.result.rootShortName; retirementResignEmployee.child1Old = org.result.child1; retirementResignEmployee.child1OldId = org.result.child1Id; retirementResignEmployee.child1DnaOldId = org.result.child1DnaId; retirementResignEmployee.child1ShortNameOld = org.result.child1ShortName; retirementResignEmployee.child2Old = org.result.child2; retirementResignEmployee.child2OldId = org.result.child2Id; retirementResignEmployee.child2DnaOldId = org.result.child2DnaId; retirementResignEmployee.child2ShortNameOld = org.result.child2ShortName; retirementResignEmployee.child3Old = org.result.child3; retirementResignEmployee.child3OldId = org.result.child3Id; retirementResignEmployee.child3DnaOldId = org.result.child3DnaId; retirementResignEmployee.child3ShortNameOld = org.result.child3ShortName; retirementResignEmployee.child4Old = org.result.child4; retirementResignEmployee.child4OldId = org.result.child4Id; retirementResignEmployee.child4DnaOldId = org.result.child4DnaId; retirementResignEmployee.child4ShortNameOld = org.result.child4ShortName; retirementResignEmployee.posMasterNoOld = org.result.posMasterNo; retirementResignEmployee.posTypeOldId = org.result.posTypeId; retirementResignEmployee.posTypeNameOld = org.result.posTypeName; retirementResignEmployee.posLevelOldId = org.result.posLevelId; retirementResignEmployee.posLevelNameOld = org.result.posLevelName; retirementResignEmployee.AmountOld = org.result.salary; retirementResignEmployee.PositionOld = org.result.position; retirementResignEmployee.PositionLevelOld = org.result.posLevelName; retirementResignEmployee.PositionTypeOld = org.result.posTypeName; retirementResignEmployee.PositionNumberOld = org.result.nodeShortName + " " + org.result.posMasterNo; retirementResignEmployee.OrganizationOld = (org.result.child4 == null ? "" : org.result.child4 + "\n") + (org.result.child3 == null ? "" : org.result.child3 + "\n") + (org.result.child2 == null ? "" : org.result.child2 + "\n") + (org.result.child1 == null ? "" : org.result.child1 + "\n") + (org.result.root == null ? "" : org.result.root); retirementResignEmployee.OrganizationPositionOld = org.result.position + "\n" + retirementResignEmployee.OrganizationOld; if ((retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "ชำนาญงาน") || (retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "ปฏิบัติงาน") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ปฏิบัติการ") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ชำนาญการ")) { retirementResignEmployee.Group = "1.1"; } else if ((retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "อาวุโส") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ชำนาญการพิเศษ") || (retirementResignEmployee.posTypeNameOld == "อำนวยการ" && retirementResignEmployee.posLevelNameOld == "ต้น")) { retirementResignEmployee.Group = "1.2"; } else if ((retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "ทักษะพิเศษ") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "เชี่ยวชาญ") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ทรงคุณวุฒิ") || (retirementResignEmployee.posTypeNameOld == "อำนวยการ" && retirementResignEmployee.posLevelNameOld == "สูง") || (retirementResignEmployee.posTypeNameOld == "บริหาร" && retirementResignEmployee.posLevelNameOld == "ต้น") || (retirementResignEmployee.posTypeNameOld == "บริหาร" && retirementResignEmployee.posLevelNameOld == "สูง")) { retirementResignEmployee.Group = "2"; } } await _context.RetirementResignEmployees.AddAsync(retirementResignEmployee); await _context.SaveChangesAsync(); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { foreach (var file in Request.Form.Files) { var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, file.FileName); var _doc = await _context.Documents.AsQueryable() .FirstOrDefaultAsync(x => x.Id == doc.Id); if (_doc != null) { var retirementResignEmployeeDoc = new RetirementResignEmployeeDoc { RetirementResignEmployee = retirementResignEmployee, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.RetirementResignEmployeeDocs.AddAsync(retirementResignEmployeeDoc); } } } await _context.SaveChangesAsync(); // using (var client = new HttpClient()) // { // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); // client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); // var _res = await client.PostAsJsonAsync($"{_configuration["API"]}/org/workflow/add-workflow", new // { // refId = retirementResignEmployee.Id, // sysName = "SYS_RESIGN_EMP", // posLevelName = retirementResignEmployee.PositionLevelOld, // posTypeName = retirementResignEmployee.PositionTypeOld, // }); // } return Success(retirementResignEmployee); } /// /// สร้างการลาออก โดย admin /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("admin")] public async Task> PostAdmin([FromForm] RetirementResignEmployeeAdminRequest req) { var Remark = req.Remark; if (req.Reason != null) { switch (req.Reason.Trim().ToUpper()) { case "CAREER": Remark = $"ประกอบอาชีพอื่น" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "MOVE": Remark = $"รับราชการสังกัดอื่น" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "FAMILY": Remark = $"ดูแลบิดามารดา" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "EDUCATION": Remark = $"ศึกษาต่อ" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; case "OTHER": Remark = $"อื่น ๆ" + (req.Remark == null || req.Remark == "" ? $"{req.Remark}" : ""); break; } } var retirementResignEmployee = new RetirementResignEmployee { ApproveStep = "st1", Location = req.Location, SendDate = DateTime.Now, ActiveDate = req.ActiveDate, Reason = req.Reason, ReasonResign = Remark, Remark = req.Remark, Status = "APPROVE", IsActive = true, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; var apiUrl = $"{_configuration["API"]}/org/profile-employee/profileid/position/{req.ProfileId}"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) return Error("ไม่พบหน่วยงานของผู้ใช้งานคนนี้", 404); retirementResignEmployee.profileId = org.result.profileId; retirementResignEmployee.prefix = org.result.prefix; retirementResignEmployee.firstName = org.result.firstName; retirementResignEmployee.lastName = org.result.lastName; retirementResignEmployee.citizenId = org.result.citizenId; retirementResignEmployee.rootOld = org.result.root; retirementResignEmployee.rootOldId = org.result.rootId; retirementResignEmployee.rootDnaOldId = org.result.rootDnaId; retirementResignEmployee.rootShortNameOld = org.result.rootShortName; retirementResignEmployee.child1Old = org.result.child1; retirementResignEmployee.child1OldId = org.result.child1Id; retirementResignEmployee.child1DnaOldId = org.result.child1DnaId; retirementResignEmployee.child1ShortNameOld = org.result.child1ShortName; retirementResignEmployee.child2Old = org.result.child2; retirementResignEmployee.child2OldId = org.result.child2Id; retirementResignEmployee.child2DnaOldId = org.result.child2DnaId; retirementResignEmployee.child2ShortNameOld = org.result.child2ShortName; retirementResignEmployee.child3Old = org.result.child3; retirementResignEmployee.child3OldId = org.result.child3Id; retirementResignEmployee.child3DnaOldId = org.result.child3DnaId; retirementResignEmployee.child3ShortNameOld = org.result.child3ShortName; retirementResignEmployee.child4Old = org.result.child4; retirementResignEmployee.child4OldId = org.result.child4Id; retirementResignEmployee.child4DnaOldId = org.result.child4DnaId; retirementResignEmployee.child4ShortNameOld = org.result.child4ShortName; retirementResignEmployee.posMasterNoOld = org.result.posMasterNo; retirementResignEmployee.posTypeOldId = org.result.posTypeId; retirementResignEmployee.posTypeNameOld = org.result.posTypeName; retirementResignEmployee.posLevelOldId = org.result.posLevelId; retirementResignEmployee.posLevelNameOld = org.result.posLevelName; retirementResignEmployee.AmountOld = org.result.salary; retirementResignEmployee.PositionOld = org.result.position; retirementResignEmployee.PositionLevelOld = org.result.posLevelName; retirementResignEmployee.PositionTypeOld = org.result.posTypeName; retirementResignEmployee.PositionNumberOld = org.result.nodeShortName + " " + org.result.posMasterNo; retirementResignEmployee.OrganizationOld = (org.result.child4 == null ? "" : org.result.child4 + "\n") + (org.result.child3 == null ? "" : org.result.child3 + "\n") + (org.result.child2 == null ? "" : org.result.child2 + "\n") + (org.result.child1 == null ? "" : org.result.child1 + "\n") + (org.result.root == null ? "" : org.result.root); retirementResignEmployee.OrganizationPositionOld = org.result.position + "\n" + retirementResignEmployee.OrganizationOld; if ((retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "ชำนาญงาน") || (retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "ปฏิบัติงาน") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ปฏิบัติการ") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ชำนาญการ")) { retirementResignEmployee.Group = "1.1"; } else if ((retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "อาวุโส") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ชำนาญการพิเศษ") || (retirementResignEmployee.posTypeNameOld == "อำนวยการ" && retirementResignEmployee.posLevelNameOld == "ต้น")) { retirementResignEmployee.Group = "1.2"; } else if ((retirementResignEmployee.posTypeNameOld == "ทั่วไป" && retirementResignEmployee.posLevelNameOld == "ทักษะพิเศษ") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "เชี่ยวชาญ") || (retirementResignEmployee.posTypeNameOld == "วิชาการ" && retirementResignEmployee.posLevelNameOld == "ทรงคุณวุฒิ") || (retirementResignEmployee.posTypeNameOld == "อำนวยการ" && retirementResignEmployee.posLevelNameOld == "สูง") || (retirementResignEmployee.posTypeNameOld == "บริหาร" && retirementResignEmployee.posLevelNameOld == "ต้น") || (retirementResignEmployee.posTypeNameOld == "บริหาร" && retirementResignEmployee.posLevelNameOld == "สูง")) { retirementResignEmployee.Group = "2"; } } await _context.RetirementResignEmployees.AddAsync(retirementResignEmployee); await _context.SaveChangesAsync(); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { foreach (var file in Request.Form.Files) { var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, file.FileName); var _doc = await _context.Documents.AsQueryable() .FirstOrDefaultAsync(x => x.Id == doc.Id); if (_doc != null) { var retirementResignEmployeeDoc = new RetirementResignEmployeeDoc { RetirementResignEmployee = retirementResignEmployee, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.RetirementResignEmployeeDocs.AddAsync(retirementResignEmployeeDoc); } } } await _context.SaveChangesAsync(); return Success(retirementResignEmployee); } /// /// แก้ไขการลาออก /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{id:length(36)}")] public async Task> Put([FromForm] RetirementResignEmployeeRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.Location = req.Location; updated.ActiveDate = req.ActiveDate; // updated.Reason = req.Reason; updated.Remark = req.Remark; updated.ReasonResign = req.Reason; updated.OrganizationPositionOld = req.OrganizationPositionOld; updated.RemarkHorizontal = req.RemarkHorizontal; updated.PositionTypeOld = req.PositionTypeOld; updated.PositionLevelOld = req.PositionLevelOld; updated.PositionNumberOld = req.PositionNumberOld; updated.AmountOld = req.AmountOld; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไขการลาออก /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("update-cancel/{id:length(36)}")] public async Task> PutCancel([FromForm] RetirementResignEmployeeRequest req, Guid id) { var updated = await _context.RetirementResignEmployeeCancels .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.Location = req.Location; updated.ActiveDate = req.ActiveDate; updated.Reason = req.Reason; updated.Remark = req.Remark; updated.OrganizationPositionOld = req.OrganizationPositionOld; updated.RemarkHorizontal = req.RemarkHorizontal; updated.PositionTypeOld = req.PositionTypeOld; updated.PositionLevelOld = req.PositionLevelOld; updated.PositionNumberOld = req.PositionNumberOld; updated.AmountOld = req.AmountOld; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไขรายการตรวจสอบเงื่อนไขต่าง ๆ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("debt/{id:length(36)}")] public async Task> Debt([FromBody] RetirementResignEmployeeDebtRequest req, Guid id) { var updated = await _context.RetirementResignEmployees.AsQueryable() .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.IsNoDebt = req.IsNoDebt; updated.IsNoBurden = req.IsNoBurden; updated.IsDiscipline = req.IsDiscipline; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไขรายการตรวจสอบเงื่อนไขต่าง ๆ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("debt/{id:length(36)}")] public async Task> DebtDelete(Guid id) { var deleted = await _context.RetirementResignEmployeeDocs.AsQueryable() .FirstOrDefaultAsync(x => x.Document.Id == id); if (deleted == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); _context.RetirementResignEmployeeDocs.Remove(deleted); var _deleted = await _context.Documents.AsQueryable() .FirstOrDefaultAsync(x => x.Id == id); if (_deleted == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); _context.Documents.Remove(_deleted); await _context.SaveChangesAsync(); return Success(); } /// /// ยกเลิกลาออก /// /// Id ลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("cancel/{id:length(36)}")] public async Task> Cancel([FromBody] RetirementReasonRequest req, Guid id) { var updated = await _context.RetirementResignEmployees.AsQueryable() .Include(x => x.Approvers) .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.CancelReason = req.Reason; if (updated.Status == "DONE" || updated.Status == "WAITING") { var retirementResignEmployeeCancel = new RetirementResignEmployeeCancel { ApproveStep = "st1", Group = updated.Group, Location = updated.Location, SendDate = updated.SendDate, ActiveDate = updated.ActiveDate, Reason = updated.ReasonResign, Remark = updated.Remark, OrganizationPositionOld = updated.OrganizationPositionOld, PositionTypeOld = updated.PositionTypeOld, PositionLevelOld = updated.PositionLevelOld, PositionNumberOld = updated.PositionNumberOld, AmountOld = updated.AmountOld, ApproveReason = updated.ApproveReason, RejectReason = updated.RejectReason, CancelReason = updated.CancelReason, IsActive = updated.IsActive, IsNoDebt = updated.IsNoDebt, IsNoBurden = updated.IsNoBurden, IsDiscipline = updated.IsDiscipline, OligarchReject = updated.OligarchReject, OligarchApproveReason = updated.OligarchApproveReason, OligarchRejectReason = updated.OligarchRejectReason, OligarchRejectDate = updated.OligarchRejectDate, CommanderReject = updated.CommanderReject, CommanderApproveReason = updated.CommanderApproveReason, CommanderRejectReason = updated.CommanderRejectReason, CommanderRejectDate = updated.CommanderRejectDate, OfficerReject = updated.OfficerReject, OfficerApproveReason = updated.OfficerApproveReason, OfficerRejectReason = updated.OfficerRejectReason, OfficerRejectDate = updated.OfficerRejectDate, RemarkHorizontal = updated.RemarkHorizontal, OrganizationOld = updated.OrganizationOld, PositionOld = updated.PositionOld, profileId = updated.profileId, prefix = updated.prefix, firstName = updated.firstName, lastName = updated.lastName, citizenId = updated.citizenId, rootOld = updated.rootOld, rootOldId = updated.rootOldId, rootDnaOldId = updated.rootDnaOldId, rootShortNameOld = updated.rootShortNameOld, child1Old = updated.child1Old, child1OldId = updated.child1OldId, child1DnaOldId = updated.child1DnaOldId, child1ShortNameOld = updated.child1ShortNameOld, child2Old = updated.child2Old, child2OldId = updated.child2OldId, child2DnaOldId = updated.child2DnaOldId, child2ShortNameOld = updated.child2ShortNameOld, child3Old = updated.child3Old, child3OldId = updated.child3OldId, child3DnaOldId = updated.child3DnaOldId, child3ShortNameOld = updated.child3ShortNameOld, child4Old = updated.child4Old, child4OldId = updated.child4OldId, child4DnaOldId = updated.child4DnaOldId, child4ShortNameOld = updated.child4ShortNameOld, posMasterNoOld = updated.posMasterNoOld, posTypeOldId = updated.posTypeOldId, posTypeNameOld = updated.posTypeNameOld, posLevelOldId = updated.posLevelOldId, posLevelNameOld = updated.posLevelNameOld, RetirementResignEmployee = updated, Status = "WAITTING", CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.RetirementResignEmployeeCancels.AddAsync(retirementResignEmployeeCancel); await _context.SaveChangesAsync(); var addList = new List(); foreach (var r in updated.Approvers) { addList.Add(new RetirementResignEmployeeCancelApprover { Seq = r.Seq, RetirementResignEmployeeCancel = retirementResignEmployeeCancel, Prefix = r.Prefix, FirstName = r.FirstName, LastName = r.LastName, PositionName = r.PositionName, ProfileId = r.ProfileId, KeycloakId = r.KeycloakId, Org = r.Org, ApproveStatus = "PENDING", ApproveType = r.ApproveType }); } await _context.AddRangeAsync(addList); await _context.SaveChangesAsync(); updated.IsCancel = true; updated.Status = "CANCELING"; } else if (updated.Status == "REPORT") { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _res = await client.DeleteAsync($"{_configuration["API"]}/org/command/tab2Cancel23/{updated.Id}"); } updated.Status = "CANCEL"; } else { updated.Status = "CANCEL"; } updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ลบลาออก /// /// Id ลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("{id:length(36)}")] public async Task> Delete(Guid id) { var deleted = await _context.RetirementResignEmployees.AsQueryable() .FirstOrDefaultAsync(x => x.Id == id); if (deleted == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); deleted.Status = "DELETE"; deleted.LastUpdateFullName = FullName ?? "System Administrator"; deleted.LastUpdateUserId = UserId ?? ""; deleted.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("confirm/{id:length(36)}")] public async Task> AdminConfirm([FromBody] RetirementReasonRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.Status = "APPROVE"; updated.ApproveReason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ไม่อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("reject/{id:length(36)}")] public async Task> AdminReject([FromBody] RetirementReasonRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.Status = "REJECT"; updated.RejectReason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// การเจ้าหน้าที่ อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("officer/confirm/{id:length(36)}")] public async Task> OfficerConfirm([FromBody] RetirementReasonRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); // updated.Status = "APPROVE"; updated.OfficerReject = false; updated.OfficerApproveReason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// การเจ้าหน้าที่ ไม่อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("officer/reject/{id:length(36)}")] public async Task> OfficerReject([FromBody] RetirementReasonDateRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); if ((DateTime.Now - updated.CreatedAt).TotalDays >= 90) return Error("สามารถยับยั้งได้ไม่เกิน 90 วัน"); updated.OfficerReject = true; updated.OfficerRejectReason = req.Reason; updated.OfficerRejectDate = req.Date; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ผู้บังคับบัญชา อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("commander/confirm/{id:length(36)}")] public async Task> CommanderConfirm([FromBody] RetirementReasonRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.CommanderReject = false; updated.CommanderApproveReason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ผู้บังคับบัญชา ไม่อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("commander/reject/{id:length(36)}")] public async Task> CommanderReject([FromBody] RetirementReasonDateRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); if ((DateTime.Now - updated.CreatedAt).TotalDays >= 90) return Error("สามารถยับยั้งได้ไม่เกิน 90 วัน"); updated.CommanderReject = true; updated.CommanderRejectReason = req.Reason; updated.CommanderRejectDate = req.Date; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ผู้มีอำนาจ อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("oligarch/confirm/{id:length(36)}")] public async Task> OligarchConfirm([FromBody] RetirementReasonRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.Status = "APPROVE"; updated.OligarchReject = false; updated.OligarchApproveReason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ผู้มีอำนาจ ไม่อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("oligarch/reject/{id:length(36)}")] public async Task> OligarchReject([FromBody] RetirementReasonDateRequest req, Guid id) { var updated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); if ((DateTime.Now - updated.CreatedAt).TotalDays >= 90) return Error("สามารถยับยั้งได้ไม่เกิน 90 วัน"); updated.Status = "APPROVE"; updated.OligarchReject = true; updated.OligarchRejectReason = req.Reason; updated.OligarchRejectDate = req.Date; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ผู้บังคับบัญชา อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("commander-cancel/reject/{id:length(36)}")] public async Task> CommanderConfirmCancel([FromBody] RetirementReasonCancelRequest req, Guid id) { var updated = await _context.RetirementResignEmployeeCancels .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.CommanderReject = req.Reject; updated.CommanderApproveReason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ผู้มีอำนาจ อนุมัติคำลาออก /// /// Id คำลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("oligarch-cancel/reject/{id:length(36)}")] public async Task> OligarchConfirmCancel([FromBody] RetirementReasonCancelRequest req, Guid id) { var updated = await _context.RetirementResignEmployeeCancels .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); updated.Status = "APPROVE"; updated.OligarchReject = req.Reject; updated.OligarchApproveReason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// สั่งรายชื่อไปออกคำสั่ง /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("report")] public async Task> PostToReport([FromBody] RetirementProfileRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_RESIGN_EMP"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } foreach (var item in req.Id) { var uppdated = await _context.RetirementResignEmployees .FirstOrDefaultAsync(x => x.Id == item); if (uppdated == null) continue; uppdated.Status = "REPORT"; uppdated.LastUpdateFullName = FullName ?? "System Administrator"; uppdated.LastUpdateUserId = UserId ?? ""; uppdated.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } /// /// list แบบสอบถามหลังลาออก /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("questionnaire")] public async Task> GetListQuestion() { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_RESIGN_INTERVIEW"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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 == "BROTHER") { nodeId = profileAdmin?.Node == 4 ? profileAdmin?.Child3DnaId : profileAdmin?.Node == 3 ? profileAdmin?.Child2DnaId : profileAdmin?.Node == 2 ? profileAdmin?.Child1DnaId : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 ? profileAdmin?.RootDnaId : ""; } else if (role == "ROOT" /*|| role == "PARENT"*/) { nodeId = profileAdmin?.RootDnaId; } var node = profileAdmin?.Node; var data = await _context.RetirementEmployeeQuestions.AsQueryable() .OrderByDescending(x => x.CreatedAt) .Select(p => new { Id = p.Id, // Fullname = $"{p.RetirementResignEmployee.prefix}{p.RetirementResignEmployee.firstName} {p.RetirementResignEmployee.lastName}", ReasonWork = p.ReasonWork == null ? p.ReasonWork : Newtonsoft.Json.JsonConvert.DeserializeObject(p.ReasonWork), ReasonWorkOther = p.ReasonWorkOther, TimeThink = p.TimeThink, ExitFactor = p.ExitFactor == null ? p.ExitFactor : Newtonsoft.Json.JsonConvert.DeserializeObject(p.ExitFactor), ExitFactorOther = p.ExitFactorOther, Adjust = p.Adjust == null ? p.Adjust : Newtonsoft.Json.JsonConvert.DeserializeObject(p.Adjust), AdjustOther = p.AdjustOther, RealReason = p.RealReason, NotExitFactor = p.NotExitFactor, Havejob = p.Havejob, HavejobReason = p.HavejobReason, SuggestFriends = p.SuggestFriends, SuggestFriendsReason = p.SuggestFriendsReason, FutureWork = p.FutureWork, FutureWorkReason = p.FutureWorkReason, Suggestion = p.Suggestion, LastUpdatedAt = p.LastUpdatedAt, CreatedAt = p.CreatedAt, AppointDate = p.AppointDate, p.rootDnaId, p.child1DnaId, p.child2DnaId, p.child3DnaId, p.child4DnaId, }) .ToListAsync(); if (role == "OWNER") { node = null; } if (role == "OWNER" || role == "CHILD") { data = data .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } else if (role == "BROTHER") { data = data .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); } else if (role == "ROOT") { data = data .Where(x => x.rootDnaId == nodeId).ToList(); } // else if (role == "PARENT") // { // data = data // .Where(x => x.rootDnaId == nodeId && x.child1DnaId != null).ToList(); // } else if (role == "NORMAL") { data = data.Where(x => node == 0 ? x.rootDnaId == nodeId && x.child1DnaId == null : node == 1 ? x.child1DnaId == nodeId && x.child2DnaId == null : node == 2 ? x.child2DnaId == nodeId && x.child3DnaId == null : node == 3 ? x.child3DnaId == nodeId && x.child4DnaId == null : node == 4 ? x.child4DnaId == nodeId : true ).ToList(); } return Success(data); } /// /// สร้างแบบสอบถามหลังลาออก /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("questionnaire")] public async Task> PostQuestion([FromBody] RetirementQuestionRequest req) { var retirementResign = await _context.RetirementResignEmployees.AsQueryable() .FirstOrDefaultAsync(x => x.Id == req.RetirementResignId); if (retirementResign == null) return Error(GlobalMessages.RetirementResignNotFound); var period = new RetirementEmployeeQuestion { RetirementResignEmployee = retirementResign, ReasonWork = Newtonsoft.Json.JsonConvert.SerializeObject(req.ReasonWork), ReasonWorkOther = req.ReasonWorkOther, TimeThink = req.TimeThink, ExitFactor = Newtonsoft.Json.JsonConvert.SerializeObject(req.ExitFactor), ExitFactorOther = req.ExitFactorOther, Adjust = Newtonsoft.Json.JsonConvert.SerializeObject(req.Adjust), AdjustOther = req.AdjustOther, RealReason = req.RealReason, NotExitFactor = req.NotExitFactor, Havejob = req.Havejob, HavejobReason = req.HavejobReason, SuggestFriends = req.SuggestFriends, SuggestFriendsReason = req.SuggestFriendsReason, FutureWork = req.FutureWork, FutureWorkReason = req.FutureWorkReason, Suggestion = req.Suggestion, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var apiUrl = $"{_configuration["API"]}/org/profile-employee/profileid/position/{retirementResign.profileId}"; var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) return Error("ไม่พบหน่วยงานของผู้ใช้งานคนนี้", 404); period.root = org.result.root; period.rootId = org.result.rootId; period.rootDnaId = org.result.rootDnaId; period.child1 = org.result.child1; period.child1Id = org.result.child1Id; period.child1DnaId = org.result.child1DnaId; period.child2 = org.result.child2; period.child2Id = org.result.child2Id; period.child2DnaId = org.result.child2DnaId; period.child3 = org.result.child3; period.child3Id = org.result.child3Id; period.child3DnaId = org.result.child3DnaId; period.child4 = org.result.child4; period.child4Id = org.result.child4Id; period.child4DnaId = org.result.child4DnaId; } await _context.RetirementEmployeeQuestions.AddAsync(period); await _context.SaveChangesAsync(); return Success(); } /// /// ส่งรายชื่อออกคำสั่ง C-PM-23 /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("command/report")] public async Task> PostReport([FromBody] ReportPersonRequest req) { var placementProfiles = await _context.RetirementResignEmployees .Where(x => req.refIds.Contains(x.Id.ToString())) .ToListAsync(); placementProfiles.ForEach(profile => profile.Status = req.status.Trim().ToUpper()); await _context.SaveChangesAsync(); return Success(); } /// /// ลบรายชื่อออกคำสั่ง C-PM-23 /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("command/report/delete")] public async Task> PostReportDelete([FromBody] ReportPersonRequest req) { var placementProfiles = await _context.RetirementResignEmployees .Where(x => req.refIds.Contains(x.Id.ToString())) .Where(x => x.Status.ToUpper() == "REPORT") .ToListAsync(); placementProfiles.ForEach(profile => profile.Status = "APPROVE"); await _context.SaveChangesAsync(); return Success(); } /// /// เอกสารแนบท้าย C-PM-23 /// /// Record Id ของคำสั่ง /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("command/report/attachment")] [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> PostReportAttachment([FromBody] ReportAttachmentRequest req) { try { var report_data = (from p in _context.RetirementResignEmployees .Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString())) .ToList() join r in req.refIds on p.Id.ToString() equals r.refId orderby r.Sequence select new { No = r.Sequence.ToString().ToThaiNumber(), CitizenId = r.CitizenId == null ? "-" : r.CitizenId.ToThaiNumber(), FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", PositionName = p.PositionOld ?? "-", Organization = p.OrganizationPositionOld ?? "-", PositionLevel = p.PositionLevelOld == null ? "-" : p.PositionLevelOld.ToThaiNumber(), PositionType = p.PositionTypeOld ?? "-", PositionNumber = p.PositionNumberOld == null ? "-" : p.PositionNumberOld.ToThaiNumber(), ActiveDate = p.ActiveDate == null ? "" : p.ActiveDate.Value.ToThaiShortDate2().ToThaiNumber(), Salary = p.AmountOld == null ? "" : p.AmountOld.Value.ToNumericNoDecimalText().ToThaiNumber(), Remark = p.Reason ?? "", RemarkHorizontal = r.RemarkHorizontal == null ? "-" : r.RemarkHorizontal.ToThaiNumber(), RemarkVertical = r.RemarkVertical == null ? "-" : r.RemarkVertical.ToThaiNumber() }).ToList(); var result = new List(); foreach (var r in report_data) { result.Add(r); string? _null = null; if (r.RemarkHorizontal != null && r.RemarkHorizontal != "") { result.Add(new { No = _null, FullName = r.RemarkHorizontal, CitizenId = _null, PositionName = _null, Organization = _null, PositionLevel = _null, PositionType = _null, PositionNumber = _null, ActiveDate = _null, Salary = _null, Remark = _null, RemarkHorizontal = _null, RemarkVertical = _null, }); } } return Success(result); } catch { throw; } } /// /// ออกคำสั่ง C-PM-23 คำสั่งอนุญาตให้ลูกจ้างลาออกจากราชการ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("command/report/excecute")] public async Task> PostReportExecute([FromBody] ReportExecuteRequest req) { var data = await _context.RetirementResignEmployees .Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString())) .ToListAsync(); var resultData = (from p in data join r in req.refIds on p.Id.ToString() equals r.refId select new { profileId = p.profileId, amount = r.amount, amountSpecial = r.amountSpecial, positionSalaryAmount = r.positionSalaryAmount, mouthSalaryAmount = r.mouthSalaryAmount, positionType = p.PositionTypeOld, positionLevel = p.PositionLevelOld, isLeave = p.IsCancel == true ? false : true, //leaveReason = "ออกจากราชการ", leaveReason = p.ReasonResign == "อื่น ๆ" ? string.IsNullOrWhiteSpace(p.Remark) ? p.ReasonResign : $"{p.ReasonResign}({p.Remark})" : p.ReasonResign, dateLeave = r.commandDateAffect, commandId = r.commandId, isGovernment = false, orgRoot = p.rootOld, orgChild1 = p.child1Old, orgChild2 = p.child2Old, orgChild3 = p.child3Old, orgChild4 = p.child4Old, commandNo = r.commandNo, commandYear = r.commandYear, posNo = p.posMasterNoOld?.ToString(), posNoAbb = p.child4ShortNameOld != null ? $"{p.child4ShortNameOld}" : p.child3ShortNameOld != null ? $"{p.child3ShortNameOld}" : p.child2ShortNameOld != null ? $"{p.child2ShortNameOld}" : p.child1ShortNameOld != null ? $"{p.child1ShortNameOld}" : p.rootShortNameOld != null ? $"{p.rootShortNameOld}" : "", commandDateAffect = r.commandDateAffect, commandDateSign = r.commandDateSign, positionName = p.PositionOld, commandCode = r.commandCode, commandName = r.commandName, remark = r.remark, resignId = p.Id, }).ToList(); var baseAPIOrg = _configuration["API"]; var apiUrlOrg = $"{baseAPIOrg}/org/command/excexute/salary-employee-leave"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _res = await client.PostAsJsonAsync(apiUrlOrg, new { data = resultData, }); var _result = await _res.Content.ReadAsStringAsync(); if (_res.IsSuccessStatusCode) { data.ForEach(profile => profile.Status = "DONE"); await _context.SaveChangesAsync(); } } return Success(); } /// /// ส่งรายชื่อออกคำสั่ง C-PM-42 /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("leave-cancel/report")] public async Task> PostReportLeaveCancel([FromBody] ReportPersonRequest req) { var placementProfiles = await _context.RetirementResignEmployeeCancels .Where(x => req.refIds.Contains(x.Id.ToString())) .ToListAsync(); placementProfiles.ForEach(profile => profile.Status = req.status.Trim().ToUpper()); await _context.SaveChangesAsync(); return Success(); } /// /// ลบรายชื่อออกคำสั่ง C-PM-42 /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("leave-cancel/report/delete")] public async Task> PostReportDeleteLeaveCancel([FromBody] ReportPersonRequest req) { var placementProfiles = await _context.RetirementResignEmployeeCancels .Where(x => req.refIds.Contains(x.Id.ToString())) .Where(x => x.Status.ToUpper() == "REPORT") .ToListAsync(); placementProfiles.ForEach(profile => profile.Status = "APPROVE"); await _context.SaveChangesAsync(); return Success(); } /// /// เอกสารแนบท้าย C-PM-42 /// /// Record Id ของคำสั่ง /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("leave-cancel/report/attachment")] [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> PostReportLeaveCancelAttachment([FromBody] ReportAttachmentRequest req) { try { var report_data = (from p in _context.RetirementResignEmployeeCancels .Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString())) .ToList() join r in req.refIds on p.Id.ToString() equals r.refId orderby r.Sequence select new { No = r.Sequence.ToString().ToThaiNumber(), CitizenId = r.CitizenId == null ? "-" : r.CitizenId.ToThaiNumber(), FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", PositionName = p.PositionOld ?? "-", Organization = (p.PositionOld == null ? "" : $"{p.PositionOld}\n") + (p.child4Old == null ? "" : $"{p.child4Old}\n") + (p.child3Old == null ? "" : $"{p.child3Old}\n") + (p.child2Old == null ? "" : $"{p.child2Old}\n") + (p.child1Old == null ? "" : $"{p.child1Old}\n") + (p.rootOld == null ? "" : $"{p.rootOld}"), PositionLevel = p.PositionLevelOld?.ToThaiNumber() ?? "-", PositionType = p.PositionTypeOld ?? "-", PositionNumber = p.PositionNumberOld == null ? "-" : p.PositionNumberOld.ToThaiNumber(), ActiveDate = p.ActiveDate == null ? "-" : p.ActiveDate.Value.ToThaiShortDate2().ToThaiNumber(), Salary = p.AmountOld == null ? "-" : p.AmountOld.Value.ToNumericNoDecimalText().ToThaiNumber(), Remark = p.Reason?.ToThaiNumber() ?? "-", RemarkHorizontal = r.RemarkHorizontal == null ? "-" : r.RemarkHorizontal.ToThaiNumber(), RemarkVertical = r.RemarkVertical == null ? "-" : r.RemarkVertical.ToThaiNumber() }).ToList(); var result = new List(); foreach (var r in report_data) { result.Add(r); string? _null = null; if (r.RemarkHorizontal != null && r.RemarkHorizontal != "") { result.Add(new { No = _null, FullName = r.RemarkHorizontal, CitizenId = _null, PositionName = _null, Organization = _null, PositionLevel = _null, PositionType = _null, PositionNumber = _null, ActiveDate = _null, Salary = _null, Remark = _null, RemarkHorizontal = _null, RemarkVertical = _null, }); } } return Success(result); } catch { throw; } } /// /// ออกคำสั่ง C-PM-42 คำสั่งยกเลิกการลาออกลูกจ้าง /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("leave-cancel/report/excecute")] public async Task> PostReportExecuteLeaveCancel([FromBody] ReportExecuteRequest req) { var data = await _context.RetirementResignEmployeeCancels .Include(x => x.RetirementResignEmployee) .Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString())) .ToListAsync(); string? _null = null; var resultData = (from p in data join r in req.refIds on p.Id.ToString() equals r.refId select new { profileId = p.profileId, amount = r.amount, amountSpecial = r.amountSpecial, positionSalaryAmount = r.positionSalaryAmount, mouthSalaryAmount = r.mouthSalaryAmount, positionExecutive = "", positionType = p.PositionTypeOld, positionLevel = p.PositionLevelOld, isLeave = false, leaveReason = _null, dateLeave = _null, commandId = r.commandId, isGovernment = false, orgRoot = p.rootOld, orgChild1 = p.child1Old, orgChild2 = p.child2Old, orgChild3 = p.child3Old, orgChild4 = p.child4Old, commandNo = r.commandNo, commandYear = r.commandYear, posNo = p.posMasterNoOld?.ToString(), posNoAbb = p.child4ShortNameOld != null ? $"{p.child4ShortNameOld}" : p.child3ShortNameOld != null ? $"{p.child3ShortNameOld}" : p.child2ShortNameOld != null ? $"{p.child2ShortNameOld}" : p.child1ShortNameOld != null ? $"{p.child1ShortNameOld}" : p.rootShortNameOld != null ? $"{p.rootShortNameOld}" : "", commandDateAffect = r.commandDateAffect, commandDateSign = r.commandDateSign, positionName = p.PositionOld, commandCode = r.commandCode, commandName = r.commandName, remark = r.remark, resignId = p.RetirementResignEmployee.Id }).ToList(); var baseAPIOrg = _configuration["API"]; //var reportDone = false; //if (data.Where(profile => profile.Status == "DONE").Any()) //{ // reportDone = true; //} //if (reportDone == true) //{ var apiUrlOrg = $"{baseAPIOrg}/org/command/excexute/salary-employee-leave"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _res = await client.PostAsJsonAsync(apiUrlOrg, new { data = resultData, }); var _result = await _res.Content.ReadAsStringAsync(); if (_res.IsSuccessStatusCode) { data.ForEach(profile => profile.Status = "DONE"); data.ForEach(profile => profile.RetirementResignEmployee.Status = "CANCEL"); await _context.SaveChangesAsync(); } } //} //else //{ // var apiUrlOrg = $"{baseAPIOrg}/org/command/cancel-resign"; // using (var client = new HttpClient()) // { // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); // client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); // var _res = await client.PostAsJsonAsync(apiUrlOrg, new // { // resignId = resultData.Select(x => x.resignId).ToList(), // }); // var _result = await _res.Content.ReadAsStringAsync(); // if (_res.IsSuccessStatusCode) // { // data.ForEach(profile => profile.Status = "DONE"); // data.ForEach(profile => profile.RetirementResignEmployee.Status = "CANCEL"); // await _context.SaveChangesAsync(); // } // } //} return Success(); } /// /// เพิ่มรายชิื่อผู้อนุมัติ หรือ ผู้บังคับบัญชา ลูกจ้าง /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("officer/add-resign/{type}/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> AddApprover(string type, Guid id, [FromBody] List req) { try { var retirement = await _context.RetirementResignEmployees .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (retirement == null) { return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); } var data = await _context.RetirementResignEmployeeApprovers .Where(x => x.RetirementResignEmployee.Id == id && x.ApproveType.ToUpper() == type.ToUpper()) .ToListAsync(); _context.RemoveRange(data); await _context.SaveChangesAsync(); var addList = new List(); foreach (var r in req) { addList.Add(new RetirementResignEmployeeApprover { Seq = r.Seq, RetirementResignEmployee = retirement, Prefix = r.Prefix, FirstName = r.FirstName, LastName = r.LastName, PositionName = r.PositionName, PositionExecutiveName = r.PositionExecutiveName, ProfileId = r.ProfileId, KeycloakId = r.KeycloakId, Org = r.Org, ApproveStatus = "PENDING", ApproveType = type.Trim().ToUpper() }); } await _context.AddRangeAsync(addList); await _context.SaveChangesAsync(); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// LV2_013 - เจ้าหน้าที่อนุมัติการลา ลูกจ้าง(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("admin/approve/officer/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> OfficerApproveRetirementResignEmployeeAsync(Guid id) { await _repository.OfficerApproveRetirementResignEmployee(id); return Success(); } /// /// LV2_015 - ผู้บังคับบัญชาอนุมัติการลาลูกจ้าง(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin/approve/comander/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> CommanderApproveRetirementResignEmployeeAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.CommanderApproveRetirementResignEmployee(id, req.Reason ?? "", null); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// ผู้บังคับบัญชาไม่อนุมัติการลาลูกจ้าง(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin/reject/comander/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> CommanderRejectRetirementResignEmployeeAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.CommanderRejectRetirementResignEmployee(id, req.Reason ?? "", req.Date); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// LV2_016 - ผู้มีอำนาจอนุมัติการลา ลูกจ้าง(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin/approve/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> ApproveRetirementResignEmployeeAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.ApproveRetirementResignEmployee(id, req.Reason ?? "", null); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// LV2_017 - ผู้มีอำนาจไม่อนุมัติการลา ลูกจ้าง(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin/reject/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> RejectRetirementResignEmployeeAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.RejectRetirementResignEmployee(id, req.Reason ?? "", req.Date); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// เพิ่มรายชิื่อผู้อนุมัติ หรือ ผู้บังคับบัญชา ยกเลิก /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("officer-cancel/add-resign/{type}/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> AddApproverCancel(string type, Guid id, [FromBody] List req) { try { var retirement = await _context.RetirementResignEmployeeCancels .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (retirement == null) { return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); } var data = await _context.RetirementResignEmployeeCancelApprovers .Where(x => x.RetirementResignEmployeeCancel.Id == id && x.ApproveType.ToUpper() == type.ToUpper()) .ToListAsync(); _context.RemoveRange(data); await _context.SaveChangesAsync(); var addList = new List(); foreach (var r in req) { addList.Add(new RetirementResignEmployeeCancelApprover { Seq = r.Seq, RetirementResignEmployeeCancel = retirement, Prefix = r.Prefix, FirstName = r.FirstName, LastName = r.LastName, PositionName = r.PositionName, ProfileId = r.ProfileId, KeycloakId = r.KeycloakId, Org = r.Org, ApproveStatus = "PENDING", ApproveType = type.Trim().ToUpper() }); } await _context.AddRangeAsync(addList); await _context.SaveChangesAsync(); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// LV2_013 - เจ้าหน้าที่อนุมัติการลา ลูกจ้างยกเลิก(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("admin-cancel/approve/officer/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> OfficerApproveRetirementResignEmployeeCancelAsync(Guid id) { await _repository.OfficerApproveRetirementResignEmployeeCancel(id); return Success(); } /// /// LV2_015 - ผู้บังคับบัญชาอนุมัติการลาลูกจ้างยกเลิก(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin-cancel/approve/comander/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> CommanderApproveRetirementResignEmployeeCancelAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.CommanderApproveRetirementResignEmployeeCancel(id, req.Reason ?? "", null); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// ผู้บังคับบัญชาไม่อนุมัติการลาลูกจ้างยกเลิก(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin-cancel/reject/comander/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> CommanderRejectRetirementResignEmployeeCancelAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.CommanderRejectRetirementResignEmployeeCancel(id, req.Reason ?? "", req.Date); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// LV2_016 - ผู้มีอำนาจอนุมัติการลา ลูกจ้างยกเลิก(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin-cancel/approve/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> ApproveRetirementResignEmployeeCancelAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.ApproveRetirementResignEmployeeCancel(id, req.Reason ?? "", null); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// LV2_017 - ผู้มีอำนาจไม่อนุมัติการลา ลูกจ้างยกเลิก(ADMIN) /// /// /// /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin-cancel/reject/{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> RejectRetirementResignEmployeeCancelAsync(Guid id, [FromBody] RetirementRequestApproveDto req) { try { await _repository.RejectRetirementResignEmployeeCancel(id, req.Reason ?? "", req.Date); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// แก้ไขข้อมูลการลาออกของลูกจ้างประจำ /// /// Id ลาออก /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("admin-update/resign-info/{id:length(36)}")] public async Task> UpdateResignInfo([FromBody] RetirementUpdateResignInfoRequest req, Guid id) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_RESIGN_EMP"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var updated = await _context.RetirementResignEmployees.AsQueryable() .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementResignNotFound, 404); var ReasonResign = req.ReasonResign; if (req.ReasonResign != null) { switch (req.ReasonResign.Trim().ToUpper()) { case "CAREER": ReasonResign = $"ประกอบอาชีพอื่น"; break; case "MOVE": ReasonResign = $"รับราชการสังกัดอื่น"; break; case "FAMILY": ReasonResign = $"ดูแลบิดามารดา"; break; case "EDUCATION": ReasonResign = $"ศึกษาต่อ"; break; case "OTHER": ReasonResign = $"อื่น ๆ"; break; default: ReasonResign = string.Empty; break; } } updated.Location = !string.IsNullOrEmpty(req.Location) ? req.Location : updated.Location; updated.ReasonResign = !string.IsNullOrEmpty(ReasonResign) ? ReasonResign : updated.ReasonResign; updated.Reason = req.ReasonResign; updated.Remark = !string.IsNullOrEmpty(req.Remark) ? req.Remark : null; updated.SendDate = req.SendDate.HasValue ? req.SendDate : updated.SendDate; updated.ActiveDate = req.ActiveDate.HasValue ? req.ActiveDate : updated.ActiveDate; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } } }