diff --git a/BMA.EHR.Discipline.Service/Controllers/DisciplineReportController.cs b/BMA.EHR.Discipline.Service/Controllers/DisciplineReportController.cs
new file mode 100644
index 00000000..06eeaa4e
--- /dev/null
+++ b/BMA.EHR.Discipline.Service/Controllers/DisciplineReportController.cs
@@ -0,0 +1,99 @@
+using BMA.EHR.Application.Repositories;
+using BMA.EHR.Application.Repositories.MessageQueue;
+using BMA.EHR.Discipline.Service.Requests;
+using BMA.EHR.Domain.Common;
+using BMA.EHR.Domain.Models.Discipline;
+using BMA.EHR.Domain.Shared;
+using BMA.EHR.Infrastructure.Persistence;
+// using BMA.EHR.Placement.Service.Requests;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
+using Swashbuckle.AspNetCore.Annotations;
+using System.Security.Claims;
+
+namespace BMA.EHR.DisciplineSuspend.Service.Controllers
+{
+ [Route("api/v{version:apiVersion}/discipline/report")]
+ [ApiVersion("1.0")]
+ [ApiController]
+ [Produces("application/json")]
+ [Authorize]
+ [SwaggerTag("ระบบวินัยรายงาน")]
+ public class DisciplineReportController : BaseController
+ {
+ private readonly DisciplineDbContext _context;
+ private readonly MinIODisciplineService _documentService;
+ private readonly IHttpContextAccessor _httpContextAccessor;
+ private readonly PermissionRepository _permission;
+
+ public DisciplineReportController(DisciplineDbContext context,
+ MinIODisciplineService documentService,
+ IHttpContextAccessor httpContextAccessor,
+ PermissionRepository permission)
+ {
+ // _repository = repository;
+ _context = context;
+ _documentService = documentService;
+ _httpContextAccessor = httpContextAccessor;
+ _permission = permission;
+ }
+
+ #region " Properties "
+
+ private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
+
+ private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value;
+
+ #endregion
+
+ ///
+ /// รายชื่อออกคำสั่งลงโทษ
+ ///
+ ///
+ ///
+ /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง
+ /// ไม่ได้ Login เข้าระบบ
+ /// เมื่อเกิดข้อผิดพลาดในการทำงาน
+ [HttpPost("{type}")]
+ public async Task> GetReportDiscipline([FromBody] DisciplineReportRequest req, string type)
+ {
+ // var data = await _context.DisciplineDisciplinary_ProfileComplaintInvestigates
+ // .Include(x => x.DisciplineDisciplinary)
+ // .Where(x => x.Id == d.id)
+ // .FirstOrDefaultAsync();
+
+ var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_DISCIPLINE_REPORT");
+ var jsonData = JsonConvert.DeserializeObject(getPermission);
+ if (jsonData["status"]?.ToString() != "200")
+ {
+ return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
+ }
+
+ // var profile = new List();
+ // if (type.Trim().ToUpper() == "OFFICER")
+ // {
+ // profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId, jsonData["result"] == "OWNER" || jsonData["result"] == "CHILD");
+ // }
+ // else
+ // {
+ // profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId, jsonData["result"] == "OWNER" || jsonData["result"] == "CHILD");
+ // }
+
+ var result = new
+ {
+ template = "reportDiscipline",
+ reportName = "reportDiscipline",
+ data = new
+ {
+ year = req.year + 543,
+ data = new List()
+ }
+ };
+
+ return Success(result);
+ }
+ }
+}
diff --git a/BMA.EHR.Discipline.Service/Requests/DisciplineReportRequest.cs b/BMA.EHR.Discipline.Service/Requests/DisciplineReportRequest.cs
new file mode 100644
index 00000000..2fa79722
--- /dev/null
+++ b/BMA.EHR.Discipline.Service/Requests/DisciplineReportRequest.cs
@@ -0,0 +1,24 @@
+using BMA.EHR.Domain.Models.MetaData;
+using Microsoft.EntityFrameworkCore;
+
+namespace BMA.EHR.Discipline.Service.Requests
+{
+ public class DisciplineReportRequest
+ {
+ public string nodeId { get; set; }
+
+ public int node { get; set; }
+
+ public int year { get; set; }
+
+ public string offenseDetail { get; set; }
+
+ public string disciplinaryFaultLevel { get; set; }
+
+ public string status { get; set; }
+
+ public string posType { get; set; }
+
+ public string posLevel { get; set; }
+ }
+}
diff --git a/BMA.EHR.Insignia/Controllers/InsigniaReportController.cs b/BMA.EHR.Insignia/Controllers/InsigniaReportController.cs
new file mode 100644
index 00000000..8e3efd5a
--- /dev/null
+++ b/BMA.EHR.Insignia/Controllers/InsigniaReportController.cs
@@ -0,0 +1,304 @@
+using BMA.EHR.Application.Repositories;
+using BMA.EHR.Application.Repositories.MessageQueue;
+using BMA.EHR.Application.Repositories.Reports;
+using BMA.EHR.Application.Requests;
+using BMA.EHR.Application.Responses.Insignias;
+using BMA.EHR.Application.Responses.Organizations;
+using BMA.EHR.Domain.Common;
+using BMA.EHR.Domain.Extensions;
+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 Newtonsoft.Json.Linq;
+using OfficeOpenXml;
+using RabbitMQ.Client;
+using Swashbuckle.AspNetCore.Annotations;
+using System.Security.Claims;
+using System.Text;
+
+namespace BMA.EHR.Insignia.Service.Controllers
+{
+ [Route("api/v{version:apiVersion}/insignia/report")]
+ [ApiVersion("1.0")]
+ [ApiController]
+ [Produces("application/json")]
+ [Authorize]
+ [SwaggerTag("เครื่องราชรายงาน")]
+ public class InsigniaReportController : BaseController
+ {
+ private readonly ApplicationDBContext _context;
+ private readonly IWebHostEnvironment _hostingEnvironment;
+ private readonly IConfiguration _configuration;
+ private readonly InsigniaReportRepository _repository;
+ private readonly PermissionRepository _permission;
+ private readonly IHttpContextAccessor _httpContextAccessor;
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public InsigniaReportController(ApplicationDBContext context,
+ IWebHostEnvironment hostingEnvironment,
+ IConfiguration configuration,
+ InsigniaReportRepository repository,
+ IHttpContextAccessor httpContextAccessor,
+ PermissionRepository permission)
+ {
+ _context = context;
+ _hostingEnvironment = hostingEnvironment;
+ _configuration = configuration;
+ _repository = repository;
+ _permission = permission;
+ _httpContextAccessor = httpContextAccessor;
+ }
+
+ #region " Properties "
+
+ private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
+ private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value;
+ private string? AccessToken => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"];
+
+ #endregion
+
+ #region บัญชีแสดงรายชื่อผู้ขอพระราชทานเหรียญจักรพรรดิมาลา
+ ///
+ /// บัญชีแสดงรายชื่อผู้ขอพระราชทานเหรียญจักรพรรดิมาลา
+ ///
+ /// type
+ ///
+ /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ
+ /// ไม่ได้ Login เข้าระบบ
+ /// เมื่อเกิดข้อผิดพลาดในการทำงาน
+ [HttpPost("report1/{type}")]
+ public async Task> GetInsigniaReport1Async([FromBody] GetInsigniaDetailByNodeReportDto req, string type)
+ {
+ try
+ {
+ var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_INSIGNIA_REPORT");
+ var jsonData = JsonConvert.DeserializeObject(getPermission);
+ if (jsonData["status"]?.ToString() != "200")
+ {
+ return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
+ }
+
+ var data = await _repository.GetCoinReportByNode(req.roundId, req.node, req.nodeId, jsonData["result"]?.ToString());
+ var yearInsignalPeriod = await _repository.GetYearInsigniaPeriod(req.roundId);
+
+ var dataResult = new List();
+ var dataList = new List(data);
+ var detailList = new List();
+ var check = 0;
+ var status = false;
+
+ for (int i = 0; i < dataList.Count; i++)
+ {
+ check++;
+ var gender = dataList[i].GetType().GetProperty("Gender").GetValue(dataList[i]);
+ detailList.Add(new
+ {
+ status = status,
+ row = detailList.Count + 1,
+ InsigniaName = dataList[i].GetType().GetProperty("InsigniaName").GetValue(dataList[i]),
+ FullName = dataList[i].GetType().GetProperty("FullName").GetValue(dataList[i]),
+ InsigniaInitial = dataList[i].GetType().GetProperty("InsigniaInitial").GetValue(dataList[i]),
+ Male = gender == "ชาย" ? 1 : 0,
+ Female = gender == "หญิง" ? 1 : 0,
+ });
+
+ if (check == 25)
+ {
+ status = true;
+ }
+ else if (check == 50)
+ {
+ status = false;
+ check = 0;
+ }
+ }
+
+ if (detailList.Count > 0)
+ {
+ var left = detailList.Where(x => x.status == false);
+ var right = detailList.Where(x => x.status == true);
+ var mergeList = new List