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.Models.Insignias; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Swashbuckle.AspNetCore.Annotations; using System.Security.Claims; namespace BMA.EHR.Insignia.Service.Controllers { [Route("api/v{version:apiVersion}/insignia/manage")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("จัดสรรเครื่องราชฯ")] public class InsigniaManageController : BaseController { private readonly ApplicationDBContext _context; private readonly MinIOService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; private readonly InsigniaPeriodsRepository _repository; private readonly NotificationRepository _repositoryNoti; private readonly UserProfileRepository _userProfileRepository; private readonly PermissionRepository _permission; public InsigniaManageController(ApplicationDBContext context, MinIOService documentService, InsigniaPeriodsRepository repository, NotificationRepository repositoryNoti, IHttpContextAccessor httpContextAccessor, UserProfileRepository userProfileRepository, PermissionRepository permission) { _context = context; _documentService = documentService; _repository = repository; _repositoryNoti = repositoryNoti; _httpContextAccessor = httpContextAccessor; _userProfileRepository = userProfileRepository; _permission = permission; } #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 /// /// list จัดสรรเครื่องราชฯ /// /// ปีการจัดสรร /// Id ประเภทเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("type/{year}/{insigniaTypeId:length(36)}")] public async Task> GetList(int year, Guid insigniaTypeId) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaType = await _context.InsigniaTypes .FirstOrDefaultAsync(x => x.Id == insigniaTypeId); if (insigniaType == null) return Error(GlobalMessages.InsigniaTypeNotFound); var data = await _context.InsigniaManages.AsQueryable() .Where(x => x.Insignia.InsigniaType == insigniaType) .Where(x => x.Year == year) .OrderByDescending(x => x.CreatedAt) .Select(p => new { Id = p.Id, Insignia = p.Insignia.Name, InsigniaId = p.Insignia.Id, Year = p.Year, Total = p.Total, Allocate = p.InsigniaManageOrganiations.Sum(x => x.Total), Remain = p.Total - p.InsigniaManageOrganiations.Sum(x => x.Total), LastUpdatedAt = p.LastUpdatedAt, CreatedAt = p.CreatedAt, }) .ToListAsync(); return Success(data); } /// /// get รายละเอียดจัดสรรเครื่องราชฯ /// /// Id จัดสรรเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{insigniaManageId:length(36)}")] public async Task> GetById(Guid insigniaManageId) { var data = await _context.InsigniaManages.AsQueryable() .Where(x => x.Id == insigniaManageId) .Select(p => new { Id = p.Id, Insignia = p.Insignia.Name, InsigniaId = p.Insignia.Id, Year = p.Year, Total = p.Total, LastUpdatedAt = p.LastUpdatedAt, CreatedAt = p.CreatedAt, }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.InsigniaManageNotFound, 404); return Success(data); } /// /// สร้างจัดสรรเครื่องราชฯ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost()] public async Task> Post([FromBody] InsigniaManageRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insignia = await _context.Insignias.AsQueryable() .FirstOrDefaultAsync(x => x.Id == req.Insignia); if (insignia == null) return Error(GlobalMessages.InsigniaNotFound); var insigniaManage = await _context.InsigniaManages.AsQueryable() .Where(x => x.Insignia == insignia && x.Year == req.Year) .FirstOrDefaultAsync(); if (insigniaManage != null) return Error(GlobalMessages.InsigniaManageDupicate); await _context.InsigniaManages.AddAsync( new InsigniaManage { Insignia = insignia, Year = req.Year, Total = req.Total, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); await _context.SaveChangesAsync(); return Success(); } /// /// ลบจัดสรรเครื่องราช /// /// Id จัดสรรเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("{insigniaManageId:length(36)}")] public async Task> Delete(Guid insigniaManageId) { var getPermission = await _permission.GetPermissionAPIAsync("DELETE", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var deleted = await _context.InsigniaManages.AsQueryable() .Where(x => x.Id == insigniaManageId) .FirstOrDefaultAsync(); if (deleted == null) return Error(GlobalMessages.InsigniaManageNotFound); _context.InsigniaManages.Remove(deleted); await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไขจัดสรรเครื่องราชฯ /// /// Id จัดสรรเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{insigniaManageId:length(36)}")] public async Task> Put([FromBody] InsigniaManageRequest req, Guid insigniaManageId) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insignia = await _context.Insignias.AsQueryable() .FirstOrDefaultAsync(x => x.Id == req.Insignia); if (insignia == null) return Error(GlobalMessages.InsigniaNotFound); var insigniaManage = await _context.InsigniaManages.AsQueryable() .Where(x => x.Insignia == insignia && x.Year == req.Year && x.Id != insigniaManageId) .FirstOrDefaultAsync(); if (insigniaManage != null) return Error(GlobalMessages.InsigniaManageDupicate); var uppdated = await _context.InsigniaManages.AsQueryable() .Include(x => x.Insignia) .FirstOrDefaultAsync(x => x.Id == insigniaManageId); if (uppdated == null) return Error(GlobalMessages.InsigniaManageNotFound); uppdated.Insignia = insignia; // uppdated.Year = req.Year; uppdated.Total = req.Total; uppdated.LastUpdateFullName = FullName ?? "System Administrator"; uppdated.LastUpdateUserId = UserId ?? ""; uppdated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// list หน่วยงานจัดสรรเครื่องราชอิสริยาภรณ์ /// /// Id จัดสรรเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("org/{insigniaManageId:length(36)}")] public async Task> GetListOrganization(Guid insigniaManageId) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaManage = await _context.InsigniaManages.AsQueryable() .FirstOrDefaultAsync(x => x.Id == insigniaManageId); if (insigniaManage == null) return Error(GlobalMessages.InsigniaManageNotFound); var insigniaManageOrg = await _context.InsigniaManageOrganiations.AsQueryable() .Where(x => x.InsigniaManage == insigniaManage) .OrderByDescending(x => x.CreatedAt) .Select(p => new { Id = p.Id, OrganizationOrganization = p.Organization, Total = p.Total, Allocate = p.InsigniaManageProfiles.Where(x => x.Status == false).Count(), Remain = p.Total - p.InsigniaManageProfiles.Where(x => x.Status == false).Count(), LastUpdatedAt = p.LastUpdatedAt, CreatedAt = p.CreatedAt, }) .ToListAsync(); return Success(insigniaManageOrg); } /// /// สร้างหน่วยงานจัดสรรเครื่องราชอิสริยาภรณ์ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("org")] public async Task> PostOrganization([FromBody] InsigniaManageOrganizationRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaManage = await _context.InsigniaManages.AsQueryable() .Include(x => x.InsigniaManageOrganiations) .FirstOrDefaultAsync(x => x.Id == req.insigniaManageId); if (insigniaManage == null) return Error(GlobalMessages.InsigniaManageNotFound); var insigniaManageOrganiation = await _context.InsigniaManageOrganiations.AsQueryable() .FirstOrDefaultAsync(x => x.OrganizationId == req.OrganizationOrganizationId && x.InsigniaManage == insigniaManage); if (insigniaManageOrganiation != null) return Error(GlobalMessages.InsigniaManageOrgDupicate); var total = insigniaManage.InsigniaManageOrganiations.Where(x => x.OrganizationId != req.OrganizationOrganizationId).Sum(x => x.Total); if (req.Total + total > insigniaManage.Total) return Error(GlobalMessages.InsigniaManageOrgLimit); var root = _userProfileRepository.GetOc(req.OrganizationOrganizationId, 0, AccessToken)?.Root ?? null; await _context.InsigniaManageOrganiations.AddAsync( new InsigniaManageOrganiation { OrganizationId = req.OrganizationOrganizationId, Organization = root, Total = req.Total, InsigniaManage = insigniaManage, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); await _context.SaveChangesAsync(); return Success(); } /// /// ลบหน่วยงานจัดสรรเครื่องราชอิสริยาภรณ์ /// /// Id หน่วยงานจัดสรรเครื่องราชอิสริยาภรณ์ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("org/{insigniaManageOrgId:length(36)}")] public async Task> DeleteOrganization(Guid insigniaManageOrgId) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var deleted = await _context.InsigniaManageOrganiations.AsQueryable() .FirstOrDefaultAsync(x => x.Id == insigniaManageOrgId); if (deleted == null) return Error(GlobalMessages.InsigniaManageNotFound); _context.InsigniaManageOrganiations.Remove(deleted); await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไขหน่วยงานจัดสรรเครื่องราชอิสริยาภรณ์ /// /// Id หน่วยงานจัดสรรเครื่องราชอิสริยาภรณ์ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("org/{insigniaManageOrgId:length(36)}")] public async Task> PutOrganization([FromBody] InsigniaManageOrganizationUpdateRequest req, Guid insigniaManageOrgId) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var uppdated = await _context.InsigniaManageOrganiations.AsQueryable() .Include(x => x.InsigniaManage) .FirstOrDefaultAsync(x => x.Id == insigniaManageOrgId); if (uppdated == null) return Error(GlobalMessages.InsigniaManageNotFound); var insigniaManage = await _context.InsigniaManages.AsQueryable() .Include(x => x.InsigniaManageOrganiations) .FirstOrDefaultAsync(x => x.Id == uppdated.InsigniaManage.Id); if (insigniaManage == null) return Error(GlobalMessages.InsigniaManageNotFound); var total = insigniaManage.InsigniaManageOrganiations.Where(x => x.Id != insigniaManageOrgId).Sum(x => x.Total); if (req.Total + total > insigniaManage.Total) return Error(GlobalMessages.InsigniaManageOrgLimit); uppdated.Total = req.Total; uppdated.LastUpdateFullName = FullName ?? "System Administrator"; uppdated.LastUpdateUserId = UserId ?? ""; uppdated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// list dashboard หน่วยงานจัดสรรเครื่องราชอิสริยาภรณ์ /// /// Id จัดสรรเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("org/dashboard/{insigniaManageId:length(36)}")] public async Task> GetListDashboardOrganization(Guid insigniaManageId) { var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_INSIGNIA_ALLOCATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaManage = await _context.InsigniaManages.AsQueryable() .Include(x => x.InsigniaManageOrganiations) .Select(p => new { Id = p.Id, Insignia = p.Insignia.Name, InsigniaId = p.Insignia.Id, Year = p.Year, Total = p.Total, Allocate = p.InsigniaManageOrganiations.Sum(x => x.Total), Remain = p.Total - p.InsigniaManageOrganiations.Sum(x => x.Total), LastUpdatedAt = p.LastUpdatedAt, CreatedAt = p.CreatedAt, }) .FirstOrDefaultAsync(x => x.Id == insigniaManageId); if (insigniaManage == null) return Error(GlobalMessages.InsigniaManageNotFound); return Success(insigniaManage); } /// /// ยืมเครื่องราชฯ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("borrow")] public async Task> PostBorrowInsignia([FromBody] InsigniaBorrowRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_INSIGNIA_BORROW"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaNoteProfile = await _context.InsigniaNoteProfiles.AsQueryable() .Include(x => x.RequestInsignia) .Include(x => x.InsigniaNote) //.Include(x => x.Profile) .FirstOrDefaultAsync(x => x.Id == req.InsigniaNoteProfileId); if (insigniaNoteProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound); if (insigniaNoteProfile.Status != "DONE") return Error(GlobalMessages.InsigniaNoBorrow); var insigniaManage = await _context.InsigniaManages.AsQueryable() .FirstOrDefaultAsync(x => x.Year == insigniaNoteProfile.InsigniaNote.Year && x.Insignia == insigniaNoteProfile.RequestInsignia); if (insigniaManage == null) return Error(GlobalMessages.InsigniaManageNotFound); var insigniaManageOrganiation = await _context.InsigniaManageOrganiations.AsQueryable() .Include(x => x.InsigniaManageProfiles) .FirstOrDefaultAsync(x => x.OrganizationId == insigniaNoteProfile.RootId && x.InsigniaManage == insigniaManage); if (insigniaManageOrganiation == null) return Error(GlobalMessages.InsigniaManageOrgNotFound); var insigniaManageProfile = await _context.InsigniaManageProfiles.AsQueryable() .FirstOrDefaultAsync(x => x.InsigniaNoteProfile == insigniaNoteProfile && x.Status == false); if (insigniaManageProfile != null) return Error(GlobalMessages.InsigniaNotReturn); if (insigniaManageOrganiation.Total <= insigniaManageOrganiation.InsigniaManageProfiles.Count()) return Error(GlobalMessages.InsigniaBorrowOrgLimit); await _context.InsigniaManageProfiles.AddAsync( new InsigniaManageProfile { Status = false, InsigniaManageOrganiation = insigniaManageOrganiation, BorrowOrganizationId = insigniaNoteProfile.RootId, BorrowOrganization = insigniaNoteProfile.Root, BorrowDate = req.BorrowDate, InsigniaNoteProfile = insigniaNoteProfile, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); await _context.SaveChangesAsync(); return Success(); } /// /// คืนเครื่องราชฯ /// /// Id ยืมเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("return/{insigniaManageProfileId:length(36)}")] public async Task> PutReturnInsignia([FromBody] InsigniaReturnRequest req, Guid insigniaManageProfileId) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_INSIGNIA_BORROW"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var uppdated = await _context.InsigniaManageProfiles.AsQueryable() .FirstOrDefaultAsync(x => x.Id == insigniaManageProfileId); if (uppdated == null) return Error(GlobalMessages.InsigniaManageNotFound); uppdated.Status = true; uppdated.ReturnDate = req.ReturnDate; uppdated.ReturnOrganizationId = uppdated.BorrowOrganizationId; uppdated.ReturnOrganization = uppdated.BorrowOrganization; uppdated.ReturnReason = req.ReturnReason; uppdated.LastUpdateFullName = FullName ?? "System Administrator"; uppdated.LastUpdateUserId = UserId ?? ""; uppdated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// list รายการยืม/คืนเครื่องราชฯ /// /// ปียืมขอ /// Id ประเภทเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("borrow/{year}/{insigniaTypeId:length(36)}")] public async Task> ListBorrowReturnInsignia(int year, Guid insigniaTypeId) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_INSIGNIA_BORROW"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var insigniaType = await _context.InsigniaTypes .FirstOrDefaultAsync(x => x.Id == insigniaTypeId); if (insigniaType == null) return Error(GlobalMessages.InsigniaTypeNotFound); var rawData = await _context.InsigniaManageProfiles.AsQueryable() .Where(x => x.InsigniaNoteProfile.RequestInsignia.InsigniaType == insigniaType) .Where(x => year == 0 ? x.Id != null : x.InsigniaManageOrganiation.InsigniaManage.Year == year) .OrderByDescending(x => x.CreatedAt) .Select(p => new { Id = p.Id, BorrowOrganization = p.BorrowOrganization, BorrowOrganizationId = p.BorrowOrganizationId, ReturnOrganization = p.ReturnOrganization, ReturnOrganizationId = p.ReturnOrganizationId, Profile = p.InsigniaNoteProfile!.ProfileId ?? Guid.Empty, CitizenId = p.InsigniaNoteProfile!.CitizenId ?? string.Empty, Prefix = p.InsigniaNoteProfile!.Prefix ?? string.Empty, FirstName = p.InsigniaNoteProfile!.FirstName ?? string.Empty, LastName = p.InsigniaNoteProfile!.LastName ?? string.Empty, ProfileType = p.InsigniaNoteProfile!.ProfileType ?? string.Empty, Position = p.InsigniaNoteProfile!.Position ?? string.Empty, Status = p.Status, BorrowDate = p.BorrowDate, ReturnDate = p.ReturnDate, ReturnReason = p.ReturnReason, LastUpdatedAt = p.LastUpdatedAt, CreatedAt = p.CreatedAt, InsigniaNoteProfileId = p.InsigniaNoteProfile.Id, RequestInsignia = p.InsigniaNoteProfile.RequestInsignia == null ? null : p.InsigniaNoteProfile.RequestInsignia.Name, RequestInsigniaId = p.InsigniaNoteProfile.RequestInsignia == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.InsigniaNoteProfile.RequestInsignia.Id, RequestInsigniaShortName = p.InsigniaNoteProfile.RequestInsignia == null ? null : p.InsigniaNoteProfile.RequestInsignia.ShortName, p.InsigniaNoteProfile.DateReceive, p.InsigniaNoteProfile.OrganizationOrganizationSend, p.InsigniaNoteProfile.OrganizationOrganizationReceive, InsigniaNoteProfileStatus = p.InsigniaNoteProfile.Status, p.InsigniaNoteProfile.Issue, p.InsigniaNoteProfile.Date, p.InsigniaNoteProfile.VolumeNo, p.InsigniaNoteProfile.Section, p.InsigniaNoteProfile.Page, p.InsigniaNoteProfile.No, p.InsigniaNoteProfile.DatePayment, p.InsigniaNoteProfile.TypePayment, p.InsigniaNoteProfile.Address, p.InsigniaNoteProfile.Number, p.InsigniaNoteProfile.Salary, }) .ToListAsync(); var data = rawData .Select(p => new { p.Id, p.Status, BorrowOrganization = p.BorrowOrganization, BorrowOrganizationId = p.BorrowOrganizationId, p.BorrowDate, p.ReturnDate, ReturnOrganization = p.ReturnOrganization, ReturnOrganizationId = p.ReturnOrganizationId, p.ReturnReason, p.LastUpdatedAt, p.CreatedAt, p.InsigniaNoteProfileId, CitizenId = p.CitizenId, Prefix = p.Prefix, Position = p.Position, FullName = $"{p.Prefix}{p.FirstName} {p.LastName}", ProfileType = p.ProfileType, p.RequestInsignia, p.RequestInsigniaId, p.RequestInsigniaShortName, p.DateReceive, p.OrganizationOrganizationSend, p.OrganizationOrganizationReceive, p.InsigniaNoteProfileStatus, p.Issue, p.Date, p.VolumeNo, p.Section, p.Page, p.No, p.DatePayment, p.TypePayment, p.Address, p.Number, p.Salary, }) .ToList(); return Success(data); } /// /// get รายการยืม/คืนเครื่องราชฯ /// /// Id ประเภทเครื่องราชฯ /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("borrow/{insigniaManageProfileId:length(36)}")] public async Task> GetBorrowReturnInsignia(Guid insigniaManageProfileId) { var data = await _context.InsigniaManageProfiles.AsQueryable() .Where(x => x.Id == insigniaManageProfileId) .Select(p => new { Id = p.Id, Status = p.Status, BorrowOrganization = p.BorrowOrganization, BorrowOrganizationId = p.BorrowOrganizationId, BorrowDate = p.BorrowDate, ReturnDate = p.ReturnDate, ReturnOrganization = p.ReturnOrganization, ReturnOrganizationId = p.ReturnOrganizationId, ReturnReason = p.ReturnReason, LastUpdatedAt = p.LastUpdatedAt, CreatedAt = p.CreatedAt, }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.InsigniaBorrowNotFound); return Success(data); } } }