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 Elasticsearch.Net;
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.Globalization;
using System.Security.Claims;
using System.Text;
using static System.Runtime.InteropServices.JavaScript.JSType;
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.GetCoinReport(req.roundId, type, req.node, req.nodeId);
var yearInsignalPeriod = await _repository.GetYearInsigniaPeriod(req.roundId);
var yearLastTwoDigits = yearInsignalPeriod.Substring(yearInsignalPeriod.Length - 2);
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]),
Root = dataList[i].GetType().GetProperty("Root").GetValue(dataList[i]),
RootId = dataList[i].GetType().GetProperty("RootId").GetValue(dataList[i]),
Child1 = dataList[i].GetType().GetProperty("Child1").GetValue(dataList[i]),
Child1Id = dataList[i].GetType().GetProperty("Child1Id").GetValue(dataList[i]),
Child2 = dataList[i].GetType().GetProperty("Child2").GetValue(dataList[i]),
Child2Id = dataList[i].GetType().GetProperty("Child2Id").GetValue(dataList[i]),
Child3 = dataList[i].GetType().GetProperty("Child3").GetValue(dataList[i]),
Child3Id = dataList[i].GetType().GetProperty("Child3Id").GetValue(dataList[i]),
Child4 = dataList[i].GetType().GetProperty("Child4").GetValue(dataList[i]),
Child4Id = dataList[i].GetType().GetProperty("Child4Id").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