using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Application.Repositories.Reports; using BMA.EHR.Application.Requests; using BMA.EHR.Application.Responses.Insignias; using BMA.EHR.Application.Responses.Organizations; using BMA.EHR.Application.Responses.Profiles; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Insignias; using BMA.EHR.Domain.Models.MetaData; using BMA.EHR.Domain.ModelsExam.Candidate; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Insignia.Service.Requests; using BMA.EHR.Insignia.Service.Services; using Hangfire.Processing; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OfficeOpenXml; using RabbitMQ.Client; using Swashbuckle.AspNetCore.Annotations; using System.Security.Claims; using System.Security.Cryptography; using System.Text; 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 NotificationRepository _repositoryNoti; private readonly IWebHostEnvironment _hostingEnvironment; private readonly string Royal_Type = "Royal"; private readonly UserProfileRepository _userProfileRepository; private const string INSIGNIA_QUEUE = "bma_insignia_request"; private readonly InsigniaPeriodsRepository _insigniaPeriodRepository; private readonly InsigniaReportRepository _insigniaReportRepository; private readonly IConfiguration _configuration; private readonly PermissionRepository _permission; private readonly IBackgroundTaskQueue _queue; /// /// /// /// /// /// /// /// /// /// /// /// public InsigniaRequestController(ApplicationDBContext context, MinIOService documentService, InsigniaPeriodsRepository repository, NotificationRepository repositoryNoti, IWebHostEnvironment hostingEnvironment, IHttpContextAccessor httpContextAccessor, UserProfileRepository userProfileRepository, InsigniaPeriodsRepository insigniaPeriodRepository, InsigniaReportRepository insigniaReportRepository, IConfiguration configuration, PermissionRepository permission, IBackgroundTaskQueue queue) { _context = context; _documentService = documentService; _repository = repository; _repositoryNoti = repositoryNoti; _httpContextAccessor = httpContextAccessor; _hostingEnvironment = hostingEnvironment; _userProfileRepository = userProfileRepository; _insigniaPeriodRepository = insigniaPeriodRepository; _configuration = configuration; _permission = permission; _insigniaReportRepository = insigniaReportRepository; _queue = queue; } #region " Properties " private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; private string? AccessToken => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"]; #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 "สถานะไม่ถูกต้อง"; } } private List GetOcNameFullPath(Guid id, bool showRoot = false) { try { var ocList = new List(); var oc = (from o in _context.Organizations.Include(x => x.Parent).Include(x => x.OrganizationOrganization).Where(x => x.OrganizationOrganization != null).AsQueryable() join oc_name in _context.OrganizationOrganizations.AsQueryable() on o.OrganizationOrganization.Id equals oc_name.Id where o.Parent != null select new { Id = o.Id, Name = oc_name.Name, o.IsActive, o.Parent }).FirstOrDefault(x => x.Id == id && x.IsActive); if (oc == null) return ocList; ocList.Add(oc.Name); if (oc.Parent?.Id != null) { ocList.AddRange(GetOcNameFullPath(oc.Parent.Id, showRoot)); } return ocList; } catch { throw; } } private string FindOCFullPath(Guid id, bool showRoot = false) { try { var ocList = GetOcNameFullPath(id, showRoot); var ret = String.Empty; foreach (var oc in ocList) { ret = oc + "/" + ret; } if (ret.Length > 2) ret = ret.Substring(0, ret.Length - 1); return ret; } catch { throw; } } private async Task> ReadExcelImportReceive(IFormFile formFile) { var list = new List(); using (var stream = new MemoryStream()) { await formFile.CopyToAsync(stream); using (var package = new ExcelPackage(stream)) { for (int i = 0; i < package.Workbook.Worksheets.Count(); i++) { ExcelWorksheet worksheet = package.Workbook.Worksheets[i]; var rowCount = worksheet.Dimension.Rows; for (int row = 2; row <= rowCount; row++) { if (worksheet.Cells[row, 1].ToString() == "") break; list.Add(new ImportReceiveRequest { Number = worksheet.Cells[row, 1].Value != null ? worksheet.Cells[row, 1].Value.ToString() : null, RequestInsignia = worksheet.Cells[row, 2].Value != null ? worksheet.Cells[row, 2].Value.ToString() : null, CitizanId = worksheet.Cells[row, 3].Value != null ? worksheet.Cells[row, 3].Value.ToString() : null, Prefix = worksheet.Cells[row, 4].Value != null ? worksheet.Cells[row, 4].Value.ToString() : null, FullName = worksheet.Cells[row, 5].Value != null ? worksheet.Cells[row, 5].Value.ToString() : null, Position = worksheet.Cells[row, 6].Value != null ? worksheet.Cells[row, 6].Value.ToString() : null, DateReceive = worksheet.Cells[row, 7].Value != null ? DateTime.Parse(worksheet.Cells[row, 7].Value.ToString()) : null, OrgSend = worksheet.Cells[row, 8].Value != null ? worksheet.Cells[row, 8].Value.ToString() : null, OrgReceive = worksheet.Cells[row, 9].Value != null ? worksheet.Cells[row, 9].Value.ToString() : null, Date = worksheet.Cells[row, 10].Value != null ? DateTime.Parse(worksheet.Cells[row, 10].Value.ToString()) : null, VolumeNo = worksheet.Cells[row, 11].Value != null ? worksheet.Cells[row, 11].Value.ToString() : null, Section = worksheet.Cells[row, 12].Value != null ? worksheet.Cells[row, 12].Value.ToString() : null, Page = worksheet.Cells[row, 13].Value != null ? worksheet.Cells[row, 13].Value.ToString() : null, No = worksheet.Cells[row, 14].Value != null ? worksheet.Cells[row, 14].Value.ToString() : null, }); } } } } return list; } private async Task> ReadExcelImportInvoice(IFormFile formFile) { var list = new List(); using (var stream = new MemoryStream()) { await formFile.CopyToAsync(stream); using (var package = new ExcelPackage(stream)) { for (int i = 0; i < package.Workbook.Worksheets.Count(); i++) { ExcelWorksheet worksheet = package.Workbook.Worksheets[i]; var rowCount = worksheet.Dimension.Rows; for (int row = 2; row <= rowCount; row++) { list.Add(new ImportInvoiceRequest { CitizanId = worksheet.Cells[row, 1].Value != null ? worksheet.Cells[row, 1].Value.ToString() : null, Number = worksheet.Cells[row, 2].Value != null ? worksheet.Cells[row, 2].Value.ToString() : null, DatePayment = worksheet.Cells[row, 3].Value != null ? DateTime.Parse(worksheet.Cells[row, 3].Value.ToString()) : null, TypePayment = worksheet.Cells[row, 4].Value != null ? worksheet.Cells[row, 4].Value.ToString() : null, Address = worksheet.Cells[row, 5].Value != null ? worksheet.Cells[row, 5].Value.ToString() : null, }); } } } } return list; } private dynamic FormatRequestProfiles(List requestProfiles) { var rawData = requestProfiles .Select(irp => new { request_id = irp.Request.Id, isApprove = irp.IsApprove, statusInstitute = irp.IsApprove.ToString(), request_date = irp.RequestDate, profileId = irp.ProfileId, citizenId = irp.CitizenId, prefix = irp.Prefix, firstname = irp.FirstName, lastname = irp.LastName, type = irp.ProfileType, position = irp.Position, posno = irp.PosNo, rank = $"{irp.PosTypeName}/{irp.PosLevelName}", lastInsigniaName = irp.LastInsigniaName, instituteName = "", instituteId = -1, 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), irp.MarkRate, irp.MarkLeave, irp.MarkInsignia, irp.MarkDiscipline }) .OrderBy(x => x.citizenId) .ToList(); return rawData; } #endregion [HttpGet("test")] [AllowAnonymous] public async Task> Test() { await _insigniaReportRepository.CalInsigniaRequestBkkByType("employee"); return Success(); } #region " จัดทำรายชื่อครูที่มีสิทธิในการยืนขอเครื่องราชฯ " /// /// list รายการคำขอเครื่องราช ผู้ได้รับ,คนไม่ยื่น,คนที่ถูกลบ /// /// Id รอบเครื่องราช /// Id สังกัด /// ชื่อตำแหน่งระหว่างสกจ กับ เขต (ตอนนี้ให้ส่ง officer ก่อน) /// pending=ผู้ได้รับ, reject=คนไม่ยื่น, delete=คนที่ถูกลบ /// officer or employee /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaPeriodId:length(36)}/{ocId:length(36)}/{role}/{status}/{isDeputy}/{type}")] public async Task> GetInsignaiRequestBkkByTypeAsync(Guid insigniaPeriodId, Guid ocId, string role, string status, bool isDeputy, string type = "officer") { var result = await _repository.GetInsigniaRequestByTypeAsync(insigniaPeriodId, ocId, type); if (result != null) { Guid period = result.PeriodId; var periodName = result.Name; string requestStatus = result.RequestStatus; string requestNote = result.RequestNote; var resend = new InsigniaResults { PeriodId = result.PeriodId, Year = result.Year, Round = result.Round, Name = result.Name, RequestId = result.RequestId, RequestStatus = result.RequestStatus, RequestNote = result.RequestNote, IsLock = result.IsLock, OrganizationName = result.OrganizationName, Document = result.Document, Items = new List() }; GetIsOfficerDto RoleInsignia = await _userProfileRepository.GetIsOfficerRootAsync(AccessToken, "SYS_INSIGNIA_MANAGE"); if (RoleInsignia.isOfficer == true && isDeputy == false && result.RequestStatus != "st6") return Success(resend); if (RoleInsignia.isDirector == true && (result.RequestStatus == "st1" || result.RequestStatus == "st2")) return Success(resend); // Jack Remark Remove เพื่อให้เรียกขข้อมูลออกมาเร็สวขึ้น //var candidate = await _repository.GetInsigniaCandidateBKK(period, ocId); //// ตรวจสอบว่ารายการอยู่ใน table insignia_request_new //if (requestStatus == null) //{ // // บันทึกรายชื่อ // await _repository.InsertCandidate(period, ocId, candidate); //} if (role.Trim().ToLower() == "officer") { /* resend.Items = (await _repository.InsigniaHasProfile(result.PeriodId, ocId, status, type)) .Where(x => x.ProfileType!.ToLower() == type.ToLower()).ToList();*/ var items = await _repository.InsigniaHasProfile(result.PeriodId, ocId, status, type); resend.Items = (items ?? new List()) .Where(x => x != null && !string.IsNullOrEmpty(x.ProfileType) && x.ProfileType.ToLower() == type.ToLower()) .ToList(); return Success(resend); } else { var passData = _context.InsigniaRequests.AsQueryable() .Include(x => x.RequestProfiles) .Where(x => x.OrganizationId == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { requstID = ir.Id, requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = FormatRequestProfiles(ir.RequestProfiles.AsQueryable() .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(x => x.IsApprove) .Where(x => x.ProfileType!.ToLower() == type.ToLower()) .ToList()) }) .ToList() .FirstOrDefault(); var failData = _context.InsigniaRequests.AsQueryable() .Include(x => x.RequestProfiles) .Where(x => x.OrganizationId == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { requstID = ir.Id, requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = FormatRequestProfiles(ir.RequestProfiles.AsQueryable() .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(x => !x.IsApprove) .Where(x => x.ProfileType!.ToLower() == type.ToLower()) .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(); } /// /// list รายการคำขอเครื่องราช ผู้ได้รับ,คนไม่ยื่น,คนที่ถูกลบ /// /// Id รอบเครื่องราช /// Id สังกัด /// ชื่อตำแหน่งระหว่างสกจ กับ เขต (ตอนนี้ให้ส่ง officer ก่อน) /// pending=ผู้ได้รับ, reject=คนไม่ยื่น, delete=คนที่ถูกลบ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaPeriodId:length(36)}/{ocId:length(36)}/{role}/{status}/{isDeputy}")] public async Task> GetInsignaiRequestBkk(Guid insigniaPeriodId, Guid ocId, string role, string status, bool isDeputy) { var result = await _repository.GetInsigniaRequest(insigniaPeriodId, ocId); if (result != null) { Guid period = result.PeriodId; var periodName = result.Name; string requestStatus = result.RequestStatus; string requestNote = result.RequestNote; var resend = new InsigniaResults { PeriodId = result.PeriodId, Year = result.Year, Round = result.Round, Name = result.Name, RequestId = result.RequestId, RequestStatus = result.RequestStatus, RequestNote = result.RequestNote, IsLock = result.IsLock, OrganizationName = result.OrganizationName, Document = result.Document, Items = new List() }; GetIsOfficerDto RoleInsignia = await _userProfileRepository.GetIsOfficerRootAsync(AccessToken, "SYS_INSIGNIA_MANAGE"); if (RoleInsignia.isOfficer == true && isDeputy == false && result.RequestStatus != "st6") return Success(resend); if (RoleInsignia.isDirector == true && (result.RequestStatus == "st1" || result.RequestStatus == "st2")) return Success(resend); // Jack Remark Remove เพื่อให้เรียกขข้อมูลออกมาเร็สวขึ้น //var candidate = await _repository.GetInsigniaCandidateBKK(period, ocId); //// ตรวจสอบว่ารายการอยู่ใน table insignia_request_new //if (requestStatus == null) //{ // // บันทึกรายชื่อ // await _repository.InsertCandidate(period, ocId, candidate); //} if (role.Trim().ToLower() == "officer") { resend.Items = await _repository.InsigniaHasProfile(result.PeriodId, ocId, status); return Success(resend); } else { var passData = _context.InsigniaRequests.AsQueryable() .Include(x => x.RequestProfiles) .Where(x => x.OrganizationId == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { requstID = ir.Id, requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = FormatRequestProfiles(ir.RequestProfiles.AsQueryable() .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(x => x.IsApprove) .ToList()) }) .ToList() .FirstOrDefault(); var failData = _context.InsigniaRequests.AsQueryable() .Include(x => x.RequestProfiles) .Where(x => x.OrganizationId == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { requstID = ir.Id, requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = FormatRequestProfiles(ir.RequestProfiles.AsQueryable() .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(x => !x.IsApprove) .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(); } [HttpGet("cal-test/{periodId:guid}")] public async Task> GetTestInsigniaRequest(Guid periodId) { //var candidate = await _repository.GetInsigniaCandidateBKK(period, oc); //await _repository.InsertCandidate(period, oc, "สำนักงานเขตพระนคร", candidate); var selectPeriod = _context.InsigniaPeriods.AsNoTracking().Include(x => x.InsigniaEmployees) .Where(x => x.Id == periodId).FirstOrDefault(); if (selectPeriod == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var organizations = await _userProfileRepository.GetActiveRootAsync(AccessToken, selectPeriod.RevisionId); var allEmployeeProfileByRoot = new List(); var candidates = new List(); foreach (var organization in organizations) { if (organization == null) continue; if (selectPeriod != null && selectPeriod.InsigniaEmployees != null) { var can = await _repository.GetInsigniaCandidateBKK(periodId, organization.Id); //var emp = // await _userProfileRepository.GetEmployeeProfileByPositionAsync(organization.Id, selectPeriod.InsigniaEmployees.Select(x => x.RefId!.ValueOrBlank()).ToArray(), AccessToken); if (can != null) candidates.AddRange(can); } } var resultData = candidates.Where(x => x.ProfileType == "employee").ToList(); //var resultData = allEmployeeProfileByRoot.Select(x => new //{ // citizenId = x.CitizenId, // fullName = $"{x.Prefix}{x.FirstName} {x.LastName}", // root = x.Root, // child1 = x.Child1 ?? "", // child2 = x.Child2 ?? "", // child3 = x.Child3 ?? "", // child4 = x.Child4 ?? "", // dateAppoint = x.DateAppoint == null ? "" : x.DateAppoint.Value.ToThaiShortDate(), // salary = x.Amount, // salaryCondition = x.ProfileSalary == null || x.ProfileSalary.Count == 0 ? 0 : // x.ProfileSalary.Where(x => x.Date != null).Where(x => x.Date.Value <= new DateTime(selectPeriod.Year, 4, 29)) // .OrderByDescending(x => x.Order).FirstOrDefault() != null ? x.ProfileSalary // .Where(x => x.Date != null).Where(x => x.Date.Value <= new DateTime(selectPeriod.Year, 4, 29)) // .OrderByDescending(x => x.Order).FirstOrDefault().Amount : // x.Amount, // insignias = x.ProfileInsignia.ToList(), // salaries = x.ProfileSalary.ToList(), // profileType = x.ProfileType //}).ToList(); return Success(resultData); } /// /// คำนวณราชชื่อผู้ได้รับเครื่องราช /// /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaPeriodId:length(36)}")] public async Task> UpdateInsigniaRequestBkk(Guid insigniaPeriodId) { var selectPeriod = _context.InsigniaPeriods.AsNoTracking().Where(x => x.Id == insigniaPeriodId).FirstOrDefault(); if (selectPeriod == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var organizations = await _userProfileRepository.GetActiveRootAsync(AccessToken, selectPeriod.RevisionId); foreach (var organization in organizations) { if (organization == null) continue; // TODO - Comment This //if (organization.Id.ToString() != "e93c0ed3-7b80-42aa-8626-8abf0042f618") 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, organization.OrgRootName, candidate); } } } return Success(); } [HttpGet("bg/{type}/{insigniaPeriodId:length(36)}")] public async Task> BackgroundCalculateInsigniaRequestByTypeAsync(string type, Guid insigniaPeriodId) { await _queue.QueueBackgroundWorkItemAsync(async token => { // Logic งาน background จริงเช่น: //await LongRunningProcess(jobInfo, token); }); return Success("Background job started."); } /// /// คำนวณราชชื่อผู้ได้รับเครื่องราช (แยกตาม officer, employee) /// /// officer or employee /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{type}/{insigniaPeriodId:length(36)}")] public async Task> CalculateInsigniaRequestByTypeAsync(string type, Guid insigniaPeriodId) { try { var selectPeriod = _context.InsigniaPeriods.AsNoTracking().Where(x => x.Id == insigniaPeriodId).FirstOrDefault(); if (selectPeriod == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var organizations = await _userProfileRepository.GetActiveRootAsync(AccessToken, selectPeriod.RevisionId); foreach (var organization in organizations) { if (organization == null) continue; var result = await _repository.GetInsigniaRequestByTypeAsync(insigniaPeriodId, organization.Id, type); if (result != null) { Guid period = result.PeriodId; string requestStatus = result.RequestStatus; var candidate = await _repository.GetInsigniaCandidateBKKByTypeAsync(insigniaPeriodId, organization.Id, type); // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new if (requestStatus == null) { // บันทึกรายชื่อ await _repository.InsertCandidate(period, organization.Id, organization.OrgRootName, candidate, type); } else { // update รายชื่อ await _repository.UpdateCandidateAsync(period, organization.Id, organization.OrgRootName, candidate, type); } } } return Success(); } catch (Exception ex) { return Error(ex); } } /// /// คำนวณราชชื่อผู้ได้รับเครื่องราช (Rabbit MQ) /// /// /// [HttpGet("queue/{insigniaPeriodId:length(36)}")] public ActionResult InsigniaRequestCalculate(Guid insigniaPeriodId) { var host = _configuration["RabbitMQ:URL"]; var userName = _configuration["RabbitMQ:UserName"]; var password = _configuration["RabbitMQ:Password"]; var factory = new ConnectionFactory() { HostName = host, UserName = userName, Password = password }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: INSIGNIA_QUEUE, durable: false, exclusive: false, autoDelete: false, arguments: null); var body = Encoding.UTF8.GetBytes(insigniaPeriodId.ToString("D")); channel.BasicPublish(exchange: "", routingKey: INSIGNIA_QUEUE, basicProperties: null, body: body); 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.ProfileId == profileId && d.Request.Id == id).FirstOrDefault(); _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); return Success(); } #endregion /// /// เปลี่ยน status เป็น st3 การเจ้าหน้าที่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("officer/approve/{type}/{id:length(36)}/{ocId:length(36)}")] public async Task> ApproveChangeStatusToSt3(Guid id, Guid ocId, string type) { await _repository.SaveApproveByTypeAsync(id, ocId, type); var requestId = await _repository.GetRequestIdByTypeAsync(id, ocId, type); var requestNew = await _context.InsigniaRequests .Include(x => x.Period) .FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { requestNew.RequestStatus = "st3"; requestNew.RequestNote = ""; await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbc953-630a-4e72-88a7-c68dbb1ba856"), $"{requestNew.Organization} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{requestNew.Organization} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", "", true ); _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st2 การเจ้าหน้าที่ไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("officer/reject/{type}/{id:length(36)}/{ocId:length(36)}")] public async Task> RejectChangeStatusToSt2([FromBody] InsigniaReasonRequest req, Guid id, Guid ocId, string type) { await _repository.SaveApproveByTypeAsync(id, ocId, type); var requestId = await _repository.GetRequestIdByTypeAsync(id, ocId, type); var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { requestNew.RequestStatus = "st2"; requestNew.RequestNote = req.Reason; _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st6 ผอ.หน่วยอนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("director/approve/{type}/{id:length(36)}/{ocId:length(36)}")] public async Task> ApproveChangeStatusToSt6(Guid id, Guid ocId, string type) { var requestId = await _repository.GetRequestIdByTypeAsync(id, ocId, type); var requestNew = await _context.InsigniaRequests .Include(x => x.Period) .FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { requestNew.RequestStatus = "st6"; requestNew.RequestNote = ""; await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbc953-64d9-497a-87a3-0244eade622c"), $"{requestNew.Organization} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{requestNew.Organization} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", "", true ); await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbca3a-8b6a-4a4e-8b23-1f62e4f30ef6"), $"{requestNew.Organization} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{requestNew.Organization} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", "", true ); _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st4 ผอ.หน่วยไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("director/reject/{type}/{id:length(36)}/{ocId:length(36)}")] public async Task> RejectChangeStatusToSt4([FromBody] InsigniaReasonRequest req, Guid id, Guid ocId, string type) { var requestId = await _repository.GetRequestIdByTypeAsync(id, ocId, type); var requestNew = await _context.InsigniaRequests .Include(x => x.Period) .FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { requestNew.RequestStatus = "st4"; requestNew.RequestNote = req.Reason; await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbc953-61ac-47eb-82d7-0e72df7669b5"), $"{requestNew.Organization} ตีกลับข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{requestNew.Organization} ตีกลับข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", "", true ); _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st5 สกจ. หน่วยไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("head/reject/{type}/{id:length(36)}/{ocId:length(36)}")] public async Task> RejectChangeStatusToSt5([FromBody] InsigniaReasonRequest req, Guid id, Guid ocId, string type) { var requestId = await _repository.GetRequestIdByTypeAsync(id, ocId, type); var requestNew = await _context.InsigniaRequests .Include(x => x.Period) .FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { requestNew.RequestStatus = "st5"; requestNew.RequestNote = req.Reason; await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbc953-630a-4e72-88a7-c68dbb1ba856"), $"สกจ. ตีกลับข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"สกจ. ตีกลับข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", "", true ); _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 เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("status/reject/{insigniaRequestProfileId:length(36)}")] public async Task> RejectProfileInsignia([FromBody] InsigniaReasonRequest req, Guid insigniaRequestProfileId) { var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Id == insigniaRequestProfileId); if (insigniaRequestProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound); insigniaRequestProfile.Status = "REJECT"; insigniaRequestProfile.ReasonReject = req.Reason; insigniaRequestProfile.LastUpdateFullName = FullName ?? "System Administrator"; insigniaRequestProfile.LastUpdateUserId = UserId ?? ""; insigniaRequestProfile.LastUpdatedAt = DateTime.Now; _context.SaveChanges(); return Success(); } /// /// ย้ายขอมูลไปเป็น คนที่ถูกลบออก /// /// Id รายชื่อคนที่ยื่นของในรอบ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("status/delete/{insigniaRequestProfileId:length(36)}")] public async Task> DeleteProfileInsignia([FromBody] InsigniaReasonRequest req, Guid insigniaRequestProfileId) { var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Id == insigniaRequestProfileId); if (insigniaRequestProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound); insigniaRequestProfile.Status = "DELETE"; insigniaRequestProfile.ReasonReject = req.Reason; insigniaRequestProfile.LastUpdateFullName = FullName ?? "System Administrator"; insigniaRequestProfile.LastUpdateUserId = UserId ?? ""; insigniaRequestProfile.LastUpdatedAt = DateTime.Now; _context.SaveChanges(); return Success(); } /// /// สรุปจำนวนการยื่นขอในแต่ละรอบ /// /// Id รอบการยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("dashboard/{type}/{insigniaPeriodId:length(36)}")] public async Task> DashboardInsigniaPeriod(Guid insigniaPeriodId, string type) { 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) .Where(x => x.ProfileType!.ToLower() == type.ToLower()) .ToListAsync(); GetIsOfficerDto RoleInsignia = await _userProfileRepository.GetIsOfficerRootAsync(AccessToken, "SYS_INSIGNIA_MANAGE"); var allUserUser = await _context.InsigniaRequests .Where(x => x.Period == insigniaPeriod) .Where(x => x.ProfileType!.ToLower() == type.ToLower()) .Where(x => RoleInsignia.isOfficer == true ? x.RequestStatus == "st6" : (RoleInsignia.isDirector == true ? (x.RequestStatus != "st1" && x.RequestStatus != "st2") : x.Id != null)) .Select(x => x.RequestProfiles.Count(x => x.Status != "DELETE" && x.Status != "REJECT")) .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/{type}/{insigniaPeriodId:length(36)}")] public async Task> ListOrgDontSentUser(Guid insigniaPeriodId, string type) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_MANAGE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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.ProfileType!.ToLower() == type.ToLower()) .Where(x => x.RequestStatus == "st6") .Select(x => x.OrganizationId) .ToListAsync(); var organizations = await _userProfileRepository.GetActiveRootAsync(AccessToken, insigniaPeriod.RevisionId); var orgAllCount = organizations .Where(x => !orgIdSend.Contains(x.Id)) .Select(x => new { OrgId = x.Id, OrgName = x.OrgRootName }) .ToList(); return Success(orgAllCount); } /// /// หน่วยงานที่อยู่ปัจจุบัน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("agency")] public async Task> GetOrgAgency() { await _insigniaReportRepository.CalInsignaiRequestBkk(); return Success(); } /// /// เพิ่มรายชื่อผู้ได้รับเครื่องราช /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ 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 _userProfileRepository.GetProfileByProfileIdAsync(req.ProfileId, AccessToken); 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 .Include(x => x.Request) .ThenInclude(x => x.Period) .FirstOrDefaultAsync(x => x.ProfileId == profile.Id && x.Request.Period.Id == insigniaPeriod.Id); if (insigniaRequestProfile != null) return Error(GlobalMessages.InsigniaRequestProfileDupicate); var insigniaRequest = await _context.InsigniaRequests.Include(x => x.Period).FirstOrDefaultAsync(x => x.Period.Id == insigniaPeriod.Id && x.OrganizationId == req.OcId); if (insigniaRequest == null) { insigniaRequest = new InsigniaRequest { Period = insigniaPeriod, OrganizationId = profile.RootId ?? Guid.Empty, Organization = profile.Root, RequestStatus = "st1", RequestNote = "", CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; } var lastInsignia = string.Empty; if (profile.ProfileInsignia != null) { var id = profile.ProfileInsignia.Id ?? Guid.Empty; var insigniaEnt = _insigniaPeriodRepository.GetInsigniaById(id); if (insigniaEnt != null) lastInsignia = insigniaEnt.Name; } await _context.AddAsync(new InsigniaRequestProfile { Status = "PENDING", ProfileId = profile.Id, RequestInsignia = insignia, Request = insigniaRequest, Reason = req.Reason, RequestDate = DateTime.Now, MatchingConditions = System.Text.Json.JsonSerializer.Serialize(new List()), // serialize to string Salary = profile.Amount, //profile.Salaries.Count() == 0 ? null : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, // Add Information for reused in API Call ProfileType = profile.ProfileType != null && profile.ProfileType != "" ? profile.ProfileType.ToLower() : "officer", Prefix = profile.Prefix, FirstName = profile.FirstName, LastName = profile.LastName, CitizenId = profile.CitizenId, BirthDate = profile.BirthDate, DateAppoint = profile.DateAppoint, Position = profile.Position, Gender = profile.Gender, PosTypeName = profile.PosType, PosLevelName = profile.PosLevel, PosNo = profile.ProfileSalary == null ? "" : profile.ProfileSalary.PosNo, Amount = profile.ProfileSalary == null ? 0 : profile.ProfileSalary.Amount, PositionSalaryAmount = profile.ProfileSalary == null ? 0 : profile.ProfileSalary.PositionSalaryAmount, LastInsigniaName = lastInsignia, Root = profile.Root, RootId = profile.RootId, RootDnaId = profile.RootDnaId, Child1 = profile.Child1, Child1Id = profile.Child1Id, Child1DnaId = profile.Child1DnaId, Child2 = profile.Child2, Child2Id = profile.Child2Id, Child2DnaId = profile.Child2DnaId, Child3 = profile.Child3, Child3Id = profile.Child3Id, Child3DnaId = profile.Child3DnaId, Child4 = profile.Child4, Child4Id = profile.Child4Id, Child4DnaId = profile.Child4DnaId, }); 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); insigniaPeriod.IsLock = true; var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .FirstOrDefaultAsync(x => x.Year == insigniaPeriod.Year); if (insigniaNote == null) { insigniaNote = new InsigniaNote { Name = req.Name, Year = insigniaPeriod.Year, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.InsigniaNotes.AddAsync(insigniaNote); await _context.SaveChangesAsync(); insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .FirstOrDefaultAsync(x => x.Id == insigniaNote.Id); } var requestOlds = await _context.InsigniaRequests .Where(p => p.Period == insigniaPeriod) .Where(p => p.RequestStatus == "st6") .ToListAsync(); foreach (var requestOld in requestOlds) { var profileOlds = await _context.InsigniaRequestProfiles .Include(x => x.RequestInsignia) .Where(p => p.Request == requestOld) .ToListAsync(); foreach (var profileOld in profileOlds) { if (profileOld.Status == "DELETE" || profileOld.Status == "REJECT") continue; var noreProfileOld = insigniaNote.InsigniaNoteProfiles .Where(x => x.ProfileId == profileOld.ProfileId) .FirstOrDefault(); if (noreProfileOld != null) { noreProfileOld.RequestDate = profileOld.RequestDate; noreProfileOld.Salary = profileOld.Salary; noreProfileOld.IsApprove = profileOld.IsApprove; noreProfileOld.RequestInsignia = profileOld.RequestInsignia; noreProfileOld.CreatedFullName = FullName ?? "System Administrator"; noreProfileOld.CreatedUserId = UserId ?? ""; noreProfileOld.CreatedAt = DateTime.Now; noreProfileOld.LastUpdateFullName = FullName ?? "System Administrator"; noreProfileOld.LastUpdateUserId = UserId ?? ""; noreProfileOld.LastUpdatedAt = DateTime.Now; } else { if (profileOld.ProfileId == null) continue; var pf = _userProfileRepository.GetOrgProfileByProfileId(profileOld.ProfileId, AccessToken); var orgSend = ""; var orgRecv = ""; if (profileOld.Child4 != null || profileOld.Child4 != "") orgSend += $"{profileOld.Child4}"; if (profileOld.Child3 != null || profileOld.Child3 != "") orgSend += $" {profileOld.Child3}"; if (profileOld.Child2 != null || profileOld.Child2 != "") orgSend += $" {profileOld.Child2}"; if (profileOld.Child1 != null || profileOld.Child1 != "") orgSend += $" {profileOld.Child1}"; if (profileOld.Root != null || profileOld.Root != "") orgSend += $" {profileOld.Root}"; orgSend = orgSend.Trim(); if (pf != null) { if (pf.Child4 != null || pf.Child4 != "") orgRecv += $"{pf.Child4}"; if (pf.Child3 != null || pf.Child3 != "") orgRecv += $" {pf.Child3}"; if (pf.Child2 != null || pf.Child2 != "") orgRecv += $" {pf.Child2}"; if (pf.Child1 != null || pf.Child1 != "") orgRecv += $" {pf.Child1}"; if (pf.Root != null || pf.Root != "") orgRecv += $" {pf.Root}"; orgRecv = orgRecv.Trim(); } await _context.InsigniaNoteProfiles.AddAsync(new InsigniaNoteProfile { RequestDate = profileOld.RequestDate, Salary = profileOld.Salary, IsApprove = profileOld.IsApprove, Status = "PENDING", ProfileId = profileOld.ProfileId, RequestInsignia = profileOld.RequestInsignia, OrganizationOrganizationSend = orgSend, OrganizationOrganizationReceive = orgRecv, InsigniaNote = insigniaNote, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, // Add Information for reused in API Call ProfileType = profileOld.ProfileType ?? "officer", Prefix = profileOld.Prefix, FirstName = profileOld.FirstName, LastName = profileOld.LastName, CitizenId = profileOld.CitizenId, BirthDate = profileOld.BirthDate, DateAppoint = profileOld.DateAppoint, Position = profileOld.Position, Gender = profileOld.Gender, PosTypeName = profileOld.PosTypeName, PosLevelName = profileOld.PosLevelName, PosNo = profileOld.PosNo, Amount = profileOld.Amount, PositionSalaryAmount = profileOld.PositionSalaryAmount, Root = profileOld.Root, RootId = profileOld.RootId, RootDnaId = profileOld.RootDnaId, Child1 = profileOld.Child1, Child1Id = profileOld.Child1Id, Child1DnaId = profileOld.Child1Id, Child2 = profileOld.Child2, Child2Id = profileOld.Child2Id, Child2DnaId = profileOld.Child2DnaId, Child3 = profileOld.Child3, Child3Id = profileOld.Child3Id, Child3DnaId = profileOld.Child3DnaId, Child4 = profileOld.Child4, Child4Id = profileOld.Child4Id, Child4DnaId = profileOld.Child4DnaId, }); } } } await _context.SaveChangesAsync(); return Success(); } /// /// รายชื่อผู้ได้รับเครื่องราชส่งข้อมูลไปบันทึกผลได้รับเครื่องราช(อัพเดทstatus) /// /// Id รอบการยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("send/note/{insigniaPeriodId:length(36)}")] public async Task> SendPeriodToNoteUpdateStatus(Guid insigniaPeriodId) { var insigniaPeriod = await _context.InsigniaPeriods .FirstOrDefaultAsync(x => x.Id == insigniaPeriodId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaRequestNotFound); //insigniaPeriod.IsLock = true; await _context.SaveChangesAsync(); return Success(); } /// /// list รอบบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("note")] public async Task> GetListNote(string path) { path = path.Trim().ToUpper(); string getPermission = string.Empty; if (path == "RECORD") { getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_RECORD"); } else if (path == "ALLOCATE") { getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_ALLOCATE"); } else if (path == "BORROW") { getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_BORROW"); } else { getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_RECORD"); } var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaNotes = await _context.InsigniaNotes.AsQueryable() .OrderByDescending(x => x.Year) .Select(p => new { Id = p.Id, Name = p.Name, Year = p.Year, }) .ToListAsync(); return Success(insigniaNotes); } /// /// list รายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ (แยก officer, employee) /// /// Reqest Body /// officer or employee /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("note/search/{type}")] public async Task> GetListNoteProfileByTypeAsync([FromBody] InsigniaNoteSearchRequest req, string type = "officer") { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_RECORD"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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 rawNoteProfiles = await _context.InsigniaNoteProfiles .Where(x => x.ProfileType!.ToLower() == type.ToLower()) .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 { x.ProfileId, Id = x.Id, x.Prefix, x.FirstName, x.LastName, x.Position, x.CitizenId, x.ProfileType, OcId = x.RootId, // TODO: ต้องมาแก้ไข RequestInsignia = x.RequestInsignia.Name, RequestInsigniaId = x.RequestInsignia.Id, RequestInsigniaShortName = x.RequestInsignia.ShortName, DateReceive = x.DateReceive, x.OrganizationOrganizationSend, x.OrganizationOrganizationReceive, Status = x.Status, Issue = x.Issue, Date = x.Date, VolumeNo = x.VolumeNo, Section = x.Section, Page = x.Page, No = x.No, DatePayment = x.DatePayment, TypePayment = x.TypePayment, Address = x.Address, Number = x.Number, Salary = x.Salary, DateReceiveInsignia = x.DateReceiveInsignia, DocReceiveInsignia = x.DocReceiveInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.DocReceiveInsignia.Id, x.OrgReceiveInsignia, x.OrgReceiveInsigniaId, DateReturnInsignia = x.DateReturnInsignia, DocReturnInsignia = x.DocReturnInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.DocReturnInsignia.Id, x.OrgReturnInsignia, x.OrgReturnInsigniaId, }) .ToListAsync(); var insigniaNoteProfiles = rawNoteProfiles .Select(x => new { Id = x.Id, ProfileId = x.ProfileId, Prefix = x.Prefix ?? "", Position = x.Position ?? "", ProfileType = x.ProfileType ?? "", x.OcId, CitizenId = x.CitizenId ?? "", FullName = $"{x.Prefix ?? ""}{x.FirstName ?? ""} {x.LastName ?? ""}".Trim(), RequestInsignia = x.RequestInsignia, RequestInsigniaId = x.RequestInsigniaId, RequestInsigniaShortName = x.RequestInsigniaShortName, DateReceive = x.DateReceive, x.OrganizationOrganizationSend, x.OrganizationOrganizationReceive, Status = x.Status, Issue = x.Issue, Date = x.Date, VolumeNo = x.VolumeNo, Section = x.Section, Page = x.Page, No = x.No, DatePayment = x.DatePayment, TypePayment = x.TypePayment, Address = x.Address, Number = x.Number, Salary = x.Salary, DateReceiveInsignia = x.DateReceiveInsignia, DocReceiveInsignia = x.DocReceiveInsignia, x.OrgReceiveInsignia, x.OrgReceiveInsigniaId, DateReturnInsignia = x.DateReturnInsignia, DocReturnInsignia = x.DocReturnInsignia, x.OrgReturnInsignia, x.OrgReturnInsigniaId, }) .ToList(); var _insigniaNoteProfiles = new List(); foreach (var insigniaNoteProfile in insigniaNoteProfiles) { _insigniaNoteProfiles.Add( new { insigniaNoteProfile.Id, insigniaNoteProfile.ProfileId, insigniaNoteProfile.Prefix, insigniaNoteProfile.Position, insigniaNoteProfile.CitizenId, insigniaNoteProfile.ProfileType, insigniaNoteProfile.FullName, insigniaNoteProfile.RequestInsignia, insigniaNoteProfile.RequestInsigniaId, insigniaNoteProfile.RequestInsigniaShortName, insigniaNoteProfile.DateReceive, insigniaNoteProfile.OrganizationOrganizationSend, insigniaNoteProfile.OrganizationOrganizationReceive, insigniaNoteProfile.Status, insigniaNoteProfile.Issue, insigniaNoteProfile.Date, insigniaNoteProfile.VolumeNo, insigniaNoteProfile.Section, insigniaNoteProfile.Page, insigniaNoteProfile.No, insigniaNoteProfile.DatePayment, insigniaNoteProfile.TypePayment, insigniaNoteProfile.Address, insigniaNoteProfile.Number, insigniaNoteProfile.Salary, insigniaNoteProfile.DateReceiveInsignia, DocReceiveInsignia = insigniaNoteProfile.DocReceiveInsignia == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNoteProfile.DocReceiveInsignia), insigniaNoteProfile.OrgReceiveInsignia, insigniaNoteProfile.OrgReceiveInsigniaId, insigniaNoteProfile.DateReturnInsignia, DocReturnInsignia = insigniaNoteProfile.DocReturnInsignia == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNoteProfile.DocReturnInsignia), insigniaNoteProfile.OrgReturnInsignia, insigniaNoteProfile.OrgReturnInsigniaId, } ); } return Success(_insigniaNoteProfiles); } /// /// list รายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("note/search")] public async Task> GetListNoteProfile([FromBody] InsigniaNoteSearchRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_RECORD"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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 rawNoteProfiles = 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 { Id = x.Id, x.Prefix, x.FirstName, x.LastName, x.Position, x.CitizenId, x.ProfileType, OcId = x.RootId, // TODO: ต้องมาแก้ไข RequestInsignia = x.RequestInsignia.Name, RequestInsigniaId = x.RequestInsignia.Id, RequestInsigniaShortName = x.RequestInsignia.ShortName, DateReceive = x.DateReceive, x.OrganizationOrganizationSend, x.OrganizationOrganizationReceive, Status = x.Status, Issue = x.Issue, Date = x.Date, VolumeNo = x.VolumeNo, Section = x.Section, Page = x.Page, No = x.No, DatePayment = x.DatePayment, TypePayment = x.TypePayment, Address = x.Address, Number = x.Number, Salary = x.Salary, DateReceiveInsignia = x.DateReceiveInsignia, DocReceiveInsignia = x.DocReceiveInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.DocReceiveInsignia.Id, x.OrgReceiveInsignia, x.OrgReceiveInsigniaId, DateReturnInsignia = x.DateReturnInsignia, DocReturnInsignia = x.DocReturnInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.DocReturnInsignia.Id, x.OrgReturnInsignia, x.OrgReturnInsigniaId, }) .ToListAsync(); var insigniaNoteProfiles = rawNoteProfiles .Select(x => new { Id = x.Id, Prefix = x.Prefix ?? "", Position = x.Position ?? "", ProfileType = x.ProfileType ?? "", x.OcId, CitizenId = x.CitizenId ?? "", FullName = $"{x.Prefix ?? ""}{x.FirstName ?? ""} {x.LastName ?? ""}".Trim(), RequestInsignia = x.RequestInsignia, RequestInsigniaId = x.RequestInsigniaId, RequestInsigniaShortName = x.RequestInsigniaShortName, DateReceive = x.DateReceive, x.OrganizationOrganizationSend, x.OrganizationOrganizationReceive, Status = x.Status, Issue = x.Issue, Date = x.Date, VolumeNo = x.VolumeNo, Section = x.Section, Page = x.Page, No = x.No, DatePayment = x.DatePayment, TypePayment = x.TypePayment, Address = x.Address, Number = x.Number, Salary = x.Salary, DateReceiveInsignia = x.DateReceiveInsignia, DocReceiveInsignia = x.DocReceiveInsignia, x.OrgReceiveInsignia, x.OrgReceiveInsigniaId, DateReturnInsignia = x.DateReturnInsignia, DocReturnInsignia = x.DocReturnInsignia, x.OrgReturnInsignia, x.OrgReturnInsigniaId, }) .ToList(); var _insigniaNoteProfiles = new List(); foreach (var insigniaNoteProfile in insigniaNoteProfiles) { _insigniaNoteProfiles.Add( new { insigniaNoteProfile.Id, insigniaNoteProfile.Prefix, insigniaNoteProfile.Position, insigniaNoteProfile.CitizenId, insigniaNoteProfile.ProfileType, insigniaNoteProfile.FullName, insigniaNoteProfile.RequestInsignia, insigniaNoteProfile.RequestInsigniaId, insigniaNoteProfile.RequestInsigniaShortName, insigniaNoteProfile.DateReceive, insigniaNoteProfile.OrganizationOrganizationSend, insigniaNoteProfile.OrganizationOrganizationReceive, insigniaNoteProfile.Status, insigniaNoteProfile.Issue, insigniaNoteProfile.Date, insigniaNoteProfile.VolumeNo, insigniaNoteProfile.Section, insigniaNoteProfile.Page, insigniaNoteProfile.No, insigniaNoteProfile.DatePayment, insigniaNoteProfile.TypePayment, insigniaNoteProfile.Address, insigniaNoteProfile.Number, insigniaNoteProfile.Salary, insigniaNoteProfile.DateReceiveInsignia, DocReceiveInsignia = insigniaNoteProfile.DocReceiveInsignia == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNoteProfile.DocReceiveInsignia), insigniaNoteProfile.OrgReceiveInsignia, insigniaNoteProfile.OrgReceiveInsigniaId, insigniaNoteProfile.DateReturnInsignia, DocReturnInsignia = insigniaNoteProfile.DocReturnInsignia == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNoteProfile.DocReturnInsignia), insigniaNoteProfile.OrgReturnInsignia, insigniaNoteProfile.OrgReturnInsigniaId, } ); } return Success(_insigniaNoteProfiles); } /// /// list รายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ ไม่ validate สิทธิ์ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("note-list/search")] public async Task> GetListNoteProfileNonValidateRole([FromBody] InsigniaNoteSearchRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_RECORD"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaNote = await _context.InsigniaNotes .FirstOrDefaultAsync(x => x.Id == req.InsigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); InsigniaType? insigniaType = null; if (req.InsigniaTypeId != null) { insigniaType = await _context.InsigniaTypes .FirstOrDefaultAsync(x => x.Id == req.InsigniaTypeId); if (insigniaType == null) return Error(GlobalMessages.InsigniaTypeNotFound); } var rawNoteProfiles = 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 { InsigniaTypeId = x.RequestInsignia.InsigniaType.Id, Id = x.Id, x.CitizenId, x.Prefix, x.FirstName, x.LastName, x.ProfileType, x.Position, OcId = x.RootId, // TODO: ต้องมาแก้ไข RequestInsignia = x.RequestInsignia.Name, RequestInsigniaId = x.RequestInsignia.Id, RequestInsigniaShortName = x.RequestInsignia.ShortName, DateReceive = x.DateReceive, x.OrganizationOrganizationSend, x.OrganizationOrganizationReceive, Status = x.Status, Issue = x.Issue, Date = x.Date, VolumeNo = x.VolumeNo, Section = x.Section, Page = x.Page, No = x.No, DatePayment = x.DatePayment, TypePayment = x.TypePayment, Address = x.Address, Number = x.Number, Salary = x.Salary, DateReceiveInsignia = x.DateReceiveInsignia, DocReceiveInsignia = x.DocReceiveInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.DocReceiveInsignia.Id, x.OrgReceiveInsignia, x.OrgReceiveInsigniaId, DateReturnInsignia = x.DateReturnInsignia, DocReturnInsignia = x.DocReturnInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.DocReturnInsignia.Id, x.OrgReturnInsignia, x.OrgReturnInsigniaId, }) .ToListAsync(); if (req.InsigniaTypeId != null) { rawNoteProfiles = rawNoteProfiles.Where(x => x.InsigniaTypeId == req.InsigniaTypeId).ToList(); } var insigniaNoteProfiles = rawNoteProfiles .Select(x => new { Id = x.Id, Prefix = x.Prefix ?? "", Position = x.Position ?? "", ProfileType = x.ProfileType ?? "", x.OcId, CitizenId = x.CitizenId ?? "", FullName = $"{x.Prefix ?? ""}{x.FirstName ?? ""} {x.LastName ?? ""}".Trim(), RequestInsignia = x.RequestInsignia, RequestInsigniaId = x.RequestInsigniaId, RequestInsigniaShortName = x.RequestInsigniaShortName, DateReceive = x.DateReceive, x.OrganizationOrganizationSend, x.OrganizationOrganizationReceive, Status = x.Status, Issue = x.Issue, Date = x.Date, VolumeNo = x.VolumeNo, Section = x.Section, Page = x.Page, No = x.No, DatePayment = x.DatePayment, TypePayment = x.TypePayment, Address = x.Address, Number = x.Number, Salary = x.Salary, DateReceiveInsignia = x.DateReceiveInsignia, DocReceiveInsignia = x.DocReceiveInsignia, x.OrgReceiveInsignia, x.OrgReceiveInsigniaId, DateReturnInsignia = x.DateReturnInsignia, DocReturnInsignia = x.DocReturnInsignia, x.OrgReturnInsignia, x.OrgReturnInsigniaId, }) .ToList(); var _insigniaNoteProfiles = new List(); foreach (var insigniaNoteProfile in insigniaNoteProfiles) { _insigniaNoteProfiles.Add( new { insigniaNoteProfile.Id, insigniaNoteProfile.Prefix, insigniaNoteProfile.Position, insigniaNoteProfile.CitizenId, insigniaNoteProfile.ProfileType, insigniaNoteProfile.FullName, insigniaNoteProfile.RequestInsignia, insigniaNoteProfile.RequestInsigniaId, insigniaNoteProfile.RequestInsigniaShortName, insigniaNoteProfile.DateReceive, insigniaNoteProfile.OrganizationOrganizationSend, insigniaNoteProfile.OrganizationOrganizationReceive, insigniaNoteProfile.Status, insigniaNoteProfile.Issue, insigniaNoteProfile.Date, insigniaNoteProfile.VolumeNo, insigniaNoteProfile.Section, insigniaNoteProfile.Page, insigniaNoteProfile.No, insigniaNoteProfile.DatePayment, insigniaNoteProfile.TypePayment, insigniaNoteProfile.Address, insigniaNoteProfile.Number, insigniaNoteProfile.Salary, insigniaNoteProfile.DateReceiveInsignia, DocReceiveInsignia = insigniaNoteProfile.DocReceiveInsignia == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNoteProfile.DocReceiveInsignia), insigniaNoteProfile.OrgReceiveInsignia, insigniaNoteProfile.OrgReceiveInsigniaId, insigniaNoteProfile.DateReturnInsignia, DocReturnInsignia = insigniaNoteProfile.DocReturnInsignia == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNoteProfile.DocReturnInsignia), insigniaNoteProfile.OrgReturnInsignia, insigniaNoteProfile.OrgReturnInsigniaId, } ); } return Success(_insigniaNoteProfiles); } /// /// Get รายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ /// /// Id บุคคลในบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("note/{insigniaNoteProfileId:length(36)}")] public async Task> GetListNoteProfile(Guid insigniaNoteProfileId) { var insigniaNoteProfile = await _context.InsigniaNoteProfiles .Where(x => x.Id == insigniaNoteProfileId) .Select(x => new { Id = x.Id, Prefix = x.Prefix, FirstName = x.FirstName, LastName = x.LastName, CitizenId = x.CitizenId, Positon = x.Position ?? "", ProfileType = x.ProfileType, OcId = x.RootId ?? Guid.Empty, Oc = x.Root ?? "", RequestInsignia = x.RequestInsignia.Name, RequestInsigniaId = x.RequestInsignia.Id, RequestInsigniaShortName = x.RequestInsignia.ShortName, DateReceive = x.DateReceive, x.OrganizationOrganizationSend, x.OrganizationOrganizationReceive, Status = x.Status, Issue = x.Issue, Date = x.Date, VolumeNo = x.VolumeNo, Section = x.Section, Page = x.Page, No = x.No, DatePayment = x.DatePayment, TypePayment = x.TypePayment, Address = x.Address, Number = x.Number, Salary = x.Salary, }).FirstOrDefaultAsync(); if (insigniaNoteProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound); var _insigniaNoteProfile = new { insigniaNoteProfile.Id, Prefix = insigniaNoteProfile.Prefix ?? "", Position = insigniaNoteProfile.Positon, insigniaNoteProfile.CitizenId, ProfileType = insigniaNoteProfile.ProfileType ?? "", FullName = $"{insigniaNoteProfile.Prefix ?? ""}{insigniaNoteProfile.FirstName ?? ""} {insigniaNoteProfile.LastName ?? ""}", insigniaNoteProfile.RequestInsignia, insigniaNoteProfile.RequestInsigniaId, insigniaNoteProfile.RequestInsigniaShortName, insigniaNoteProfile.DateReceive, insigniaNoteProfile.OrganizationOrganizationSend, OrganizationOrganizationReceive = insigniaNoteProfile.OrganizationOrganizationReceive == null ? insigniaNoteProfile.Oc : insigniaNoteProfile.OrganizationOrganizationReceive, insigniaNoteProfile.Status, insigniaNoteProfile.Issue, insigniaNoteProfile.Date, insigniaNoteProfile.VolumeNo, insigniaNoteProfile.Section, insigniaNoteProfile.Page, insigniaNoteProfile.No, insigniaNoteProfile.DatePayment, insigniaNoteProfile.TypePayment, insigniaNoteProfile.Address, insigniaNoteProfile.Number, insigniaNoteProfile.Salary, }; return Success(_insigniaNoteProfile); } /// /// เพิ่ม/แก้ไขรายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("note/{insigniaNoteId:length(36)}")] public async Task> AddNoteProfile([FromBody] InsigniaNoteRequest req, Guid insigniaNoteId) { var profile = await _userProfileRepository.GetOfficerProfileByCitizenId(req.CitizanId, AccessToken); if (profile == null) return Error(GlobalMessages.DataNotFound); var insignia = await _context.Insignias .Include(x => x.InsigniaType) .FirstOrDefaultAsync(x => x.Id == req.InsigniaId); if (insignia == null) return Error(GlobalMessages.InsigniaNotFound); var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .FirstOrDefaultAsync(x => x.Id == insigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); var profileInsignia = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.ProfileId == profile.Id); if (profileInsignia == null) { var insigniaNoteProfile = new InsigniaNoteProfile { Salary = profile.ProfileSalary == null ? 0 : profile.ProfileSalary.Amount, IsApprove = true, Status = "PENDING", ProfileId = profile.Id, 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, OrganizationOrganizationReceive = req.OrganizationOrganizationReceive, OrganizationOrganizationSend = req.OrganizationOrganizationSend, InsigniaNote = insigniaNote, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, Amount = profile.ProfileSalary == null ? 0 : profile.ProfileSalary.Amount, CitizenId = profile.CitizenId, DateAppoint = profile.DateAppoint, Prefix = profile.Prefix, FirstName = profile.FirstName, LastName = profile.LastName, Gender = profile.Gender, PosLevelName = profile.PosLevel, PosNo = profile.PosNo, PosTypeName = profile.PosType, Position = profile.Position, ProfileType = profile.ProfileType, PositionSalaryAmount = profile.ProfileSalary == null ? 0 : profile.ProfileSalary.PositionSalaryAmount, Root = profile.Root, RootId = profile.RootId, RootDnaId = profile.RootDnaId, Child1 = profile.Child1, Child1Id = profile.Child1Id, Child1DnaId = profile.Child1DnaId, Child2 = profile.Child2, Child2Id = profile.Child2Id, Child2DnaId = profile.Child2DnaId, Child3 = profile.Child3, Child3Id = profile.Child3Id, Child3DnaId = profile.Child3DnaId, Child4 = profile.Child4, Child4Id = profile.Child4Id, Child4DnaId = profile.Child4DnaId, }; insigniaNote.InsigniaNoteProfiles.Add(insigniaNoteProfile); if (req.DateReceive != null && req.Date != null && profile.Id != null) { insigniaNoteProfile.Status = "DONE"; if (profile.ProfileType == "officer") { var profileInsigniaBody = new PostProfileInsigniaDto { profileId = profile.Id, year = insigniaNote.Year, no = req.No, volumeNo = req.VolumeNo, section = req.Section, page = req.Page, receiveDate = req.DateReceive.Value, dateAnnounce = req.Date.Value, insigniaId = insignia.Id, issue = req.Issue, note = "", refCommandDate = null, refCommandNo = "", volume = "", }; await _userProfileRepository.PostProfileInsigniaAsync(profileInsigniaBody, AccessToken); } else { var profileInsigniaBody = new PostProfileEmpInsigniaDto { profileEmployeeId = profile.Id, year = insigniaNote.Year, no = req.No, volumeNo = req.VolumeNo, section = req.Section, page = req.Page, receiveDate = req.DateReceive.Value, dateAnnounce = req.Date.Value, insigniaId = insignia.Id, issue = req.Issue, note = "", refCommandDate = null, refCommandNo = "", volume = "", }; await _userProfileRepository.PostProfileEmpInsigniaAsync(profileInsigniaBody, AccessToken); } } } else { profileInsignia.DatePayment = req.DatePayment; profileInsignia.TypePayment = req.TypePayment; profileInsignia.Address = req.Address; if (profileInsignia.Status != "DONE") { 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.RequestInsignia = insignia; profileInsignia.LastUpdateFullName = FullName ?? "System Administrator"; profileInsignia.LastUpdateUserId = UserId ?? ""; profileInsignia.LastUpdatedAt = DateTime.Now; if (req.DateReceive != null && req.Date != null) { profileInsignia.Status = "DONE"; if (profile.ProfileType != null && profile.ProfileType.ToLower() == "officer") { var profileInsigniaBody = new PostProfileInsigniaDto { profileId = profileInsignia.ProfileId.Value, year = insigniaNote.Year, no = profileInsignia.No, volumeNo = profileInsignia.VolumeNo, section = profileInsignia.Section, page = profileInsignia.Page, receiveDate = profileInsignia.DateReceive.Value, dateAnnounce = profileInsignia.Date.Value, insigniaId = profileInsignia.RequestInsignia.Id, issue = profileInsignia.Issue, note = "", refCommandDate = null, refCommandNo = "", volume = "", }; await _userProfileRepository.PostProfileInsigniaAsync(profileInsigniaBody, AccessToken); } else { var profileInsigniaBody = new PostProfileEmpInsigniaDto { profileEmployeeId = profileInsignia.ProfileId.Value, year = insigniaNote.Year, no = profileInsignia.No, volumeNo = profileInsignia.VolumeNo, section = profileInsignia.Section, page = profileInsignia.Page, receiveDate = profileInsignia.DateReceive.Value, dateAnnounce = profileInsignia.Date.Value, insigniaId = profileInsignia.RequestInsignia.Id, issue = profileInsignia.Issue, note = "", refCommandDate = null, refCommandNo = "", volume = "", }; await _userProfileRepository.PostProfileEmpInsigniaAsync(profileInsigniaBody, AccessToken); } } } } await _context.SaveChangesAsync(); return Success(); } /// /// เพิ่มเอกสารบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("note/doc/{insigniaNoteId:length(36)}")] public async Task> AddDocumentProfile([FromForm] InsigniaNoteDocRequest req, Guid insigniaNoteId) { var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_INSIGNIA_RECORD"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } } } await _context.SaveChangesAsync(); return Success(); } /// /// List เอกสารบันทึกผลการได้รับพระราชทานเครื่องราชอิสริยสภรณ์/การจ่ายใบกำกับ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("note/doc/{insigniaNoteId:length(36)}")] public async Task> GetDocumentProfile(Guid insigniaNoteId) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_RECORD"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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 { Reason = doc.Reason, FileName = doc.Document.FileName, PathName = await _documentService.ImagesPath(doc.Document.Id) }; insigniaNoteDocs.Add(_doc); } return Success(insigniaNoteDocs); } /// /// import บันทึกผลการได้รับเครื่องราชฯ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("import/receice/{insigniaNoteId:length(36)}"), DisableRequestSizeLimit] public async Task> ImportReceiceProfile([FromForm] ImportFileRequest req, Guid insigniaNoteId) { var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Include(x => x.InsigniaNoteProfiles) .FirstOrDefaultAsync(x => x.Id == insigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); if (Request.Form.Files == null || Request.Form.Files.Count == 0) { return Error(GlobalMessages.NoFileToUpload); } var file = Request.Form.Files[0]; if (!Path.GetExtension(file.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase)) { return Error("นามสกุลไฟล์ต้องเป็น .xlsx!"); } var items = await ReadExcelImportReceive(file); foreach (var item in items) { if (item.DateReceive == null || item.Date == null) continue; var pf = await _userProfileRepository.GetOfficerProfileByCitizenId(item.CitizanId, AccessToken); var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.ProfileId == pf.Id); if (profile == null) { var _insignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Name == item.RequestInsignia); if (_insignia == null) continue; profile = new InsigniaNoteProfile { RequestDate = DateTime.Now, Salary = pf.Amount, IsApprove = true, Status = "PENDIND", Number = item.Number, RequestInsignia = _insignia, DateReceive = item.DateReceive, Date = item.Date, VolumeNo = item.VolumeNo, Section = item.Section, Page = item.Page, No = item.No, ProfileId = pf.Id, InsigniaNote = insigniaNote, Prefix = pf.Prefix, FirstName = pf.FirstName, LastName = pf.LastName, CitizenId = pf.CitizenId, BirthDate = pf.BirthDate, DateAppoint = pf.DateAppoint, Position = pf.Position, ProfileType = pf.ProfileType, Gender = pf.Gender, PosTypeName = pf.PosType, PosLevelName = pf.PosLevel, PosNo = pf.PosNo, Amount = pf.Amount, PositionSalaryAmount = pf.PositionSalaryAmount, RootId = pf.RootId, RootDnaId = pf.RootDnaId, Root = pf.Root, Child1 = pf.Child1, Child1Id = pf.Child1Id, Child1DnaId = pf.Child1DnaId, Child2 = pf.Child2, Child2Id = pf.Child2Id, Child2DnaId = pf.Child2DnaId, Child3 = pf.Child3, Child3Id = pf.Child3Id, Child3DnaId = pf.Child3DnaId, Child4 = pf.Child4, Child4Id = pf.Child4Id, Child4DnaId = pf.Child4DnaId, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.InsigniaNoteProfiles.AddAsync(profile); } else { if (profile.Status != "DONE") { profile.Number = item.Number; profile.RequestInsignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Name == item.RequestInsignia) == null ? profile.RequestInsignia : await _context.Insignias.FirstOrDefaultAsync(x => x.Name == item.RequestInsignia); profile.DateReceive = item.DateReceive; profile.Date = item.Date; profile.VolumeNo = item.VolumeNo; profile.Section = item.Section; profile.Page = item.Page; profile.No = item.No; profile.LastUpdateFullName = FullName ?? "System Administrator"; profile.LastUpdateUserId = UserId ?? ""; profile.LastUpdatedAt = DateTime.Now; } } if (profile.Status != "DONE") { profile.Status = "DONE"; // check profile.ProfileType ก่อนส่งไประบบทะเบียนประวัติ if (profile.ProfileType == "officer") { var profileInsigniaBody = new PostProfileInsigniaDto { profileId = profile!.ProfileId!.Value, year = insigniaNote.Year, no = profile!.No ?? "", volumeNo = profile!.VolumeNo ?? "", section = profile!.Section ?? "", page = profile!.Page ?? "", receiveDate = profile.DateReceive!.Value, dateAnnounce = profile.Date!.Value, insigniaId = profile.RequestInsignia!.Id, issue = profile!.Issue ?? "", note = "", refCommandDate = null, refCommandNo = "", volume = profile!.VolumeNo ?? "", }; await _userProfileRepository.PostProfileInsigniaAsync(profileInsigniaBody, AccessToken); } else { var profileInsigniaBody = new PostProfileEmpInsigniaDto { profileEmployeeId = profile!.ProfileId!.Value, year = insigniaNote.Year, no = profile!.No ?? "", volumeNo = profile!.VolumeNo ?? "", section = profile!.Section ?? "", page = profile!.Page ?? "", receiveDate = profile.DateReceive!.Value, dateAnnounce = profile.Date!.Value, insigniaId = profile.RequestInsignia!.Id, issue = profile!.Issue ?? "", note = "", refCommandDate = null, refCommandNo = "", volume = profile!.VolumeNo ?? "", }; await _userProfileRepository.PostProfileEmpInsigniaAsync(profileInsigniaBody, AccessToken); } //var profileInsignia = new PostProfileInsigniaDto //{ // profileId = profile.ProfileId.Value, // year = insigniaNote.Year, // no = profile.No, // volumeNo = profile.VolumeNo, // section = profile.Section, // page = profile.Page, // receiveDate = profile.DateReceive.Value, // dateAnnounce = profile.Date.Value, // insigniaId = profile.RequestInsignia.Id, // issue = "", // note = "", // refCommandDate = null, // refCommandNo = "", // volume = "", //}; //await _userProfileRepository.PostProfileInsigniaAsync(profileInsignia, AccessToken); } } await _context.SaveChangesAsync(); return Success(); } /// /// import บันทึกผลใบกำกับเครื่องราชฯ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("import/invoice/{insigniaNoteId:length(36)}"), DisableRequestSizeLimit] public async Task> ImportInvoiceProfile([FromForm] ImportFileRequest req, Guid insigniaNoteId) { var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .FirstOrDefaultAsync(x => x.Id == insigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); if (Request.Form.Files == null || Request.Form.Files.Count == 0) return Error(GlobalMessages.NoFileToUpload); var file = Request.Form.Files[0]; if (!Path.GetExtension(file.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase)) return Error("นามสกุลไฟล์ต้องเป็น .xlsx!"); var items = await ReadExcelImportInvoice(file); foreach (var item in items) { if (item.CitizanId == null) continue; var pf = await _userProfileRepository.GetOfficerProfileByCitizenId(item.CitizanId, AccessToken); var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.ProfileId == pf.Id); if (profile == null) continue; profile.Number = item.Number; profile.DatePayment = item.DatePayment; profile.TypePayment = item.TypePayment; profile.Address = item.Address; profile.LastUpdateFullName = FullName ?? "System Administrator"; profile.LastUpdateUserId = UserId ?? ""; profile.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } /// /// preview บันทึกผลการได้รับเครื่องราชฯ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("preview/receice/{insigniaNoteId:length(36)}"), DisableRequestSizeLimit] public async Task> PreviewReceiceProfile([FromForm] ImportFileRequest req, Guid insigniaNoteId) { try { var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_INSIGNIA_RECORD"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .FirstOrDefaultAsync(x => x.Id == insigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); if (Request.Form.Files == null || Request.Form.Files.Count == 0) return Error(GlobalMessages.NoFileToUpload); var file = Request.Form.Files[0]; if (!Path.GetExtension(file.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase)) return Error("นามสกุลไฟล์ต้องเป็น .xlsx!"); var items = await ReadExcelImportReceive(file); var _insigniaNoteProfiles = new List(); foreach (var item in items) { if (item.CitizanId == null) continue; var _profile = await _userProfileRepository.GetOfficerProfileByCitizenId(item.CitizanId, AccessToken); if (_profile == null) continue; var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.ProfileId == _profile.Id); if (profile == null) { if (_profile == null) continue; var _insignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Name == item.RequestInsignia); if (_insignia == null) continue; profile = new InsigniaNoteProfile { RequestDate = DateTime.Now, Salary = _profile.Amount, IsApprove = true, Status = "DONE", Number = item.Number, RequestInsignia = _insignia, DateReceive = item.DateReceive, Date = item.Date, VolumeNo = item.VolumeNo, Section = item.Section, Page = item.Page, No = item.No, ProfileId = _profile.Id, InsigniaNote = insigniaNote, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, Prefix = _profile.Prefix, Position = _profile.Position, CitizenId = _profile.CitizenId, ProfileType = _profile.ProfileType, FirstName = _profile.FirstName, LastName = _profile.LastName, BirthDate = _profile.BirthDate, DateAppoint = _profile.DateAppoint, Gender = _profile.Gender, PosTypeName = _profile.PosType, PosLevelName = _profile.PosLevel, PosNo = _profile.PosNo, Amount = _profile.Amount, PositionSalaryAmount = _profile.PositionSalaryAmount, Root = _profile.Root, RootId = _profile.RootId, RootDnaId = _profile.RootDnaId, Child1 = _profile.Child1, Child1Id = _profile.Child1Id, Child1DnaId = _profile.Child1DnaId, Child2 = _profile.Child2, Child2Id = _profile.Child2Id, Child2DnaId = _profile.Child2DnaId, Child3 = _profile.Child3, Child3Id = _profile.Child3Id, Child3DnaId = _profile.Child3DnaId, Child4 = _profile.Child4, Child4Id = _profile.Child4Id, Child4DnaId = _profile.Child4DnaId, }; } else { profile.Status = "DONE"; profile.Number = item.Number; profile.RequestInsignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Name == item.RequestInsignia) == null ? profile.RequestInsignia : await _context.Insignias.FirstOrDefaultAsync(x => x.Name == item.RequestInsignia); profile.DateReceive = item.DateReceive; profile.Date = item.Date; profile.VolumeNo = item.VolumeNo; profile.Section = item.Section; profile.Page = item.Page; profile.No = item.No; profile.LastUpdateFullName = FullName ?? "System Administrator"; profile.LastUpdateUserId = UserId ?? ""; profile.LastUpdatedAt = DateTime.Now; } _insigniaNoteProfiles.Add( new { profile.Id, Prefix = _profile.Prefix, Position = _profile.Position, CitizenId = _profile.CitizenId, ProfileType = _profile.ProfileType, FullName = $"{_profile.Prefix}{_profile.FirstName} {_profile.LastName}", RequestInsignia = profile.RequestInsignia == null ? null : profile.RequestInsignia.Name, RequestInsigniaId = profile.RequestInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : profile.RequestInsignia.Id, RequestInsigniaShortName = profile.RequestInsignia == null ? null : profile.RequestInsignia.ShortName, profile.DateReceive, profile.OrganizationOrganizationSend, profile.OrganizationOrganizationReceive, profile.Status, profile.Issue, profile.Date, profile.VolumeNo, profile.Section, profile.Page, profile.No, profile.DatePayment, profile.TypePayment, profile.Address, profile.Number, profile.Salary, } ); } return Success(_insigniaNoteProfiles); } catch (Exception ex) { return Error(ex); } } /// /// preview บันทึกผลใบกำกับเครื่องราชฯ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("preview/invoice/{insigniaNoteId:length(36)}"), DisableRequestSizeLimit] public async Task> PreviewInvoiceProfile([FromForm] ImportFileRequest req, Guid insigniaNoteId) { var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_INSIGNIA_RECORD"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Include(x => x.InsigniaNoteProfiles) .Include(x => x.InsigniaNoteProfiles) .FirstOrDefaultAsync(x => x.Id == insigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); if (Request.Form.Files == null || Request.Form.Files.Count == 0) { return Error(GlobalMessages.NoFileToUpload); } var file = Request.Form.Files[0]; if (!Path.GetExtension(file.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase)) { return Error("นามสกุลไฟล์ต้องเป็น .xlsx!"); } var items = await ReadExcelImportInvoice(file); var _insigniaNoteProfiles = new List(); foreach (var item in items) { if (item.CitizanId == null) continue; var pf = await _userProfileRepository.GetOfficerProfileByCitizenId(item.CitizanId, AccessToken); if (pf == null) continue; var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.ProfileId == pf.Id); if (profile == null) continue; profile.Status = "DONE"; profile.Number = item.Number; profile.DatePayment = item.DatePayment; profile.TypePayment = item.TypePayment; profile.Address = item.Address; profile.LastUpdateFullName = FullName ?? "System Administrator"; profile.LastUpdateUserId = UserId ?? ""; profile.LastUpdatedAt = DateTime.Now; _insigniaNoteProfiles.Add( new { profile.Id, Prefix = pf.Prefix, Position = pf.Position, pf.CitizenId, pf.ProfileType, FullName = $"{pf.Prefix}{pf.FirstName} {pf.LastName}", RequestInsignia = profile.RequestInsignia == null ? null : profile.RequestInsignia.Name, RequestInsigniaId = profile.RequestInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : profile.RequestInsignia.Id, RequestInsigniaShortName = profile.RequestInsignia == null ? null : profile.RequestInsignia.ShortName, profile.DateReceive, profile.OrganizationOrganizationSend, profile.OrganizationOrganizationReceive, profile.Status, profile.Issue, profile.Date, profile.VolumeNo, profile.Section, profile.Page, profile.No, profile.DatePayment, profile.TypePayment, profile.Address, profile.Number, profile.Salary, } ); } return Success(_insigniaNoteProfiles); } /// /// Download รายชื่อข้าราชการสามัญฯ ที่มีสิทธิ์ยื่นขอพระราชทานเครื่องราชอิสริยาภรณ์ /// /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("download/excel/{RequestId:length(36)}")] public async Task> DownloadExcalInsignia(Guid RequestId) { var insigniaPeriod = await _context.InsigniaRequests .Include(x => x.RequestProfiles) .FirstOrDefaultAsync(x => x.Id == RequestId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaPeriodNotFound); var template_dir = Path.Combine(_hostingEnvironment.ContentRootPath, "Templates"); var template_file = Path.Combine(template_dir, "PersonInsignia.xlsx"); var tmpDir = Path.Combine(_hostingEnvironment.ContentRootPath, "tmp"); if (!Directory.Exists(tmpDir)) Directory.CreateDirectory(tmpDir); var exportFile = Path.Combine(tmpDir, $"InsigniaRequestList_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"); try { // copy template System.IO.File.Copy(template_file, exportFile); using (var excel = new ExcelPackage(new FileInfo(exportFile))) { var workSheet = excel.Workbook.Worksheets[0]; var requestProfiles = insigniaPeriod.RequestProfiles.Where(x => x.Status == "PENDING").ToList(); var row = 2; foreach (var item in requestProfiles) { workSheet.Cells[row, 1].Value = item.Root; workSheet.Cells[row, 2].Value = item.CitizenId; workSheet.Cells[row, 3].Value = item.Prefix == null ? "-" : ((item.Prefix == "นาย" || item.Prefix == "นาง" || item.Prefix == "นางสาว") ? item.Prefix : "-"); workSheet.Cells[row, 4].Value = item.Prefix == null ? "-" : ((item.Prefix == "นาย" || item.Prefix == "นาง" || item.Prefix == "นางสาว") ? "-" : item.Prefix); workSheet.Cells[row, 5].Value = item.FirstName; workSheet.Cells[row, 6].Value = item.LastName; workSheet.Cells[row, 7].Value = item.Gender == null ? "-" : item.Gender; workSheet.Cells[row, 8].Value = item.BirthDate == null ? "" : item.BirthDate.Value.ToThaiDate(); workSheet.Cells[row, 9].Value = item.DateAppoint == null ? "" : item.DateAppoint.Value.ToThaiDate(); workSheet.Cells[row, 12].Value = ""; workSheet.Cells[row, 13].Value = item.PosLevelName == null ? "" : item.PosLevelName; workSheet.Cells[row, 14].Value = ""; workSheet.Cells[row, 15].Value = null; workSheet.Cells[row, 16].Value = item.Position ?? ""; workSheet.Cells[row, 17].Value = item.Amount == null ? 0 : item.Amount; workSheet.Cells[row, 18].Value = null; workSheet.Cells[row, 19].Value = item.PositionSalaryAmount == null ? 0 : item.PositionSalaryAmount; workSheet.Cells[row, 20].Value = item.LastInsigniaName; workSheet.Cells[row, 21].Value = ""; workSheet.Cells[row, 22].Value = null; row++; } excel.Save(); using (FileStream fs = new FileStream(exportFile, FileMode.Open, FileAccess.Read)) { byte[] bytes = System.IO.File.ReadAllBytes(exportFile); fs.Read(bytes, 0, System.Convert.ToInt32(fs.Length)); fs.Close(); var fname = Path.GetFileName(exportFile); Response.Headers["Content-Disposition"] = $"inline; filename={fname}"; var ret = new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = fname }; return ret; } } } catch (Exception ex) { return Error(ex, "ไม่สามารถส่งออกรายชื่อผู้มีสิทธิ์ขอพระราชทานเครื่องราชย์ได้!!"); } finally { if (System.IO.File.Exists(exportFile)) System.IO.File.Delete(exportFile); } } /// /// Download รายชื่อข้าราชการสามัญฯ ที่มีสิทธิ์ยื่นขอพระราชทานเครื่องราชอิสริยาภรณ์ /// /// Id การขอเครื่องราช (Request) /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("download/excel/{RequestId:length(36)}")] public async Task> DownloadExcelInsigniaByFilter([FromBody] ExportFileInsigniaRequest req, Guid RequestId) { var insigniaPeriod = await _context.InsigniaRequests .Include(x => x.RequestProfiles) .ThenInclude(x => x.RequestInsignia) .FirstOrDefaultAsync(x => x.Id == RequestId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaPeriodNotFound); var template_dir = Path.Combine(_hostingEnvironment.ContentRootPath, "Templates"); var template_file = Path.Combine(template_dir, "PersonInsignia.xlsx"); var tmpDir = Path.Combine(_hostingEnvironment.ContentRootPath, "tmp"); if (!Directory.Exists(tmpDir)) Directory.CreateDirectory(tmpDir); var exportFile = Path.Combine(tmpDir, $"InsigniaRequestList_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"); try { // copy template System.IO.File.Copy(template_file, exportFile); using (var excel = new ExcelPackage(new FileInfo(exportFile))) { var workSheet = excel.Workbook.Worksheets[0]; var requestProfiles = insigniaPeriod.RequestProfiles.Where(x => x.Status == "PENDING").ToList(); if (req.ProfileType != null) requestProfiles = requestProfiles.Where(x => x.ProfileId != null) .ToList(); if (req.InsigniaId != null) requestProfiles = requestProfiles .Where(x => x.ProfileType.ToLower() == req.ProfileType.ToLower()) .Where(x => x.RequestInsignia.Id == req.InsigniaId) .ToList(); var row = 2; foreach (var item in requestProfiles) { workSheet.Cells[row, 1].Value = item.Root == null ? "-" : item.Root; workSheet.Cells[row, 2].Value = item.CitizenId == null ? "-" : item.CitizenId; workSheet.Cells[row, 3].Value = item.Prefix == null ? "-" : ((item.Prefix == "นาย" || item.Prefix == "นาง" || item.Prefix == "นางสาว") ? item.Prefix : "-"); workSheet.Cells[row, 4].Value = item.Prefix == null ? "-" : ((item.Prefix == "นาย" || item.Prefix == "นาง" || item.Prefix == "นางสาว") ? "-" : item.Prefix); workSheet.Cells[row, 5].Value = item.FirstName == null ? "-" : item.FirstName; workSheet.Cells[row, 6].Value = item.LastName == null ? "-" : item.LastName; workSheet.Cells[row, 7].Value = item.Gender == null ? "-" : item.Gender; workSheet.Cells[row, 8].Value = item.BirthDate == null ? "-" : item.BirthDate.Value.ToThaiDate(); workSheet.Cells[row, 9].Value = item.DateAppoint == null ? "-" : item.DateAppoint.Value.ToThaiDate(); workSheet.Cells[row, 10].Value = "-"; workSheet.Cells[row, 11].Value = "-"; workSheet.Cells[row, 12].Value = "-"; workSheet.Cells[row, 13].Value = item.PosLevelName == null ? "-" : item.PosLevelName; workSheet.Cells[row, 14].Value = "-"; workSheet.Cells[row, 15].Value = "-"; workSheet.Cells[row, 16].Value = item.Position == null ? "-" : item.Position; workSheet.Cells[row, 17].Value = item.Amount == null ? 0 : item.Amount; workSheet.Cells[row, 18].Value = "-"; workSheet.Cells[row, 19].Value = item.PositionSalaryAmount == null ? 0 : item.PositionSalaryAmount; workSheet.Cells[row, 20].Value = item.LastInsigniaName == null ? "-" : item.LastInsigniaName; workSheet.Cells[row, 21].Value = "-"; workSheet.Cells[row, 22].Value = "-"; row++; } excel.Save(); using (FileStream fs = new FileStream(exportFile, FileMode.Open, FileAccess.Read)) { byte[] bytes = System.IO.File.ReadAllBytes(exportFile); fs.Read(bytes, 0, System.Convert.ToInt32(fs.Length)); fs.Close(); var fname = Path.GetFileName(exportFile); Response.Headers["Content-Disposition"] = $"inline; filename={fname}"; var ret = new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = fname }; return ret; } } } catch (Exception ex) { return Error(ex, "ไม่สามารถส่งออกรายชื่อผู้มีสิทธิ์ขอพระราชทานเครื่องราชย์ได้!!"); } finally { if (System.IO.File.Exists(exportFile)) System.IO.File.Delete(exportFile); } } /// /// Upload เอกสาร เครื่องราชฯ /// /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("upload/{requestId:length(36)}"), DisableRequestSizeLimit] public async Task> UpdatePersonDeferment([FromForm] ImportFileRequest req, Guid requestId) { var insigniaRequest = await _context.InsigniaRequests //.AsNoTracking() .Include(x => x.Document).Where(x => x.Id == requestId).FirstOrDefaultAsync(); if (insigniaRequest == null) return Error(GlobalMessages.InsigniaRequestNotFound, 404); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { var oldDocId = ""; if (insigniaRequest.Document != null) { oldDocId = insigniaRequest.Document.Id.ToString("D"); //await _documentService.DeleteFileAsync(insigniaRequest.Document.Id); } var file = Request.Form.Files[0]; var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, file.FileName); insigniaRequest.Document = doc; //if(oldDocId != "") // await _documentService.DeleteFileAsync(Guid.Parse(oldDocId)); } insigniaRequest.LastUpdateFullName = FullName ?? "System Administrator"; insigniaRequest.LastUpdateUserId = UserId ?? ""; insigniaRequest.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ยื่นรายการคืนเครื่องราชฯ /// /// Id บุคคลบันทึกผลเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("note/return/{insigniaNoteProfileId:length(36)}"), DisableRequestSizeLimit] public async Task> UpdateReturnNoteInsignia([FromForm] InsigniaNoteReturnRequest req, Guid insigniaNoteProfileId) { var insigniaNoteProfile = await _context.InsigniaNoteProfiles.Include(x => x.DocReturnInsignia).Where(x => x.Id == insigniaNoteProfileId).FirstOrDefaultAsync(); if (insigniaNoteProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound, 404); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { if (insigniaNoteProfile.DocReturnInsignia != null) { await _documentService.DeleteFileAsync(insigniaNoteProfile.DocReturnInsignia.Id); } var file = Request.Form.Files[0]; var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, file.FileName); insigniaNoteProfile.DocReturnInsignia = doc; } var root = _userProfileRepository.GetOcByNodeId(req.OrgId, 0, AccessToken)?.Root ?? null; if (req.OrgId != Guid.Parse("00000000-0000-0000-0000-000000000000")) { if (root == null) return Error(GlobalMessages.OCNotFound, 404); } else { root = "สำนักนายกรัฐมนตรี"; } insigniaNoteProfile.OrgReturnInsignia = root; insigniaNoteProfile.OrgReturnInsigniaId = req.OrgId; insigniaNoteProfile.DateReturnInsignia = req.Date; insigniaNoteProfile.LastUpdateFullName = FullName ?? "System Administrator"; insigniaNoteProfile.LastUpdateUserId = UserId ?? ""; insigniaNoteProfile.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ยื่นรายการรับเครื่องราชฯ /// /// Id บุคคลบันทึกผลเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("note/receive/{insigniaNoteProfileId:length(36)}"), DisableRequestSizeLimit] public async Task> UpdateReceiveNoteInsignia([FromForm] InsigniaNoteReturnRequest req, Guid insigniaNoteProfileId) { var insigniaNoteProfile = await _context.InsigniaNoteProfiles.Include(x => x.DocReceiveInsignia).Where(x => x.Id == insigniaNoteProfileId).FirstOrDefaultAsync(); if (insigniaNoteProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound, 404); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { if (insigniaNoteProfile.DocReceiveInsignia != null) { await _documentService.DeleteFileAsync(insigniaNoteProfile.DocReceiveInsignia.Id); } var file = Request.Form.Files[0]; var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, file.FileName); insigniaNoteProfile.DocReceiveInsignia = doc; } var orgData = _userProfileRepository.GetOcByNodeId(req.OrgId,0, AccessToken); var root = orgData?.Root ?? null; var rootDnaId = orgData?.RootDnaId ?? null; if (req.OrgId != Guid.Parse("00000000-0000-0000-0000-000000000000")) { if (root == null) return Error(GlobalMessages.OCNotFound, 404); } else { root = "สำนักนายกรัฐมนตรี"; } insigniaNoteProfile.OrgReceiveInsignia = root; insigniaNoteProfile.RootDnaId = rootDnaId; insigniaNoteProfile.OrgReceiveInsigniaId = req.OrgId; insigniaNoteProfile.DateReceiveInsignia = req.Date; insigniaNoteProfile.LastUpdateFullName = FullName ?? "System Administrator"; insigniaNoteProfile.LastUpdateUserId = UserId ?? ""; insigniaNoteProfile.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// อัพเดทสถานะ Mark (โทษทางวินัย, ไม่ได้เลื่อนเงินเดือน/ไม่ได้เลื่อนขั้น (เนื่องจากลาเกิน), ผลการประเมินการปฏิบัติราชการในรอบ 5 ปี, ข้อมูลเครื่องราชฯ) /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("update")] public async Task> InsigniaRequestUpdateMark([FromBody] UpdateInsigniaRequestProfile req) { try { var insigniaPeriod = await _context.InsigniaPeriods .Include(x => x.InsigniaRequests.Where(r => r.OrganizationId == req.agencyId)) .FirstOrDefaultAsync(x => x.Id == req.insigniaPeriodId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaRequestNotFound); if (insigniaPeriod.InsigniaRequests.Count > 0) { foreach (var InsigniaRequest in insigniaPeriod.InsigniaRequests) { var profiles = await _context.Set() .Where(p => p.Request.Id == InsigniaRequest.Id && p.ProfileType == req.type.Trim().ToLower()).Select(x => x.ProfileId.ToString()).ToListAsync(); if (profiles.Count > 0) { await _insigniaPeriodRepository.UpdateInsigniaRequestProfile(profiles.ToArray(), req.type.Trim().ToLower()); } } } return Success(); } catch (Exception ex) { return Error(ex); } } } }