From df1e5dd10395e94b78f5eda75602a0f75089f90f Mon Sep 17 00:00:00 2001 From: kittapath Date: Fri, 8 Nov 2024 15:38:04 +0700 Subject: [PATCH] add employee retire resign --- .../RetirementResignEmployeeController.cs | 2691 +++++++++++++++++ 1 file changed, 2691 insertions(+) create mode 100644 BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs new file mode 100644 index 00000000..25066fc2 --- /dev/null +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs @@ -0,0 +1,2691 @@ +using BMA.EHR.Application.Repositories; +using BMA.EHR.Application.Repositories.MessageQueue; +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 RetirementRepository _repository; + private readonly NotificationRepository _repositoryNoti; + private readonly ApplicationDBContext _context; + private readonly MinIOService _documentService; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IConfiguration _configuration; + private readonly PermissionRepository _permission; + + public RetirementResignEmployeeController(RetirementRepository repository, + NotificationRepository repositoryNoti, + ApplicationDBContext context, + MinIOService documentService, + IHttpContextAccessor httpContextAccessor, + IConfiguration configuration, + PermissionRepository permission) + { + _repository = repository; + _repositoryNoti = repositoryNoti; + _context = context; + _documentService = documentService; + _httpContextAccessor = httpContextAccessor; + _configuration = configuration; + _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"]; + + #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 retirementResigns = 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.ApproveReason, + p.RejectReason, + p.CancelReason, + p.Status, + statusCancel = p.RetirementResignCancels.FirstOrDefault() == null ? null : p.RetirementResignCancels.FirstOrDefault().Status, + p.IsActive, + }) + .ToListAsync(); + + return Success(retirementResigns); + } + } + + /// + /// list รายการลาออกของ User + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("user-cancel")] + public async Task> GetListByProfileCancel() + { + var apiUrl = $"{_configuration["API"]}/org/profile/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 retirementResigns = await _context.RetirementResignCancels.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.ApproveReason, + p.RejectReason, + p.CancelReason, + p.Status, + p.IsActive, + }) + .ToListAsync(); + + return Success(retirementResigns); + } + } + + /// + /// list รายการลาออกของ Admin + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet()] + public async Task> GetListByAdmin(string type) + { + var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_RESIGN"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + var retirementResigns = await _context.RetirementResigns.AsQueryable() + .Where(x => 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, + statusCancel = p.RetirementResignCancels.FirstOrDefault().Status ?? null, + p.ApproveReason, + p.RejectReason, + p.CancelReason, + p.IsActive, + p.CreatedAt, + }) + .ToListAsync(); + + return Success(retirementResigns); + } + + /// + /// list รายการลาออกของ Admin + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("cancel")] + public async Task> GetListByAdminCancel(string type) + { + var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_RESIGN"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + var retirementResigns = await _context.RetirementResignCancels.AsQueryable() + .Where(x => 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.RetirementResign.Status, + p.ApproveReason, + p.RejectReason, + p.CancelReason, + p.IsActive, + p.CreatedAt, + }) + .ToListAsync(); + + return Success(retirementResigns); + } + + /// + /// get รายละเอียดลาออก + /// + /// Id ลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("{id:length(36)}")] + public async Task> GetDetailByUser(Guid id) + { + var dataMain = await _context.RetirementResigns.AsQueryable() + .Where(x => x.Id == id) + .Select(p => new + { + p.Status, + }) + .FirstOrDefaultAsync(); + if (dataMain == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + if (dataMain.Status != "CANCEL") + { + var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "SYS_RESIGN"); + var createdUserId = await _context.RetirementResigns.AsQueryable() + .Where(x => x.Id == id) + .Where(x => x.CreatedUserId == UserId) + .FirstOrDefaultAsync(); + if (getWorkflow == false && createdUserId == null) + { + var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_RESIGN"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + } + var data = await _context.RetirementResigns.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.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, + RetirementResignCancels = p.RetirementResignCancels.FirstOrDefault(), + // Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id, + RetirementResignDocs = p.RetirementResignDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), + // RetirementResignDebtDocs = p.RetirementResignDebtDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), + }) + .FirstOrDefaultAsync(); + if (data == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + var retirementResignDocs = new List(); + foreach (var doc in data.RetirementResignDocs) + { + var _doc = new + { + FileName = doc.FileName, + PathName = await _documentService.ImagesPath(doc.Id), + doc.Id, + }; + retirementResignDocs.Add(_doc); + } + // var retirementResignDebtDocs = new List(); + // foreach (var doc in data.RetirementResignDebtDocs) + // { + // var _doc = new + // { + // FileName = doc.FileName, + // PathName = await _documentService.ImagesPath(doc.Id), + // doc.Id, + // }; + // retirementResignDebtDocs.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.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, + idCancel = data.RetirementResignCancels?.Id ?? Guid.Empty, + statusCancel = data.RetirementResignCancels?.Status ?? null, + // Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar), + Docs = retirementResignDocs, + // DocDebts = retirementResignDebtDocs, + }; + + return Success(_data); + } + else + { + + var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "RETIREMENT_CANCEL"); + var createdUserId = await _context.RetirementResignCancels.AsQueryable() + .Where(x => x.CreatedUserId == UserId) + .Where(x => x.Id == id) + .FirstOrDefaultAsync(); + if (getWorkflow == false && createdUserId == null) + { + var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_RESIGN"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + } + var data = await _context.RetirementResignCancels.AsQueryable() + .Where(x => x.RetirementResign.Id == id) + .Select(p => new + { + p.Id, + p.prefix, + p.firstName, + p.lastName, + p.profileId, + p.Location, + p.SendDate, + p.ActiveDate, + p.Reason, + 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, + idMain = p.RetirementResign.Id, + statusMain = p.RetirementResign.Status, + RetirementResignDocs = p.RetirementResign.RetirementResignDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), + }) + .FirstOrDefaultAsync(); + if (data == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + var retirementResignDocs = new List(); + foreach (var doc in data.RetirementResignDocs) + { + var _doc = new + { + FileName = doc.FileName, + PathName = await _documentService.ImagesPath(doc.Id), + doc.Id, + }; + retirementResignDocs.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.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, + // Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar), + Docs = retirementResignDocs, + // DocDebts = retirementResignDebtDocs, + }; + return Success(_data); + } + } + + /// + /// get รายละเอียดลาออก + /// + /// Id ลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("cancel/{id:length(36)}")] + public async Task> GetDetailByUserCancel(Guid id) + { + var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "RETIREMENT_CANCEL"); + var createdUserId = await _context.RetirementResignCancels.AsQueryable() + .Where(x => x.CreatedUserId == UserId) + .FirstOrDefaultAsync(); + if (getWorkflow == false && createdUserId == null) + { + var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_RESIGN"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + } + var data = await _context.RetirementResignCancels.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.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, + idMain = p.RetirementResign.Id, + statusMain = p.RetirementResign.Status, + RetirementResignDocs = p.RetirementResign.RetirementResignDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), + }) + .FirstOrDefaultAsync(); + if (data == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + var retirementResignDocs = new List(); + foreach (var doc in data.RetirementResignDocs) + { + var _doc = new + { + FileName = doc.FileName, + PathName = await _documentService.ImagesPath(doc.Id), + doc.Id, + }; + retirementResignDocs.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.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, + // Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar), + Docs = retirementResignDocs, + // DocDebts = retirementResignDebtDocs, + }; + return Success(_data); + } + + /// + /// สร้างการลาออก + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost()] + public async Task> Post([FromForm] RetirementResignRequest req) + { + // var profile = await _context.Profiles + // .Include(x => x.PositionLevel) + // .Include(x => x.PositionType) + // .Include(x => x.PosNo) + // .Include(x => x.Salaries) + // .Include(x => x.Position) + // .Include(x => x.Prefix) + // .FirstOrDefaultAsync(x => x.KeycloakId == Guid.Parse(UserId)); + // if (profile == null) + // return Error(GlobalMessages.DataNotFound, 404); + + var retirementResign = new RetirementResign + { + // Profile = profile, + Location = req.Location, + SendDate = DateTime.Now, + ActiveDate = req.ActiveDate, + Reason = req.Reason, + // AmountOld = profile.Salaries.Count() == 0 ? null : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, + // PositionLevelOld = profile.PositionLevel == null ? null : profile.PositionLevel.Name, + // PositionTypeOld = profile.PositionType == null ? null : profile.PositionType.Name, + // PositionNumberOld = profile.PosNo == null ? null : profile.PosNo.Name, + // OrganizationPositionOld = profile.Position == null ? profile.Oc : $"{profile.Position.Name}-{profile.Oc}", + 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/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); + + retirementResign.profileId = org.result.profileId; + retirementResign.prefix = org.result.prefix; + retirementResign.firstName = org.result.firstName; + retirementResign.lastName = org.result.lastName; + retirementResign.citizenId = org.result.citizenId; + retirementResign.rootOld = org.result.root; + retirementResign.rootOldId = org.result.rootId; + retirementResign.rootShortNameOld = org.result.rootShortName; + retirementResign.child1Old = org.result.child1; + retirementResign.child1OldId = org.result.child1Id; + retirementResign.child1ShortNameOld = org.result.child1ShortName; + retirementResign.child2Old = org.result.child2; + retirementResign.child2OldId = org.result.child2Id; + retirementResign.child2ShortNameOld = org.result.child2ShortName; + retirementResign.child3Old = org.result.child3; + retirementResign.child3OldId = org.result.child3Id; + retirementResign.child3ShortNameOld = org.result.child3ShortName; + retirementResign.child4Old = org.result.child4; + retirementResign.child4OldId = org.result.child4Id; + retirementResign.child4ShortNameOld = org.result.child4ShortName; + retirementResign.posMasterNoOld = org.result.posMasterNo; + retirementResign.posTypeOldId = org.result.posTypeId; + retirementResign.posTypeNameOld = org.result.posTypeName; + retirementResign.posLevelOldId = org.result.posLevelId; + retirementResign.posLevelNameOld = org.result.posLevelName; + + retirementResign.PositionOld = org.result.position; + retirementResign.PositionLevelOld = org.result.posLevelName; + retirementResign.PositionTypeOld = org.result.posTypeName; + retirementResign.PositionNumberOld = org.result.nodeShortName + org.result.posMasterNo; + retirementResign.OrganizationOld = (org.result.child4 == null ? "" : org.result.child4 + "/") + + (org.result.child3 == null ? "" : org.result.child3 + "/") + + (org.result.child2 == null ? "" : org.result.child2 + "/") + + (org.result.child1 == null ? "" : org.result.child1 + "/") + + (org.result.root == null ? "" : org.result.root); + retirementResign.OrganizationPositionOld = org.result.position + "-" + retirementResign.OrganizationOld; + } + await _context.RetirementResigns.AddAsync(retirementResign); + 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 retirementResignDoc = new RetirementResignDoc + { + RetirementResign = retirementResign, + Document = _doc, + CreatedFullName = FullName ?? "System Administrator", + CreatedUserId = UserId ?? "", + CreatedAt = DateTime.Now, + LastUpdateFullName = FullName ?? "System Administrator", + LastUpdateUserId = UserId ?? "", + LastUpdatedAt = DateTime.Now, + }; + await _context.RetirementResignDocs.AddAsync(retirementResignDoc); + } + } + } + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc3db9-257d-470d-8256-3dc24f6fa332"), + // $"{retirementResign.prefix}{retirementResign.firstName} {retirementResign.lastName} ได้ทำการยื่นขอลาออก", + // $"{retirementResign.prefix}{retirementResign.firstName} {retirementResign.lastName} ได้ทำการยื่นขอลาออก", + // "", + // "", + // true + // ); + 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 = retirementResign.Id, + sysName = "SYS_RETIREMENT", + posLevelName = retirementResign.PositionLevelOld, + posTypeName = retirementResign.PositionTypeOld, + }); + } + return Success(retirementResign); + } + + /// + /// แก้ไขการลาออก + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("{id:length(36)}")] + public async Task> Put([FromForm] RetirementResignRequest req, Guid id) + { + var updated = await _context.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + updated.Location = req.Location; + updated.ActiveDate = req.ActiveDate; + updated.Reason = 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] RetirementResignRequest req, Guid id) + { + var updated = await _context.RetirementResignCancels + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + updated.Location = req.Location; + updated.ActiveDate = req.ActiveDate; + updated.Reason = 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("debt/{id:length(36)}")] + public async Task> Debt([FromBody] RetirementResignDebtRequest req, Guid id) + { + var updated = await _context.RetirementResigns.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 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; + + // 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 retirementResignDebtDoc = new RetirementResignDebtDoc + // { + // RetirementResign = updated, + // Document = _doc, + // CreatedFullName = FullName ?? "System Administrator", + // CreatedUserId = UserId ?? "", + // CreatedAt = DateTime.Now, + // LastUpdateFullName = FullName ?? "System Administrator", + // LastUpdateUserId = UserId ?? "", + // LastUpdatedAt = DateTime.Now, + // }; + // await _context.RetirementResignDebtDocs.AddAsync(retirementResignDebtDoc); + // } + // } + // } + await _context.SaveChangesAsync(); + return Success(); + } + + /// + /// แก้ไขรายการตรวจสอบเงื่อนไขต่าง ๆ + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpDelete("debt/{id:length(36)}")] + public async Task> DebtDelete(Guid id) + { + var deleted = await _context.RetirementResignDocs.AsQueryable() + .FirstOrDefaultAsync(x => x.Document.Id == id); + if (deleted == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + _context.RetirementResignDocs.Remove(deleted); + + var _deleted = await _context.Documents.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == id); + if (_deleted == null) + return Error(GlobalMessages.RetirementResignNotFound, 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.RetirementResigns.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + updated.CancelReason = req.Reason; + if (updated.Status == "DONE") + { + var retirementResignCancel = new RetirementResignCancel + { + Location = updated.Location, + SendDate = updated.SendDate, + ActiveDate = updated.ActiveDate, + Reason = updated.Reason, + 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, + rootShortNameOld = updated.rootShortNameOld, + child1Old = updated.child1Old, + child1OldId = updated.child1OldId, + child1ShortNameOld = updated.child1ShortNameOld, + child2Old = updated.child2Old, + child2OldId = updated.child2OldId, + child2ShortNameOld = updated.child2ShortNameOld, + child3Old = updated.child3Old, + child3OldId = updated.child3OldId, + child3ShortNameOld = updated.child3ShortNameOld, + child4Old = updated.child4Old, + child4OldId = updated.child4OldId, + child4ShortNameOld = updated.child4ShortNameOld, + posMasterNoOld = updated.posMasterNoOld, + posTypeOldId = updated.posTypeOldId, + posTypeNameOld = updated.posTypeNameOld, + posLevelOldId = updated.posLevelOldId, + posLevelNameOld = updated.posLevelNameOld, + RetirementResign = updated, + Status = "WAITTING", + CreatedFullName = FullName ?? "System Administrator", + CreatedUserId = UserId ?? "", + CreatedAt = DateTime.Now, + LastUpdateFullName = FullName ?? "System Administrator", + LastUpdateUserId = UserId ?? "", + LastUpdatedAt = DateTime.Now, + }; + await _context.RetirementResignCancels.AddAsync(retirementResignCancel); + 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 = retirementResignCancel.Id, + sysName = "RETIREMENT_CANCEL", + posLevelName = retirementResignCancel.PositionLevelOld, + posTypeName = retirementResignCancel.PositionTypeOld, + }); + } + } + // else + // { + updated.Status = "CANCEL"; + // } + // if (updated.OfficerReject != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc3db9-257d-470d-8256-3dc24f6fa332"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้ทำการขอยกเลิก", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้ทำการขอยกเลิก", + // "", + // "", + // true + // ); + // } + // if (updated.CommanderReject != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc432c-2bc5-4b81-8089-9c057c51192c"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้ทำการขอยกเลิก", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้ทำการขอยกเลิก", + // "", + // "", + // true + // ); + // } + // if (updated.OligarchReject != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc4307-0adc-4bcd-8213-5479bb010236"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้ทำการขอยกเลิก", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้ทำการขอยกเลิก", + // "", + // "", + // true + // ); + // } + 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.RetirementResigns.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == id); + if (deleted == null) + return Error(GlobalMessages.RetirementResignNotFound, 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + // updated.Status = "APPROVE"; + updated.OfficerReject = false; + updated.OfficerApproveReason = req.Reason; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc432c-2bc5-4b81-8089-9c057c51192c"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากการเจ้าหน้าที่", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากการเจ้าหน้าที่", + // "", + // "", + // true + // ); + // if (updated.profileId != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse(updated.profileId), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากการเจ้าหน้าที่", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากการเจ้าหน้าที่", + // "", + // "", + // true + // ); + // } + 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + if ((DateTime.Now - updated.CreatedAt).TotalDays >= 90) + return Error("สามารถยับยั้งได้ไม่เกิน 90 วัน"); + // updated.Status = "REJECT"; + updated.OfficerReject = true; + updated.OfficerRejectReason = req.Reason; + updated.OfficerRejectDate = req.Date; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc432c-2bc5-4b81-8089-9c057c51192c"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากการเจ้าหน้าที่", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากการเจ้าหน้าที่", + // "", + // "", + // true + // ); + // if (updated.profileId != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse(updated.profileId), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากการเจ้าหน้าที่", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากการเจ้าหน้าที่", + // "", + // "", + // true + // ); + // } + 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + // updated.Status = "APPROVE"; + updated.CommanderReject = false; + updated.CommanderApproveReason = req.Reason; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc4307-0adc-4bcd-8213-5479bb010236"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้บังคับบัญชา", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้บังคับบัญชา", + // "", + // "", + // true + // ); + // if (updated.profileId != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse(updated.profileId), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้บังคับบัญชา", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้บังคับบัญชา", + // "", + // "", + // true + // ); + // } + 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + if ((DateTime.Now - updated.CreatedAt).TotalDays >= 90) + return Error("สามารถยับยั้งได้ไม่เกิน 90 วัน"); + // updated.Status = "REJECT"; + updated.CommanderReject = true; + updated.CommanderRejectReason = req.Reason; + updated.CommanderRejectDate = req.Date; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc4307-0adc-4bcd-8213-5479bb010236"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากผู้บังคับบัญชา", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากผู้บังคับบัญชา", + // "", + // "", + // true + // ); + // if (updated.profileId != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse(updated.profileId), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากผู้บังคับบัญชา", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากผู้บังคับบัญชา", + // "", + // "", + // true + // ); + // } + 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + updated.Status = "APPROVE"; + updated.OligarchReject = false; + updated.OligarchApproveReason = req.Reason; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc3db9-257d-470d-8256-3dc24f6fa332"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้มีอำนาจ", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้มีอำนาจ", + // "", + // "", + // true + // ); + // if (updated.profileId != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse(updated.profileId), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้มีอำนาจ", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้มีอำนาจ", + // "", + // "", + // true + // ); + // } + 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.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 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 _repositoryNoti.PushNotificationAsync( + // Guid.Parse("08dc3db9-257d-470d-8256-3dc24f6fa332"), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้มีอำนาจ", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ได้รับการอนุมัติจากผู้มีอำนาจ", + // "", + // "", + // true + // ); + // if (updated.profileId != null) + // { + // await _repositoryNoti.PushNotificationAsync( + // Guid.Parse(updated.profileId), + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากผู้มีอำนาจ", + // $"คำขอลาออกของ {updated.prefix}{updated.firstName} {updated.lastName} ถูกยับยั้งจากผู้มีอำนาจ", + // "", + // "", + // true + // ); + // } + 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.RetirementResignCancels + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 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.RetirementResignCancels + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 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"); + 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.RetirementResigns + .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); + } + var data = await _context.RetirementQuestions.AsQueryable() + .OrderByDescending(x => x.CreatedAt) + .Select(p => new + { + Id = p.Id, + Fullname = $"{p.RetirementResign.prefix}{p.RetirementResign.firstName} {p.RetirementResign.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, + }) + .ToListAsync(); + return Success(data); + } + + /// + /// get รายละเอียดแบบสอบถามหลังลาออก + /// + /// Id แบบสอบถามหลังลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("questionnaire/{id:length(36)}")] + public async Task> GetByIdQuestion(Guid id) + { + var data = await _context.RetirementQuestions.AsQueryable() + .Where(x => x.Id == id) + .Select(p => new + { + Id = p.Id, + Prefix = p.RetirementResign.prefix, + FirstName = p.RetirementResign.firstName, + LastName = p.RetirementResign.lastName, + Position = p.RetirementResign.PositionOld, + PositionLevel = p.RetirementResign.posLevelNameOld, + Org = p.RetirementResign.OrganizationOld, + Fullname = $"{p.RetirementResign.prefix}{p.RetirementResign.firstName} {p.RetirementResign.lastName}", + // Avatar = p.RetirementResign.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.RetirementResign.Profile.Avatar.Id, + 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, + AppointDate = p.AppointDate, + LastUpdatedAt = p.LastUpdatedAt, + OrganizationPositionOld = p.RetirementResign.OrganizationPositionOld, + CreatedAt = p.CreatedAt, + posTypeName = p.RetirementResign.posTypeNameOld, + posLevelName = p.RetirementResign.posLevelNameOld, + posMasterNo = p.RetirementResign.posMasterNoOld, + root = p.RetirementResign.rootOld, + rootShortName = p.RetirementResign.rootShortNameOld, + child1 = p.RetirementResign.child1Old, + child1ShortName = p.RetirementResign.child1ShortNameOld, + child2 = p.RetirementResign.child2Old, + child2ShortName = p.RetirementResign.child2ShortNameOld, + child3 = p.RetirementResign.child3Old, + child3ShortName = p.RetirementResign.child3ShortNameOld, + child4 = p.RetirementResign.child4Old, + child4ShortName = p.RetirementResign.child4ShortNameOld, + Score1 = p.Score1, + Score2 = p.Score2, + Score3 = p.Score3, + Score4 = p.Score4, + Score5 = p.Score5, + Score6 = p.Score6, + Score7 = p.Score7, + Score8 = p.Score8, + Score9 = p.Score9, + Score10 = p.Score10, + ScoreTotal = p.ScoreTotal, + Comment = p.Comment, + }) + .FirstOrDefaultAsync(); + if (data == null) + return Error(GlobalMessages.RetirementQuestionNotFound, 404); + // var _data = new + // { + // data.Id, + // // data.PrefixId, + // data.Position, + // data.PositionLevel, + // data.Org, + // data.Fullname, + // data.Prefix, + // // Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar), + // data.ReasonWork, + // data.ReasonWorkOther, + // data.TimeThink, + // data.ExitFactor, + // data.ExitFactorOther, + // data.Adjust, + // data.AdjustOther, + // data.RealReason, + // data.NotExitFactor, + // data.Havejob, + // data.HavejobReason, + // data.SuggestFriends, + // data.SuggestFriendsReason, + // data.FutureWork, + // data.FutureWorkReason, + // data.Suggestion, + // data.AppointDate, + // data.OrganizationPositionOld, + // data.LastUpdatedAt, + // data.CreatedAt, + // data.Score1, + // data.Score2, + // data.Score3, + // data.Score4, + // data.Score5, + // data.Score6, + // data.Score7, + // data.Score8, + // data.Score9, + // data.Score10, + // data.ScoreTotal, + // data.Comment, + // }; + + return Success(data); + } + + /// + /// สร้างแบบสอบถามหลังลาออก + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("questionnaire")] + public async Task> PostQuestion([FromBody] RetirementQuestionRequest req) + { + var retirementResign = await _context.RetirementResigns.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == req.RetirementResignId); + if (retirementResign == null) + return Error(GlobalMessages.RetirementResignNotFound); + + var period = new RetirementQuestion + { + RetirementResign = 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, + }; + await _context.RetirementQuestions.AddAsync(period); + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// ลบแบบสอบถามหลังลาออก + /// + /// Id แบบสอบถามหลังลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpDelete("questionnaire/{id:length(36)}")] + public async Task> DeleteQuestion(Guid id) + { + var deleted = await _context.RetirementQuestions.AsQueryable() + .Where(x => x.Id == id) + .FirstOrDefaultAsync(); + + if (deleted == null) + return Error(GlobalMessages.RetirementQuestionNotFound); + _context.RetirementQuestions.Remove(deleted); + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// แก้ไขแบบสอบถามหลังลาออก + /// + /// Id แบบสอบถามหลังลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("questionnaire/{id:length(36)}")] + public async Task> PutQuestion([FromBody] RetirementQuestionRequest req, Guid id) + { + var uppdated = await _context.RetirementQuestions.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == id); + if (uppdated == null) + return Error(GlobalMessages.RetirementQuestionNotFound); + + var retirementResign = await _context.RetirementResigns.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == req.RetirementResignId); + if (retirementResign == null) + return Error(GlobalMessages.InsigniaNotFound); + + // uppdated.RetirementResign = retirementResign; + uppdated.ReasonWork = Newtonsoft.Json.JsonConvert.SerializeObject(req.ReasonWork); + uppdated.ReasonWorkOther = req.ReasonWorkOther; + uppdated.TimeThink = req.TimeThink; + uppdated.ExitFactor = Newtonsoft.Json.JsonConvert.SerializeObject(req.ExitFactor); + uppdated.ExitFactorOther = req.ExitFactorOther; + uppdated.Adjust = Newtonsoft.Json.JsonConvert.SerializeObject(req.Adjust); + uppdated.AdjustOther = req.AdjustOther; + uppdated.RealReason = req.RealReason; + uppdated.NotExitFactor = req.NotExitFactor; + uppdated.Havejob = req.Havejob; + uppdated.HavejobReason = req.HavejobReason; + uppdated.SuggestFriends = req.SuggestFriends; + uppdated.SuggestFriendsReason = req.SuggestFriendsReason; + uppdated.FutureWork = req.FutureWork; + uppdated.FutureWorkReason = req.FutureWorkReason; + uppdated.Suggestion = req.Suggestion; + uppdated.LastUpdateFullName = FullName ?? "System Administrator"; + uppdated.LastUpdateUserId = UserId ?? ""; + uppdated.LastUpdatedAt = DateTime.Now; + + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// แก้ไขคะแนนแบบสอบถามหลังลาออก + /// + /// Id แบบสอบถามหลังลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("questionnaire/comment/{id:length(36)}")] + public async Task> PutQuestionComment([FromBody] RetirementQuestionCommentRequest req, Guid id) + { + var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_RESIGN_INTERVIEW"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + var uppdated = await _context.RetirementQuestions.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == id); + if (uppdated == null) + return Error(GlobalMessages.RetirementQuestionNotFound); + + uppdated.Score1 = req.Score1; + uppdated.Score2 = req.Score2; + uppdated.Score3 = req.Score3; + uppdated.Score4 = req.Score4; + uppdated.Score5 = req.Score5; + uppdated.Score6 = req.Score6; + uppdated.Score7 = req.Score7; + uppdated.Score8 = req.Score8; + uppdated.Score9 = req.Score9; + uppdated.Score10 = req.Score10; + uppdated.ScoreTotal = req.ScoreTotal; + uppdated.Comment = req.Comment; + uppdated.LastUpdateFullName = FullName ?? "System Administrator"; + uppdated.LastUpdateUserId = UserId ?? ""; + uppdated.LastUpdatedAt = DateTime.Now; + + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// แก้ไขกําหนดวันนัดหมายเพื่อทําการสัมภาษณ์การลาออก + /// + /// Id กําหนดวันนัดหมายเพื่อทําการสัมภาษณ์การลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("questionnaire/appoint/{id:length(36)}")] + public async Task> UpdateAppointQuestion([FromBody] RetirementQuestionAppointRequest req, Guid id) + { + var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_RESIGN_INTERVIEW"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + var uppdated = await _context.RetirementQuestions.AsQueryable() + .Include(x => x.RetirementResign) + .FirstOrDefaultAsync(x => x.Id == id); + if (uppdated == null) + return Error(GlobalMessages.RetirementQuestionNotFound); + + uppdated.AppointDate = req.AppointDate; + uppdated.LastUpdateFullName = FullName ?? "System Administrator"; + uppdated.LastUpdateUserId = UserId ?? ""; + uppdated.LastUpdatedAt = DateTime.Now; + if (uppdated.RetirementResign != null && uppdated.RetirementResign.profileId != null) + { + await _repositoryNoti.PushNotificationAsync( + Guid.Parse(uppdated.RetirementResign.profileId), + $"การนัดสัมภาษณ์เหตุผลการลาออก {req.AppointDate.ToThaiFullDate()}", + $"การนัดสัมภาษณ์เหตุผลการลาออก {req.AppointDate.ToThaiFullDate()}", + "", + "", + true + ); + } + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// list คำถาม (USER) + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("questionnaire/question")] + public async Task> GetQuestionnaireQuestion() + { + //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); + //} + var retirementQuestionnaireQuestion = await _context.RetirementQuestionnaireQuestions.AsQueryable() + .Select(x => new + { + Question1Desc = x.Question1Desc, + Question1Score = x.Question1Score, + Question1Answer = x.Question1Answer == null ? null : JsonConvert.DeserializeObject>(x.Question1Answer), + Question2Desc = x.Question2Desc, + Question2Score = x.Question2Score, + Question2Answer = x.Question2Answer == null ? null : JsonConvert.DeserializeObject>(x.Question2Answer), + Question3Desc = x.Question3Desc, + Question3Score = x.Question3Score, + Question3Answer = x.Question3Answer == null ? null : JsonConvert.DeserializeObject>(x.Question3Answer), + Question4Desc = x.Question4Desc, + Question4Score = x.Question4Score, + Question4Answer = x.Question4Answer == null ? null : JsonConvert.DeserializeObject>(x.Question4Answer), + Question5Desc = x.Question5Desc, + Question5Score = x.Question5Score, + Question5Answer = x.Question5Answer == null ? null : JsonConvert.DeserializeObject>(x.Question5Answer), + Question6Desc = x.Question6Desc, + Question6Score = x.Question6Score, + Question6Answer = x.Question6Answer == null ? null : JsonConvert.DeserializeObject>(x.Question6Answer), + Question7Desc = x.Question7Desc, + Question7Score = x.Question7Score, + Question7Answer = x.Question7Answer == null ? null : JsonConvert.DeserializeObject>(x.Question7Answer), + Question8Desc = x.Question8Desc, + Question8Score = x.Question8Score, + Question8Answer = x.Question8Answer == null ? null : JsonConvert.DeserializeObject>(x.Question8Answer), + Question9Desc = x.Question9Desc, + Question9Score = x.Question9Score, + Question9Answer = x.Question9Answer == null ? null : JsonConvert.DeserializeObject>(x.Question9Answer), + Question10Desc = x.Question10Desc, + Question10Score = x.Question10Score, + Question10Answer = x.Question10Answer == null ? null : JsonConvert.DeserializeObject>(x.Question10Answer), + }) + .FirstOrDefaultAsync(); + if (retirementQuestionnaireQuestion == null) + return Error(GlobalMessages.RetirementQuestionNotFound); + + return Success(retirementQuestionnaireQuestion); + } + + /// + /// update คำถาม + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("questionnaire/question")] + public async Task> UpdateQuestionnaireQuestion([FromBody] RetirementQuestionnaireQuestionRequest req) + { + var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_RESIGN_INTERVIEW"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + var uppdated = await _context.RetirementQuestionnaireQuestions.AsQueryable() + .FirstOrDefaultAsync(); + if (uppdated == null) + return Error(GlobalMessages.RetirementQuestionnaireQuestionNotFound); + + uppdated.Question1Desc = req.Question1Desc; + uppdated.Question1Score = req.Question1Score; + uppdated.Question1Answer = JsonConvert.SerializeObject(req.Question1Answer); + uppdated.Question2Desc = req.Question2Desc; + uppdated.Question2Score = req.Question2Score; + uppdated.Question2Answer = JsonConvert.SerializeObject(req.Question2Answer); + uppdated.Question3Desc = req.Question3Desc; + uppdated.Question3Score = req.Question3Score; + uppdated.Question3Answer = JsonConvert.SerializeObject(req.Question3Answer); + uppdated.Question4Desc = req.Question4Desc; + uppdated.Question4Score = req.Question4Score; + uppdated.Question4Answer = JsonConvert.SerializeObject(req.Question4Answer); + uppdated.Question5Desc = req.Question5Desc; + uppdated.Question5Score = req.Question5Score; + uppdated.Question5Answer = JsonConvert.SerializeObject(req.Question5Answer); + uppdated.Question6Desc = req.Question6Desc; + uppdated.Question6Score = req.Question6Score; + uppdated.Question6Answer = JsonConvert.SerializeObject(req.Question6Answer); + uppdated.Question7Desc = req.Question7Desc; + uppdated.Question7Score = req.Question7Score; + uppdated.Question7Answer = JsonConvert.SerializeObject(req.Question7Answer); + uppdated.Question8Desc = req.Question8Desc; + uppdated.Question8Score = req.Question8Score; + uppdated.Question8Answer = JsonConvert.SerializeObject(req.Question8Answer); + uppdated.Question9Desc = req.Question9Desc; + uppdated.Question9Score = req.Question9Score; + uppdated.Question9Answer = JsonConvert.SerializeObject(req.Question9Answer); + uppdated.Question10Desc = req.Question10Desc; + uppdated.Question10Score = req.Question10Score; + uppdated.Question10Answer = JsonConvert.SerializeObject(req.Question10Answer); + uppdated.LastUpdateFullName = FullName ?? "System Administrator"; + uppdated.LastUpdateUserId = UserId ?? ""; + uppdated.LastUpdatedAt = DateTime.Now; + + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// list คำถาม (ADMIN) + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("questionnaire/question/admin")] + public async Task> GetQuestionnaireQuestionAdmin() + { + 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); + } + var retirementQuestionnaireQuestion = await _context.RetirementQuestionnaireQuestions.AsQueryable() + .Select(x => new + { + Question1Desc = x.Question1Desc, + Question1Score = x.Question1Score, + Question1Answer = x.Question1Answer == null ? null : JsonConvert.DeserializeObject>(x.Question1Answer), + Question2Desc = x.Question2Desc, + Question2Score = x.Question2Score, + Question2Answer = x.Question2Answer == null ? null : JsonConvert.DeserializeObject>(x.Question2Answer), + Question3Desc = x.Question3Desc, + Question3Score = x.Question3Score, + Question3Answer = x.Question3Answer == null ? null : JsonConvert.DeserializeObject>(x.Question3Answer), + Question4Desc = x.Question4Desc, + Question4Score = x.Question4Score, + Question4Answer = x.Question4Answer == null ? null : JsonConvert.DeserializeObject>(x.Question4Answer), + Question5Desc = x.Question5Desc, + Question5Score = x.Question5Score, + Question5Answer = x.Question5Answer == null ? null : JsonConvert.DeserializeObject>(x.Question5Answer), + Question6Desc = x.Question6Desc, + Question6Score = x.Question6Score, + Question6Answer = x.Question6Answer == null ? null : JsonConvert.DeserializeObject>(x.Question6Answer), + Question7Desc = x.Question7Desc, + Question7Score = x.Question7Score, + Question7Answer = x.Question7Answer == null ? null : JsonConvert.DeserializeObject>(x.Question7Answer), + Question8Desc = x.Question8Desc, + Question8Score = x.Question8Score, + Question8Answer = x.Question8Answer == null ? null : JsonConvert.DeserializeObject>(x.Question8Answer), + Question9Desc = x.Question9Desc, + Question9Score = x.Question9Score, + Question9Answer = x.Question9Answer == null ? null : JsonConvert.DeserializeObject>(x.Question9Answer), + Question10Desc = x.Question10Desc, + Question10Score = x.Question10Score, + Question10Answer = x.Question10Answer == null ? null : JsonConvert.DeserializeObject>(x.Question10Answer), + }) + .FirstOrDefaultAsync(); + if (retirementQuestionnaireQuestion == null) + return Error(GlobalMessages.RetirementQuestionNotFound); + + return Success(retirementQuestionnaireQuestion); + } + + /// + /// ส่งรายชื่อออกคำสั่ง C-PM-17 + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("command/report")] + public async Task> PostReport([FromBody] ReportPersonRequest req) + { + var placementProfiles = await _context.RetirementResigns + .Where(x => req.refIds.Contains(x.Id.ToString())) + .ToListAsync(); + placementProfiles.ForEach(profile => profile.Status = "REPORT"); + await _context.SaveChangesAsync(); + return Success(); + } + /// + /// ลบรายชื่อออกคำสั่ง C-PM-17 + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("command/report/delete")] + public async Task> PostReportDelete([FromBody] ReportPersonRequest req) + { + var placementProfiles = await _context.RetirementResigns + .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-17 + /// + /// 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.RetirementResigns + .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 ?? "", + 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, + RemarkVertical = r.RemarkVertical, + }).ToList(); + + var result = new List(); + + foreach (var r in report_data) + { + result.Add(r); + string? _null = null; + 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-17 คำสั่งอนุญาตให้ข้าราชการลาออกจากราชการ + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("command/report/excecute")] + public async Task> PostReportExecute([FromBody] ReportExecuteRequest req) + { + var data = await _context.RetirementResigns + .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, + date = r.commandAffectDate, + amount = r.amount, + commandId = r.commandId, + positionSalaryAmount = r.positionSalaryAmount, + mouthSalaryAmount = r.mouthSalaryAmount, + posNo = p.PositionNumberOld, + position = p.PositionOld, + positionLine = "", + positionPathSide = "", + positionExecutive = "", + positionType = p.PositionTypeOld, + positionLevel = p.PositionLevelOld, + refCommandNo = $"{r.commandNo}/{r.commandYear.ToThaiYear()}", + templateDoc = r.templateDoc, + isLeave = true, + leaveReason = "ออกจากราชการ", + dateLeave = r.commandAffectDate, + }).ToList(); + + var baseAPIOrg = _configuration["API"]; + var apiUrlOrg = $"{baseAPIOrg}/org/command/excexute/salary-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-23 + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("employee/report")] + public async Task> PostReportEmployee([FromBody] ReportPersonRequest req) + { + var placementProfiles = await _context.RetirementResigns + .Where(x => req.refIds.Contains(x.Id.ToString())) + .ToListAsync(); + placementProfiles.ForEach(profile => profile.Status = "REPORT"); + await _context.SaveChangesAsync(); + return Success(); + } + + /// + /// ลบรายชื่อออกคำสั่ง C-PM-23 + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("employee/report/delete")] + public async Task> PostReportDeleteEmployee([FromBody] ReportPersonRequest req) + { + var placementProfiles = await _context.RetirementResigns + .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 คำสั่งให้ลูกจ้างออกจากราชการ + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("employee/report/excecute")] + public async Task> PostReportExecuteEmployee([FromBody] ReportExecuteRequest req) + { + var data = await _context.RetirementResigns + .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, + date = r.commandAffectDate, + amount = r.amount, + commandId = r.commandId, + positionSalaryAmount = r.positionSalaryAmount, + mouthSalaryAmount = r.mouthSalaryAmount, + posNo = p.PositionNumberOld, + position = p.PositionOld, + positionType = p.PositionTypeOld, + positionLevel = p.PositionLevelOld, + refCommandNo = $"{r.commandNo}/{r.commandYear.ToThaiYear()}", + templateDoc = r.templateDoc, + isLeave = true, + leaveReason = "ลาออกจากราชการ", + dateLeave = r.commandAffectDate, + isGovernment = false + }).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-41 + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("leave-cancel/report")] + public async Task> PostReportLeaveCancel([FromBody] ReportPersonRequest req) + { + var placementProfiles = await _context.RetirementResignCancels + .Where(x => req.refIds.Contains(x.Id.ToString())) + .ToListAsync(); + placementProfiles.ForEach(profile => profile.Status = "REPORT"); + await _context.SaveChangesAsync(); + return Success(); + } + + /// + /// ลบรายชื่อออกคำสั่ง C-PM-41 + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("leave-cancel/report/delete")] + public async Task> PostReportDeleteLeaveCancel([FromBody] ReportPersonRequest req) + { + var placementProfiles = await _context.RetirementResignCancels + .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-41 + /// + /// 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.RetirementResignCancels + .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 ?? "-", + Oc = p.rootOld == null ? p.PositionOld == null ? "-" : $"{p.PositionOld}/-" : + p.child4Old != null + ? p.PositionOld == null ? $"{p.child4Old}/{p.child3Old}/{p.child2Old}/{p.child1Old}/{p.rootOld}" : $"{p.PositionOld}/{p.child4Old}/{p.child3Old}/{p.child2Old}/{p.child1Old}/{p.rootOld}" : + p.child3Old != null + ? p.PositionOld == null ? $"{p.child3Old}/{p.child2Old}/{p.child1Old}/{p.rootOld}" : $"{p.PositionOld}/{p.child3Old}/{p.child2Old}/{p.child1Old}/{p.rootOld}" : + p.child2Old != null + ? p.PositionOld == null ? $"{p.child2Old}/{p.child1Old}/{p.rootOld}" : $"{p.PositionOld}/{p.child2Old}/{p.child1Old}/{p.rootOld}" : + p.child1Old != null + ? p.PositionOld == null ? $"{p.child1Old}/{p.rootOld}" : $"{p.PositionOld}/{p.child1Old}/{p.rootOld}" : + p.rootOld != null + ? p.PositionOld == null ? $"{p.rootOld}" : $"{p.PositionOld}/{p.rootOld}" : "-", + PositionLevel = p.PositionLevelOld ?? "-", + 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, + RemarkVertical = r.RemarkVertical, + }).ToList(); + + var result = new List(); + + foreach (var r in report_data) + { + result.Add(r); + string? _null = null; + 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-41 คำสั่งยกเลิกการลาออก + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("leave-cancel/report/excecute")] + public async Task> PostReportExecuteLeaveCancel([FromBody] ReportExecuteRequest req) + { + var data = await _context.RetirementResignCancels + .Include(x => x.RetirementResign) + .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, + date = r.commandAffectDate, + amount = r.amount, + commandId = r.commandId, + positionSalaryAmount = r.positionSalaryAmount, + mouthSalaryAmount = r.mouthSalaryAmount, + posNo = p.PositionNumberOld, + position = p.PositionOld, + positionLine = "", + positionPathSide = "", + positionExecutive = "", + positionType = p.PositionTypeOld, + positionLevel = p.PositionLevelOld, + refCommandNo = $"{r.commandNo}/{r.commandYear.ToThaiYear()}", + templateDoc = r.templateDoc, + isLeave = false, + leaveReason = _null, + dateLeave = _null, + }).ToList(); + + var baseAPIOrg = _configuration["API"]; + var apiUrlOrg = $"{baseAPIOrg}/org/command/excexute/salary-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"); + // var _data = await _context.RetirementResigns + // .Where(x => data.Select(x => x.RetirementResign.Id).Contains(x.Id)) + // .ToListAsync(); + // _data.ForEach(profile => profile.Status = "DONEREJECT"); + await _context.SaveChangesAsync(); + } + } + return Success(); + } + } +}