using BMA.EHR.Application.Repositories; 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 Swashbuckle.AspNetCore.Annotations; using System.Security.Claims; namespace BMA.EHR.Retirement.Service.Controllers { [Route("api/v{version:apiVersion}/retirement")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("ระบบพ้นราชการ")] public class RetirementController : BaseController { private readonly RetirementRepository _repository; private readonly ApplicationDBContext _context; private readonly MinIOService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; public RetirementController(RetirementRepository repository, ApplicationDBContext context, MinIOService documentService, IHttpContextAccessor httpContextAccessor) { _repository = repository; _context = context; _documentService = documentService; _httpContextAccessor = httpContextAccessor; } #region " Properties " private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; #endregion #region " จัดลำดับเกษียณ " private class ObjectOrderRetire { public int Order { get; set; } public int? Order1 { get; set; } public int? Order2 { get; set; } public int? Order3 { get; set; } public string LastUpdateFullName { get; set; } public string LastUpdateUserId { get; set; } public DateTime? LastUpdatedAt { get; set; } public Guid? Id { get; set; } } private async Task GenOrderByYear(Guid id) { var Org = await _context.Organizations.FirstOrDefaultAsync(x => x.OrganizationOrder == null); var ocIdList = await _context.Organizations.Select(x => x.Id).ToListAsync(); if (Org != null) ocIdList = _documentService.GetAllIdByRoot(Org.Id); var retire = await _context.RetirementPeriods .FirstOrDefaultAsync(x => x.Id == id); if (retire == null) return; var _retireProfile = await _context.RetirementProfiles .Where(x => x.RetirementPeriod == retire) .ToListAsync(); var profiles = new List(); if (retire.Type.Trim().ToUpper().Contains("OFFICER")) { profiles = await (from x in _context.RetirementProfiles where x.RetirementPeriod == retire select new ObjectOrderRetire { Id = x.Id, Order = x.Order, Order1 = x.Profile == null ? 999999999 : ocIdList.IndexOf((Guid)(x.Profile.OcId)), Order2 = x.Profile == null || x.Profile.PositionType == null ? 999999999 : x.Profile.PositionType.Order, Order3 = x.Profile == null || x.Profile.PositionLevel == null ? 999999999 : x.Profile.PositionLevel.Level, LastUpdateFullName = x.LastUpdateFullName, LastUpdateUserId = x.LastUpdateUserId, LastUpdatedAt = x.LastUpdatedAt, }).ToListAsync(); } if (retire.Type.Trim().ToUpper().Contains("EMPLOYEE")) { profiles = await (from x in _context.RetirementProfiles where x.RetirementPeriod == retire // x.Profile.PositionEmployeeLevelId == null ? null : x.Profile.PositionEmployeeLevelId.Order select new ObjectOrderRetire { Id = x.Id, Order = x.Order, Order1 = x.Profile == null ? null : ocIdList.IndexOf((Guid)(x.Profile.OcId)), LastUpdateFullName = x.LastUpdateFullName, LastUpdateUserId = x.LastUpdateUserId, LastUpdatedAt = x.LastUpdatedAt, }).ToListAsync(); } var _profiles = profiles.AsQueryable().OrderBy(x => x.Order1).ThenBy(x => x.Order2).ThenBy(x => x.Order3).ToList(); var order = 1; foreach (var profile in _profiles) { var retireProfile = _retireProfile.Find(x => x.Id == profile.Id); retireProfile.Order = order; retireProfile.LastUpdateFullName = FullName ?? "System Administrator"; retireProfile.LastUpdateUserId = UserId ?? ""; retireProfile.LastUpdatedAt = DateTime.Now; order++; } await _context.SaveChangesAsync(); } private int SortOrg(Guid? ocId) { if (ocId == null) return 999999999; var Org = _context.Organizations.Include(x => x.OrganizationOrganization).FirstOrDefault(x => x.OrganizationOrder == null); if (Org != null && Org.OrganizationOrganization != null && Org.OrganizationOrganization.Name.Contains("ปลัด")) return -1; var ocIdList = _context.Organizations.Select(x => x.Id).ToList(); if (Org != null) ocIdList = _documentService.GetAllIdByRoot(Org.Id); int index = ocIdList.IndexOf((Guid)ocId); if (index == -1) return 999999999; return index; } #endregion /// /// list ประกาศเกษียณอายุราชการ /// /// ประเภทUser(officer,employee)(ตัวใหญ่หรือเล็กก็ได้) /// ปีงบประมาณ(ค.ศ.) /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{type}/{year}")] public async Task> GetRetirement(string type, int year) { if (type.Trim().ToUpper().Contains("OFFICER") || type.Trim().ToUpper().Contains("EMPLOYEE")) { var retire_old = await _context.RetirementPeriodHistorys .Where(x => x.Year == year) .Where(x => x.Type.Trim().ToUpper().Contains(type.Trim().ToUpper())) .OrderByDescending(x => x.Round) .Select(x => new { Id = x.Id, CreatedAt = x.CreatedAt, Year = x.Year, Round = x.Round, Total = x.Total, TypeReport = x.TypeReport, Json = true, Document = x.Document == null ? false : true, }) .ToListAsync(); var retire = await _context.RetirementPeriods .Include(x => x.RetirementProfiles) .Include(x => x.Document) .Where(x => x.Year == year) .Where(x => x.Type.Trim().ToUpper().Contains(type.Trim().ToUpper())) .FirstOrDefaultAsync(); if (retire != null) { retire_old.Add(new { Id = retire.Id, CreatedAt = retire.CreatedAt, Year = retire.Year, Round = retire.Round, Total = retire.RetirementProfiles.Count(), TypeReport = retire.TypeReport, Json = false, Document = retire.Document == null ? false : true, }); } return Success(retire_old); } return Success(); } /// /// สร้างประกาศเกษียณใหม่ /// /// Id ประวัติรอบพ้นราชการ /// ประเภทประกาศ /// ประเภทUser(officer,employee)(ตัวใหญ่หรือเล็กก็ได้) /// ปีงบประมาณ(ค.ศ.) /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("profile")] public async Task> CreateProfileRetirement([FromBody] PeriodRequest req) { if (!req.Type.Trim().ToUpper().Contains("EMPLOYEE") && !req.Type.Trim().ToUpper().Contains("OFFICER")) return Error("ประเภทพ้นราชการไม่ถูกต้อง"); var round = 1; var retire = await _context.RetirementPeriods .Include(x => x.Document) .Include(x => x.RetirementPeriodHistorys) .Include(x => x.RetirementProfiles) .ThenInclude(x => x.Profile) .Where(x => x.Year == req.Year) .Where(x => x.Type.Trim().ToUpper().Contains(req.Type.Trim().ToUpper())) .FirstOrDefaultAsync(); if (retire == null) { retire = new RetirementPeriod { Round = round, TypeReport = null, Type = req.Type.Trim().ToUpper(), Year = req.Year, CreatedUserId = FullName ?? "", CreatedFullName = UserId ?? "System Administrator", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.RetirementPeriods.AddAsync(retire); var profiles = await _context.Profiles.AsQueryable() .Where(x => x.ProfileType.Trim().ToUpper().Contains(req.Type.Trim().ToUpper())) .ToListAsync(); profiles = profiles.Where(x => x.BirthDate.CalculateRetireDate().Year == req.Year).ToList(); var order = 1; foreach (var profile in profiles) { var data = new RetirementProfile { Order = order, Remove = "PENDING", RetirementPeriod = retire, Profile = profile, CreatedUserId = FullName ?? "", CreatedFullName = UserId ?? "System Administrator", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.RetirementProfiles.AddAsync(data); order++; } await _context.SaveChangesAsync(); await GenOrderByYear(retire.Id); } else { if (retire.Document == null) return Error(GlobalMessages.RetirementNotCreated); if (req.Option == null) req.Option = "EDIT"; var file_name = $"retire_tmp_{DateTime.Now.ToString("yyyyMMddTHHmmss")}"; var profile_old = await _context.RetirementProfiles .Where(x => x.RetirementPeriod == retire) .Select(x => new ProfileJsonRequest { order = x.Order, id = x.Id, reason = x.Reason, remove = x.Remove, profileId = x.Profile.Id, citizenId = x.Profile.CitizenId, prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", organizationOrganization = x.Profile.OrganizationOrganization, oc = x.Profile.Oc, position = x.Profile.Position == null ? null : x.Profile.Position.Name, positionType = x.Profile.PositionType == null ? null : x.Profile.PositionType.Name, positionExecutive = x.Profile.PositionExecutive, posNo = x.Profile.PosNo == null ? null : x.Profile.PosNo.Name, positionEmployeePosition = x.Profile.PositionEmployeePosition, positionEmployeeLevel = x.Profile.PositionEmployeeLevel, positionEmployeeGroup = x.Profile.PositionEmployeeGroup, posNoEmployee = x.Profile.PosNoEmployee, }) .ToListAsync(); var profile = Newtonsoft.Json.JsonConvert.SerializeObject(profile_old); await _documentService.GenerateJsonFile(profile, "/retire", file_name); var history = new RetirementPeriodHistory { RetirementPeriod = retire, Round = retire.Round, TypeReport = retire.TypeReport, Year = retire.Year, Type = retire.Type, Document = retire.Document, Total = retire.RetirementProfiles.Count(), ProfileFile = file_name, CreatedUserId = FullName ?? "", CreatedFullName = UserId ?? "System Administrator", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.RetirementPeriodHistorys.AddAsync(history); // await _context.SaveChangesAsync(); retire.Document = null; retire.Round = retire.Round + 1; retire.TypeReport = req.Option.Trim().ToUpper(); retire.LastUpdateFullName = FullName ?? "System Administrator"; retire.LastUpdateUserId = UserId ?? ""; retire.LastUpdatedAt = DateTime.Now; _context.RetirementProfiles.RemoveRange(retire.RetirementProfiles); if (!req.Option.Trim().ToUpper().Contains("ADD")) { var profileHistorys = await _context.RetirementPeriodHistorys.AsQueryable() .FirstOrDefaultAsync(x => x.Id == req.RetireHistoryId); // var profileOlds = new List(); if (profileHistorys != null) { using (var client = new HttpClient()) { var url = $"https://s3cluster.frappet.com/bma-ehr-fpt/{profileHistorys.ProfileFile}.json"; var responseTask = client.GetAsync(url); var results = responseTask.Result; var profileOlds = Newtonsoft.Json.JsonConvert.DeserializeObject>(results.Content.ReadAsStringAsync().Result); if (profileOlds != null) { profileOlds = profileOlds.Where(x => !x.remove.Trim().ToUpper().Contains("REMOVE")).ToList(); foreach (var profileOld in profileOlds) { var _profile = await _context.Profiles.AsQueryable() .FirstOrDefaultAsync(x => x.CitizenId == profileOld.citizenId); var data = new RetirementProfile { Order = profileOld.order, Remove = "PENDING", RetirementPeriod = retire, Profile = _profile, CreatedUserId = FullName ?? "", CreatedFullName = UserId ?? "System Administrator", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; retire.RetirementProfiles.Add(data); } } } } else { var retireOld = await _context.RetirementPeriods .FirstOrDefaultAsync(x => x.Id == req.RetireHistoryId); if (retireOld == null) return Error(GlobalMessages.RetirementNotFound, 404); var profileOlds = await _context.RetirementProfiles.AsQueryable() .Where(x => x.RetirementPeriod == retireOld) .ToListAsync(); if (profileOlds != null) { profileOlds = profileOlds.Where(x => !x.Remove.Trim().ToUpper().Contains("REMOVE")).ToList(); foreach (var profileOld in profileOlds) { var data = new RetirementProfile { Order = profileOld.Order, Remove = "PENDING", RetirementPeriod = retire, Profile = profileOld.Profile, CreatedUserId = FullName ?? "", CreatedFullName = UserId ?? "System Administrator", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; retire.RetirementProfiles.Add(data); } } } } await _context.SaveChangesAsync(); } // await _context.SaveChangesAsync(); var profile_new = await _context.RetirementProfiles .Where(x => x.RetirementPeriod == retire) .Select(x => new ProfileJsonRequest { order = x.Order, id = x.Id, reason = x.Reason, remove = x.Remove, profileId = x.Profile.Id, citizenId = x.Profile.CitizenId, prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", organizationOrganization = x.Profile.OrganizationOrganization, oc = x.Profile.Oc, position = x.Profile.Position == null ? null : x.Profile.Position.Name, positionType = x.Profile.PositionType == null ? null : x.Profile.PositionType.Name, positionExecutive = x.Profile.PositionExecutive, posNo = x.Profile.PosNo == null ? null : x.Profile.PosNo.Name, positionEmployeePosition = x.Profile.PositionEmployeePosition, positionEmployeeLevel = x.Profile.PositionEmployeeLevel, positionEmployeeGroup = x.Profile.PositionEmployeeGroup, posNoEmployee = x.Profile.PosNoEmployee, }) .ToListAsync(); return Success(new { retire.Id, retire.CreatedAt, retire.Year, retire.Round, retire.Type, retire.TypeReport, profile = profile_new }); } /// /// View รายชื่อผู้เกษียณอายุราชการในประกาศ /// /// Id ประกาศ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{retireId:length(36)}")] public async Task> GetProfileRetirement(Guid retireId) { var retire = await _context.RetirementPeriods .Include(x => x.RetirementProfiles) .Include(x => x.Document) .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) { var profileHistorys = await _context.RetirementPeriodHistorys.AsQueryable() .Include(x => x.Document) .FirstOrDefaultAsync(x => x.Id == retireId); if (profileHistorys == null) return Error(GlobalMessages.RetirementHistoryNotFound, 404); using (var client = new HttpClient()) { var url = $"https://s3cluster.frappet.com/bma-ehr-fpt/{profileHistorys.ProfileFile}.json"; var responseTask = client.GetAsync(url); var results = responseTask.Result; var filehis = profileHistorys.Document == null ? null : await _documentService.ImagesPath(profileHistorys.Document.Id); // Console.WriteLine(results.Content.ReadAsStringAsync().Result); return Success(new { Json = true, profileHistorys.Id, profileHistorys.CreatedAt, profileHistorys.Year, profileHistorys.Round, profileHistorys.Type, profileHistorys.TypeReport, profile = Newtonsoft.Json.JsonConvert.DeserializeObject>(results.Content.ReadAsStringAsync().Result), File = filehis }); } } var profile_new = await _context.RetirementProfiles .Where(x => x.RetirementPeriod == retire) .Select(x => new ProfileJsonRequest { order = x.Order, id = x.Id, reason = x.Reason, remove = x.Remove, profileId = x.Profile.Id, citizenId = x.Profile.CitizenId, prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", organizationOrganization = x.Profile.OrganizationOrganization, oc = x.Profile.Oc, position = x.Profile.Position == null ? null : x.Profile.Position.Name, positionType = x.Profile.PositionType == null ? null : x.Profile.PositionType.Name, positionExecutive = x.Profile.PositionExecutive, posNo = x.Profile.PosNo == null ? null : x.Profile.PosNo.Name, positionEmployeePosition = x.Profile.PositionEmployeePosition, positionEmployeeLevel = x.Profile.PositionEmployeeLevel, positionEmployeeGroup = x.Profile.PositionEmployeeGroup, posNoEmployee = x.Profile.PosNoEmployee, }) .ToListAsync(); var file = retire.Document == null ? null : await _documentService.ImagesPath(retire.Document.Id); return Success(new { Json = false, retire.Id, retire.CreatedAt, retire.Year, retire.Round, retire.Type, retire.TypeReport, profile = profile_new, File = file }); } /// /// Delete รายชื่อผู้เกษียณอายุราชการในประกาศ /// /// Id ผู้ใช้งานในประกาศ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน // [HttpDelete("profile/{retireProfileId:length(36)}")] // public async Task> DeleteProfileRetirement(Guid retireProfileId) // { // var profile = await _context.RetirementProfiles // .FirstOrDefaultAsync(x => x.Id == retireProfileId); // if (profile == null) // return Error(GlobalMessages.DataNotFound, 404); // _context.RetirementProfiles.Remove(profile); // _context.SaveChanges(); // return Success(); // } /// /// Add รายชื่อผู้เกษียณอายุราชการในประกาศ /// /// Id ประกาศ /// Id ผู้ใช้งาน /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("profile/{retireId:length(36)}")] public async Task> AddProfileRetirement([FromBody] ProfileRequest req, Guid retireId) { var profile = await _context.Profiles .FirstOrDefaultAsync(x => x.Id == req.ProfileId); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); var retire = await _context.RetirementPeriods .Include(x => x.RetirementPeriodHistorys) .Include(x => x.RetirementProfiles) .ThenInclude(x => x.Profile) .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) return Error(GlobalMessages.RetirementNotFound, 404); if (retire.RetirementProfiles.Where(x => x.Profile == profile).Count() > 0) return Error("บุคคลนี้ได้ทำการเลือกไว้อยู่แล้ว"); foreach (var retire_profile in retire.RetirementProfiles) { retire_profile.Order++; retire_profile.LastUpdateFullName = FullName ?? "System Administrator"; retire_profile.LastUpdateUserId = UserId ?? ""; retire_profile.LastUpdatedAt = DateTime.Now; } var num = 1; var old_retire = retire.RetirementProfiles.OrderByDescending(x => x.Order).FirstOrDefault(); if (old_retire != null) num = old_retire.Order + 1; var data = new RetirementProfile { Order = num, Remove = "PENDING", RetirementPeriod = retire, Profile = profile, CreatedUserId = FullName ?? "", CreatedFullName = UserId ?? "System Administrator", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; _context.RetirementProfiles.Add(data); await _context.SaveChangesAsync(); if (retire.RetirementPeriodHistorys.Count() == 0) { await GenOrderByYear(retire.Id); } return Success(); } /// /// แก้ไขข้อมูลบุคคล /// /// Id ผู้ใช้งานในประกาศ /// เหตุผล /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("edit")] public async Task> EditReasonProfileRetirement([FromBody] ProfileRetireRequest req) { var profile = await _context.RetirementProfiles .FirstOrDefaultAsync(x => x.Id == req.RetireProfileId); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); profile.Remove = "EDIT"; profile.Reason = req.Reason; profile.LastUpdateFullName = FullName ?? "System Administrator"; profile.LastUpdateUserId = UserId ?? ""; profile.LastUpdatedAt = DateTime.Now; _context.SaveChanges(); return Success(); } /// /// ลบข้อมูลบุคคล /// /// Id ผู้ใช้งานในประกาศ /// เหตุผล /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("remove")] public async Task> RemoveReasonProfileRetirement([FromBody] ProfileRetireRequest req) { var profile = await _context.RetirementProfiles .Include(x => x.RetirementPeriod) .ThenInclude(x => x.RetirementPeriodHistorys) .FirstOrDefaultAsync(x => x.Id == req.RetireProfileId); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); if (profile.RetirementPeriod.RetirementPeriodHistorys.Count() == 0) { await GenOrderByYear(profile.RetirementPeriod.Id); _context.RetirementProfiles.Remove(profile); } else { profile.Remove = "REMOVE"; profile.Reason = req.Reason; profile.LastUpdateFullName = FullName ?? "System Administrator"; profile.LastUpdateUserId = UserId ?? ""; profile.LastUpdatedAt = DateTime.Now; } _context.SaveChanges(); return Success(); } /// /// View เหตุผลแก้ไขข้อมูลบุคคล /// /// Id ผู้ใช้งานในประกาศ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("reason/{retireProfileId:length(36)}")] public async Task> ViewReasonProfileRetirement(Guid retireProfileId) { var profile = await _context.RetirementProfiles .Select(x => new { Id = x.Id, Reason = x.Reason, }) .FirstOrDefaultAsync(x => x.Id == retireProfileId); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); return Success(profile); } /// /// จัดอันดับเกษียณ /// /// Id ประกาศ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("{retireId:length(36)}")] public async Task> UpdateProfileRetirement(Guid retireId) { var retire = await _context.RetirementPeriods .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) return Error(GlobalMessages.RetirementNotFound, 404); await GenOrderByYear(retire.Id); return Success(); } /// /// อัพเอกสารเกษียณอายุราชการ /// /// Id ประกาศ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("upload/{retireId:length(36)}")] public async Task> UploadRetirement([FromForm] RetirementFileRequest req, Guid retireId) { var retire = await _context.RetirementPeriods .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) return Error(GlobalMessages.DataNotFound, 404); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { var file = Request.Form.Files[0]; 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); retire.Document = _doc; retire.LastUpdateFullName = FullName ?? "System Administrator"; retire.LastUpdateUserId = UserId ?? ""; retire.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } /// /// ตรวจสอบการอัพเอกสารเกษียญ false=ยังไม่อัพโหลด true=อัพโหลดเอกสารแล้ว /// /// Id ประกาศ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("upload/check/{retireId:length(36)}")] public async Task> CheckUploadRetirement(Guid retireId) { var retire = await _context.RetirementPeriods .Include(x => x.Document) .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) return Error(GlobalMessages.DataNotFound, 404); if (retire.Document == null) return Success(false); return Success(true); } } }