using System.Runtime.InteropServices; using System.Security.Claims; using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Application.Requests; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.HR; using BMA.EHR.Domain.Models.Insignias; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Insignia.Service.Requests; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using OfficeOpenXml; using Swashbuckle.AspNetCore.Annotations; namespace BMA.EHR.Insignia.Service.Controllers { [Route("api/v{version:apiVersion}/insignia/request")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("เครื่องราช")] public class InsigniaRequestController : BaseController { private readonly ApplicationDBContext _context; private readonly MinIOService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; private readonly InsigniaPeriodsRepository _repository; private readonly NotificationRepository _repositoryNoti; private readonly IWebHostEnvironment _hostingEnvironment; private readonly string Royal_Type = "Royal"; public InsigniaRequestController(ApplicationDBContext context, MinIOService documentService, InsigniaPeriodsRepository repository, NotificationRepository repositoryNoti, IWebHostEnvironment hostingEnvironment, IHttpContextAccessor httpContextAccessor) { _context = context; _documentService = documentService; _repository = repository; _repositoryNoti = repositoryNoti; _httpContextAccessor = httpContextAccessor; _hostingEnvironment = hostingEnvironment; } #region " Properties " private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; private bool? RoleAdmin => _httpContextAccessor?.HttpContext?.User?.IsInRole("admin"); private bool? RoleInsignia1 => _httpContextAccessor?.HttpContext?.User?.IsInRole("insignia1"); private bool? RoleInsignia2 => _httpContextAccessor?.HttpContext?.User?.IsInRole("insignia2"); #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++) { 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; } #endregion #region " ดึงเครื่องราชฯ ล่าสุดของครู (GetInsigniaLast) " // private InsigniaItem GetInsigniaLast(Guid? id) // { // var insignia = _context.Insignias.AsQueryable() // .Where(i => id != null ? i.Id == id : i.Name.Contains("ตริตาภรณ์มงกุฎไทย")).Select(i => new InsigniaItem // { // Id = i.Id, // Name = i.Name, // ShortName = i.ShortName, // Level = i.InsigniaType == null ? null : i.InsigniaType.Name, // LevelId = i.InsigniaType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : i.InsigniaType.Id // }).FirstOrDefault(); // return insignia; // } #endregion #region " จัดทำรายชื่อครูที่มีสิทธิในการยืนขอเครื่องราชฯ " // [HttpGet("old/{role}/{ocId:length(36)}")] // public async Task> GetInsignaiRequest(Guid id, Guid ocId, string role) // { // var result = await _repository.GetInsigniaRequest(id, ocId); // if (result != null) // { // Guid period = result.PeriodId; // string periodName = result.Name; // string requestStatus = result.RequestStatus; // var resend = new InsigniaResults // { // PeriodId = period, // Year = result.Year, // Name = periodName, // RequestStatus = requestStatus, // OrganizationName = result.OrganizationName, // Items = new List() // }; // var candidate = await _repository.GetInsigniaCandidate(period, ocId); // // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new // if (requestStatus == null) // { // // บันทึกรายชื่อ // _repository.InsertCandidate(period, ocId, candidate); // } // if (role == "officer") // { // resend.Items = await _repository.InsigniaHasProfile(period, ocId); // return Success(resend); // } // else // { // var passData = _context.InsigniaRequests.AsQueryable() // .Include(x => x.Organization) // .Include(x => x.RequestProfiles) // .Where(x => x.Organization.Id == ocId) // .Where(x => x.Period.Id == period) // .Select(ir => new // { // requstID = ir.Id, // requstStatus = ir.RequestStatus, // requstStatusName = GetRequestlStatusText(ir.RequestStatus), // fkInstituteId = -1, // // fkDivisionId = ir.Organization.Id, // // fkDivision = ir.Organization.Name, // fkInstitute = "", // fkPeriodId = ir.Period.Id, // insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() // .Include(x => x.Profile) // .ThenInclude(x => x.Position) // .Include(x => x.Profile) // // .ThenInclude(x => x.PositionNumber) // .Include(x => x.Profile) // // .ThenInclude(x => x.AcademicStanding) // .Include(x => x.RequestInsignia) // .ThenInclude(x => x.InsigniaType) // .Select(irp => new // { // request_id = irp.Request.Id, // isApprove = irp.IsApprove, // statusInstitute = irp.IsApprove.ToString(), // request_date = irp.RequestDate, // profileId = irp.Profile.Id, // // prefix = irp.Profile.Prefix, // firstname = irp.Profile.FirstName, // lastname = irp.Profile.LastName, // // posno = irp.Profile.PositionNumber.Id, // type = irp.Profile.ProfileType, // // position = irp.Profile.Position.Name, // // rank = irp.Profile.AcademicStanding.Name, // instituteName = "", // instituteId = -1, // // divisionName = irp.Profile.OrganizationOrganization.Name, // // divisionId = irp.Profile.OrganizationOrganization.Id, // lastInsigniaName = "", // requestInsigniaLevel = irp.RequestInsignia.InsigniaType == null ? null : irp.RequestInsignia.InsigniaType.Name, // requestInsigniaName = irp.RequestInsignia.Name, // requestQua = irp.QualificationStatus, // requestDoc = irp.DocumentStatus, // requestNote = irp.Note, // requestSalary = irp.Salary, // }) // .Where(x => x.isApprove) // .OrderBy(y => y.profileId) // .ToList() // }) // .ToList() // .FirstOrDefault(); // var failData = _context.InsigniaRequests.AsQueryable() // .Include(x => x.Organization) // .Include(x => x.RequestProfiles) // .Where(x => x.Organization.Id == ocId) // .Where(x => x.Period.Id == period) // .Select(ir => new // { // requstID = ir.Id, // requstStatus = ir.RequestStatus, // requstStatusName = GetRequestlStatusText(ir.RequestStatus), // fkInstituteId = -1, // // fkDivisionId = ir.Organization.Id, // // fkDivision = ir.Organization.Name, // fkInstitute = "", // fkPeriodId = ir.Period.Id, // insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() // .Include(x => x.Profile) // .ThenInclude(x => x.Position) // .Include(x => x.Profile) // // .ThenInclude(x => x.PositionNumber) // .Include(x => x.Profile) // // .ThenInclude(x => x.AcademicStanding) // .Include(x => x.RequestInsignia) // .ThenInclude(x => x.InsigniaType) // .Select(irp => new // { // request_id = irp.Request.Id, // isApprove = irp.IsApprove, // statusInstitute = irp.IsApprove.ToString(), // request_date = irp.RequestDate, // profileId = irp.Profile.Id, // // prefix = irp.Profile.Prefix, // firstname = irp.Profile.FirstName, // lastname = irp.Profile.LastName, // // posno = irp.Profile.PositionNumber.Id, // type = irp.Profile.ProfileType, // // position = irp.Profile.Position.Name, // // rank = irp.Profile.AcademicStanding.Name, // instituteName = "", // instituteId = -1, // // divisionName = irp.Profile.OrganizationOrganization.Name, // // divisionId = irp.Profile.OrganizationOrganization.Id, // lastInsigniaName = "", // requestInsigniaLevel = irp.RequestInsignia.InsigniaType == null ? null : irp.RequestInsignia.InsigniaType.Name, // requestInsigniaName = irp.RequestInsignia.Name, // requestQua = irp.QualificationStatus, // requestDoc = irp.DocumentStatus, // requestNote = irp.Note, // requestSalary = irp.Salary, // }) // .Where(x => !x.isApprove) // .OrderBy(y => y.profileId) // .ToList() // }) // .ToList() // .FirstOrDefault(); // var period_data = (from p in _context.InsigniaPeriods.AsQueryable() // where p.Id == period // select new // { // periodName = p.Name, // periodYear = p.Year, // }).FirstOrDefault(); // return Success(new { passData = passData, failData = failData, period = period_data }); // } // // select data to display // } // return Success(); // } /// /// list รายการคำขอเครื่องราช ผู้ได้รับ,คนไม่ยื่น,คนที่ถูกลบ /// /// Id รอบเครื่องราช /// Id สังกัด /// ชื่อตำแหน่งระหว่างสกจ กับ เขต (ตอนนี้ให้ส่ง officer ก่อน) /// pending=ผู้ได้รับ, reject=คนไม่ยื่น, delete=คนที่ถูกลบ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaPeriodId:length(36)}/{ocId:length(36)}/{role}/{status}")] public async Task> GetInsignaiRequestBkk(Guid insigniaPeriodId, Guid ocId, string role, string status) { // var profile = await _context.Profiles.AsQueryable() // .FirstOrDefaultAsync(x => x.KeycloakId == (UserId != null && UserId != "" ? Guid.Parse(UserId) : Guid.Parse("00000000-0000-0000-0000-000000000000"))); // if (profile == null) // return Error(GlobalMessages.DataNotFound); // var organizationAgencyId = await _context.ProfilePositions.AsQueryable() // .Where(x => x.Profile == profile) // .Where(x => x.OrganizationPosition != null) // .Where(x => x.OrganizationPosition.Organization != null) // .Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null) // .Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId) // .FirstOrDefaultAsync(); // if (organizationAgencyId == null) // return Error(GlobalMessages.OrganizationNotFound); // var ocId = organizationAgencyId.Value; var result = await _repository.GetInsigniaRequest(insigniaPeriodId, ocId); if (result != null) { // Guid period = result.PeriodId; // var periodName = result.Name; // string requestStatus = result.RequestStatus; // 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() }; if (RoleAdmin == true && result.RequestStatus != "st6") return Success(resend); if (RoleInsignia2 == true && (result.RequestStatus == "st1" || result.RequestStatus == "st2")) return Success(resend); // var candidate = await _repository.GetInsigniaCandidateBKK(period, ocId); // // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new // if (requestStatus == null) // { // // บันทึกรายชื่อ // await _repository.InsertCandidate(period, ocId, candidate); // } if (role.Trim().ToUpper() == "OFFICER") { resend.Items = await _repository.InsigniaHasProfile(result.PeriodId, ocId, status); return Success(resend); } else { // var passData = _context.InsigniaRequests.AsQueryable() // .Include(x => x.Organization) // .Include(x => x.RequestProfiles) // .Where(x => x.Organization.Id == ocId) // .Where(x => x.Period.Id == period) // .Select(ir => new // { // requstID = ir.Id, // requstStatus = ir.RequestStatus, // requstStatusName = GetRequestlStatusText(ir.RequestStatus), // fkInstituteId = -1, // // fkDivisionId = ir.Organization.Id, // // fkDivision = ir.Organization.Name, // fkInstitute = "", // fkPeriodId = ir.Period.Id, // insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() // .Include(x => x.Profile) // .ThenInclude(x => x.Position) // .Include(x => x.Profile) // // .ThenInclude(x => x.PositionNumber) // .Include(x => x.Profile) // // .ThenInclude(x => x.AcademicStanding) // .Include(x => x.RequestInsignia) // .ThenInclude(x => x.InsigniaType) // .Select(irp => new // { // request_id = irp.Request.Id, // isApprove = irp.IsApprove, // statusInstitute = irp.IsApprove.ToString(), // request_date = irp.RequestDate, // profileId = irp.Profile.Id, // // prefix = irp.Profile.Prefix, // firstname = irp.Profile.FirstName, // lastname = irp.Profile.LastName, // // posno = irp.Profile.PositionNumber.Id, // type = irp.Profile.ProfileType, // // position = irp.Profile.Position.Name, // // rank = $"{irp.Profile.PositionType.Name}/{irp.Profile.PositionLevel.Name}", // instituteName = "", // instituteId = -1, // // divisionName = irp.Profile.OrganizationOrganization.Name, // // divisionId = irp.Profile.OrganizationOrganization.Id, // lastInsigniaName = "", // requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name, // requestInsigniaName = irp.RequestInsignia.Name, // requestQua = irp.QualificationStatus, // requestDoc = irp.DocumentStatus, // requestNote = irp.Note, // requestSalary = irp.Salary, // matchingConditions = JsonConvert.DeserializeObject>(irp.MatchingConditions) // }) // .Where(x => x.isApprove) // .OrderBy(y => y.profileId) // .ToList() // }) // .ToList() // .FirstOrDefault(); // var failData = _context.InsigniaRequests.AsQueryable() // .Include(x => x.Organization) // .Include(x => x.RequestProfiles) // .Where(x => x.Organization.Id == ocId) // .Where(x => x.Period.Id == period) // .Select(ir => new // { // requstID = ir.Id, // requstStatus = ir.RequestStatus, // requstStatusName = GetRequestlStatusText(ir.RequestStatus), // fkInstituteId = -1, // // fkDivisionId = ir.Organization.Id, // // fkDivision = ir.Organization.Name, // fkInstitute = "", // fkPeriodId = ir.Period.Id, // insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() // .Include(x => x.Profile) // .ThenInclude(x => x.Position) // .Include(x => x.Profile) // // .ThenInclude(x => x.PositionNumber) // .Include(x => x.Profile) // // .ThenInclude(x => x.AcademicStanding) // .Include(x => x.RequestInsignia) // .ThenInclude(x => x.InsigniaType) // .Select(irp => new // { // request_id = irp.Request.Id, // isApprove = irp.IsApprove, // statusInstitute = irp.IsApprove.ToString(), // request_date = irp.RequestDate, // profileId = irp.Profile.Id, // // prefix = irp.Profile.Prefix, // firstname = irp.Profile.FirstName, // lastname = irp.Profile.LastName, // // posno = irp.Profile.PositionNumber.Id, // type = irp.Profile.ProfileType, // // position = irp.Profile.Position.Name, // // rank = irp.Profile.AcademicStanding.Name, // instituteName = "", // instituteId = -1, // // divisionName = irp.Profile.OrganizationOrganization.Name, // // divisionId = irp.Profile.OrganizationOrganization.Id, // lastInsigniaName = "", // requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name, // requestInsigniaName = irp.RequestInsignia.Name, // requestQua = irp.QualificationStatus, // requestDoc = irp.DocumentStatus, // requestNote = irp.Note, // requestSalary = irp.Salary, // matchingConditions = JsonConvert.DeserializeObject>(irp.MatchingConditions) // }) // .Where(x => !x.isApprove) // .OrderBy(y => y.profileId) // .ToList() // }) // .ToList() // .FirstOrDefault(); // var period_data = (from p in _context.InsigniaPeriods.AsQueryable() // where p.Id == period // select new // { // periodName = p.Name, // periodYear = p.Year, // }).FirstOrDefault(); // return Success(new { passData = passData, failData = failData, period = period_data }); return Success(); } // select data to display } return Success(); } /// /// คำนวณราชชื่อผู้ได้รับเครื่องราช /// /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaPeriodId:length(36)}")] public async Task> UpdateInsignaiRequestBkk(Guid insigniaPeriodId) { var organizationType = await _context.OrganizationTypes.Where(x => x.Name == "หน่วยงาน").FirstOrDefaultAsync(); if (organizationType == null) return Error(GlobalMessages.OrganizationNotFound); var organizations = await _context.Organizations.Where(x => x.OrganizationType == organizationType).ToListAsync(); foreach (var organization in organizations) { if (organization == null) continue; var result = await _repository.GetInsigniaRequest(insigniaPeriodId, organization.Id); if (result != null) { Guid period = result.PeriodId; string requestStatus = result.RequestStatus; var candidate = await _repository.GetInsigniaCandidateBKK(insigniaPeriodId, organization.Id); // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new if (requestStatus == null) { // บันทึกรายชื่อ await _repository.InsertCandidate(period, organization.Id, candidate); } } } return Success(); } #endregion // #region " บันทึกหมายเหตุ " // [HttpPut("note/{profileId}")] // public async Task> SaveNote(Guid profileId, SaveRequsetNote items) // { // var id = await _repository.GetRequestId(items.PeriodId, items.OcId); // var note = _context.InsigniaRequestProfiles.AsQueryable() // .Where(d => d.Profile.Id == profileId && d.Request.Id == id).FirstOrDefault(); // if (note != null) // note.Note = items.Note; // _context.SaveChanges(); // return Success(); // } // #endregion // #region " บันทึกรายชื่อครูในการขอยื่นเครื่องราชฯ เเต่ยังไม่ส่งไปยัง ผอ.โรงเรียน " // [HttpPut("approve/{ocId:length(36)}")] // public async Task> SaveRequestList(Guid id, Guid ocId, InsigniaApproveRequest items) // { // var result = await _repository.GetInsigniaRequest(id, ocId); // if (result != null) // await _repository.SaveAprove(result.PeriodId, ocId, items); // return Success(); // } // #endregion /// /// เปลี่ยน status เป็น st3 การเจ้าหน้าที่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("officer/approve/{id:length(36)}/{ocId:length(36)}")] public async Task> ApproveChangeStatusToSt3(Guid id, Guid ocId) { await _repository.SaveAprove(id, ocId); var requestId = await _repository.GetRequestId(id, ocId); var requestNew = await _context.InsigniaRequests .Include(x => x.Organization) .ThenInclude(x => x.OrganizationOrganization) .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.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{(requestNew.Organization.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", true ); _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st2 การเจ้าหน้าที่ไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("officer/reject/{id:length(36)}/{ocId:length(36)}")] public async Task> RejectChangeStatusToSt2([FromBody] InsigniaReasonRequest req, Guid id, Guid ocId) { await _repository.SaveAprove(id, ocId); var requestId = await _repository.GetRequestId(id, ocId); var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { requestNew.RequestStatus = "st2"; requestNew.RequestNote = req.Reason; _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st6 ผอ.หน่วยอนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("director/approve/{id:length(36)}/{ocId:length(36)}")] public async Task> ApproveChangeStatusToSt6(Guid id, Guid ocId) { var requestId = await _repository.GetRequestId(id, ocId); var requestNew = await _context.InsigniaRequests .Include(x => x.Organization) .ThenInclude(x => x.OrganizationOrganization) .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.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{(requestNew.Organization.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", true ); await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbca3a-8b6a-4a4e-8b23-1f62e4f30ef6"), $"{(requestNew.Organization.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{(requestNew.Organization.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ยื่นขอมูลข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", true ); _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st4 ผอ.หน่วยไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("director/reject/{id:length(36)}/{ocId:length(36)}")] public async Task> RejectChangeStatusToSt4([FromBody] InsigniaReasonRequest req, Guid id, Guid ocId) { var requestId = await _repository.GetRequestId(id, ocId); var requestNew = await _context.InsigniaRequests .Include(x => x.Organization) .ThenInclude(x => x.OrganizationOrganization) .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.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ตีกลับข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", $"{(requestNew.Organization.OrganizationOrganization == null ? null : requestNew.Organization.OrganizationOrganization.Name)} ตีกลับข้อมูลผู้มีสิทธิ์ได้รับเครื่องราชฯ {requestNew.Period.Name}", "", true ); _context.SaveChanges(); return Success(); } else return Error(GlobalMessages.InsigniaRequestNotFound); } /// /// เปลี่ยน status เป็น st5 สกจ. หน่วยไม่อนุมัติ " /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("head/reject/{id:length(36)}/{ocId:length(36)}")] public async Task> RejectChangeStatusToSt5([FromBody] InsigniaReasonRequest req, Guid id, Guid ocId) { var requestId = await _repository.GetRequestId(id, ocId); var requestNew = await _context.InsigniaRequests .Include(x => x.Organization) .ThenInclude(x => x.OrganizationOrganization) .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/{insigniaPeriodId:length(36)}")] public async Task> DashboardInsigniaPeriod(Guid insigniaPeriodId) { var insigniaPeriod = await _context.InsigniaPeriods.FirstOrDefaultAsync(x => x.Id == insigniaPeriodId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaRequestNotFound); var orgAllCount = await _context.InsigniaRequests .Where(x => x.Period == insigniaPeriod) .ToListAsync(); var allUserUser = await _context.InsigniaRequests .Where(x => x.Period == insigniaPeriod) .Where(x => RoleAdmin == true ? x.RequestStatus == "st6" : (RoleInsignia2 == 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/{insigniaPeriodId:length(36)}")] public async Task> ListOrgDontSentUser(Guid insigniaPeriodId) { var insigniaPeriod = await _context.InsigniaPeriods.FirstOrDefaultAsync(x => x.Id == insigniaPeriodId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaRequestNotFound); var orgIdSend = await _context.InsigniaRequests .Where(x => x.Period == insigniaPeriod) .Where(x => x.RequestStatus == "st1") .Select(x => x.Organization.Id) .ToListAsync(); var orgAllCount = await _context.Organizations .Where(x => x.OrganizationOrganization != null) .Where(x => x.OrganizationType != null) .Where(x => x.OrganizationType.Name == "หน่วยงาน") .Where(x => orgIdSend.Contains(x.Id)) .Select(x => new { OrgId = x.Id, OrgName = x.OrganizationOrganization.Name }) .ToListAsync(); return Success(orgAllCount); } /// /// หน่วยงานที่อยู่ปัจจุบัน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("agency")] public async Task> GetOrgAgency() { var profile = await _context.Profiles.AsQueryable() .FirstOrDefaultAsync(x => x.KeycloakId == (UserId != null && UserId != "" ? Guid.Parse(UserId) : Guid.Parse("00000000-0000-0000-0000-000000000000"))); if (profile == null) return Error(GlobalMessages.DataNotFound); var orgProfile = await _context.ProfilePositions .Where(x => x.Profile == profile) .Where(x => x.OrganizationPosition != null) .Where(x => x.OrganizationPosition.Organization != null) .Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null) .Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId) .FirstOrDefaultAsync(); if (orgProfile == null) { orgProfile = await _context.ProfilePositions .Where(x => x.Profile == profile) .Where(x => x.OrganizationPosition != null) .Where(x => x.OrganizationPosition.Organization != null) .Select(x => x.OrganizationPosition.Organization.Id) .FirstOrDefaultAsync(); } return Success(orgProfile); } /// /// เพิ่มรายชื่อผู้ได้รับเครื่องราช /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost()] public async Task> AddUserToRequestInsignia([FromBody] AddUserRequestInsigniaRequest req) { var insigniaPeriod = await _context.InsigniaPeriods.FirstOrDefaultAsync(x => x.Id == req.insigniaPeriodId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaRequestNotFound); var profile = await _context.Profiles.FirstOrDefaultAsync(x => x.Id == req.ProfileId); if (profile == null) return Error(GlobalMessages.DataNotFound); var insignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Id == req.insigniaId); if (insignia == null) return Error(GlobalMessages.InsigniaNotFound); var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Profile == profile && x.Request.Period == insigniaPeriod); if (insigniaRequestProfile != null) return Error(GlobalMessages.InsigniaRequestProfileDupicate); // var insigniaRequest = await _context.InsigniaRequests.FirstOrDefaultAsync(x => x.Period == insigniaPeriod); var _orgProfile = await _context.ProfilePositions .Where(x => x.Profile == profile) .Where(x => x.OrganizationPosition != null) .Where(x => x.OrganizationPosition.Organization != null) .Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null) .Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId) .FirstOrDefaultAsync(); var _org = await _context.Organizations .FirstOrDefaultAsync(x => x.Id == _orgProfile); var insigniaRequest = await _context.InsigniaRequests.FirstOrDefaultAsync(x => x.Period == insigniaPeriod && x.Organization == _org); if (insigniaRequest == null) { var orgProfile = await _context.ProfilePositions .Where(x => x.Profile == profile) .Where(x => x.OrganizationPosition != null) .Where(x => x.OrganizationPosition.Organization != null) .Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null) .Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId) .FirstOrDefaultAsync(); var org = await _context.Organizations .FirstOrDefaultAsync(x => x.Id == orgProfile); if (org == null) return Error(GlobalMessages.OrganizationNotFound); insigniaRequest = new InsigniaRequest { Period = insigniaPeriod, Organization = org, RequestStatus = "st1", RequestNote = "", CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; } await _context.AddAsync(new InsigniaRequestProfile { Status = "PENDING", Profile = profile, RequestInsignia = insignia, Request = insigniaRequest, Reason = req.Reason, RequestDate = DateTime.Now, MatchingConditions = System.Text.Json.JsonSerializer.Serialize(new List()), // serialize to string CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไขรายชื่อผู้ได้รับเครื่องราช /// /// Id รายชื่อคนที่ยื่นของในรอบ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{insigniaRequestProfileId:length(36)}")] public async Task> UpdateUserToRequestInsignia([FromBody] UpdateUserRequestInsigniaRequest req, Guid insigniaRequestProfileId) { var insigniaRequestProfile = await _context.InsigniaRequestProfiles.FirstOrDefaultAsync(x => x.Id == insigniaRequestProfileId); if (insigniaRequestProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound); var insignia = await _context.Insignias.FirstOrDefaultAsync(x => x.Id == req.insigniaId); if (insignia == null) return Error(GlobalMessages.InsigniaNotFound); insigniaRequestProfile.RequestInsignia = insignia; insigniaRequestProfile.LastUpdateFullName = FullName ?? "System Administrator"; insigniaRequestProfile.LastUpdateUserId = UserId ?? ""; insigniaRequestProfile.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// รายชื่อผู้ได้รับเครื่องราชส่งข้อมูลไปบันทึกผลได้รับเครื่องราช /// /// Id รอบการยื่นขอ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("send/note/{insigniaPeriodId:length(36)}")] public async Task> SendPeriodToNote([FromBody] InsigniaNoteNameRequest req, Guid insigniaPeriodId) { var insigniaPeriod = await _context.InsigniaPeriods .Include(x => x.InsigniaRequests) .Include(x => x.ReliefDoc) .FirstOrDefaultAsync(x => x.Id == insigniaPeriodId); if (insigniaPeriod == null) return Error(GlobalMessages.InsigniaRequestNotFound); insigniaPeriod.IsLock = true; var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .FirstOrDefaultAsync(x => x.Year == insigniaPeriod.Year); if (insigniaNote == null) { insigniaNote = new InsigniaNote { // Round = insigniaPeriod.Round, Name = req.Name, Year = insigniaPeriod.Year, // StartDate = insigniaPeriod.StartDate, // EndDate = insigniaPeriod.EndDate, // Amount = insigniaPeriod.Amount, // ReliefDoc = insigniaPeriod.ReliefDoc, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", 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) .ThenInclude(x => x.Profile) .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.Profile) .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.Profile == profileOld.Profile) .FirstOrDefault(); if (noreProfileOld != null) { noreProfileOld.RequestDate = profileOld.RequestDate; noreProfileOld.Salary = profileOld.Salary; noreProfileOld.IsApprove = profileOld.IsApprove; noreProfileOld.RequestInsignia = profileOld.RequestInsignia; noreProfileOld.CreatedUserId = UserId ?? "System Administrator"; noreProfileOld.CreatedFullName = FullName ?? ""; noreProfileOld.CreatedAt = DateTime.Now; noreProfileOld.LastUpdateFullName = FullName ?? "System Administrator"; noreProfileOld.LastUpdateUserId = UserId ?? ""; noreProfileOld.LastUpdatedAt = DateTime.Now; } else { if (profileOld.Profile == null) continue; await _context.InsigniaNoteProfiles.AddAsync(new InsigniaNoteProfile { RequestDate = profileOld.RequestDate, Salary = profileOld.Salary, IsApprove = profileOld.IsApprove, Status = "PENDING", Profile = profileOld.Profile, RequestInsignia = profileOld.RequestInsignia, OrganizationOrganizationSend = profileOld.Profile == null || profileOld.Profile.OcId == null ? null : FindOCFullPath(profileOld.Profile.OcId.Value, true), InsigniaNote = insigniaNote, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } } } 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() { var insigniaNotes = await _context.InsigniaNotes.AsQueryable() .OrderByDescending(x => x.Year) // .ThenByDescending(x => x.StartDate) .Select(p => new { Id = p.Id, // Amount = p.Amount, Name = p.Name, // Round = p.Round, // Start = p.StartDate, // End = p.EndDate, Year = p.Year, // Doc = p.ReliefDoc == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ReliefDoc.Id, }) .ToListAsync(); // var data = new List(); // foreach (var insigniaNote in insigniaNotes) // { // var _data = new // { // Id = insigniaNote.Id, // Amount = insigniaNote.Amount, // Name = insigniaNote.Name, // Round = insigniaNote.Round, // Start = insigniaNote.Start, // End = insigniaNote.End, // Year = insigniaNote.Year, // Doc = insigniaNote.Doc == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNote.Doc), // }; // data.Add(_data); // } return Success(insigniaNotes); } /// /// list รายชื่อบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("note/search")] public async Task> GetListNoteProfile([FromBody] InsigniaNoteSearchRequest req) { var insigniaNote = await _context.InsigniaNotes .FirstOrDefaultAsync(x => x.Id == req.InsigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); var insigniaType = await _context.InsigniaTypes .FirstOrDefaultAsync(x => x.Id == req.InsigniaTypeId); if (insigniaType == null) return Error(GlobalMessages.InsigniaTypeNotFound); var insigniaNoteProfiles = await _context.InsigniaNoteProfiles .Where(x => x.InsigniaNote == insigniaNote) .Where(x => x.RequestInsignia.InsigniaType == insigniaType) .Where(x => req.InsigniaId == null ? x.RequestInsignia != null : (x.RequestInsignia.Id == req.InsigniaId)) .Select(x => new { Id = x.Id, Prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, Position = x.Profile.Position == null ? null : x.Profile.Position.Name, ProfileType = x.Profile.ProfileType, OcId = x.Profile.OcId, CitizenId = x.Profile.CitizenId, FullName = $"{(x.Profile.Prefix == null ? null : x.Profile.Prefix.Name)}{x.Profile.FirstName} {x.Profile.LastName}", RequestInsignia = x.RequestInsignia.Name, RequestInsigniaId = x.RequestInsignia.Id, RequestInsigniaShortName = x.RequestInsignia.ShortName, DateReceive = x.DateReceive, OrganizationOrganizationSend = x.OrganizationOrganizationSend, OrganizationOrganizationReceive = 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, OrgReceiveInsignia = x.OrgReceiveInsignia == null || x.OrgReceiveInsignia.OrganizationOrganization == null ? "-" : x.OrgReceiveInsignia.OrganizationOrganization.Name, DateReturnInsignia = x.DateReturnInsignia, DocReturnInsignia = x.DocReturnInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.DocReturnInsignia.Id, OrgReturnInsignia = x.OrgReturnInsignia == null || x.OrgReturnInsignia.OrganizationOrganization == null ? "-" : x.OrgReturnInsignia.OrganizationOrganization.Name, }).ToListAsync(); 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, OrganizationOrganizationReceive = insigniaNoteProfile.OrganizationOrganizationReceive == null ? (insigniaNoteProfile.OcId == null ? null : FindOCFullPath(insigniaNoteProfile.OcId.Value, true)) : 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.DateReturnInsignia, DocReturnInsignia = insigniaNoteProfile.DocReturnInsignia == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaNoteProfile.DocReturnInsignia), insigniaNoteProfile.OrgReturnInsignia, } ); } 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.Profile.Prefix == null ? null : x.Profile.Prefix.Name, Position = x.Profile.Position == null ? null : x.Profile.Position.Name, ProfileType = x.Profile.ProfileType, OcId = x.Profile.OcId, CitizenId = x.Profile.CitizenId, FullName = $"{(x.Profile.Prefix == null ? null : x.Profile.Prefix.Name)}{x.Profile.FirstName} {x.Profile.LastName}", RequestInsignia = x.RequestInsignia.Name, RequestInsigniaId = x.RequestInsignia.Id, RequestInsigniaShortName = x.RequestInsignia.ShortName, DateReceive = x.DateReceive, OrganizationOrganizationSend = x.OrganizationOrganizationSend, OrganizationOrganizationReceive = 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(); var _insigniaNoteProfile = new { insigniaNoteProfile.Id, insigniaNoteProfile.Prefix, insigniaNoteProfile.Position, insigniaNoteProfile.CitizenId, insigniaNoteProfile.ProfileType, insigniaNoteProfile.FullName, insigniaNoteProfile.RequestInsignia, insigniaNoteProfile.RequestInsigniaId, insigniaNoteProfile.RequestInsigniaShortName, insigniaNoteProfile.DateReceive, insigniaNoteProfile.OrganizationOrganizationSend, OrganizationOrganizationReceive = insigniaNoteProfile.OrganizationOrganizationReceive == null ? (insigniaNoteProfile.OcId == null ? null : FindOCFullPath(insigniaNoteProfile.OcId.Value, true)) : 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 _context.Profiles .Include(x => x.Salaries) .FirstOrDefaultAsync(x => x.CitizenId == req.CitizanId); 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) .ThenInclude(x => x.Profile) .FirstOrDefaultAsync(x => x.Id == insigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); var profileInsignia = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.Profile.CitizenId == req.CitizanId); if (profileInsignia == null) { var insigniaNoteProfile = new InsigniaNoteProfile { Salary = profile.Salaries.Count() == 0 ? null : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, IsApprove = true, Status = "PENDING", Profile = profile, Issue = req.Issue, Number = req.Number, DateReceive = req.DateReceive, Date = req.Date, VolumeNo = req.VolumeNo, Section = req.Section, Page = req.Page, No = req.No, DatePayment = req.DatePayment, TypePayment = req.TypePayment, Address = req.Address, RequestInsignia = insignia, OrganizationOrganizationReceive = req.OrganizationOrganizationReceive, OrganizationOrganizationSend = req.OrganizationOrganizationSend, InsigniaNote = insigniaNote, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; if (req.DateReceive != null && req.Date != null) { insigniaNoteProfile.Status = "DONE"; await _context.ProfileInsignias.AddAsync(new ProfileInsignia { Year = insigniaNote.Year, No = req.No, Issue = req.VolumeNo, VolumeNo = req.VolumeNo, // Volume = req.Volume, Section = req.Section, Page = req.Page, DateAnnounce = req.Date, ReceiveDate = req.DateReceive, InsigniaType = insignia.InsigniaType == null ? null : insignia.InsigniaType.Name, Insignia = insignia, // RefCommandNo = req.RefCommandNo, // RefCommandDate = req.RefCommandDate, Profile = profile, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } await _context.InsigniaNoteProfiles.AddAsync(insigniaNoteProfile); } 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.DatePayment = req.DatePayment; // profileInsignia.TypePayment = req.TypePayment; // profileInsignia.Address = req.Address; profileInsignia.RequestInsignia = insignia; profileInsignia.LastUpdateFullName = FullName ?? "System Administrator"; profileInsignia.LastUpdateUserId = UserId ?? ""; profileInsignia.LastUpdatedAt = DateTime.Now; if (req.DateReceive != null && req.Date != null) { profileInsignia.Status = "DONE"; await _context.ProfileInsignias.AddAsync(new ProfileInsignia { Year = insigniaNote.Year, No = req.No, Issue = req.VolumeNo, VolumeNo = req.VolumeNo, // Volume = req.Volume, Section = req.Section, Page = req.Page, DateAnnounce = req.Date, ReceiveDate = req.DateReceive, InsigniaType = insignia.InsigniaType == null ? null : insignia.InsigniaType.Name, Insignia = insignia, // RefCommandNo = req.RefCommandNo, // RefCommandDate = req.RefCommandDate, Profile = profile, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } } } await _context.SaveChangesAsync(); return Success(); } /// /// เพิ่มเอกสารบันทึกผลการได้รับพระราชทานเครื่องราชย์อิสริยสภรณ์/การจ่ายใบกำกับ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("note/doc/{insigniaNoteId:length(36)}")] public async Task> AddDocumentProfile([FromForm] InsigniaNoteDocRequest req, Guid insigniaNoteId) { var insigniaNote = await _context.InsigniaNotes .FirstOrDefaultAsync(x => x.Id == insigniaNoteId); if (insigniaNote == null) return Error(GlobalMessages.InsigniaRequestNotFound); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { foreach (var file in Request.Form.Files) { var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, req.Name == null ? file.FileName : req.Name); var _doc = await _context.Documents.AsQueryable() .FirstOrDefaultAsync(x => x.Id == doc.Id); if (_doc != null) { await _context.InsigniaNoteDocs.AddAsync(new InsigniaNoteDoc { Reason = req.Reason, Document = _doc, InsigniaNote = insigniaNote, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", 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 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) .ThenInclude(x => x.Profile) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .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 profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.Profile.CitizenId == item.CitizanId); if (profile == null) { var _profile = await _context.Profiles .Include(x => x.Salaries) .FirstOrDefaultAsync(x => x.CitizenId == item.CitizanId); 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.Salaries.Count() == 0 ? null : _profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().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, Profile = _profile, InsigniaNote = insigniaNote, 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.DateReceive == null || profile.Date == null) // continue; if (profile.Status != "DONE") { profile.Status = "DONE"; await _context.ProfileInsignias.AddAsync(new ProfileInsignia { Year = insigniaNote.Year, No = profile.No, Issue = profile.VolumeNo, VolumeNo = profile.VolumeNo, // Volume = profile.Volume, Section = profile.Section, Page = profile.Page, DateAnnounce = profile.Date, ReceiveDate = profile.DateReceive, InsigniaType = profile.RequestInsignia.InsigniaType == null ? null : profile.RequestInsignia.InsigniaType.Name, Insignia = profile.RequestInsignia, // RefCommandNo = req.RefCommandNo, // RefCommandDate = req.RefCommandDate, Profile = profile.Profile, CreatedUserId = UserId ?? "System Administrator", CreatedFullName = FullName ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } } 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) .ThenInclude(x => x.Profile) .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) { var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.Profile.CitizenId == item.CitizanId); 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) { var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Prefix) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Position) .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) { var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.Profile.CitizenId == item.CitizanId); if (profile == null) { var _profile = await _context.Profiles .Include(x => x.Salaries) .FirstOrDefaultAsync(x => x.CitizenId == item.CitizanId); 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.Salaries.Count() == 0 ? null : _profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().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, Profile = _profile, InsigniaNote = insigniaNote, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; } 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.Profile.Prefix == null ? null : profile.Profile.Prefix.Name, Position = profile.Profile.Position == null ? null : profile.Profile.Position.Name, profile.Profile.CitizenId, profile.Profile.ProfileType, FullName = $"{profile.Profile.Prefix?.Name}{profile.Profile.FirstName} {profile.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); } /// /// preview บันทึกผลใบกำกับเครื่องราชฯ /// /// Id รอบบันทึกผลเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("preview/invoice/{insigniaNoteId:length(36)}"), DisableRequestSizeLimit] public async Task> PreviewInvoiceProfile([FromForm] ImportFileRequest req, Guid insigniaNoteId) { var insigniaNote = await _context.InsigniaNotes .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Prefix) .Include(x => x.InsigniaNoteProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Position) .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) { var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.Profile.CitizenId == item.CitizanId); 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; } var _insigniaNoteProfiles = new List(); foreach (var item in items) { var profile = insigniaNote.InsigniaNoteProfiles.FirstOrDefault(x => x.Profile.CitizenId == item.CitizanId); 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 = profile.Profile.Prefix == null ? null : profile.Profile.Prefix.Name, Position = profile.Profile.Position == null ? null : profile.Profile.Position.Name, profile.Profile.CitizenId, profile.Profile.ProfileType, FullName = $"{profile.Profile.Prefix?.Name}{profile.Profile.FirstName} {profile.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); } /// /// Download รายชื่อข้าราชการสามัญฯ ที่มีสิทธิ์ยื่นขอพระราชทานเครื่องราชอิสริยาภรณ์ /// /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("download/excel/{RequestId:length(36)}")] public async Task> DownloadExcalInsignia(Guid RequestId) { var insigniaPeriod = await _context.InsigniaRequests .Include(x => x.Organization) .ThenInclude(x => x.OrganizationOrganization) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Prefix) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Position) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.PositionLevel) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Salaries) .ThenInclude(x => x.PositionLevel) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Insignias) .ThenInclude(x => x.Insignia) .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, $"ExamList_{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 = insigniaPeriod.Organization.OrganizationOrganization == null ? "-" : insigniaPeriod.Organization.OrganizationOrganization.Name; workSheet.Cells[row, 2].Value = item.Profile.CitizenId; workSheet.Cells[row, 3].Value = item.Profile.Prefix == null ? "-" : ((item.Profile.Prefix.Name == "นาย" || item.Profile.Prefix.Name == "นาง" || item.Profile.Prefix.Name == "นางสาว") ? item.Profile.Prefix.Name : "-"); workSheet.Cells[row, 4].Value = item.Profile.Prefix == null ? "-" : ((item.Profile.Prefix.Name == "นาย" || item.Profile.Prefix.Name == "นาง" || item.Profile.Prefix.Name == "นางสาว") ? "-" : item.Profile.Prefix.Name); workSheet.Cells[row, 5].Value = item.Profile.FirstName; workSheet.Cells[row, 6].Value = item.Profile.LastName; workSheet.Cells[row, 7].Value = item.Profile.Gender == null ? "-" : item.Profile.Gender.Name; workSheet.Cells[row, 8].Value = item.Profile.BirthDate.ToThaiDate(); workSheet.Cells[row, 9].Value = item.Profile.DateAppoint == null ? null : item.Profile.DateAppoint.Value.ToThaiDate(); // workSheet.Cells[row, 10].Value = null; // workSheet.Cells[row, 11].Value = item.Profile.Position == null ? null : item.Profile.Position.Name; workSheet.Cells[row, 12].Value = item.Profile.PositionLevel == null ? null : (item.Profile.Salaries.Where(x => x.PositionLevel == item.Profile.PositionLevel).Count() == 0 ? null : (item.Profile.Salaries.Where(x => x.PositionLevel == item.Profile.PositionLevel).OrderBy(x => x.Order).FirstOrDefault().Date == null ? null : item.Profile.Salaries.Where(x => x.PositionLevel == item.Profile.PositionLevel).OrderBy(x => x.Order).FirstOrDefault().Date.Value.ToThaiDate())); workSheet.Cells[row, 13].Value = item.Profile.PositionLevel == null ? null : item.Profile.PositionLevel.Name; workSheet.Cells[row, 14].Value = item.Profile.Position == null ? null : (item.Profile.Salaries.Where(x => x.PositionId == item.Profile.Position.Id).Count() == 0 ? null : (item.Profile.Salaries.Where(x => x.PositionId == item.Profile.Position.Id).OrderBy(x => x.Order).FirstOrDefault().Date == null ? null : item.Profile.Salaries.Where(x => x.PositionId == item.Profile.Position.Id).OrderBy(x => x.Order).FirstOrDefault().Date.Value.ToThaiDate())); workSheet.Cells[row, 15].Value = null; workSheet.Cells[row, 16].Value = item.Profile.Position == null ? "-" : item.Profile.Position.Name; workSheet.Cells[row, 17].Value = item.Profile.Salaries.Count() == 0 ? null : item.Profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount; workSheet.Cells[row, 18].Value = null; workSheet.Cells[row, 19].Value = item.Profile.Salaries.Count() == 0 ? null : item.Profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount; workSheet.Cells[row, 20].Value = item.Profile.Insignias.Count() == 0 ? null : (item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().Insignia == null ? null : item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().Insignia.Name); workSheet.Cells[row, 21].Value = item.Profile.Insignias.Count() == 0 ? null : (item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().ReceiveDate == null ? null : item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().ReceiveDate.Value.ToThaiDate()); 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 รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("download/excel/{RequestId:length(36)}")] public async Task> DownloadExcelInsigniaByFilter([FromBody] ExportFileInsigniaRequest req, Guid RequestId) { var insigniaPeriod = await _context.InsigniaRequests .Include(x => x.Organization) .ThenInclude(x => x.OrganizationOrganization) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Prefix) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Position) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.PositionLevel) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Salaries) .ThenInclude(x => x.PositionLevel) .Include(x => x.RequestProfiles) .ThenInclude(x => x.Profile) .ThenInclude(x => x.Insignias) .ThenInclude(x => x.Insignia) .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, $"ExamList_{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.Profile != null).Where(x => x.Profile.ProfileType.Trim().ToUpper() == req.ProfileType.Trim().ToUpper()).ToList(); if (req.InsigniaId != null) requestProfiles = requestProfiles.Where(x => x.RequestInsignia.Id == req.InsigniaId).ToList(); // if (req.OrgId != null) // requestProfiles = requestProfiles.Where(x => x.Request.Organization.Id == req.OrgId).ToList(); var row = 2; foreach (var item in requestProfiles) { workSheet.Cells[row, 1].Value = insigniaPeriod.Organization.OrganizationOrganization == null ? "-" : insigniaPeriod.Organization.OrganizationOrganization.Name; workSheet.Cells[row, 2].Value = item.Profile.CitizenId; workSheet.Cells[row, 3].Value = item.Profile.Prefix == null ? "-" : ((item.Profile.Prefix.Name == "นาย" || item.Profile.Prefix.Name == "นาง" || item.Profile.Prefix.Name == "นางสาว") ? item.Profile.Prefix.Name : "-"); workSheet.Cells[row, 4].Value = item.Profile.Prefix == null ? "-" : ((item.Profile.Prefix.Name == "นาย" || item.Profile.Prefix.Name == "นาง" || item.Profile.Prefix.Name == "นางสาว") ? "-" : item.Profile.Prefix.Name); workSheet.Cells[row, 5].Value = item.Profile.FirstName; workSheet.Cells[row, 6].Value = item.Profile.LastName; workSheet.Cells[row, 7].Value = item.Profile.Gender == null ? "-" : item.Profile.Gender.Name; workSheet.Cells[row, 8].Value = item.Profile.BirthDate.ToThaiDate(); workSheet.Cells[row, 9].Value = item.Profile.DateAppoint == null ? null : item.Profile.DateAppoint.Value.ToThaiDate(); // workSheet.Cells[row, 10].Value = null; // workSheet.Cells[row, 11].Value = item.Profile.Position == null ? null : item.Profile.Position.Name; workSheet.Cells[row, 12].Value = item.Profile.PositionLevel == null ? null : (item.Profile.Salaries.Where(x => x.PositionLevel == item.Profile.PositionLevel).Count() == 0 ? null : (item.Profile.Salaries.Where(x => x.PositionLevel == item.Profile.PositionLevel).OrderBy(x => x.Order).FirstOrDefault().Date == null ? null : item.Profile.Salaries.Where(x => x.PositionLevel == item.Profile.PositionLevel).OrderBy(x => x.Order).FirstOrDefault().Date.Value.ToThaiDate())); workSheet.Cells[row, 13].Value = item.Profile.PositionLevel == null ? null : item.Profile.PositionLevel.Name; workSheet.Cells[row, 14].Value = item.Profile.Position == null ? null : (item.Profile.Salaries.Where(x => x.PositionId == item.Profile.Position.Id).Count() == 0 ? null : (item.Profile.Salaries.Where(x => x.PositionId == item.Profile.Position.Id).OrderBy(x => x.Order).FirstOrDefault().Date == null ? null : item.Profile.Salaries.Where(x => x.PositionId == item.Profile.Position.Id).OrderBy(x => x.Order).FirstOrDefault().Date.Value.ToThaiDate())); workSheet.Cells[row, 15].Value = null; workSheet.Cells[row, 16].Value = item.Profile.Position == null ? "-" : item.Profile.Position.Name; workSheet.Cells[row, 17].Value = item.Profile.Salaries.Count() == 0 ? null : item.Profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount; workSheet.Cells[row, 18].Value = null; workSheet.Cells[row, 19].Value = item.Profile.Salaries.Count() == 0 ? null : item.Profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount; workSheet.Cells[row, 20].Value = item.Profile.Insignias.Count() == 0 ? null : (item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().Insignia == null ? null : item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().Insignia.Name); workSheet.Cells[row, 21].Value = item.Profile.Insignias.Count() == 0 ? null : (item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().ReceiveDate == null ? null : item.Profile.Insignias.OrderByDescending(x => x.CreatedAt).FirstOrDefault().ReceiveDate.Value.ToThaiDate()); 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); } } /// /// Upload เอกสาร เครื่องราชฯ /// /// Id รอบเครื่องราช /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("upload/{requestId:length(36)}"), DisableRequestSizeLimit] public async Task> UpdatePersonDeferment([FromForm] ImportFileRequest req, Guid requestId) { var insigniaRequest = await _context.InsigniaRequests.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) { if (insigniaRequest.Document != null) { 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; } 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; } insigniaNoteProfile.OrgReturnInsignia = await _context.Organizations.Where(x => x.Id == req.OrgId).FirstOrDefaultAsync(); 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; } insigniaNoteProfile.OrgReceiveInsignia = await _context.Organizations.Where(x => x.Id == req.OrgId).FirstOrDefaultAsync(); insigniaNoteProfile.DateReceiveInsignia = req.Date; insigniaNoteProfile.LastUpdateFullName = FullName ?? "System Administrator"; insigniaNoteProfile.LastUpdateUserId = UserId ?? ""; insigniaNoteProfile.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } } }