753 lines
42 KiB
C#
753 lines
42 KiB
C#
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 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 NotificationRepository _repositoryNoti;
|
|
private readonly ApplicationDBContext _context;
|
|
private readonly MinIOService _documentService;
|
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
|
private readonly IConfiguration _configuration;
|
|
|
|
public RetirementController(RetirementRepository repository,
|
|
NotificationRepository repositoryNoti,
|
|
ApplicationDBContext context,
|
|
MinIOService documentService,
|
|
IConfiguration configuration,
|
|
IHttpContextAccessor httpContextAccessor)
|
|
{
|
|
_repository = repository;
|
|
_repositoryNoti = repositoryNoti;
|
|
_context = context;
|
|
_documentService = documentService;
|
|
_httpContextAccessor = httpContextAccessor;
|
|
_configuration = configuration;
|
|
}
|
|
|
|
#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<ObjectOrderRetire>();
|
|
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
|
|
|
|
/// <summary>
|
|
/// list ประกาศเกษียณอายุราชการ
|
|
/// </summary>
|
|
/// <param name="type">ประเภทUser(officer,employee)(ตัวใหญ่หรือเล็กก็ได้)</param>
|
|
/// <param name="year">ปีงบประมาณ(ค.ศ.)</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("{type}/{year}")]
|
|
public async Task<ActionResult<ResponseObject>> 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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// สร้างประกาศเกษียณใหม่
|
|
/// </summary>
|
|
/// <param name="RetireHistoryId">Id ประวัติรอบพ้นราชการ</param>
|
|
/// <param name="Option">ประเภทประกาศ</param>
|
|
/// <param name="Type">ประเภทUser(officer,employee)(ตัวใหญ่หรือเล็กก็ได้)</param>
|
|
/// <param name="Year">ปีงบประมาณ(ค.ศ.)</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPost("profile")]
|
|
public async Task<ActionResult<ResponseObject>> 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 = UserId ?? "System Administrator",
|
|
CreatedFullName = FullName ?? "",
|
|
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 = UserId ?? "System Administrator",
|
|
CreatedFullName = FullName ?? "",
|
|
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 == null ? null : x.Profile.PositionEmployeePosition.Name,
|
|
positionEmployeeLevel = x.Profile.PositionEmployeeLevel == null ? null : x.Profile.PositionEmployeeLevel.Name,
|
|
positionEmployeeGroup = x.Profile.PositionEmployeeGroup == null ? null : x.Profile.PositionEmployeeGroup.Name,
|
|
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 = UserId ?? "System Administrator",
|
|
CreatedFullName = FullName ?? "",
|
|
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<dynamic>();
|
|
if (profileHistorys != null)
|
|
{
|
|
using (var client = new HttpClient())
|
|
{
|
|
// var url = $"https://s3cluster.frappet.com/bma-ehr-fpt/{profileHistorys.ProfileFile}.json";
|
|
var url = await _documentService.ImagesPathByName($"{profileHistorys.ProfileFile}.json");
|
|
var responseTask = client.GetAsync(url);
|
|
var results = responseTask.Result;
|
|
var profileOlds = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ProfileJsonRequest>>(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 = UserId ?? "System Administrator",
|
|
CreatedFullName = FullName ?? "",
|
|
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 = UserId ?? "System Administrator",
|
|
CreatedFullName = FullName ?? "",
|
|
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 == null ? null : x.Profile.PositionEmployeePosition.Name,
|
|
positionEmployeeLevel = x.Profile.PositionEmployeeLevel == null ? null : x.Profile.PositionEmployeeLevel.Name,
|
|
positionEmployeeGroup = x.Profile.PositionEmployeeGroup == null ? null : x.Profile.PositionEmployeeGroup.Name,
|
|
posNoEmployee = x.Profile.PosNoEmployee,
|
|
})
|
|
.ToListAsync();
|
|
return Success(new { retire.Id, retire.CreatedAt, retire.Year, retire.Round, retire.Type, retire.TypeReport, profile = profile_new });
|
|
}
|
|
|
|
/// <summary>
|
|
/// View รายชื่อผู้เกษียณอายุราชการในประกาศ
|
|
/// </summary>
|
|
/// <param name="retireId">Id ประกาศ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("{retireId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> 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 Endpoint = _configuration["MinIO:Endpoint"];
|
|
// var BucketName = _configuration["MinIO:BucketName"];
|
|
var url = await _documentService.ImagesPathByName($"{profileHistorys.ProfileFile}.json");
|
|
// var url = $"{Endpoint}{BucketName}/{profileHistorys.ProfileFile}.json";
|
|
var responseTask = client.GetAsync(url);
|
|
var results = responseTask.Result;
|
|
var filehis = profileHistorys.Document == null ? null : await _documentService.ImagesPath(profileHistorys.Document.Id);
|
|
return Success(new { Json = true, profileHistorys.Id, profileHistorys.CreatedAt, profileHistorys.Year, profileHistorys.Round, profileHistorys.Type, profileHistorys.TypeReport, profile = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ProfileJsonRequest>>(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 == null ? null : x.Profile.PositionEmployeePosition.Name,
|
|
positionEmployeeLevel = x.Profile.PositionEmployeeLevel == null ? null : x.Profile.PositionEmployeeLevel.Name,
|
|
positionEmployeeGroup = x.Profile.PositionEmployeeGroup == null ? null : x.Profile.PositionEmployeeGroup.Name,
|
|
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 });
|
|
}
|
|
|
|
/// <summary>
|
|
/// Delete รายชื่อผู้เกษียณอายุราชการในประกาศ
|
|
/// </summary>
|
|
/// <param name="retireProfileId">Id ผู้ใช้งานในประกาศ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
// [HttpDelete("profile/{retireProfileId:length(36)}")]
|
|
// public async Task<ActionResult<ResponseObject>> 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();
|
|
// }
|
|
|
|
/// <summary>
|
|
/// Add รายชื่อผู้เกษียณอายุราชการในประกาศ
|
|
/// </summary>
|
|
/// <param name="retireId">Id ประกาศ</param>
|
|
/// <param name="profileId">Id ผู้ใช้งาน</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPut("profile/{retireId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> 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 = "ADD",
|
|
RetirementPeriod = retire,
|
|
Profile = profile,
|
|
CreatedUserId = UserId ?? "System Administrator",
|
|
CreatedFullName = FullName ?? "",
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// แก้ไขข้อมูลบุคคล
|
|
/// </summary>
|
|
/// <param name="retireProfileId">Id ผู้ใช้งานในประกาศ</param>
|
|
/// <param name="reason">เหตุผล</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPost("edit")]
|
|
public async Task<ActionResult<ResponseObject>> 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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// ลบข้อมูลบุคคล
|
|
/// </summary>
|
|
/// <param name="retireProfileId">Id ผู้ใช้งานในประกาศ</param>
|
|
/// <param name="reason">เหตุผล</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPost("remove")]
|
|
public async Task<ActionResult<ResponseObject>> 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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// View เหตุผลแก้ไขข้อมูลบุคคล
|
|
/// </summary>
|
|
/// <param name="retireProfileId">Id ผู้ใช้งานในประกาศ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("reason/{retireProfileId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// จัดอันดับเกษียณ
|
|
/// </summary>
|
|
/// <param name="retireId">Id ประกาศ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPost("{retireId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> 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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// อัพเอกสารเกษียณอายุราชการ
|
|
/// </summary>
|
|
/// <param name="retireId">Id ประกาศ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPut("upload/{retireId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> 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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// ตรวจสอบการอัพเอกสารเกษียญ false=ยังไม่อัพโหลด true=อัพโหลดเอกสารแล้ว
|
|
/// </summary>
|
|
/// <param name="retireId">Id ประกาศ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("upload/check/{retireId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> 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);
|
|
}
|
|
}
|
|
}
|