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();
+ }
+ }
+}