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> 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; 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() }; // 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 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> 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 /// /// เปลี่ยน status เป็น st3 การเจ้าหน้าที่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("officer/approve/{ocId:length(36)}")] public async Task> 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); } /// /// เปลี่ยน status เป็น st2 การเจ้าหน้าที่ไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("officer/reject/{ocId:length(36)}")] public async Task> 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); } /// /// เปลี่ยน status เป็น st5 ผอ.หน่วยอนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("director/approve/{ocId:length(36)}")] public async Task> 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); } /// /// เปลี่ยน status เป็น st4 ผอ.หน่วยไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("director/reject/{ocId:length(36)}")] public async Task> 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> 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 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 }); } /// /// หน่วยงานทียังไม่ส่งรายชื่อ /// /// Id รอบการยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ 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) .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); } /// /// หน่วยงานที่อยู่ปัจจุบัน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ 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(); } /// /// แก้ไขรายชื่อผู้ได้รับเครื่องราช /// /// Id รายชื่อคนที่ยื่นของในรอบ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ 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(); } /// /// รายชื่อผู้ได้รับเครื่องราชส่งข้อมูลไปบันทึกผลได้รับเครื่องราช /// /// Id รอบการยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("send/note/{insigniaPeriodId:length(36)}")] public async Task> 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(); } /// /// list รอบบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("note")] public async Task> 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(); // 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); } /// /// list รายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("note/search")] public async Task> 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); } /// /// เพิ่ม/แก้ไขรายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("note/{insigniaNoteId:length(36)}")] public async Task> 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(); } /// /// เพิ่มเอกสารบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("note/doc/{insigniaNoteId:length(36)}")] public async Task> 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(); } /// /// List เอกสารบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("note/doc/{insigniaNoteId:length(36)}")] public async Task> 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(); 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); } } }