1245 lines
72 KiB
C#
1245 lines
72 KiB
C#
using System.Security.Claims;
|
|
using BMA.EHR.Application.Repositories;
|
|
using BMA.EHR.Application.Requests;
|
|
using BMA.EHR.Domain.Common;
|
|
using BMA.EHR.Domain.Models.Insignias;
|
|
using BMA.EHR.Domain.Shared;
|
|
using BMA.EHR.Infrastructure.Persistence;
|
|
using BMA.EHR.Insignia.Service.Requests;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Newtonsoft.Json;
|
|
using Swashbuckle.AspNetCore.Annotations;
|
|
|
|
namespace BMA.EHR.Insignia.Service.Controllers
|
|
{
|
|
[Route("api/v{version:apiVersion}/insignia/request")]
|
|
[ApiVersion("1.0")]
|
|
[ApiController]
|
|
[Produces("application/json")]
|
|
[Authorize]
|
|
[SwaggerTag("เครื่องราช")]
|
|
public class InsigniaRequestController : BaseController
|
|
{
|
|
private readonly ApplicationDBContext _context;
|
|
private readonly MinIOService _documentService;
|
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
|
private readonly InsigniaPeriodsRepository _repository;
|
|
private readonly IWebHostEnvironment _hostingEnvironment;
|
|
private readonly string Royal_Type = "Royal";
|
|
|
|
public InsigniaRequestController(ApplicationDBContext context,
|
|
MinIOService documentService,
|
|
InsigniaPeriodsRepository repository,
|
|
IWebHostEnvironment hostingEnvironment,
|
|
IHttpContextAccessor httpContextAccessor)
|
|
{
|
|
_context = context;
|
|
_documentService = documentService;
|
|
_repository = repository;
|
|
_httpContextAccessor = httpContextAccessor;
|
|
_hostingEnvironment = hostingEnvironment;
|
|
}
|
|
|
|
#region " Properties "
|
|
|
|
private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
|
|
|
|
private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value;
|
|
|
|
#endregion
|
|
|
|
#region " Private "
|
|
|
|
private static string GetRequestlStatusText(string status)
|
|
{
|
|
switch (status.ToLower())
|
|
{
|
|
case "st1": return "จัดทำรายชื่อ";
|
|
case "st2": return "รอ ผอ. โรงเรียนรับรอง";
|
|
case "st3": return "รอเจ้าหน้าที่เขตตรวจสอบ";
|
|
case "st3p": return "รอนำเสนอผู้อำนวยการเขต";
|
|
case "st4": return "รอเสนอสำนักการศึกษา";
|
|
case "st5": return "รอเจ้าหน้าที่ สนศ. ตรวจสอบ";
|
|
case "st5p": return "เจ้าหน้าที่ สนศ. ตรวจสอบแล้ว";
|
|
case "pending": return "รอออกคำสั่ง";
|
|
case "finish": return "ออกคำสั่งแล้ว";
|
|
default: return "สถานะไม่ถูกต้อง";
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region " ดึงเครื่องราชฯ ล่าสุดของครู (GetInsigniaLast) "
|
|
// private InsigniaItem GetInsigniaLast(Guid? id)
|
|
// {
|
|
// var insignia = _context.Insignias.AsQueryable()
|
|
// .Where(i => id != null ? i.Id == id : i.Name.Contains("ตริตาภรณ์มงกุฎไทย")).Select(i => new InsigniaItem
|
|
// {
|
|
// Id = i.Id,
|
|
// Name = i.Name,
|
|
// ShortName = i.ShortName,
|
|
// Level = i.InsigniaType == null ? null : i.InsigniaType.Name,
|
|
// LevelId = i.InsigniaType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : i.InsigniaType.Id
|
|
// }).FirstOrDefault();
|
|
|
|
// return insignia;
|
|
// }
|
|
#endregion
|
|
|
|
#region " จัดทำรายชื่อครูที่มีสิทธิในการยืนขอเครื่องราชฯ "
|
|
|
|
// [HttpGet("old/{role}/{ocId:length(36)}")]
|
|
// public async Task<ActionResult<ResponseObject>> GetInsignaiRequest(Guid id, Guid ocId, string role)
|
|
// {
|
|
// var result = await _repository.GetInsigniaRequest(id, ocId);
|
|
// if (result != null)
|
|
// {
|
|
// Guid period = result.PeriodId;
|
|
// string periodName = result.Name;
|
|
// string requestStatus = result.RequestStatus;
|
|
// var resend = new InsigniaResults
|
|
// {
|
|
// PeriodId = period,
|
|
// Year = result.Year,
|
|
// Name = periodName,
|
|
// RequestStatus = requestStatus,
|
|
// OrganizationName = result.OrganizationName,
|
|
// Items = new List<dynamic>()
|
|
// };
|
|
// var candidate = await _repository.GetInsigniaCandidate(period, ocId);
|
|
|
|
// // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new
|
|
// if (requestStatus == null)
|
|
// {
|
|
// // บันทึกรายชื่อ
|
|
// _repository.InsertCandidate(period, ocId, candidate);
|
|
// }
|
|
// if (role == "officer")
|
|
// {
|
|
// resend.Items = await _repository.InsigniaHasProfile(period, ocId);
|
|
// return Success(resend);
|
|
// }
|
|
// else
|
|
// {
|
|
// var passData = _context.InsigniaRequests.AsQueryable()
|
|
// .Include(x => x.Organization)
|
|
// .Include(x => x.RequestProfiles)
|
|
// .Where(x => x.Organization.Id == ocId)
|
|
// .Where(x => x.Period.Id == period)
|
|
// .Select(ir => new
|
|
// {
|
|
// requstID = ir.Id,
|
|
// requstStatus = ir.RequestStatus,
|
|
// requstStatusName = GetRequestlStatusText(ir.RequestStatus),
|
|
// fkInstituteId = -1,
|
|
// // fkDivisionId = ir.Organization.Id,
|
|
// // fkDivision = ir.Organization.Name,
|
|
// fkInstitute = "",
|
|
// fkPeriodId = ir.Period.Id,
|
|
// insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable()
|
|
// .Include(x => x.Profile)
|
|
// .ThenInclude(x => x.Position)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.PositionNumber)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.AcademicStanding)
|
|
// .Include(x => x.RequestInsignia)
|
|
// .ThenInclude(x => x.InsigniaType)
|
|
// .Select(irp => new
|
|
// {
|
|
// request_id = irp.Request.Id,
|
|
// isApprove = irp.IsApprove,
|
|
// statusInstitute = irp.IsApprove.ToString(),
|
|
// request_date = irp.RequestDate,
|
|
// profileId = irp.Profile.Id,
|
|
// // prefix = irp.Profile.Prefix,
|
|
// firstname = irp.Profile.FirstName,
|
|
// lastname = irp.Profile.LastName,
|
|
// // posno = irp.Profile.PositionNumber.Id,
|
|
// type = irp.Profile.ProfileType,
|
|
// // position = irp.Profile.Position.Name,
|
|
// // rank = irp.Profile.AcademicStanding.Name,
|
|
// instituteName = "",
|
|
// instituteId = -1,
|
|
// // divisionName = irp.Profile.OrganizationOrganization.Name,
|
|
// // divisionId = irp.Profile.OrganizationOrganization.Id,
|
|
// lastInsigniaName = "",
|
|
// requestInsigniaLevel = irp.RequestInsignia.InsigniaType == null ? null : irp.RequestInsignia.InsigniaType.Name,
|
|
// requestInsigniaName = irp.RequestInsignia.Name,
|
|
// requestQua = irp.QualificationStatus,
|
|
// requestDoc = irp.DocumentStatus,
|
|
// requestNote = irp.Note,
|
|
// requestSalary = irp.Salary,
|
|
// })
|
|
// .Where(x => x.isApprove)
|
|
// .OrderBy(y => y.profileId)
|
|
// .ToList()
|
|
// })
|
|
// .ToList()
|
|
// .FirstOrDefault();
|
|
|
|
// var failData = _context.InsigniaRequests.AsQueryable()
|
|
// .Include(x => x.Organization)
|
|
// .Include(x => x.RequestProfiles)
|
|
// .Where(x => x.Organization.Id == ocId)
|
|
// .Where(x => x.Period.Id == period)
|
|
// .Select(ir => new
|
|
// {
|
|
// requstID = ir.Id,
|
|
// requstStatus = ir.RequestStatus,
|
|
// requstStatusName = GetRequestlStatusText(ir.RequestStatus),
|
|
// fkInstituteId = -1,
|
|
// // fkDivisionId = ir.Organization.Id,
|
|
// // fkDivision = ir.Organization.Name,
|
|
// fkInstitute = "",
|
|
// fkPeriodId = ir.Period.Id,
|
|
// insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable()
|
|
// .Include(x => x.Profile)
|
|
// .ThenInclude(x => x.Position)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.PositionNumber)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.AcademicStanding)
|
|
// .Include(x => x.RequestInsignia)
|
|
// .ThenInclude(x => x.InsigniaType)
|
|
// .Select(irp => new
|
|
// {
|
|
// request_id = irp.Request.Id,
|
|
// isApprove = irp.IsApprove,
|
|
// statusInstitute = irp.IsApprove.ToString(),
|
|
// request_date = irp.RequestDate,
|
|
// profileId = irp.Profile.Id,
|
|
// // prefix = irp.Profile.Prefix,
|
|
// firstname = irp.Profile.FirstName,
|
|
// lastname = irp.Profile.LastName,
|
|
// // posno = irp.Profile.PositionNumber.Id,
|
|
// type = irp.Profile.ProfileType,
|
|
// // position = irp.Profile.Position.Name,
|
|
// // rank = irp.Profile.AcademicStanding.Name,
|
|
// instituteName = "",
|
|
// instituteId = -1,
|
|
// // divisionName = irp.Profile.OrganizationOrganization.Name,
|
|
// // divisionId = irp.Profile.OrganizationOrganization.Id,
|
|
// lastInsigniaName = "",
|
|
// requestInsigniaLevel = irp.RequestInsignia.InsigniaType == null ? null : irp.RequestInsignia.InsigniaType.Name,
|
|
// requestInsigniaName = irp.RequestInsignia.Name,
|
|
// requestQua = irp.QualificationStatus,
|
|
// requestDoc = irp.DocumentStatus,
|
|
// requestNote = irp.Note,
|
|
// requestSalary = irp.Salary,
|
|
// })
|
|
// .Where(x => !x.isApprove)
|
|
// .OrderBy(y => y.profileId)
|
|
// .ToList()
|
|
// })
|
|
// .ToList()
|
|
// .FirstOrDefault();
|
|
|
|
// var period_data = (from p in _context.InsigniaPeriods.AsQueryable()
|
|
// where p.Id == period
|
|
// select new
|
|
// {
|
|
// periodName = p.Name,
|
|
// periodYear = p.Year,
|
|
// }).FirstOrDefault();
|
|
|
|
// return Success(new { passData = passData, failData = failData, period = period_data });
|
|
// }
|
|
// // select data to display
|
|
// }
|
|
// return Success();
|
|
// }
|
|
|
|
/// <summary>
|
|
/// list รายการคำขอเครื่องราช ผู้ได้รับ,คนไม่ยื่น,คนที่ถูกลบ
|
|
/// </summary>
|
|
/// <param name="insigniaPeriodId">Id รอบเครื่องราช</param>
|
|
/// <param name="ocId">Id สังกัด</param>
|
|
/// <param name="role">ชื่อตำแหน่งระหว่างสกจ กับ เขต (ตอนนี้ให้ส่ง officer ก่อน)</param>
|
|
/// <param name="status">pending=ผู้ได้รับ, reject=คนไม่ยื่น, delete=คนที่ถูกลบ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("{insigniaPeriodId:length(36)}/{ocId:length(36)}/{role}/{status}")]
|
|
public async Task<ActionResult<ResponseObject>> GetInsignaiRequestBkk(Guid insigniaPeriodId, Guid ocId, string role, string status)
|
|
{
|
|
// var profile = await _context.Profiles.AsQueryable()
|
|
// .FirstOrDefaultAsync(x => x.KeycloakId == (UserId != null && UserId != "" ? Guid.Parse(UserId) : Guid.Parse("00000000-0000-0000-0000-000000000000")));
|
|
// if (profile == null)
|
|
// return Error(GlobalMessages.DataNotFound);
|
|
// var organizationAgencyId = await _context.ProfilePositions.AsQueryable()
|
|
// .Where(x => x.Profile == profile)
|
|
// .Where(x => x.OrganizationPosition != null)
|
|
// .Where(x => x.OrganizationPosition.Organization != null)
|
|
// .Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null)
|
|
// .Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId)
|
|
// .FirstOrDefaultAsync();
|
|
// if (organizationAgencyId == null)
|
|
// return Error(GlobalMessages.OrganizationNotFound);
|
|
// var ocId = organizationAgencyId.Value;
|
|
var result = await _repository.GetInsigniaRequest(insigniaPeriodId, ocId);
|
|
if (result != null)
|
|
{
|
|
Guid period = result.PeriodId;
|
|
var periodName = result.Name;
|
|
string requestStatus = result.RequestStatus;
|
|
var resend = new InsigniaResults
|
|
{
|
|
PeriodId = period,
|
|
Year = result.Year,
|
|
Round = result.Round,
|
|
Name = periodName,
|
|
RequestStatus = requestStatus,
|
|
OrganizationName = result.OrganizationName,
|
|
Items = new List<InsigniaRequestItem>()
|
|
};
|
|
// var candidate = await _repository.GetInsigniaCandidateBKK(period, ocId);
|
|
|
|
// // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new
|
|
// if (requestStatus == null)
|
|
// {
|
|
// // บันทึกรายชื่อ
|
|
// await _repository.InsertCandidate(period, ocId, candidate);
|
|
// }
|
|
if (role.Trim().ToUpper() == "OFFICER")
|
|
{
|
|
resend.Items = await _repository.InsigniaHasProfile(period, ocId, status);
|
|
return Success(resend);
|
|
}
|
|
else
|
|
{
|
|
// var passData = _context.InsigniaRequests.AsQueryable()
|
|
// .Include(x => x.Organization)
|
|
// .Include(x => x.RequestProfiles)
|
|
// .Where(x => x.Organization.Id == ocId)
|
|
// .Where(x => x.Period.Id == period)
|
|
// .Select(ir => new
|
|
// {
|
|
// requstID = ir.Id,
|
|
// requstStatus = ir.RequestStatus,
|
|
// requstStatusName = GetRequestlStatusText(ir.RequestStatus),
|
|
// fkInstituteId = -1,
|
|
// // fkDivisionId = ir.Organization.Id,
|
|
// // fkDivision = ir.Organization.Name,
|
|
// fkInstitute = "",
|
|
// fkPeriodId = ir.Period.Id,
|
|
// insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable()
|
|
// .Include(x => x.Profile)
|
|
// .ThenInclude(x => x.Position)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.PositionNumber)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.AcademicStanding)
|
|
// .Include(x => x.RequestInsignia)
|
|
// .ThenInclude(x => x.InsigniaType)
|
|
// .Select(irp => new
|
|
// {
|
|
// request_id = irp.Request.Id,
|
|
// isApprove = irp.IsApprove,
|
|
// statusInstitute = irp.IsApprove.ToString(),
|
|
// request_date = irp.RequestDate,
|
|
// profileId = irp.Profile.Id,
|
|
// // prefix = irp.Profile.Prefix,
|
|
// firstname = irp.Profile.FirstName,
|
|
// lastname = irp.Profile.LastName,
|
|
// // posno = irp.Profile.PositionNumber.Id,
|
|
// type = irp.Profile.ProfileType,
|
|
// // position = irp.Profile.Position.Name,
|
|
// // rank = $"{irp.Profile.PositionType.Name}/{irp.Profile.PositionLevel.Name}",
|
|
// instituteName = "",
|
|
// instituteId = -1,
|
|
// // divisionName = irp.Profile.OrganizationOrganization.Name,
|
|
// // divisionId = irp.Profile.OrganizationOrganization.Id,
|
|
// lastInsigniaName = "",
|
|
// requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name,
|
|
// requestInsigniaName = irp.RequestInsignia.Name,
|
|
// requestQua = irp.QualificationStatus,
|
|
// requestDoc = irp.DocumentStatus,
|
|
// requestNote = irp.Note,
|
|
// requestSalary = irp.Salary,
|
|
// matchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(irp.MatchingConditions)
|
|
// })
|
|
// .Where(x => x.isApprove)
|
|
// .OrderBy(y => y.profileId)
|
|
// .ToList()
|
|
// })
|
|
// .ToList()
|
|
// .FirstOrDefault();
|
|
|
|
// var failData = _context.InsigniaRequests.AsQueryable()
|
|
// .Include(x => x.Organization)
|
|
// .Include(x => x.RequestProfiles)
|
|
// .Where(x => x.Organization.Id == ocId)
|
|
// .Where(x => x.Period.Id == period)
|
|
// .Select(ir => new
|
|
// {
|
|
// requstID = ir.Id,
|
|
// requstStatus = ir.RequestStatus,
|
|
// requstStatusName = GetRequestlStatusText(ir.RequestStatus),
|
|
// fkInstituteId = -1,
|
|
// // fkDivisionId = ir.Organization.Id,
|
|
// // fkDivision = ir.Organization.Name,
|
|
// fkInstitute = "",
|
|
// fkPeriodId = ir.Period.Id,
|
|
// insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable()
|
|
// .Include(x => x.Profile)
|
|
// .ThenInclude(x => x.Position)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.PositionNumber)
|
|
// .Include(x => x.Profile)
|
|
// // .ThenInclude(x => x.AcademicStanding)
|
|
// .Include(x => x.RequestInsignia)
|
|
// .ThenInclude(x => x.InsigniaType)
|
|
// .Select(irp => new
|
|
// {
|
|
// request_id = irp.Request.Id,
|
|
// isApprove = irp.IsApprove,
|
|
// statusInstitute = irp.IsApprove.ToString(),
|
|
// request_date = irp.RequestDate,
|
|
// profileId = irp.Profile.Id,
|
|
// // prefix = irp.Profile.Prefix,
|
|
// firstname = irp.Profile.FirstName,
|
|
// lastname = irp.Profile.LastName,
|
|
// // posno = irp.Profile.PositionNumber.Id,
|
|
// type = irp.Profile.ProfileType,
|
|
// // position = irp.Profile.Position.Name,
|
|
// // rank = irp.Profile.AcademicStanding.Name,
|
|
// instituteName = "",
|
|
// instituteId = -1,
|
|
// // divisionName = irp.Profile.OrganizationOrganization.Name,
|
|
// // divisionId = irp.Profile.OrganizationOrganization.Id,
|
|
// lastInsigniaName = "",
|
|
// requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name,
|
|
// requestInsigniaName = irp.RequestInsignia.Name,
|
|
// requestQua = irp.QualificationStatus,
|
|
// requestDoc = irp.DocumentStatus,
|
|
// requestNote = irp.Note,
|
|
// requestSalary = irp.Salary,
|
|
// matchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(irp.MatchingConditions)
|
|
// })
|
|
// .Where(x => !x.isApprove)
|
|
// .OrderBy(y => y.profileId)
|
|
// .ToList()
|
|
// })
|
|
// .ToList()
|
|
// .FirstOrDefault();
|
|
|
|
// var period_data = (from p in _context.InsigniaPeriods.AsQueryable()
|
|
// where p.Id == period
|
|
// select new
|
|
// {
|
|
// periodName = p.Name,
|
|
// periodYear = p.Year,
|
|
// }).FirstOrDefault();
|
|
|
|
// return Success(new { passData = passData, failData = failData, period = period_data });
|
|
return Success();
|
|
}
|
|
// select data to display
|
|
}
|
|
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// คำนวณราชชื่อผู้ได้รับเครื่องราช
|
|
/// </summary>
|
|
/// <param name="insigniaPeriodId">Id รอบเครื่องราช</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("{insigniaPeriodId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> UpdateInsignaiRequestBkk(Guid insigniaPeriodId)
|
|
{
|
|
var organizationType = await _context.OrganizationTypes.Where(x => x.Name == "หน่วยงาน").FirstOrDefaultAsync();
|
|
if (organizationType == null)
|
|
return Error(GlobalMessages.OrganizationNotFound);
|
|
var organizations = await _context.Organizations.Where(x => x.OrganizationType == organizationType).ToListAsync();
|
|
foreach (var organization in organizations)
|
|
{
|
|
if (organization == null)
|
|
continue;
|
|
|
|
var result = await _repository.GetInsigniaRequest(insigniaPeriodId, organization.Id);
|
|
if (result != null)
|
|
{
|
|
Guid period = result.PeriodId;
|
|
string requestStatus = result.RequestStatus;
|
|
var candidate = await _repository.GetInsigniaCandidateBKK(insigniaPeriodId, organization.Id);
|
|
// ตรวจสอบว่ารายการอยู่ใน table insignia_request_new
|
|
if (requestStatus == null)
|
|
{
|
|
// บันทึกรายชื่อ
|
|
await _repository.InsertCandidate(period, organization.Id, candidate);
|
|
}
|
|
}
|
|
}
|
|
return Success();
|
|
}
|
|
|
|
#endregion
|
|
|
|
// #region " บันทึกหมายเหตุ "
|
|
|
|
// [HttpPut("note/{profileId}")]
|
|
// public async Task<ActionResult<ResponseObject>> SaveNote(Guid profileId, SaveRequsetNote items)
|
|
// {
|
|
// var id = await _repository.GetRequestId(items.PeriodId, items.OcId);
|
|
// var note = _context.InsigniaRequestProfiles.AsQueryable()
|
|
// .Where(d => d.Profile.Id == profileId && d.Request.Id == id).FirstOrDefault();
|
|
// if (note != null)
|
|
// note.Note = items.Note;
|
|
// _context.SaveChanges();
|
|
// return Success();
|
|
// }
|
|
|
|
// #endregion
|
|
|
|
// #region " บันทึกรายชื่อครูในการขอยื่นเครื่องราชฯ เเต่ยังไม่ส่งไปยัง ผอ.โรงเรียน "
|
|
|
|
// [HttpPut("approve/{ocId:length(36)}")]
|
|
// public async Task<ActionResult<ResponseObject>> SaveRequestList(Guid id, Guid ocId, InsigniaApproveRequest items)
|
|
// {
|
|
// var result = await _repository.GetInsigniaRequest(id, ocId);
|
|
// if (result != null)
|
|
// await _repository.SaveAprove(result.PeriodId, ocId, items);
|
|
// return Success();
|
|
// }
|
|
|
|
// #endregion
|
|
|
|
/// <summary>
|
|
/// เปลี่ยน status เป็น st3 การเจ้าหน้าที่อนุมัติ "
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("officer/approve/{ocId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> ApproveChangeStatusToSt2(Guid id, Guid ocId)
|
|
{
|
|
await _repository.SaveAprove(id, ocId);
|
|
var requestId = await _repository.GetRequestId(id, ocId);
|
|
var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId);
|
|
if (requestNew != null)
|
|
{
|
|
requestNew.RequestStatus = "st3";
|
|
_context.SaveChanges();
|
|
return Success();
|
|
}
|
|
else
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
}
|
|
|
|
/// <summary>
|
|
/// เปลี่ยน status เป็น st2 การเจ้าหน้าที่ไม่อนุมัติ "
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("officer/reject/{ocId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> RejectChangeStatusToSt1(Guid id, Guid ocId)
|
|
{
|
|
await _repository.SaveAprove(id, ocId);
|
|
var requestId = await _repository.GetRequestId(id, ocId);
|
|
var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId);
|
|
if (requestNew != null)
|
|
{
|
|
requestNew.RequestStatus = "st2";
|
|
_context.SaveChanges();
|
|
return Success();
|
|
}
|
|
else
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
}
|
|
|
|
/// <summary>
|
|
/// เปลี่ยน status เป็น st5 ผอ.หน่วยอนุมัติ "
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("director/approve/{ocId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> ApproveChangeStatusToSt3(Guid id, Guid ocId)
|
|
{
|
|
var requestId = await _repository.GetRequestId(id, ocId);
|
|
var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId);
|
|
if (requestNew != null)
|
|
{
|
|
requestNew.RequestStatus = "st5";
|
|
_context.SaveChanges();
|
|
return Success();
|
|
}
|
|
else
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
}
|
|
|
|
/// <summary>
|
|
/// เปลี่ยน status เป็น st4 ผอ.หน่วยไม่อนุมัติ "
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("director/reject/{ocId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> RejectChangeStatusToSt2(Guid id, Guid ocId)
|
|
{
|
|
var requestId = await _repository.GetRequestId(id, ocId);
|
|
var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId);
|
|
if (requestNew != null)
|
|
{
|
|
requestNew.RequestStatus = "st4";
|
|
_context.SaveChanges();
|
|
return Success();
|
|
}
|
|
else
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
}
|
|
|
|
// #endregion
|
|
|
|
// #region " เปลี่ยน status สำหรับ ผอ.สำนัก "
|
|
|
|
// [HttpPost("status/director/approve/{ocId:length(36)}")]
|
|
// public async Task<ActionResult<ResponseObject>> ChangeStatusToSt5p(Guid id, Guid ocId)
|
|
// {
|
|
// var result = await _repository.GetInsigniaRequest(id, ocId);
|
|
// if (result == null)
|
|
// return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
// var requestId = await _repository.GetRequestId(result.PeriodId, ocId);
|
|
// if (requestId == null)
|
|
// return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
// var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId);
|
|
// if (requestNew != null)
|
|
// {
|
|
// requestNew.RequestStatus = "st5p";
|
|
// _context.SaveChanges();
|
|
// return Success();
|
|
// }
|
|
// else
|
|
// return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
// }
|
|
|
|
// [HttpPost("status/director/reject/{ocId:length(36)}")]
|
|
// public async Task<ActionResult<ResponseObject>> ChangeStatusToSt1(Guid id, Guid ocId)
|
|
// {
|
|
// var result = await _repository.GetInsigniaRequest(id, ocId);
|
|
// if (result == null)
|
|
// return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
// var requestId = await _repository.GetRequestId(result.PeriodId, ocId);
|
|
// if (requestId == null)
|
|
// return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
// var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId);
|
|
// if (requestNew != null)
|
|
// {
|
|
// requestNew.RequestStatus = "st1";
|
|
// _context.SaveChanges();
|
|
// return Success();
|
|
// }
|
|
// else
|
|
// return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
// }
|
|
// #endregion
|
|
|
|
/// <summary>
|
|
/// ย้ายขอมูลไปเป็น คนที่ไม่ยื่นขอ
|
|
/// </summary>
|
|
/// <param name="profileId">Id ผู้ยื่นขอ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("status/reject/{profileId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> RejectProfileInsignia(Guid profileId)
|
|
{
|
|
var profile = await _context.Profiles.AsQueryable()
|
|
.FirstOrDefaultAsync(x => x.Id == profileId);
|
|
if (profile == null)
|
|
return Error(GlobalMessages.DataNotFound);
|
|
var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Profile == profile);
|
|
if (insigniaRequestProfile == null)
|
|
return Error(GlobalMessages.InsigniaPeriodNotFound);
|
|
insigniaRequestProfile.Status = "REJECT";
|
|
insigniaRequestProfile.LastUpdateFullName = FullName ?? "System Administrator";
|
|
insigniaRequestProfile.LastUpdateUserId = UserId ?? "";
|
|
insigniaRequestProfile.LastUpdatedAt = DateTime.Now;
|
|
_context.SaveChanges();
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// ย้ายขอมูลไปเป็น คนที่ถูกลบออก
|
|
/// </summary>
|
|
/// <param name="profileId">Id ผู้ยื่นขอ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("status/delete/{profileId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> DeleteProfileInsignia(Guid profileId)
|
|
{
|
|
var profile = await _context.Profiles.AsQueryable()
|
|
.FirstOrDefaultAsync(x => x.Id == profileId);
|
|
if (profile == null)
|
|
return Error(GlobalMessages.DataNotFound);
|
|
var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Profile == profile);
|
|
if (insigniaRequestProfile == null)
|
|
return Error(GlobalMessages.InsigniaPeriodNotFound);
|
|
insigniaRequestProfile.Status = "DELETE";
|
|
insigniaRequestProfile.LastUpdateFullName = FullName ?? "System Administrator";
|
|
insigniaRequestProfile.LastUpdateUserId = UserId ?? "";
|
|
insigniaRequestProfile.LastUpdatedAt = DateTime.Now;
|
|
_context.SaveChanges();
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// สรุปจำนวนการยื่นขอในแต่ละรอบ
|
|
/// </summary>
|
|
/// <param name="insigniaPeriodId">Id รอบการยื่นขอ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("dashboard/{insigniaPeriodId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> DashboardInsigniaPeriod(Guid insigniaPeriodId)
|
|
{
|
|
var insigniaPeriod = await _context.InsigniaPeriods.FirstOrDefaultAsync(x => x.Id == insigniaPeriodId);
|
|
if (insigniaPeriod == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
var orgAllCount = await _context.InsigniaRequests
|
|
.Where(x => x.Period == insigniaPeriod)
|
|
.ToListAsync();
|
|
var allUserUser = await _context.InsigniaRequests
|
|
.Where(x => x.Period == insigniaPeriod)
|
|
.Select(x => x.RequestProfiles.Count())
|
|
.SumAsync();
|
|
|
|
return Success(new { OrgAllCount = orgAllCount.Count(), OrgSendCount = orgAllCount.Where(x => x.RequestStatus != "st1" && x.RequestStatus != "st2").Count(), OrgNoSendCount = orgAllCount.Where(x => x.RequestStatus == "st1" && x.RequestStatus == "st2").Count(), AllUserUser = allUserUser });
|
|
}
|
|
|
|
/// <summary>
|
|
/// หน่วยงานทียังไม่ส่งรายชื่อ
|
|
/// </summary>
|
|
/// <param name="insigniaPeriodId">Id รอบการยื่นขอ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("org/no-send/{insigniaPeriodId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> ListOrgDontSentUser(Guid insigniaPeriodId)
|
|
{
|
|
var insigniaPeriod = await _context.InsigniaPeriods.FirstOrDefaultAsync(x => x.Id == insigniaPeriodId);
|
|
if (insigniaPeriod == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
var orgIdSend = await _context.InsigniaRequests
|
|
.Where(x => x.Period == insigniaPeriod)
|
|
.Where(x => x.RequestStatus == "st1")
|
|
.Select(x => x.Organization.Id)
|
|
.ToListAsync();
|
|
var orgAllCount = await _context.Organizations
|
|
.Where(x => x.OrganizationOrganization != null)
|
|
.Where(x => x.OrganizationType != null)
|
|
.Where(x => x.OrganizationType.Name == "หน่วยงาน")
|
|
.Where(x => orgIdSend.Contains(x.Id))
|
|
.Select(x => new
|
|
{
|
|
OrgId = x.Id,
|
|
OrgName = x.OrganizationOrganization.Name
|
|
})
|
|
.ToListAsync();
|
|
|
|
return Success(orgAllCount);
|
|
}
|
|
|
|
/// <summary>
|
|
/// หน่วยงานที่อยู่ปัจจุบัน
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("agency")]
|
|
public async Task<ActionResult<ResponseObject>> GetOrgAgency()
|
|
{
|
|
var profile = await _context.Profiles.AsQueryable()
|
|
.FirstOrDefaultAsync(x => x.KeycloakId == (UserId != null && UserId != "" ? Guid.Parse(UserId) : Guid.Parse("00000000-0000-0000-0000-000000000000")));
|
|
if (profile == null)
|
|
return Error(GlobalMessages.DataNotFound);
|
|
var orgProfile = await _context.ProfilePositions
|
|
.Where(x => x.Profile == profile)
|
|
.Where(x => x.OrganizationPosition != null)
|
|
.Where(x => x.OrganizationPosition.Organization != null)
|
|
.Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null)
|
|
.Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId)
|
|
.FirstOrDefaultAsync();
|
|
|
|
return Success(orgProfile);
|
|
}
|
|
|
|
/// <summary>
|
|
/// เพิ่มรายชื่อผู้ได้รับเครื่องราช
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPost()]
|
|
public async Task<ActionResult<ResponseObject>> AddUserToRequestInsignia([FromBody] AddUserRequestInsigniaRequest req)
|
|
{
|
|
var insigniaPeriod = await _context.InsigniaPeriods.FirstOrDefaultAsync(x => x.Id == req.insigniaPeriodId);
|
|
if (insigniaPeriod == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
var profile = await _context.Profiles.FirstOrDefaultAsync(x => x.Id == req.ProfileId);
|
|
if (profile == null)
|
|
return Error(GlobalMessages.DataNotFound);
|
|
var insignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Id == req.insigniaId);
|
|
if (insignia == null)
|
|
return Error(GlobalMessages.InsigniaNotFound);
|
|
var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Profile == profile && x.Request.Period == insigniaPeriod);
|
|
if (insigniaRequestProfile != null)
|
|
return Error(GlobalMessages.InsigniaRequestProfileDupicate);
|
|
var insigniaRequest = await _context.InsigniaRequests.FirstOrDefaultAsync(x => x.Period == insigniaPeriod);
|
|
if (insigniaRequest == null)
|
|
{
|
|
var orgProfile = await _context.ProfilePositions
|
|
.Where(x => x.Profile == profile)
|
|
.Where(x => x.OrganizationPosition != null)
|
|
.Where(x => x.OrganizationPosition.Organization != null)
|
|
.Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null)
|
|
.Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId)
|
|
.FirstOrDefaultAsync();
|
|
var org = await _context.Organizations
|
|
.FirstOrDefaultAsync(x => x.Id == orgProfile);
|
|
if (org == null)
|
|
return Error(GlobalMessages.OrganizationNotFound);
|
|
insigniaRequest = new InsigniaRequest
|
|
{
|
|
Period = insigniaPeriod,
|
|
Organization = org,
|
|
RequestStatus = "st1",
|
|
RequestNote = "",
|
|
CreatedUserId = FullName ?? "",
|
|
CreatedFullName = UserId ?? "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
LastUpdateFullName = FullName ?? "System Administrator",
|
|
LastUpdateUserId = UserId ?? "",
|
|
LastUpdatedAt = DateTime.Now,
|
|
};
|
|
}
|
|
|
|
await _context.AddAsync(new InsigniaRequestProfile
|
|
{
|
|
Status = "PENDING",
|
|
Profile = profile,
|
|
RequestInsignia = insignia,
|
|
Request = insigniaRequest,
|
|
RequestDate = DateTime.Now,
|
|
MatchingConditions = System.Text.Json.JsonSerializer.Serialize(new List<dynamic>()), // serialize to string
|
|
CreatedUserId = FullName ?? "",
|
|
CreatedFullName = UserId ?? "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
LastUpdateFullName = FullName ?? "System Administrator",
|
|
LastUpdateUserId = UserId ?? "",
|
|
LastUpdatedAt = DateTime.Now,
|
|
});
|
|
await _context.SaveChangesAsync();
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// แก้ไขรายชื่อผู้ได้รับเครื่องราช
|
|
/// </summary>
|
|
/// <param name="insigniaRequestProfileId">Id รายชื่อคนที่ยื่นของในรอบ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPut("{insigniaRequestProfileId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> UpdateUserToRequestInsignia([FromBody] UpdateUserRequestInsigniaRequest req, Guid insigniaRequestProfileId)
|
|
{
|
|
var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Id == insigniaRequestProfileId);
|
|
if (insigniaRequestProfile == null)
|
|
return Error(GlobalMessages.InsigniaRequestProfileNotFound);
|
|
var insignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Id == req.insigniaId);
|
|
if (insignia == null)
|
|
return Error(GlobalMessages.InsigniaNotFound);
|
|
|
|
insigniaRequestProfile.RequestInsignia = insignia;
|
|
insigniaRequestProfile.LastUpdateFullName = FullName ?? "System Administrator";
|
|
insigniaRequestProfile.LastUpdateUserId = UserId ?? "";
|
|
insigniaRequestProfile.LastUpdatedAt = DateTime.Now;
|
|
await _context.SaveChangesAsync();
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// รายชื่อผู้ได้รับเครื่องราชส่งข้อมูลไปบันทึกผลได้รับเครื่องราช
|
|
/// </summary>
|
|
/// <param name="insigniaPeriodId">Id รอบการยื่นขอ</param>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPost("send/note/{insigniaPeriodId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> SendPeriodToNote([FromBody] InsigniaNoteNameRequest req, Guid insigniaPeriodId)
|
|
{
|
|
var insigniaPeriod = await _context.InsigniaPeriods
|
|
.Include(x => x.InsigniaRequests)
|
|
.Include(x => x.ReliefDoc)
|
|
.FirstOrDefaultAsync(x => x.Id == insigniaPeriodId);
|
|
if (insigniaPeriod == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
var insigniaNote = await _context.InsigniaNotes
|
|
.Include(x => x.InsigniaNoteProfiles)
|
|
.ThenInclude(x => x.Profile)
|
|
.Include(x => x.InsigniaNoteProfiles)
|
|
.ThenInclude(x => x.RequestInsignia)
|
|
.FirstOrDefaultAsync(x => x.Year == insigniaPeriod.Year);
|
|
if (insigniaNote == null)
|
|
{
|
|
insigniaNote = new InsigniaNote
|
|
{
|
|
// Round = insigniaPeriod.Round,
|
|
Name = req.Name,
|
|
Year = insigniaPeriod.Year,
|
|
// StartDate = insigniaPeriod.StartDate,
|
|
// EndDate = insigniaPeriod.EndDate,
|
|
// Amount = insigniaPeriod.Amount,
|
|
// ReliefDoc = insigniaPeriod.ReliefDoc,
|
|
CreatedUserId = FullName ?? "",
|
|
CreatedFullName = UserId ?? "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
LastUpdateFullName = FullName ?? "System Administrator",
|
|
LastUpdateUserId = UserId ?? "",
|
|
LastUpdatedAt = DateTime.Now,
|
|
};
|
|
await _context.InsigniaNotes.AddAsync(insigniaNote);
|
|
await _context.SaveChangesAsync();
|
|
}
|
|
var requestOlds = await _context.InsigniaRequests
|
|
.Where(p => p.Period == insigniaPeriod)
|
|
.ToListAsync();
|
|
foreach (var requestOld in requestOlds)
|
|
{
|
|
var profileOlds = await _context.InsigniaRequestProfiles
|
|
.Include(x => x.Profile)
|
|
.Include(x => x.RequestInsignia)
|
|
.Where(p => p.Request == requestOld)
|
|
.ToListAsync();
|
|
|
|
foreach (var profileOld in profileOlds)
|
|
{
|
|
var noreProfileOld = insigniaNote.InsigniaNoteProfiles
|
|
.Where(x => x.Profile == profileOld.Profile)
|
|
.FirstOrDefault();
|
|
if (noreProfileOld != null)
|
|
{
|
|
noreProfileOld.RequestDate = profileOld.RequestDate;
|
|
noreProfileOld.Salary = profileOld.Salary;
|
|
noreProfileOld.IsApprove = profileOld.IsApprove;
|
|
noreProfileOld.Status = profileOld.Status;
|
|
noreProfileOld.RequestInsignia = profileOld.RequestInsignia;
|
|
noreProfileOld.CreatedUserId = FullName ?? "";
|
|
noreProfileOld.CreatedFullName = UserId ?? "System Administrator";
|
|
noreProfileOld.CreatedAt = DateTime.Now;
|
|
noreProfileOld.LastUpdateFullName = FullName ?? "System Administrator";
|
|
noreProfileOld.LastUpdateUserId = UserId ?? "";
|
|
noreProfileOld.LastUpdatedAt = DateTime.Now;
|
|
}
|
|
{
|
|
await _context.InsigniaNoteProfiles.AddAsync(new InsigniaNoteProfile
|
|
{
|
|
RequestDate = profileOld.RequestDate,
|
|
Salary = profileOld.Salary,
|
|
IsApprove = profileOld.IsApprove,
|
|
Status = profileOld.Status,
|
|
Profile = profileOld.Profile,
|
|
RequestInsignia = profileOld.RequestInsignia,
|
|
OrganizationOrganizationSend = await _context.OrganizationOrganizations.FirstOrDefaultAsync(x => x.Id == profileOld.Profile.OrganizationOrganizationId),
|
|
InsigniaNote = insigniaNote,
|
|
CreatedUserId = FullName ?? "",
|
|
CreatedFullName = UserId ?? "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
LastUpdateFullName = FullName ?? "System Administrator",
|
|
LastUpdateUserId = UserId ?? "",
|
|
LastUpdatedAt = DateTime.Now,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
await _context.SaveChangesAsync();
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// list รอบบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("note")]
|
|
public async Task<ActionResult<ResponseObject>> GetListNote()
|
|
{
|
|
var insigniaNotes = await _context.InsigniaNotes.AsQueryable()
|
|
.OrderByDescending(x => x.Year)
|
|
// .ThenByDescending(x => x.StartDate)
|
|
.Select(p => new
|
|
{
|
|
Id = p.Id,
|
|
// Amount = p.Amount,
|
|
Name = p.Name,
|
|
// Round = p.Round,
|
|
// Start = p.StartDate,
|
|
// End = p.EndDate,
|
|
Year = p.Year,
|
|
// Doc = p.ReliefDoc == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ReliefDoc.Id,
|
|
})
|
|
.ToListAsync();
|
|
// var data = new List<dynamic>();
|
|
// foreach (var insigniaNote in insigniaNotes)
|
|
// {
|
|
// var _data = new
|
|
// {
|
|
// Id = insigniaNote.Id,
|
|
// Amount = insigniaNote.Amount,
|
|
// Name = insigniaNote.Name,
|
|
// Round = insigniaNote.Round,
|
|
// Start = insigniaNote.Start,
|
|
// End = insigniaNote.End,
|
|
// Year = insigniaNote.Year,
|
|
// Doc = insigniaNote.Doc == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNote.Doc),
|
|
// };
|
|
// data.Add(_data);
|
|
// }
|
|
|
|
return Success(insigniaNotes);
|
|
}
|
|
|
|
/// <summary>
|
|
/// list รายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPost("note/search")]
|
|
public async Task<ActionResult<ResponseObject>> GetListNoteProfile([FromBody] InsigniaNoteSearchRequest req)
|
|
{
|
|
var insigniaNote = await _context.InsigniaNotes
|
|
.FirstOrDefaultAsync(x => x.Id == req.InsigniaNoteId);
|
|
if (insigniaNote == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
var insigniaType = await _context.InsigniaTypes
|
|
.FirstOrDefaultAsync(x => x.Id == req.InsigniaTypeId);
|
|
if (insigniaType == null)
|
|
return Error(GlobalMessages.InsigniaTypeNotFound);
|
|
var insigniaNoteProfiles = await _context.InsigniaNoteProfiles
|
|
.Where(x => x.InsigniaNote == insigniaNote)
|
|
.Where(x => x.RequestInsignia.InsigniaType == insigniaType)
|
|
.Where(x => req.InsigniaId == null ? x.RequestInsignia != null : (x.RequestInsignia.Id == req.InsigniaId))
|
|
.Select(x => new
|
|
{
|
|
FullName = $"{x.Profile.FirstName} {x.Profile.LastName}",
|
|
RequestInsignia = x.RequestInsignia.Name,
|
|
RequestInsigniaId = x.RequestInsignia.Id,
|
|
RequestInsigniaShortName = x.RequestInsignia.ShortName,
|
|
DateReceive = x.DateReceive,
|
|
OrganizationOrganizationSend = x.OrganizationOrganizationSend == null ? null : x.OrganizationOrganizationSend.Name,
|
|
OrganizationOrganizationReceive = x.Profile.OrganizationOrganization,
|
|
Date = x.Date,
|
|
VolumeNo = x.VolumeNo,
|
|
Section = x.Section,
|
|
Page = x.Page,
|
|
No = x.No,
|
|
DatePayment = x.DatePayment,
|
|
TypePayment = x.TypePayment,
|
|
Address = x.Address,
|
|
Salary = x.Salary,
|
|
}).ToListAsync();
|
|
|
|
return Success(insigniaNoteProfiles);
|
|
}
|
|
|
|
/// <summary>
|
|
/// เพิ่ม/แก้ไขรายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPut("note/{insigniaNoteId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> AddNoteProfile([FromBody] InsigniaNoteRequest req, Guid insigniaNoteId)
|
|
{
|
|
var profile = await _context.Profiles
|
|
.Include(x => x.Salaries)
|
|
.FirstOrDefaultAsync(x => x.CitizenId == req.CitizanId);
|
|
if (profile == null)
|
|
return Error(GlobalMessages.DataNotFound);
|
|
var insignia = await _context.Insignias
|
|
.FirstOrDefaultAsync(x => x.Id == req.InsigniaId);
|
|
if (insignia == null)
|
|
return Error(GlobalMessages.InsigniaNotFound);
|
|
var insigniaNote = await _context.InsigniaNotes
|
|
.Include(x => x.InsigniaNoteProfiles)
|
|
.ThenInclude(x => x.Profile)
|
|
.FirstOrDefaultAsync(x => x.Id == insigniaNoteId);
|
|
if (insigniaNote == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
|
|
var profileInsignia = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.Profile.CitizenId == req.CitizanId);
|
|
if (profileInsignia == null)
|
|
{
|
|
await _context.InsigniaNoteProfiles.AddAsync(new InsigniaNoteProfile
|
|
{
|
|
Salary = profile.Salaries.Count() == 0 ? null : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
|
|
IsApprove = true,
|
|
Status = "PENDING",
|
|
Profile = profile,
|
|
Issue = req.Issue,
|
|
Number = req.Number,
|
|
DateReceive = req.DateReceive,
|
|
Date = req.Date,
|
|
VolumeNo = req.VolumeNo,
|
|
Section = req.Section,
|
|
Page = req.Page,
|
|
No = req.No,
|
|
DatePayment = req.DatePayment,
|
|
TypePayment = req.TypePayment,
|
|
Address = req.Address,
|
|
RequestInsignia = insignia,
|
|
OrganizationOrganizationSend = await _context.OrganizationOrganizations.FirstOrDefaultAsync(x => x.Id == profile.OrganizationOrganizationId),
|
|
InsigniaNote = insigniaNote,
|
|
CreatedUserId = FullName ?? "",
|
|
CreatedFullName = UserId ?? "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
LastUpdateFullName = FullName ?? "System Administrator",
|
|
LastUpdateUserId = UserId ?? "",
|
|
LastUpdatedAt = DateTime.Now,
|
|
});
|
|
}
|
|
else
|
|
{
|
|
profileInsignia.Issue = req.Issue;
|
|
profileInsignia.Number = req.Number;
|
|
profileInsignia.DateReceive = req.DateReceive;
|
|
profileInsignia.Date = req.Date;
|
|
profileInsignia.VolumeNo = req.VolumeNo;
|
|
profileInsignia.Section = req.Section;
|
|
profileInsignia.Page = req.Page;
|
|
profileInsignia.No = req.No;
|
|
profileInsignia.DatePayment = req.DatePayment;
|
|
profileInsignia.TypePayment = req.TypePayment;
|
|
profileInsignia.Address = req.Address;
|
|
profileInsignia.RequestInsignia = insignia;
|
|
profileInsignia.LastUpdateFullName = FullName ?? "System Administrator";
|
|
profileInsignia.LastUpdateUserId = UserId ?? "";
|
|
profileInsignia.LastUpdatedAt = DateTime.Now;
|
|
}
|
|
await _context.SaveChangesAsync();
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// เพิ่มเอกสารบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpPut("note/doc/{insigniaNoteId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> AddDocumentProfile([FromForm] InsigniaNoteDocRequest req, Guid insigniaNoteId)
|
|
{
|
|
var insigniaNote = await _context.InsigniaNotes
|
|
.FirstOrDefaultAsync(x => x.Id == insigniaNoteId);
|
|
if (insigniaNote == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
|
|
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, req.Name == null ? file.FileName : req.Name);
|
|
var _doc = await _context.Documents.AsQueryable()
|
|
.FirstOrDefaultAsync(x => x.Id == doc.Id);
|
|
if (_doc != null)
|
|
{
|
|
await _context.InsigniaNoteDocs.AddAsync(new InsigniaNoteDoc
|
|
{
|
|
Reason = req.Reason,
|
|
Document = _doc,
|
|
InsigniaNote = insigniaNote,
|
|
CreatedUserId = FullName ?? "",
|
|
CreatedFullName = UserId ?? "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
LastUpdateFullName = FullName ?? "System Administrator",
|
|
LastUpdateUserId = UserId ?? "",
|
|
LastUpdatedAt = DateTime.Now,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
await _context.SaveChangesAsync();
|
|
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// List เอกสารบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
|
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
|
[HttpGet("note/doc/{insigniaNoteId:length(36)}")]
|
|
public async Task<ActionResult<ResponseObject>> GetDocumentProfile([FromBody] InsigniaNoteDocRequest req, Guid insigniaNoteId)
|
|
{
|
|
var insigniaNote = await _context.InsigniaNotes
|
|
.Include(x => x.InsigniaNoteDocs)
|
|
.ThenInclude(x => x.Document)
|
|
.FirstOrDefaultAsync(x => x.Id == insigniaNoteId);
|
|
if (insigniaNote == null)
|
|
return Error(GlobalMessages.InsigniaRequestNotFound);
|
|
var insigniaNoteDocs = new List<dynamic>();
|
|
foreach (var doc in insigniaNote.InsigniaNoteDocs)
|
|
{
|
|
var _doc = new
|
|
{
|
|
FileName = doc.Document.FileName,
|
|
PathName = await _documentService.ImagesPath(doc.Document.Id)
|
|
};
|
|
insigniaNoteDocs.Add(_doc);
|
|
}
|
|
return Success(insigniaNoteDocs);
|
|
}
|
|
|
|
}
|
|
}
|