using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Application.Repositories.Reports; using BMA.EHR.Application.Responses; using BMA.EHR.Application.Responses.Profiles; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Models.Retirement; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Retirement.Service.Requests; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Swashbuckle.AspNetCore.Annotations; using System.Net.Http.Headers; using System.Security.Claims; using System.Text; namespace BMA.EHR.Retirement.Service.Controllers { [Route("api/v{version:apiVersion}/retirement/deceased")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("ระบบแจ้งการถึงแก่กรรม")] public class RetirementDeceasedController : BaseController { private readonly RetirementRepository _repository; private readonly NotificationRepository _repositoryNoti; private readonly RetireReportRepository _repositoryRetireReport; private readonly ApplicationDBContext _context; private readonly MinIOService _documentService; private readonly IConfiguration _configuration; private readonly IHttpContextAccessor _httpContextAccessor; private readonly UserProfileRepository _userProfileRepository; private readonly PermissionRepository _permission; public RetirementDeceasedController(RetirementRepository repository, NotificationRepository repositoryNoti, RetireReportRepository repositoryRetireReport, ApplicationDBContext context, MinIOService documentService, IConfiguration configuration, IHttpContextAccessor httpContextAccessor, UserProfileRepository userProfileRepository, PermissionRepository permission) { _repository = repository; _repositoryNoti = repositoryNoti; _repositoryRetireReport = repositoryRetireReport; _context = context; _documentService = documentService; _httpContextAccessor = httpContextAccessor; _configuration = configuration; _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? token => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"]; private string? AccessToken => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"]; #endregion /// /// list รายการบันทึกเวียนแจ้งการถึงแก่กรรม /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet()] public async Task> GetList() { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_PASSAWAY"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } string role = jsonData["result"]?.ToString(); var nodeId = string.Empty; var profileAdmin = new GetUserOCAllDto(); profileAdmin = await _userProfileRepository.GetUserOCAll(Guid.Parse(UserId!), AccessToken); if (role == "NORMAL" || role == "CHILD") { nodeId = profileAdmin?.Node == 4 ? profileAdmin?.Child4DnaId : profileAdmin?.Node == 3 ? profileAdmin?.Child3DnaId : profileAdmin?.Node == 2 ? profileAdmin?.Child2DnaId : profileAdmin?.Node == 1 ? profileAdmin?.Child1DnaId : profileAdmin?.Node == 0 ? profileAdmin?.RootDnaId : ""; } else if (role == "BROTHER") { nodeId = profileAdmin?.Node == 4 ? profileAdmin?.Child3DnaId : profileAdmin?.Node == 3 ? profileAdmin?.Child2DnaId : profileAdmin?.Node == 2 ? profileAdmin?.Child1DnaId : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 ? profileAdmin?.RootDnaId : ""; } else if (role == "ROOT" /*|| role == "PARENT"*/) { nodeId = profileAdmin?.RootDnaId; } var node = profileAdmin?.Node; var retirementDeceaseds = await _context.RetirementDeceaseds.AsQueryable() .OrderByDescending(x => x.CreatedAt) .Select(p => new { p.Id, p.profileType, p.citizenId, p.profileId, p.prefix, p.firstName, p.lastName, p.root, p.rootShortName, p.child1, p.child1ShortName, p.child2, p.child2ShortName, p.child3, p.child3ShortName, p.child4, p.child4ShortName, p.posMasterNo, p.position, p.PositionExecutiveOld, p.posLevelName, p.posTypeName, p.CreatedAt, p.IsActive, p.rootDnaId, p.child1DnaId, p.child2DnaId, p.child3DnaId, p.child4DnaId, }) .ToListAsync(); if (role == "OWNER") { node = null; } if (role == "OWNER" || role == "CHILD") { retirementDeceaseds = retirementDeceaseds .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } else if (role == "BROTHER") { retirementDeceaseds = retirementDeceaseds .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); } else if (role == "ROOT") { retirementDeceaseds = retirementDeceaseds .Where(x => x.rootDnaId == nodeId).ToList(); } // else if (role == "PARENT") // { // retirementDeceaseds = retirementDeceaseds // .Where(x => x.rootDnaId == nodeId && x.child1DnaId != null).ToList(); // } else if (role == "NORMAL") { retirementDeceaseds = retirementDeceaseds.Where(x => node == 0 ? x.rootDnaId == nodeId && x.child1DnaId == null : node == 1 ? x.child1DnaId == nodeId && x.child2DnaId == null : node == 2 ? x.child2DnaId == nodeId && x.child3DnaId == null : node == 3 ? x.child3DnaId == nodeId && x.child4DnaId == null : node == 4 ? x.child4DnaId == nodeId : true ).ToList(); } return Success(retirementDeceaseds); } /// /// get รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม /// /// Id การถึงแก่กรรม /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{id:length(36)}")] public async Task> GetDetailByUser(Guid id) { var data = await _context.RetirementDeceaseds.AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.Id, p.profileId, p.profileType, p.prefix, p.firstName, p.lastName, p.root, p.rootShortName, p.child1, p.child1ShortName, p.child2, p.child2ShortName, p.child3, p.child3ShortName, p.child4, p.child4ShortName, p.posMasterNo, p.position, p.PositionExecutiveOld, p.posLevelName, p.posTypeName, p.Number, p.Date, p.Location, p.Reason, FileName = p.Document == null ? null : p.Document.FileName, PathName = p.Document == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Document.Id, p.IsActive, p.CreatedAt, }) .FirstOrDefaultAsync(); if (data == null) return Error(GlobalMessages.RetirementDeceasedNotFound, 404); var _data = new { data.Id, data.profileId, data.prefix, data.firstName, data.lastName, data.profileType, data.root, data.rootShortName, data.child1, data.child1ShortName, data.child2, data.child2ShortName, data.child3, data.child3ShortName, data.child4, data.child4ShortName, data.posMasterNo, data.position, data.PositionExecutiveOld, data.posLevelName, data.posTypeName, data.Number, data.Date, data.Location, data.Reason, PathName = data.PathName == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.PathName), data.IsActive, data.CreatedAt, }; return Success(_data); } /// /// สร้าง รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost()] public async Task> Post([FromForm] RetirementDeceasedRequest req) { // var profile = await _context.Profiles // .Include(x => x.Prefix) // .FirstOrDefaultAsync(x => x.Id == req.ProfileId); // if (profile == null) // return Error(GlobalMessages.DataNotFound, 404); // profile.LeaveDate = DateTime.Now; // profile.IsLeave = true; // profile.LeaveReason = "DEATH"; var retirementDeceased = new RetirementDeceased { // Profile = profile, Number = req.Number, profileType = req.profileType.Trim().ToUpper(), Date = req.Date, Location = req.Location, Reason = req.Reason, IsActive = true, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; if (req.profileType.Trim().ToUpper() == "OFFICER") { var apiUrl = $"{_configuration["API"]}/org/profile/profileid/position/{req.ProfileId}"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) return Error("ไม่พบหน่วยงานของผู้ใช้งานคนนี้", 404); retirementDeceased.profileId = org.result.profileId; retirementDeceased.prefix = org.result.prefix; retirementDeceased.firstName = org.result.firstName; retirementDeceased.lastName = org.result.lastName; retirementDeceased.citizenId = org.result.citizenId; retirementDeceased.root = org.result.root; retirementDeceased.rootId = org.result.rootId; retirementDeceased.rootDnaId = org.result.rootDnaId; retirementDeceased.rootShortName = org.result.rootShortName; retirementDeceased.child1 = org.result.child1; retirementDeceased.child1Id = org.result.child1Id; retirementDeceased.child1DnaId = org.result.child1DnaId; retirementDeceased.child1ShortName = org.result.child1ShortName; retirementDeceased.child2 = org.result.child2; retirementDeceased.child2Id = org.result.child2Id; retirementDeceased.child2DnaId = org.result.child2DnaId; retirementDeceased.child2ShortName = org.result.child2ShortName; retirementDeceased.child3 = org.result.child3; retirementDeceased.child3Id = org.result.child3Id; retirementDeceased.child3DnaId = org.result.child3DnaId; retirementDeceased.child3ShortName = org.result.child3ShortName; retirementDeceased.child4 = org.result.child4; retirementDeceased.child4Id = org.result.child4Id; retirementDeceased.child4DnaId = org.result.child4DnaId; retirementDeceased.child4ShortName = org.result.child4ShortName; retirementDeceased.posMasterNo = org.result.posMasterNo; retirementDeceased.position = org.result.position; retirementDeceased.PositionExecutiveOld = org.result.posExecutiveName; retirementDeceased.positionExecutiveFieldOld = org.result.positionExecutiveField; retirementDeceased.positionAreaOld = org.result.positionArea; retirementDeceased.posTypeId = org.result.posTypeId; retirementDeceased.posTypeName = $"{org.result.posTypeShortName} {org.result.posTypeName}"; retirementDeceased.posLevelId = org.result.posLevelId; retirementDeceased.posLevelName = org.result.posLevelName; } await _context.RetirementDeceaseds.AddAsync(retirementDeceased); var _baseAPI = _configuration["API"]; var _apiUrl = $"{_baseAPI}/org/profile/leave/{req.ProfileId}"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Post, _apiUrl); var _res = await client.PostAsJsonAsync(_apiUrl, new { isLeave = true, leaveReason = retirementDeceased.Reason, dateLeave = req.Date, }); var _result = await _res.Content.ReadAsStringAsync(); } } else { var apiUrl = $"{_configuration["API"]}/org/profile-employee/profileid/position/{req.ProfileId}"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) return Error("ไม่พบหน่วยงานของผู้ใช้งานคนนี้", 404); retirementDeceased.profileId = org.result.profileId; retirementDeceased.prefix = org.result.prefix; retirementDeceased.firstName = org.result.firstName; retirementDeceased.lastName = org.result.lastName; retirementDeceased.citizenId = org.result.citizenId; retirementDeceased.root = org.result.root; retirementDeceased.rootId = org.result.rootId; retirementDeceased.rootDnaId = org.result.rootDnaId; retirementDeceased.rootShortName = org.result.rootShortName; retirementDeceased.child1 = org.result.child1; retirementDeceased.child1Id = org.result.child1Id; retirementDeceased.child1DnaId = org.result.child1DnaId; retirementDeceased.child1ShortName = org.result.child1ShortName; retirementDeceased.child2 = org.result.child2; retirementDeceased.child2Id = org.result.child2Id; retirementDeceased.child2DnaId = org.result.child2DnaId; retirementDeceased.child2ShortName = org.result.child2ShortName; retirementDeceased.child3 = org.result.child3; retirementDeceased.child3Id = org.result.child3Id; retirementDeceased.child3DnaId = org.result.child3DnaId; retirementDeceased.child3ShortName = org.result.child3ShortName; retirementDeceased.child4 = org.result.child4; retirementDeceased.child4Id = org.result.child4Id; retirementDeceased.child4DnaId = org.result.child4DnaId; retirementDeceased.child4ShortName = org.result.child4ShortName; retirementDeceased.posMasterNo = org.result.posMasterNo; retirementDeceased.position = org.result.position; retirementDeceased.posTypeId = org.result.posTypeId; retirementDeceased.posTypeName = org.result.posTypeName; retirementDeceased.posLevelId = org.result.posLevelId; retirementDeceased.posLevelName = org.result.posLevelName; } await _context.RetirementDeceaseds.AddAsync(retirementDeceased); var _baseAPI = _configuration["API"]; var _apiUrl = $"{_baseAPI}/org/profile-employee/leave/{req.ProfileId}"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Post, _apiUrl); var _res = await client.PostAsJsonAsync(_apiUrl, new { isLeave = true, leaveReason = retirementDeceased.Reason, dateLeave = req.Date, }); var _result = await _res.Content.ReadAsStringAsync(); } } var _doc = new Domain.Models.Documents.Document(); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { var file = Request.Form.Files[0]; var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, file.FileName); _doc = await _context.Documents.AsQueryable() .FirstOrDefaultAsync(x => x.Id == doc.Id); if (_doc != null) retirementDeceased.Document = _doc; } //retirementDeceased.RetirementDeceasedNotis.Add(new RetirementDeceasedNoti //{ // CitizenId = retirementDeceased.citizenId == null ? "" : retirementDeceased.citizenId, // Prefix = retirementDeceased.prefix == null ? "" : retirementDeceased.prefix, // FirstName = retirementDeceased.firstName == null ? "" : retirementDeceased.firstName, // LastName = retirementDeceased.lastName == null ? "" : retirementDeceased.lastName, // IsSendMail = true, // IsSendInbox = true, // IsSendNotification = true, // OrganizationName = retirementDeceased.root == null ? "" : retirementDeceased.root, // PositionName = retirementDeceased.position == null ? "" : retirementDeceased.position, // profileId = req.ProfileId, // CreatedFullName = FullName ?? "System Administrator", // CreatedUserId = UserId ?? "", // CreatedAt = DateTime.Now, // LastUpdateFullName = FullName ?? "System Administrator", // LastUpdateUserId = UserId ?? "", // LastUpdatedAt = DateTime.Now, //}); var pathUrl = $"{_configuration["API"]}/org/command/find-higher"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _res = await client.PostAsJsonAsync(pathUrl, new { persons = new List { new { profileId = req.ProfileId } } }); var _result = await _res.Content.ReadAsStringAsync(); var highers = JsonConvert.DeserializeObject(_result); if (highers != null && highers.result != null) { foreach (var higher in highers.result) { if (higher.profileId != null) { var payload_attach = new List(); payload_attach.Add(new PayloadAttachment { name = "หนังสือเวียนถึงแก่กรรม", url = $"{_configuration["API"]}/retirement/deceased/report/36/{retirementDeceased.Id}", isReport = true, isTemplate = true }); var payload = new CommandPayload() { attachments = payload_attach }; var payload_str = JsonConvert.SerializeObject(payload); await _repositoryNoti.PushNotificationAsync( Guid.Parse(higher.profileId), //$"หนังสือเวียนถึงแก่กรรมของ {higher.prefix}{higher.firstName} {higher.lastName}", $"แจ้งข่าวการถึงแก่กรรมของ {retirementDeceased.prefix}{retirementDeceased.firstName} {retirementDeceased.lastName}", $"แจ้งข่าวการถึงแก่กรรมของ {retirementDeceased.prefix}{retirementDeceased.firstName} {retirementDeceased.lastName}", payload_str, "", true, true ); } retirementDeceased.RetirementDeceasedNotis.Add(new RetirementDeceasedNoti { profileId = higher.profileId, CitizenId = higher.citizenId, Prefix = higher.prefix, FirstName = higher.firstName, LastName = higher.lastName, OrganizationName = higher.organizationName, PositionName = higher.positionName, IsSendMail = true, IsSendInbox = true, IsSendNotification = true, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } } } await _context.SaveChangesAsync(); return Success(); } /// /// แก้ไข รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{id:length(36)}")] public async Task> Put([FromForm] RetirementDeceasedRequest req, Guid id) { var updated = await _context.RetirementDeceaseds .Include(x => x.Document) .FirstOrDefaultAsync(x => x.Id == id); if (updated == null) return Error(GlobalMessages.RetirementDeceasedNotFound, 404); if (Request.Form.Files != null && Request.Form.Files.Count != 0) { if (updated.Document != null) await _documentService.DeleteFileAsync(updated.Document.Id); var file = Request.Form.Files[0]; var fileExtension = Path.GetExtension(file.FileName); var doc = await _documentService.UploadFileAsync(file, file.FileName); var _doc = await _context.Documents.AsQueryable() .FirstOrDefaultAsync(x => x.Id == doc.Id); if (_doc != null) updated.Document = _doc; } updated.Number = req.Number; updated.Date = req.Date; updated.Location = req.Location; updated.Reason = req.Reason; updated.LastUpdateFullName = FullName ?? "System Administrator"; updated.LastUpdateUserId = UserId ?? ""; updated.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } /// /// ลบ รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม /// /// Id การถึงแก่กรรม /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("{id:length(36)}")] public async Task> Delete(Guid id) { var deleted = await _context.RetirementDeceaseds.AsQueryable() .Include(x => x.Document) .FirstOrDefaultAsync(x => x.Id == id); if (deleted == null) return Error(GlobalMessages.RetirementDeceasedNotFound, 404); if (deleted.Document != null) await _documentService.DeleteFileAsync(deleted.Document.Id); _context.RetirementDeceaseds.Remove(deleted); await _context.SaveChangesAsync(); return Success(); } /// /// List รายชื่อส่งหนังสือเวียน /// /// Id การถึงแก่กรรม /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("detail/{id:length(36)}")] public async Task> GetDetail(Guid id) { var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "SYS_PASSAWAY"); if (getWorkflow == false) { var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_PASSAWAY"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } } var data = await _context.RetirementDeceasedNotis.AsQueryable() .Where(x => x.RetirementDeceased.Id == id) .Select(p => new { p.Id, p.CitizenId, p.Prefix, p.FirstName, p.LastName, p.IsSendMail, p.IsSendInbox, p.IsSendNotification, p.OrganizationName, p.PositionName, p.profileId, }) .ToListAsync(); return Success(data); } /// /// เพิ่มรายชื่อส่งหนังสือเวียน /// /// Id การถึงแก่กรรม /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("detail/{id:length(36)}")] public async Task> UpdateDetail([FromBody] RetirementDeceasedAddNotiPersonRequest req, Guid id) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_PASSAWAY"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var retirementDeceased = await _context.RetirementDeceaseds.AsQueryable() .Include(x => x.RetirementDeceasedNotis) .FirstOrDefaultAsync(x => x.Id == id); if (retirementDeceased == null) return Error(GlobalMessages.RetirementDeceasedNotFound, 404); bool checkDup = req.Persons.Any(x => retirementDeceased.RetirementDeceasedNotis.Any(y => y.profileId == x.ProfileId)); if (checkDup) return Error("ไม่สามารถเพิ่มรายชื่อส่งหนังสือเวียนซ้ำได้", 404); foreach (var item in req.Persons) { // var profile = await _context.Profiles.AsQueryable() // .Include(x => x.Prefix) // .Include(x => x.Position) // .FirstOrDefaultAsync(x => x.Id == item.ProfileId); // if (profile == null) // continue; var retirementDeceasedNoti = new RetirementDeceasedNoti { profileId = item.ProfileId, IsSendMail = item.IsSendMail, IsSendInbox = item.IsSendInbox, IsSendNotification = item.IsSendNotification, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; //if (retirementDeceased.profileType.Trim().ToUpper() == "OFFICER") //{ var apiUrl = $"{_configuration["API"]}/org/profile/profileid/position/{item.ProfileId}"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); var _res = await client.SendAsync(_req); var _result = await _res.Content.ReadAsStringAsync(); var org = JsonConvert.DeserializeObject(_result); if (org == null || org.result == null) continue; retirementDeceasedNoti.Prefix = org.result.prefix == null ? "" : org.result.prefix; retirementDeceasedNoti.FirstName = org.result.firstName == null ? "" : org.result.firstName; retirementDeceasedNoti.LastName = org.result.lastName == null ? "" : org.result.lastName; retirementDeceasedNoti.CitizenId = org.result.citizenId == null ? "" : org.result.citizenId; retirementDeceasedNoti.PositionName = org.result.position == null ? "" : org.result.position; retirementDeceasedNoti.OrganizationName = (org.result.child4 == null ? "" : org.result.child4 + "\n") + (org.result.child3 == null ? "" : org.result.child3 + "\n") + (org.result.child2 == null ? "" : org.result.child2 + "\n") + (org.result.child1 == null ? "" : org.result.child1 + "\n") + (org.result.root == null ? "" : org.result.root); retirementDeceased.RetirementDeceasedNotis.Add(retirementDeceasedNoti); } //} //else //{ // var apiUrl = $"{_configuration["API"]}/org/profile-employee/profileid/position/{item.ProfileId}"; // using (var client = new HttpClient()) // { // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); // client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]); // var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); // var _res = await client.SendAsync(_req); // var _result = await _res.Content.ReadAsStringAsync(); // var org = JsonConvert.DeserializeObject(_result); // if (org == null || org.result == null) // continue; // retirementDeceasedNoti.Prefix = org.result.prefix == null ? "" : org.result.prefix; // retirementDeceasedNoti.FirstName = org.result.firstName == null ? "" : org.result.firstName; // retirementDeceasedNoti.LastName = org.result.lastName == null ? "" : org.result.lastName; // retirementDeceasedNoti.CitizenId = org.result.citizenId == null ? "" : org.result.citizenId; // retirementDeceasedNoti.PositionName = org.result.position == null ? "" : org.result.position; // retirementDeceasedNoti.OrganizationName = (org.result.child4 == null ? "" : org.result.child4 + "\n") + // (org.result.child3 == null ? "" : org.result.child3 + "\n") + // (org.result.child2 == null ? "" : org.result.child2 + "\n") + // (org.result.child1 == null ? "" : org.result.child1 + "\n") + // (org.result.root == null ? "" : org.result.root); // retirementDeceased.RetirementDeceasedNotis.Add(retirementDeceasedNoti); // } //} await _context.SaveChangesAsync(); } return Success(); } /// /// ลบรายชื่อส่งหนังสือเวียน /// /// Id หนังสือเวียน /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("detail/{id:length(36)}")] public async Task> DeleteDetail(Guid id) { var getPermission = await _permission.GetPermissionAPIAsync("DELETE", "SYS_PASSAWAY"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var retirementDeceasedNoti = await _context.RetirementDeceasedNotis.AsQueryable() .FirstOrDefaultAsync(x => x.Id == id); if (retirementDeceasedNoti == null) return Error(GlobalMessages.RetirementDeceasedNotiNotFound, 404); _context.RetirementDeceasedNotis.Remove(retirementDeceasedNoti); await _context.SaveChangesAsync(); return Success(); } /// /// Noti ส่งหนังสือเวียน /// /// Id การถึงแก่กรรม /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("noti/{id:length(36)}")] public async Task> NotiDeceased([FromBody] RetirementDeceasedAddNotiPersonRequest req, Guid id) { var items = await _context.RetirementDeceasedNotis.AsQueryable() // .Include(x => x.ReceiveUser) .Include(x => x.RetirementDeceased) // .ThenInclude(x => x.Profile) // .ThenInclude(x => x.Prefix) .Where(x => x.RetirementDeceased.Id == id) .ToListAsync(); var retirementDeceased = await _context.RetirementDeceaseds.AsQueryable() .Include(x => x.DocumentForward) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (retirementDeceased == null) return Error(GlobalMessages.RetirementDeceasedNotFound, 404); // if (retirementDeceased.DocumentForward == null) // return Error(GlobalMessages.NoFileToUpload, 404); // create command payload var payload_attach = new List(); payload_attach.Add(new PayloadAttachment { name = "หนังสือเวียนถึงแก่กรรม", //url = $"{_configuration["APIV2"]}/report/deceased/copy/36/{retirementDeceased.Id}" url = $"{_configuration["API"]}/retirement/deceased/report/36/{retirementDeceased.Id}", isReport = true, isTemplate = true }); var payload = new CommandPayload() { attachments = payload_attach }; var payload_str = JsonConvert.SerializeObject(payload); foreach (var item in items) { // var profile = item.profileId; // var prefix = item.profileId; var profile = req.Persons.FirstOrDefault(x => x.ProfileId == item.profileId); if (profile != null) { if (item.profileId != null) { await _repositoryNoti.PushNotificationAsync( Guid.Parse(item.profileId), $"แจ้งข่าวการถึงแก่กรรมของ {item.RetirementDeceased.prefix}{item.RetirementDeceased.firstName} {item.RetirementDeceased.lastName}", $"แจ้งข่าวการถึงแก่กรรมของ {item.RetirementDeceased.prefix}{item.RetirementDeceased.firstName} {item.RetirementDeceased.lastName}", payload_str, "", profile.IsSendInbox, profile.IsSendMail ); } item.IsSendMail = profile.IsSendMail; item.IsSendInbox = profile.IsSendInbox; item.IsSendNotification = profile.IsSendNotification; } else { if (item.profileId != null) { await _repositoryNoti.PushNotificationAsync( Guid.Parse(item.profileId), $"แจ้งข่าวการถึงแก่กรรมของ {item.RetirementDeceased.prefix}{item.RetirementDeceased.firstName} {item.RetirementDeceased.lastName}", $"แจ้งข่าวการถึงแก่กรรมของ {item.RetirementDeceased.prefix}{item.RetirementDeceased.firstName} {item.RetirementDeceased.lastName}", payload_str, "", item.IsSendInbox, item.IsSendMail ); } } } await _context.SaveChangesAsync(); return Success(); } /// /// 36-บันทึกเวียนแจ้งการถึงแก่กรรม /// /// Id รายการบันทึกเวียนแจ้งการถึงแก่กรรม /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("36/{exportType}/{id}")] public async Task> GetDeceasedReportAsync(Guid id, string exportType = "pdf") { try { var head = await _repositoryRetireReport.GetHeadRetirementDeceasedAsync(id); var detail = await _repositoryRetireReport.GetRetirementDeceasedAsync(id); if (detail != null && head != null) { var mergeData = new { Oc = head.GetType().GetProperty("Oc").GetValue(head), Number = head.GetType().GetProperty("Number").GetValue(head), Date = head.GetType().GetProperty("Date").GetValue(head), Subject = head.GetType().GetProperty("Subject").GetValue(head), Send = head.GetType().GetProperty("Send").GetValue(head), FullName = detail.GetType().GetProperty("FullName").GetValue(detail), Position = detail.GetType().GetProperty("Position").GetValue(detail), Reason = detail.GetType().GetProperty("Reason").GetValue(detail), DeceasedDate = detail.GetType().GetProperty("Date").GetValue(detail), CurrentDate = detail.GetType().GetProperty("CurrentDate").GetValue(detail), DeceasedNumber = detail.GetType().GetProperty("Number").GetValue(detail), Location = detail.GetType().GetProperty("Location").GetValue(detail), }; var mimeType = ""; switch (exportType.Trim().ToLower()) { case "pdf": mimeType = "application/pdf"; break; case "docx": mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break; case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } var data = new { template = "deceased", reportName = "docx-report", data = mergeData }; return Success(data); } else { return NotFound(); } } catch { throw; } } /// /// รายงานบันทึกเวียนแจ้งการถึงแก่กรรม /// /// Id รายการบันทึกเวียนแจ้งการถึงแก่กรรม /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("report/36/{id}")] public async Task> GetDeceasedNotiReportAsync(Guid id) { try { var head = await _repositoryRetireReport.GetHeadRetirementDeceasedAsync(id); var detail = await _repositoryRetireReport.GetRetirementDeceasedAsync(id); if (detail == null || head == null) { return Error("รายการบันทึกเวียนแจ้งการถึงแก่กรรม", 404); } var mergeData = new { Oc = head.GetType().GetProperty("Oc")?.GetValue(head), Number = head.GetType().GetProperty("Number")?.GetValue(head), Date = head.GetType().GetProperty("Date")?.GetValue(head), Subject = head.GetType().GetProperty("Subject")?.GetValue(head), Send = head.GetType().GetProperty("Send")?.GetValue(head), FullName = detail.GetType().GetProperty("FullName")?.GetValue(detail), Position = detail.GetType().GetProperty("Position")?.GetValue(detail), Reason = detail.GetType().GetProperty("Reason")?.GetValue(detail), DeceasedDate = detail.GetType().GetProperty("Date")?.GetValue(detail), CurrentDate = detail.GetType().GetProperty("CurrentDate")?.GetValue(detail), DeceasedNumber = detail.GetType().GetProperty("Number")?.GetValue(detail), Location = detail.GetType().GetProperty("Location")?.GetValue(detail), }; var data = new { template = "deceased", reportName = "docx-report", data = mergeData }; return Success(data); } catch { throw; } } } }