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 string Royal_Type = "Royal"; public InsigniaRequestController(ApplicationDBContext context, MinIOService documentService, InsigniaPeriodsRepository repository, IHttpContextAccessor httpContextAccessor) { _context = context; _documentService = documentService; _repository = repository; _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 " 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> 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() // }; // 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(); // } /// /// list รายการคำขอเครื่องราช ผู้ได้รับ,คนไม่ยื่น,คนที่ถูกลบ /// /// Id รอบเครื่องราช /// Id สังกัด /// ชื่อตำแหน่งระหว่างสกจ กับ เขต (ตอนนี้ให้ส่ง officer ก่อน) /// pending=ผู้ได้รับ, reject=คนไม่ยื่น, delete=คนที่ถูกลบ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaPeriodId:length(36)}/{ocId:length(36)}/{role}/{status}")] public async Task> 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; 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() }; // 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>(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>(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(); } /// /// คำนวณราชชื่อผู้ได้รับเครื่องราช /// /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaPeriodId:length(36)}")] public async Task> UpdateInsignaiRequestBkk(Guid insigniaPeriodId) { var oc = await _context.Organizations.Where(x => x.Parent == null).FirstOrDefaultAsync(); if (oc == null) return Error(GlobalMessages.Error); var result = await _repository.GetInsigniaRequest(insigniaPeriodId, oc.Id); if (result != null) { Guid period = result.PeriodId; string requestStatus = result.RequestStatus; var candidate = await _repository.GetInsigniaCandidateBKK(insigniaPeriodId, oc.Id); // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new if (requestStatus == null) { // บันทึกรายชื่อ await _repository.InsertCandidate(period, oc.Id, candidate); } } return Success(); } #endregion // #region " บันทึกหมายเหตุ " // [HttpPut("note/{profileId}")] // public async Task> 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> 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 // #region " เปลี่ยน status เป็น st2 รอ ผอ.สำนักรับรอง " // [HttpPost("status/officer/send/{ocId:length(36)}")] // public async Task> ChangeStatusToSt2(Guid id, Guid ocId, InsigniaApproveRequest items) // { // var result = await _repository.GetInsigniaRequest(id, ocId); // if (items != null) // { // _repository.SaveAprove(result.PeriodId, ocId, items); // } // var requestId = await _repository.GetRequestId(result.PeriodId, 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); // } // #endregion // #region " เปลี่ยน status สำหรับ ผอ.สำนัก " // [HttpPost("status/director/approve/{ocId:length(36)}")] // public async Task> 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> 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 /// /// ย้ายขอมูลไปเป็น คนที่ไม่ยื่นขอ /// /// Id ผู้ยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("status/reject/{profileId:length(36)}")] public async Task> 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(); } /// /// ย้ายขอมูลไปเป็น คนที่ถูกลบออก /// /// Id ผู้ยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("status/delete/{profileId:length(36)}")] public async Task> 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(); } /// /// สรุปจำนวนการยื่นขอในแต่ละรอบ /// /// Id รอบการยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("dashboard/{insigniaPeriodId:length(36)}")] public async Task> DashboardInsigniaPeriod(Guid insigniaPeriodId) { var insigniaPeriod = await _context.InsigniaPeriods.FirstOrDefaultAsync(x => x.Id == insigniaPeriodId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaRequestNotFound); var orgSendCount = await _context.InsigniaRequests .Where(x => x.Period == insigniaPeriod) .CountAsync(); var allUserUser = await _context.InsigniaRequests .Where(x => x.Period == insigniaPeriod) .Select(x => x.RequestProfiles.Count()) .SumAsync(); var orgAllCount = await _context.Organizations .Where(x => x.OrganizationType != null) .Where(x => x.OrganizationType.Name == "หน่วยงาน") .CountAsync(); return Success(new { OrgAllCount = orgAllCount, OrgSendCount = orgSendCount, OrgNoSendCount = orgAllCount - orgSendCount, AllUserUser = allUserUser }); } /// /// หน่วยงานทียังไม่ส่งรายชื่อ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("org/no-send/{insigniaPeriodId:length(36)}")] public async Task> 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) .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(); } /// /// หน่วยงานที่อยู่ปัจจุบัน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("agency")] public async Task> 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); } /// /// เพิ่มราชชื่อผู้ได้รับเครื่องราช /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost()] public async Task> 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()), // 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(); } /// /// แก้ไขราชชื่อผู้ได้รับเครื่องราช /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{insigniaRequestProfileId:length(36)}")] public async Task> 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(); } } }