using Amazon.S3.Model.Internal.MarshallTransformations; using BMA.EHR.Application.Common.Interfaces; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Application.Responses; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Commands.Core; using BMA.EHR.Domain.Models.HR; using BMA.EHR.Domain.Models.Insignias; using BMA.EHR.Domain.Models.MetaData; using BMA.EHR.Domain.Models.Organizations; using BMA.EHR.Domain.Models.Retirement; using BMA.EHR.Domain.Shared; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Metadata; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Globalization; using System.Net; using System.Net.Http.Headers; namespace BMA.EHR.Application.Repositories.Reports { public class InsigniaReportRepository { #region " Fields " private readonly IApplicationDBContext _dbContext; private readonly IWebHostEnvironment _hostingEnvironment; private readonly OrganizationCommonRepository _organizationCommonRepository; private readonly NotificationRepository _repositoryNoti; private readonly InsigniaPeriodsRepository _repositoryInsignia; private readonly IConfiguration _configuration; private readonly string CRLF = "\r\n"; private readonly UserProfileRepository _userProfileRepository; private readonly IHttpContextAccessor _httpContextAccessor; #endregion #region " Constructor and Destructor " public InsigniaReportRepository(IApplicationDBContext dbContext, OrganizationCommonRepository organizationCommonRepository, InsigniaPeriodsRepository repositoryInsignia, NotificationRepository repositoryNoti, IWebHostEnvironment hostEnvironment, IConfiguration configuration, UserProfileRepository userProfileRepository, IHttpContextAccessor httpContextAccessor) { _dbContext = dbContext; _hostingEnvironment = hostEnvironment; _repositoryNoti = repositoryNoti; _organizationCommonRepository = organizationCommonRepository; _repositoryInsignia = repositoryInsignia; _userProfileRepository = userProfileRepository; _httpContextAccessor = httpContextAccessor; _configuration = configuration; } #endregion private string? AccessToken => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"]; #region " Methods " // private string GetPositionByYear(string profileID, int year) // { // using (var ctx = new ApplicationDbContext()) // { // var ret = (from x in ctx.ProfileSalaryPositions.AsQueryable() // where x.IdNavigation.ProfileId == profileID && // x.IdNavigation.SalaryDateAnnounce.Value.Year == year // orderby x.IdNavigation.Order descending // select x) // .Include(x => x.Position) // .FirstOrDefault(); // if (ret != null) // return ret.Position.Name; // else // return "ไม่ระบุ"; // } // } // private string GetPositionLevelByYear(string profileID, int year) // { // using (var ctx = new ApplicationDbContext()) // { // var ret = (from x in ctx.ProfileSalaryPositionLevels.AsQueryable() // where x.IdNavigation.ProfileId == profileID && // x.IdNavigation.SalaryDateAnnounce.Value.Year == year // orderby x.IdNavigation.Order descending // select x) // .Include(x => x.PositionLevel) // .FirstOrDefault(); // if (ret != null) // return ret.PositionLevel.Name; // else // return "ไม่ระบุ"; // } // } // private string GetPositionTypeByYear(string profileID, int year) // { // using (var ctx = new ApplicationDbContext()) // { // var ret = (from x in ctx.ProfileSalaryPositionTypes.AsQueryable() // where x.IdNavigation.ProfileId == profileID && // x.IdNavigation.SalaryDateAnnounce.Value.Year == year // orderby x.IdNavigation.Order descending // select x) // .Include(x => x.PositionType) // .FirstOrDefault(); // if (ret != null) // return ret.PositionType.Name; // else // return "ไม่ระบุ"; // } // } public async Task GetYearInsigniaPeriod(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); string thaiYear = period.Year.ToThaiYear().ToString().ToThaiNumber(); return thaiYear; } public async Task GetNameInsigniaNote(Guid id) { var note = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (note == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); string name = note.Name.ToString().ToThaiNumber(); return name; } public async Task GetYearInsigniaNote(Guid id) { var note = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (note == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); string thaiYear = note.Year.ToThaiYear().ToString().ToThaiNumber(); return thaiYear; } public async Task Get2YearInsigniaPeriod(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); string thaiYear = period.Year.ToThaiYear().ToString().ToThaiNumber(); return thaiYear.Substring(2); } public async Task GetInsigniaPeriod(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); return period; } public async Task GetDateInsigniaPeriod(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); return new { StartDater = period.StartDate.ToThaiFullDate().ToString().ToThaiNumber(), EndDate = period.EndDate.ToThaiFullDate().ToString().ToThaiNumber(), }; } public async Task GetProfileInsignia(Guid id) { var profile = (from r in await _dbContext.Set() .Include(x => x.Prefix) .Include(x => x.Position) .ToListAsync() where r.Id == id select new { FullName = $"{r.Prefix?.Name}{r.FirstName} {r.LastName}", Position = r.Position == null ? "-" : r.Position.Name, OCName = r.OcId == null ? "-" : _organizationCommonRepository.GetOrganizationNameFullPath(r.OcId.Value, false, false), BirthDate = r.BirthDate.ToThaiFullDate().ToString().ToThaiNumber(), DateAppoint = !string.IsNullOrEmpty(r.DateAppoint.ToString()) ? DateTime.Parse((r.DateAppoint.Value.AddYears(25).AddDays(-1)).ToString()).ToThaiFullDate().ToString().ToThaiNumber() : string.Empty, }) .FirstOrDefault(); if (profile == null) throw new Exception(GlobalMessages.DataNotFound); return profile; } //39-แบบ ขร1 บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ ข้าราชการ ชั้นสายสะพาย public async Task GetKhr1Report(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insignia = await _dbContext.Set() //.Include(x => x.Profile) .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null) .Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นสายสะพาย") .Select(x => new { //Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name, Gendor = x.Gender ?? "",// _userProfileRepository.GetOfficerProfileById(x.ProfileId, AccessToken).Gender ?? "", RequestInsigniaName = x.RequestInsignia.Name, OcId = x.Request.OrganizationId }) .ToListAsync(); var insignia = (from r in data_insignia group r by new { OcId = r.OcId } into g select new { RowNo = 1, DepartmentName = _userProfileRepository.GetOc(g.Key.OcId, 0, AccessToken).Root,// _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false), G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0), G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0), G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0), G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0), G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0), G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0), G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0), G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0), G5Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0), G5Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0), Remark = "", }).ToList(); return insignia; } public async Task GetKhr1TotalReport(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insignia = await _dbContext.Set() //.Include(x => x.Profile) .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null) .Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นสายสะพาย") .Select(x => new { //Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name, Gendor = x.Gender ?? "", //_userProfileRepository.GetOfficerProfileById(x.ProfileId, AccessToken).Gender ?? "", RequestInsigniaName = x.RequestInsignia.Name, OcId = x.Request.OrganizationId }) .ToListAsync(); var insignia = (from r in data_insignia group r by new { OcId = r.OcId } into g select new { RowNo = 1, DepartmentName = _userProfileRepository.GetOc(g.Key.OcId, 0, AccessToken).Root,// _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false), G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0), G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0), G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0), G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0), G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0), G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0), G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0), G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0), G5Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0), G5Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0), Remark = "", }).ToList(); return new { G1Male = insignia.Sum(x => x.G1Male), G1Female = insignia.Sum(x => x.G1Female), G2Male = insignia.Sum(x => x.G2Male), G2Female = insignia.Sum(x => x.G2Female), G3Male = insignia.Sum(x => x.G3Male), G3Female = insignia.Sum(x => x.G3Female), G4Male = insignia.Sum(x => x.G4Male), G4Female = insignia.Sum(x => x.G4Female), G5Male = insignia.Sum(x => x.G5Male), G5Female = insignia.Sum(x => x.G5Female), Remark = "", }; } //40-แบบ ขร2 บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ ข้าราชการ ชั้นต่ำกว่าสายสะพาย public async Task GetKhr2Report(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insignia = await _dbContext.Set() //.Include(x => x.Profile) .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null) .Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นต่ำกว่าสายสะพาย") .Select(x => new { //Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name, Gendor = x.Gender ?? "", //_userProfileRepository.GetOfficerProfileById(x.ProfileId, AccessToken).Gender ?? "", RequestInsigniaName = x.RequestInsignia.Name, OcId = x.Request.OrganizationId }) .ToListAsync(); var insignia = (from r in data_insignia group r by new { OcId = r.OcId } into g select new { RowNo = 1, DepartmentName = _userProfileRepository.GetOc(g.Key.OcId, 0, AccessToken).Root,// _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false), G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0), G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0), G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0), G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0), G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0), G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0), G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0), G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0), G5Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0), G5Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0), G6Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0), G6Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0), G7Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0), G7Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0), G8Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0), G8Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0), G9Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0), G9Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0), Remark = "", }).ToList(); return insignia; } public async Task GetKhr2TotalReport(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insignia = await _dbContext.Set() //.Include(x => x.Profile) .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null) .Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นต่ำกว่าสายสะพาย") .Select(x => new { //Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name, Gendor = x.Gender ?? "", //_userProfileRepository.GetOfficerProfileById(x.ProfileId, AccessToken).Gender ?? "", RequestInsigniaName = x.RequestInsignia.Name, OcId = x.Request.OrganizationId }) .ToListAsync(); var insignia = (from r in data_insignia group r by new { OcId = r.OcId } into g select new { RowNo = 1, DepartmentName = _userProfileRepository.GetOc(g.Key.OcId, 0, AccessToken).Root,// _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false), G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0), G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0), G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0), G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0), G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0), G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0), G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0), G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0), G5Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0), G5Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0), G6Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0), G6Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0), G7Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0), G7Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0), G8Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0), G8Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0), G9Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0), G9Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0), Remark = "", }).ToList(); return new { G1Male = insignia.Sum(x => x.G1Male), G1Female = insignia.Sum(x => x.G1Female), G2Male = insignia.Sum(x => x.G2Male), G2Female = insignia.Sum(x => x.G2Female), G3Male = insignia.Sum(x => x.G3Male), G3Female = insignia.Sum(x => x.G3Female), G4Male = insignia.Sum(x => x.G4Male), G4Female = insignia.Sum(x => x.G4Female), G5Male = insignia.Sum(x => x.G5Male), G5Female = insignia.Sum(x => x.G5Female), G6Male = insignia.Sum(x => x.G6Male), G6Female = insignia.Sum(x => x.G6Female), G7Male = insignia.Sum(x => x.G7Male), G7Female = insignia.Sum(x => x.G7Female), G8Male = insignia.Sum(x => x.G8Male), G8Female = insignia.Sum(x => x.G8Female), G9Male = insignia.Sum(x => x.G9Male), G9Female = insignia.Sum(x => x.G9Female), Remark = "", }; } //41-แบบ ขร3 บัญชีรายชื่อข้าราชการผู้ขอพระราชทานเครื่องราชฯ public async Task GetKhr3Report(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data = (from r in await _dbContext.Set() //.Include(x => x.Profile) //.ThenInclude(x => x.Gender) //.Include(x => x.Profile) //.ThenInclude(x => x.Prefix) .Include(x => x.Request) .ThenInclude(x => x.Period) .Include(x => x.Request) //.ThenInclude(x => x.Organization) .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .ToListAsync() where r.Request.Period == period && r.IsApprove == true && r.Status == "PENDING" && r.RequestInsignia.InsigniaType != null && r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ" select new { InsigniaInitial = r.RequestInsignia.ShortName, InsigniaName = r.RequestInsignia.Name, ProfileId = r.ProfileId, FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", Gender = r.Gender ?? "", Male = r.Gender == null ? 0 : (r.Gender == "ชาย" ? 1 : 0), Female = r.Gender == null ? 0 : (r.Gender == "หญิง" ? 1 : 0), InsigniaId = r.RequestInsignia.Id, OCName = _userProfileRepository.GetOc(r.Request.OrganizationId, 0, AccessToken).Root, // _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false) }) .Distinct() .ToList(); // loop to add temp row with 50 rows per page var insigniaList = data.Select(x => new { InsigniaId = x.InsigniaId, InsigniaInitial = x.InsigniaInitial, InsigniaName = x.InsigniaName }) .Distinct().ToList(); var tmpOC = data.First().OCName; var sumData = (from x in data group x by x.InsigniaName into grp select new { InsigniaName = grp.Key, SumMale = grp.Sum(x => x.Male), SumFemale = grp.Sum(x => x.Female) }).ToList(); var ret = new List(); foreach (var item in data) { var p = new { InsigniaInitial = item.InsigniaInitial, InsigniaName = item.InsigniaName, ProfileId = item.ProfileId, FullName = item.FullName, Gender = item.Gender, Male = item.Male, Female = item.Female, InsigniaId = item.InsigniaId, OCName = item.OCName, SumMale = sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName)!.SumMale, SumFemale = sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName)!.SumFemale, }; ret.Add(p); } foreach (var ins in insigniaList) { var count = data.Where(x => x.InsigniaId == ins.InsigniaId).Count(); var mod_val = count <= 50 ? 50 - count : count % 50.0; for (int i = 0; i < mod_val; i++) { var p = new { InsigniaInitial = ins.InsigniaInitial, InsigniaName = ins.InsigniaName, ProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"), FullName = "", Gender = "", Male = 0, Female = 0, InsigniaId = ins.InsigniaId, // OCName = "" OCName = tmpOC, SumMale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumMale, SumFemale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumFemale, }; ret.Add(p); } } return ret; } public async Task GetKhr3ReportV2(Guid id) { //var period = await _dbContext.Set() // .FirstOrDefaultAsync(x => x.Id == id); //if (period == null) // throw new Exception(GlobalMessages.InsigniaPeriodNotFound); //var data = (from r in await _dbContext.Set() // .Include(x => x.Profile) // .ThenInclude(x => x.Gender) // .Include(x => x.Profile) // .ThenInclude(x => x.Prefix) // .Include(x => x.Request) // .ThenInclude(x => x.Period) // .Include(x => x.Request) // .ThenInclude(x => x.Organization) // .Include(x => x.RequestInsignia) // .ThenInclude(x => x.InsigniaType) // .ToListAsync() // where r.Request.Period == period // && r.IsApprove == true // && r.Status == "PENDING" // && r.RequestInsignia.InsigniaType != null // && r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ" // select new // { // InsigniaInitial = r.RequestInsignia.ShortName, // InsigniaName = r.RequestInsignia.Name, // ProfileId = r.Profile.Id, // FullName = $"{r.Profile.Prefix?.Name}{r.Profile.FirstName} {r.Profile.LastName}", // Gender = r.Profile.Gender == null ? null : r.Profile.Gender.Name, // Male = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "ชาย" ? 1 : 0), // Female = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "หญิง" ? 1 : 0), // InsigniaId = r.RequestInsignia.Id, // OCName = _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false) // }) // .Distinct() // .ToList(); //// loop to add temp row with 50 rows per page //var insigniaList = data.Select(x => new { InsigniaId = x.InsigniaId, InsigniaInitial = x.InsigniaInitial, InsigniaName = x.InsigniaName }) // .Distinct().ToList(); //// var tmpOC = data.First().OCName; //// var sumData = (from x in data //// group x by x.InsigniaName into grp //// select new //// { //// InsigniaName = grp.Key, //// SumMale = grp.Sum(x => x.Male), //// SumFemale = grp.Sum(x => x.Female) //// }).ToList(); //// var ret = new List(); //// foreach (var item in data) //// { //// var p = new //// { //// InsigniaInitial = item.InsigniaInitial, //// InsigniaName = item.InsigniaName, //// ProfileId = item.ProfileId, //// FullName = item.FullName, //// Gender = item.Gender, //// Male = item.Male, //// Female = item.Female, //// InsigniaId = item.InsigniaId, //// OCName = item.OCName, //// SumMale = sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName)!.SumMale, //// SumFemale = sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == item.InsigniaName)!.SumFemale, //// }; //// ret.Add(p); //// } //foreach (var ins in insigniaList) //{ // var count = data.Where(x => x.InsigniaId == ins.InsigniaId).Count(); // var mod_val = count <= 50 ? 50 - count : count % 50.0; // for (int i = 0; i < mod_val; i++) // { // var p = new // { // InsigniaInitial = ins.InsigniaInitial, // InsigniaName = ins.InsigniaName, // ProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"), // FullName = "", // Gender = "", // Male = 0, // Female = 0, // InsigniaId = ins.InsigniaId, // OCName = "" // // OCName = tmpOC, // // SumMale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumMale, // // SumFemale = sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName) == null ? 0 : sumData.FirstOrDefault(x => x.InsigniaName == ins.InsigniaName)!.SumFemale, // }; // data.Add(p); // } //} //var sumData = (from x in data // group x by x.InsigniaName into grp // select new // { // InsigniaName = grp.Key, // SumMale = grp.Sum(x => x.Male), // SumFemale = grp.Sum(x => x.Female), // Data = grp.ToList(), // }).ToList(); //return sumData; return new { }; } //42-แบบ ขร4 บัญชีแสดงคุณสมบัติของข้าราชการซึ่งเสนอขอเครื่องราชฯ public async Task GetKhr4Report(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var teacher_data = (from r in await _dbContext.Set() //.Include(x => x.Profile) //.ThenInclude(x => x.Salaries) //.Include(x => x.Profile) //.ThenInclude(x => x.Gender) //.Include(x => x.Profile) //.ThenInclude(x => x.Prefix) //.Include(x => x.Profile) //.ThenInclude(x => x.PositionType) //.Include(x => x.Profile) //.ThenInclude(x => x.PositionLevel) .Include(x => x.Request) .ThenInclude(x => x.Period) .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Include(x => x.Request) //.ThenInclude(x => x.Organization) .ToListAsync() where r.Request.Period == period && r.IsApprove == true && r.Status == "PENDING" && r.RequestInsignia.InsigniaType != null && r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ" select new { InsigniaInitial = r.RequestInsignia.ShortName, InsigniaName = r.RequestInsignia.Name, ProfileId = r.ProfileId, CitizenId = r.CitizenId.ToThaiNumber(), // r.Profile.CitizenId == null ? null : r.Profile.CitizenId.ToThaiNumber(), FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", // $"{r.Profile.Prefix?.Name}{r.Profile.FirstName} {r.Profile.LastName}", ShowProfileId = r.ProfileId, Type = r.PosTypeName, AcademicStanding = "", Level = r.PosLevelName, DateStart = r.DateAppoint.Value.ToThaiShortDate().ToThaiNumber(), SalaryAmount = r.Amount.Value.ToNumericText().ToThaiNumber(), InsigniaRecv = "", InsigniaRecvDate = "", InsigniaRequest = r.RequestInsignia.ShortName, Remark = "", Position = (r.Position ?? "") + (" ประเภท" + r.PosTypeName) + (" ระดับ" + r.PosLevelName) + (" สังกัด" + CRLF + _userProfileRepository.GetOc(r.Request.OrganizationId, 0, AccessToken).Root) , OCName = _userProfileRepository.GetOc(r.Request.OrganizationId, 0, AccessToken).Root, }) .Distinct() .ToList(); // var insignia_data = (from r in await _dbContext.Set() // .Include(x => x.Profile) // .ThenInclude(x => x.Gender) // .Include(x => x.Profile) // .ThenInclude(x => x.Insignias) // .ThenInclude(x => x.Insignia) // .Include(x => x.Request) // .ThenInclude(x => x.Period) // .Include(x => x.Request) // .ThenInclude(x => x.Organization) // .Include(x => x.RequestInsignia) // .ThenInclude(x => x.InsigniaType) // .ToListAsync() // where r.Request.Period == period // && r.IsApprove == true // && r.Status == "PENDING" // && r.RequestInsignia.InsigniaType != null // && r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ" // select new // { // InsigniaInitial = r.RequestInsignia.ShortName, // InsigniaName = r.RequestInsignia.Name, // ProfileId = r.Profile.Id, // CitizenId = r.Profile.CitizenId, // FullName = $"", // ShowProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"), // Type = "", // AcademicStanding = "", // Level = "", // DateStart = "", // SalaryAmount = new double?(0), // InsigniaRecv = r.Profile.Insignias.Count() == 0 ? null : // (r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia == null ? null : r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia.ShortName), // InsigniaRecvDate = r.Profile.Insignias.Count() == 0 ? null : // (r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().DateAnnounce == null ? null : r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().DateAnnounce.Value.ToThaiShortDate()), // InsigniaRequest = "", // Remark = "", // Position = "", // // Position = GetPositionByYear(r.Profile.Id, r.Request.Period.Year) + " ประเภท" + // // GetPositionTypeByYear(r.Profile.Id, r.Request.Period.Year) + " ระดับ" + // // GetPositionLevelByYear(r.Profile.Id, r.Request.Period.Year), // OCName = _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false) // }) // .Distinct() // .ToList(); // var data2 = teacher_data.Union(insignia_data).ToList(); return teacher_data; } //44-บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ public async Task GetSummaryCoinReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); /* var data_insignia = await _dbContext.Set() //.Include(x => x.Profile) .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null) .Where(x => x.RequestInsignia.InsigniaType.Name == "เหรียญบำเหน็จในราชการ") .Select(x => new { //Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name, Gendor = x.Gender, //_userProfileRepository.GetOfficerProfileById(x.ProfileId, AccessToken).Gender ?? "", RequestInsigniaName = x.RequestInsignia.Name, InsigniaInitial = $"{x.RequestInsignia.Name}({x.RequestInsignia.ShortName})", OcId = x.Request.OrganizationId }) .ToListAsync();*/ var data_insigniaQuery = _dbContext.Set() .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null) .Where(x => x.RequestInsignia.InsigniaType.Name == "เหรียญบำเหน็จในราชการ"); if (type == "officer") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "officer"); } else if (type == "employee") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "employee"); } switch (node) { case 0: data_insigniaQuery = data_insigniaQuery.Where(r => r.RootDnaId == nodeId); break; case 1: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child1DnaId == nodeId); break; case 2: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child2DnaId == nodeId); break; case 3: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child3DnaId == nodeId); break; case 4: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child4DnaId == nodeId); break; default: break; } var data = await data_insigniaQuery .Select(x => new { Gendor = x.Gender, // Gender as is, directly from x.Gender RequestInsigniaName = x.RequestInsignia.Name, // Name of the Insignia InsigniaInitial = $"{x.RequestInsignia.Name}({x.RequestInsignia.ShortName})", // Insignia's full name and short name OcId = x.Request.OrganizationId // Organization ID }) .ToListAsync(); var org = _userProfileRepository.GetOc(nodeId, node, AccessToken); var organizationName = $"{(!string.IsNullOrEmpty(org.Child4) ? org.Child4 + "/" : "")}{(!string.IsNullOrEmpty(org.Child3) ? org.Child3 + "/" : "")}{(!string.IsNullOrEmpty(org.Child2) ? org.Child2 + "/" : "")}{(!string.IsNullOrEmpty(org.Child1) ? org.Child1 + "/" : "")}{org.Root ?? ""}"; var insignia = (from r in data group r by new { OcId = r.OcId, InsigniaInitial = r.InsigniaInitial } into g select new { RowNo = 1, DepartmentName = organizationName, //_userProfileRepository.GetOc(g.Key.OcId, 0, AccessToken).Root, //_organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false), InsigniaInitial = g.Key.InsigniaInitial, G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0).ToString().ToThaiNumber(), G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0).ToString().ToThaiNumber(), G2Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0).ToString().ToThaiNumber(), G2Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0).ToString().ToThaiNumber(), Remark = "", }).ToList(); return insignia; } public async Task GetSummaryTotalCoinReport(Guid id) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insignia = await _dbContext.Set() //.Include(x => x.Profile) .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null) .Where(x => x.RequestInsignia.InsigniaType.Name == "เหรียญบำเหน็จในราชการ") .Select(x => new { //Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name, Gendor = x.Gender, // _userProfileRepository.GetOfficerProfileById(x.ProfileId, AccessToken).Gender ?? "", RequestInsigniaName = x.RequestInsignia.Name, OcId = x.Request.OrganizationId }) .ToListAsync(); var insignia = (from r in data_insignia group r by new { OcId = r.OcId } into g select new { RowNo = 1, DepartmentName = _userProfileRepository.GetOc(g.Key.OcId, 0, AccessToken).Root, //_organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false), G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0), G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0), G2Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0), G2Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0), Remark = "", }).ToList(); return new { G1Male = insignia.Sum(x => x.G1Male).ToString().ToThaiNumber(), G1Female = insignia.Sum(x => x.G1Female).ToString().ToThaiNumber(), G2Male = insignia.Sum(x => x.G2Male).ToString().ToThaiNumber(), G2Female = insignia.Sum(x => x.G2Female).ToString().ToThaiNumber(), Remark = "", }; //return new { }; } //45-บัญชีแสดงรายชื่อผู้ขอพระราชทานเหรียญจักรพรรดิมาลา public async Task GetCoinReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var gender = (from r in await _dbContext.Set() //.Include(x => x.Profile) //.ThenInclude(x => x.Gender) //.Include(x => x.Profile) //.ThenInclude(x => x.Prefix) .Include(x => x.Request) .ThenInclude(x => x.Period) .Include(x => x.Request) //.ThenInclude(x => x.Organization) .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .ToListAsync() where r.Request.Period == period && r.IsApprove == true && r.Status == "PENDING" && r.RequestInsignia.InsigniaType != null && r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ" select new { Male = r.Gender == "ชาย" ? 1 : 0, Female = r.Gender == "หญิง" ? 1 : 0, }) .Distinct() .ToList(); var dataQuery = _dbContext.Set() .Include(x => x.Request) .ThenInclude(x => x.Period) .Include(x => x.Request) /*.ThenInclude(x => x.Organization)*/ .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(r => r.Request.Period == period && r.IsApprove == true && r.Status == "PENDING" && r.RequestInsignia.InsigniaType != null && r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ"); if (type == "officer") { dataQuery = dataQuery.Where(r => r.ProfileType == "officer"); } else if (type == "employee") { dataQuery = dataQuery.Where(r => r.ProfileType == "employee"); } switch (node) { case 0: dataQuery = dataQuery.Where(r => r.RootDnaId == nodeId); break; case 1: dataQuery = dataQuery.Where(r => r.Child1DnaId == nodeId); break; case 2: dataQuery = dataQuery.Where(r => r.Child2DnaId == nodeId); break; case 3: dataQuery = dataQuery.Where(r => r.Child3DnaId == nodeId); break; case 4: dataQuery = dataQuery.Where(r => r.Child4DnaId == nodeId); break; default: break; } // Grouping by ProfileId and InsigniaId, and calculating the sum for Male and Female var data = await dataQuery .GroupBy(r => new { r.RequestInsignia.ShortName, r.RequestInsignia.Name, r.ProfileId, r.Prefix, r.FirstName, r.LastName, r.Gender, r.Root, r.RootId, r.Child1, r.Child1Id, r.Child2, r.Child2Id, r.Child3, r.Child3Id, r.Child4, r.Child4Id, r.RequestInsignia.Id, r.Request.OrganizationId }) .Select(group => new { InsigniaInitial = group.Key.ShortName, InsigniaName = group.Key.Name, ProfileId = group.Key.ProfileId, FullName = $"{group.Key.Prefix}{group.Key.FirstName} {group.Key.LastName}", Gender = group.Key.Gender, Root = group.Key.Root ?? "", RootId = group.Key.RootId, Child1 = group.Key.Child1 ?? "", Child1Id = group.Key.Child1Id, Child2 = group.Key.Child2 ?? "", Child2Id = group.Key.Child2Id, Child3 = group.Key.Child3 ?? "", Child3Id = group.Key.Child3Id, Child4 = group.Key.Child4 ?? "", Child4Id = group.Key.Child4Id, Male = group.Count(r => r.Gender == "Male"), // Count male entries Female = group.Count(r => r.Gender == "Female"), // Count female entries InsigniaId = group.Key.Id, OCName = _userProfileRepository.GetOc(group.Key.OrganizationId, 0, AccessToken).Root }) .Distinct() .ToListAsync(); // loop to add temp row with 50 rows per page var insigniaList = data.Select(x => new { InsigniaId = x.InsigniaId, InsigniaInitial = x.InsigniaInitial, InsigniaName = x.InsigniaName }) .Distinct().ToList(); foreach (var ins in insigniaList) { var count = data.Where(x => x.InsigniaId == ins.InsigniaId).Count(); var mod_val = count <= 50 ? 50 - count : 50 - (count % 50.0); for (int i = 0; i < mod_val; i++) { var p = new { InsigniaInitial = ins.InsigniaInitial, InsigniaName = ins.InsigniaName, ProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"), FullName = "", Gender = "", Root = "", RootId = (Guid?)Guid.Parse("00000000-0000-0000-0000-000000000000"), Child1 = "", Child1Id = (Guid?)Guid.Parse("00000000-0000-0000-0000-000000000000"), Child2 = "", Child2Id = (Guid?)Guid.Parse("00000000-0000-0000-0000-000000000000"), Child3 = "", Child3Id = (Guid?)Guid.Parse("00000000-0000-0000-0000-000000000000"), Child4 = "", Child4Id = (Guid?)Guid.Parse("00000000-0000-0000-0000-000000000000"), Male = 0, Female = 0, InsigniaId = ins.InsigniaId, OCName = "" }; data.Add(p); } } return data.OrderBy(x => x.InsigniaName); } //46-ประวัติสำหรับการเสนอขอพระราชทานเหรียญจักรพรรดิมาลา public async Task GetHistorySalaryReport(Guid id) { //var profile = await _dbContext.Set() // .FirstOrDefaultAsync(x => x.Id == id); var profile = _userProfileRepository.GetOfficerProfileById(id, AccessToken); if (profile == null) throw new Exception(GlobalMessages.DataNotFound); //var positions = await _dbContext.Set() // .ToListAsync(); //var organizations = await _dbContext.Set() // .Include(x => x.Parent) // .ThenInclude(x => x.OrganizationOrganization) // .ToListAsync(); var s_data = profile.ProfileSalary.ToList() .Select(r => new { Date = r.Date, DateTh = r.Date == null ? "-" : r.Date.Value.ToThaiShortDate().ToString().ToThaiNumber(), Position = r.Position, OCName = "", Age = r.Date == null ? "-" : (r.Date.Value.Year - profile.BirthDate.Year).ToNumericText().ToThaiNumber(), Amount = r.Amount == null ? null : r.Amount.Value.ToNumericText().ToThaiNumber(), Remark = "" }) .Distinct() .OrderBy(x => x.Date) .ToList(); return s_data; } public async Task GeInsigniaRequestProfiles(Guid id) { var profile = await _dbContext.Set() .Where(x => x.Id == id) .Select(x => new { Fullname = $"{x.Prefix}{x.FirstName} {x.LastName}", Position = x.Position ?? "", Oc = (x.Child4 == null ? "" : x.Child4 + " ") + (x.Child3 == null ? "" : x.Child3 + " ") + (x.Child2 == null ? "" : x.Child2 + " ") + (x.Child1 == null ? "" : x.Child1 + " ") + (x.Root == null ? "" : x.Root), BirthDate = x.BirthDate == null ? "" : x.BirthDate.Value.ToThaiShortDate().ToString().ToThaiNumber(), DateAppoint = x.DateAppoint == null ? "" : x.DateAppoint.Value.ToThaiShortDate().ToString().ToThaiNumber(), ProfileId = x.ProfileId }) .FirstOrDefaultAsync(); if (profile == null) throw new Exception(GlobalMessages.DataNotFound); var profileSalarys = await _userProfileRepository.GetProfileSalaryById(profile.ProfileId, AccessToken); var salarys = profileSalarys.Select(x => new { DateAffect = x.DateAffect == null ? "" : x.DateAffect.ToThaiShortDate().ToString().ToThaiNumber(), Position = x.Position ?? "", Root = x.Root, Child1 = x.Child1, Child2 = x.Child2, Child3 = x.Child3, Child4 = x.Child4, Oc = (x.Child4 == null ? "" : x.Child4 + " ") + (x.Child3 == null ? "" : x.Child3 + " ") + (x.Child2 == null ? "" : x.Child2 + " ") + (x.Child1 == null ? "" : x.Child1 + " ") + (x.Root == null ? "" : x.Root), Age = x.Age == null ? "" : x.Age.ToString().ToThaiNumber(), Amount = x.Amount == null ? "" : x.Amount.ToString("N0", new CultureInfo("th-TH")).ToThaiNumber(), Remark = x.Remark == null ? "" : x.Remark.ToThaiNumber(), }).ToList(); var result = new { profile.Fullname, profile.Position, profile.Oc, profile.BirthDate, profile.DateAppoint, Salarys = salarys }; return result; } //47-บัญชีระดับผลการประเมินผลการปฏิบัติราชการในรอบ 5 ปี public async Task GetEvaluationResultReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insigniaQuery = _dbContext.Set() .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null); /*.Where(x => x.RequestInsignia.InsigniaType.Name == "เหรียญบำเหน็จในราชการ");*/ if (type == "officer") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "officer"); } else if (type == "employee") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "employee"); } switch (node) { case 0: data_insigniaQuery = data_insigniaQuery.Where(r => r.RootDnaId == nodeId); break; case 1: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child1DnaId == nodeId); break; case 2: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child2DnaId == nodeId); break; case 3: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child3DnaId == nodeId); break; case 4: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child4DnaId == nodeId); break; default: break; } var data = await data_insigniaQuery .Select(x => new { ProfileId = x.ProfileId, FullName = $"{x.Prefix}{x.FirstName} {x.LastName}", RequestInsigniaName = x.RequestInsignia.Name, // Name of the Insignia Reason = x.Reason, }) .ToListAsync(); var seq = 1; var resultList = new List(); foreach (var d in data) { var _baseAPI = _configuration["API"]; var _apiUrl = $"{_baseAPI}/org/unauthorize/calculateEvaluation/{type}"; using (var _client = new HttpClient()) { _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(); if (_res.IsSuccessStatusCode) { var orgResponse = JObject.Parse(_result); var resultItems = orgResponse["result"]; // ค้นหาข้อมูลที่ตรงกันกับ ProfileId var matchedData = resultItems .Where(item => item["profileId"].ToString() == d.ProfileId.ToString()) .FirstOrDefault(); if (matchedData != null) { resultList.Add(new { rowNo = seq++.ToString().ToThaiNumber(), d.ProfileId, d.FullName, d.RequestInsigniaName, yearAPR1 = matchedData["yearAPR1"]?.ToString() ?? "-", periodAPR1 = matchedData["periodAPR1"]?.ToString() ?? "-", resultAPR1 = matchedData["resultAPR1"]?.ToString() ?? "-", yearOCT1 = matchedData["yearOCT1"]?.ToString() ?? "-", periodOCT1 = matchedData["periodOCT1"]?.ToString() ?? "-", resultOCT1 = matchedData["resultOCT1"]?.ToString() ?? "-", yearAPR2 = matchedData["yearAPR2"]?.ToString() ?? "-", periodAPR2 = matchedData["periodAPR2"]?.ToString() ?? "-", resultAPR2 = matchedData["resultAPR2"]?.ToString() ?? "-", yearOCT2 = matchedData["yearOCT2"]?.ToString() ?? "-", periodOCT2 = matchedData["periodOCT2"]?.ToString() ?? "-", resultOCT2 = matchedData["resultOCT2"]?.ToString() ?? "-", yearAPR3 = matchedData["yearAPR3"]?.ToString() ?? "-", periodAPR3 = matchedData["periodAPR3"]?.ToString() ?? "-", resultAPR3 = matchedData["resultAPR3"]?.ToString() ?? "-", yearOCT3 = matchedData["yearOCT3"]?.ToString() ?? "-", periodOCT3 = matchedData["periodOCT3"]?.ToString() ?? "-", resultOCT3 = matchedData["resultOCT3"]?.ToString() ?? "-", yearAPR4 = matchedData["yearAPR4"]?.ToString() ?? "-", periodAPR4 = matchedData["periodAPR4"]?.ToString() ?? "-", resultAPR4 = matchedData["resultAPR4"]?.ToString() ?? "-", yearOCT4 = matchedData["yearOCT4"]?.ToString() ?? "-", periodOCT4 = matchedData["periodOCT4"]?.ToString() ?? "-", resultOCT4 = matchedData["resultOCT4"]?.ToString() ?? "-", yearAPR5 = matchedData["yearAPR5"]?.ToString() ?? "-", periodAPR5 = matchedData["periodAPR5"]?.ToString() ?? "-", resultAPR5 = matchedData["resultAPR5"]?.ToString() ?? "-", yearOCT5 = matchedData["yearOCT5"]?.ToString() ?? "-", periodOCT5 = matchedData["periodOCT5"]?.ToString() ?? "-", resultOCT5 = matchedData["resultOCT5"]?.ToString() ?? "-", remark = d.Reason ?? "-" }); } else { resultList.Add(new { rowNo = seq++.ToString().ToThaiNumber(), d.ProfileId, d.FullName, d.RequestInsigniaName, yearAPR1 = "-", periodAPR1 = "-", resultAPR1 = "-", yearOCT1 = "-", periodOCT1 = "-", resultOCT1 = "-", yearAPR2 = "-", periodAPR2 = "-", resultAPR2 = "-", yearOCT2 = "-", periodOCT2 = "-", resultOCT2 = "-", yearAPR3 = "-", periodAPR3 = "-", resultAPR3 = "-", yearOCT3 = "-", periodOCT3 = "-", resultOCT3 = "-", yearAPR4 = "-", periodAPR4 = "-", resultAPR4 = "-", yearOCT4 = "-", periodOCT4 = "-", resultOCT4 = "-", yearAPR5 = "-", periodAPR5 = "-", resultAPR5 = "-", yearOCT5 = "-", periodOCT5 = "-", resultOCT5 = "-", remark = "-" }); } } } } return resultList; } //47-บัญชีระดับผลการประเมินผลการปฏิบัติราชการในรอบ 5 ปี NEW public async Task GetEvaluationResult5YearReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insigniaQuery = _dbContext.Set() .Where(x => x.Request.Period.Id == period.Id) .Where(x => x.IsApprove == true) .Where(x => x.Status == "PENDING") .Where(x => x.RequestInsignia.InsigniaType != null); if (type == "officer") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "officer"); } else if (type == "employee") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "employee"); } switch (node) { case 0: data_insigniaQuery = data_insigniaQuery.Where(r => r.RootDnaId == nodeId); break; case 1: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child1DnaId == nodeId); break; case 2: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child2DnaId == nodeId); break; case 3: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child3DnaId == nodeId); break; case 4: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child4DnaId == nodeId); break; default: break; } var data = await data_insigniaQuery .Select(x => new { ProfileId = x.ProfileId, FullName = $"{x.Prefix}{x.FirstName} {x.LastName}", RequestInsigniaName = x.RequestInsignia.Name, // Name of the Insignia Reason = x.Reason, Agency = x.Root, ResultAPR1 = x.APR1, ResultOCT1 = x.OCT1, ResultAPR2 = x.APR2, ResultOCT2 = x.OCT2, ResultAPR3 = x.APR3, ResultOCT3 = x.OCT3, ResultAPR4 = x.APR4, ResultOCT4 = x.OCT4, ResultAPR5 = x.APR5, ResultOCT5 = x.OCT5 }) .ToListAsync(); var seq = 1; var resultList = new List(); foreach (var d in data) { resultList.Add(new { rowNo = seq++.ToString().ToThaiNumber(), d.ProfileId, d.FullName, d.RequestInsigniaName, Agency = d.Agency, ResultAPR1 = d.ResultAPR1 ?? "-", ResultOCT1 = d.ResultOCT1 ?? "-", ResultAPR2 = d.ResultAPR2 ?? "-", ResultOCT2 = d.ResultOCT2 ?? "-", ResultAPR3 = d.ResultAPR3 ?? "-", ResultOCT3 = d.ResultOCT3 ?? "-", ResultAPR4 = d.ResultAPR4 ?? "-", ResultOCT4 = d.ResultOCT4 ?? "-", ResultAPR5 = d.ResultAPR5 ?? "-", ResultOCT5 = d.ResultOCT5 ?? "-", Remark = d.Reason ?? "-" }); } return resultList; } //noti ยื่นเสนอคน public async Task NotifyInsignia() { var insigniaPeriods = await _dbContext.Set() .AsQueryable() .ToListAsync(); foreach (var insigniaPeriod in insigniaPeriods) { if (insigniaPeriod.EndDate.AddDays(-insigniaPeriod.Amount).Date == DateTime.Now.Date) { await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbc953-6441-408a-86d0-4df4ce449039"), $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}", $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}", "", "", true ); await _repositoryNoti.PushNotificationAsync( Guid.Parse("08dbca3a-8b6a-4a4e-8b23-1f62e4f30ef6"), $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}", $"แจ้งเตือนรอบการเสนอขอ {insigniaPeriod.Name} รอบที่{insigniaPeriod.Round}", "", "", true ); } } } //ล็อกข้อมูล โอนคนไปบันทึกผล public async Task LockInsignia() { var insigniaPeriods = await _dbContext.Set() .AsQueryable() .Include(x => x.InsigniaRequests) .Include(x => x.ReliefDoc) .ToListAsync(); foreach (var insigniaPeriod in insigniaPeriods) { if (insigniaPeriod.EndDate.Date.AddDays(5) > DateTime.Now.Date) continue; insigniaPeriod.IsLock = true; var insigniaNote = await _dbContext.Set() .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 = $"รอบการเสนอขอพระราชทานเครื่องราชฯ ปี {insigniaPeriod.Year + 543}", Year = insigniaPeriod.Year, // StartDate = insigniaPeriod.StartDate, // EndDate = insigniaPeriod.EndDate, // Amount = insigniaPeriod.Amount, // ReliefDoc = insigniaPeriod.ReliefDoc, CreatedFullName = "System Administrator", CreatedUserId = "", CreatedAt = DateTime.Now, LastUpdateFullName = "System Administrator", LastUpdateUserId = "", LastUpdatedAt = DateTime.Now, }; await _dbContext.Set().AddAsync(insigniaNote); await _dbContext.SaveChangesAsync(); insigniaNote = await _dbContext.Set() .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 _dbContext.Set() .Where(p => p.Period == insigniaPeriod) .Where(p => p.RequestStatus == "st5") .ToListAsync(); foreach (var requestOld in requestOlds) { var profileOlds = await _dbContext.Set() //.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.ProfileId == profileOld.ProfileId) .FirstOrDefault(); if (noreProfileOld != null) { noreProfileOld.RequestDate = profileOld.RequestDate; noreProfileOld.Salary = profileOld.Salary; noreProfileOld.IsApprove = profileOld.IsApprove; noreProfileOld.RequestInsignia = profileOld.RequestInsignia; noreProfileOld.CreatedFullName = "System Administrator"; noreProfileOld.CreatedUserId = ""; noreProfileOld.CreatedAt = DateTime.Now; noreProfileOld.LastUpdateFullName = "System Administrator"; noreProfileOld.LastUpdateUserId = ""; noreProfileOld.LastUpdatedAt = DateTime.Now; } else { if (profileOld.ProfileId == null) continue; await _dbContext.Set().AddAsync(new InsigniaNoteProfile { RequestDate = profileOld.RequestDate, Salary = profileOld.Salary, IsApprove = profileOld.IsApprove, Status = "PENDING", ProfileId = profileOld.ProfileId, RequestInsignia = profileOld.RequestInsignia, OrganizationOrganizationSend = null, InsigniaNote = insigniaNote, CreatedFullName = "System Administrator", CreatedUserId = "", CreatedAt = DateTime.Now, LastUpdateFullName = "System Administrator", LastUpdateUserId = "", LastUpdatedAt = DateTime.Now, }); } } } await _dbContext.SaveChangesAsync(); } } public void CalculateInsigniaRequestBkkByType(string type = "officer") { CalInsigniaRequestBkkByType(type).GetAwaiter().GetResult(); } //คำนวนผู้ได้รับเครื่องราชฯ public async Task CalInsigniaRequestBkkByType(string type = "officer") { var insigniaPeriods = await _dbContext.Set() .Include(x => x.InsigniaRequests) .AsQueryable() .ToListAsync(); insigniaPeriods = insigniaPeriods .Where(x => x.StartDate <= DateTime.Now.Date && x.InsigniaRequests.Where(x => x.ProfileType!.ToLower().Trim() == type.Trim().ToLower()).Count() == 0).ToList(); foreach (var insigniaPeriod in insigniaPeriods) { var organizations = await _userProfileRepository.GetActiveRootLatestAsync(AccessToken); if (organizations == null) continue; insigniaPeriod.RevisionId = Guid.Parse(organizations[0].OrgRevisionId); foreach (var organization in organizations) { if (organization == null) continue; var result = await _repositoryInsignia.GetInsigniaRequestByTypeAsync(insigniaPeriod.Id, organization.Id, type); if (result != null) { Guid period = result.PeriodId; string requestStatus = result.RequestStatus; var candidate = await _repositoryInsignia.GetInsigniaCandidateBKKByTypeAsync(insigniaPeriod.Id, organization.Id, type); // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new if (requestStatus == null) { // บันทึกรายชื่อ if (candidate != null) await _repositoryInsignia.InsertCandidate(period, organization.Id, organization.OrgRootName, candidate, type); } } } } } public async Task CalInsignaiRequestBkk() { var insigniaPeriods = await _dbContext.Set() .Include(x => x.InsigniaRequests) .AsQueryable() .ToListAsync(); insigniaPeriods = insigniaPeriods .Where(x => x.StartDate < DateTime.Now.Date || x.InsigniaRequests.Count == 0).ToList(); foreach (var insigniaPeriod in insigniaPeriods) { if (insigniaPeriod.StartDate >= DateTime.Now.Date || insigniaPeriod.InsigniaRequests.Count > 0) continue; var organizations = await _userProfileRepository.GetActiveRootLatestAsync(AccessToken); if (organizations == null) continue; insigniaPeriod.RevisionId = Guid.Parse(organizations[0].OrgRevisionId); foreach (var organization in organizations) { if (organization == null) continue; var result = await _repositoryInsignia.GetInsigniaRequest(insigniaPeriod.Id, organization.Id); if (result != null) { Guid period = result.PeriodId; string requestStatus = result.RequestStatus; var candidate = await _repositoryInsignia.GetInsigniaCandidateBKK(insigniaPeriod.Id, organization.Id); // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new if (requestStatus == null) { // บันทึกรายชื่อ await _repositoryInsignia.InsertCandidate(period, organization.Id, organization.OrgRootName, candidate); } } } } } public async Task GetKhr5TotalReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insigniaQuery = _dbContext.Set() .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(x => x.InsigniaNote.Id == period.Id) // .Where(x => x.IsApprove == true) .Where(x => x.Status == "DONE") .Where(x => x.RequestInsignia.InsigniaType != null); if (type == "officer") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToLower() == "officer"); } else if (type == "employee") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToLower() == "employee"); } switch (node) { case 0: data_insigniaQuery = data_insigniaQuery.Where(r => r.RootDnaId == nodeId); break; case 1: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child1DnaId == nodeId); break; case 2: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child2DnaId == nodeId); break; case 3: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child3DnaId == nodeId); break; case 4: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child4DnaId == nodeId); break; default: break; } var data = await data_insigniaQuery.Select(x => new { Gendor = x.Gender ?? "", InsigniaTypeName = x.RequestInsignia.InsigniaType.Name, RequestInsigniaName = x.RequestInsignia.Name, InsigniaInitial = $"{x.RequestInsignia.Name}({x.RequestInsignia.ShortName})", // Insignia's full name and short name OcId = x.Root }).ToListAsync(); var insignia = (from r in data group r by new { OcId = r.OcId, r.InsigniaTypeName, r.RequestInsigniaName } into g select new { RowNo = 1, DepartmentName = g.Key.OcId, InsigniaTypeName = g.Key.InsigniaTypeName, RequestInsigniaName = g.Key.RequestInsigniaName, Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0), Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0), Remark = "", }).ToList(); return insignia; } public async Task GetKhr6TotalReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insigniaQuery = _dbContext.Set() .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(x => x.InsigniaNote.Id == period.Id) // .Where(x => x.IsApprove == true) .Where(x => x.Status == "DONE") .Where(x => x.RequestInsignia.InsigniaType != null); if (type == "officer") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToLower() == "officer"); } else if (type == "employee") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToLower() == "employee"); } switch (node) { case 0: data_insigniaQuery = data_insigniaQuery.Where(r => r.RootDnaId == nodeId); break; case 1: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child1DnaId == nodeId); break; case 2: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child2DnaId == nodeId); break; case 3: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child3DnaId == nodeId); break; case 4: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child4DnaId == nodeId); break; default: break; } var data = await data_insigniaQuery.Select(x => new { Gendor = x.Gender ?? "", InsigniaTypeName = x.RequestInsignia.InsigniaType.Name, RequestInsigniaName = x.RequestInsignia.Name, IsApprove = x.IsApprove, InsigniaInitial = $"{x.RequestInsignia.Name}({x.RequestInsignia.ShortName})", // Insignia's full name and short name DatePayment = x.DatePayment, OcId = x.Root }).ToListAsync(); var insignia = (from r in data group r by new { OcId = r.OcId, r.InsigniaTypeName, r.RequestInsigniaName } into g select new { RowNo = 1, DepartmentName = g.Key.OcId, InsigniaTypeName = g.Key.InsigniaTypeName, RequestInsigniaName = g.Key.RequestInsigniaName, /* Pending = g.Sum(x => x.IsApprove == false ? 1 : 0), Done = g.Sum(x => x.IsApprove == true ? 1 : 0),*/ Pending = g.Sum(x => x.DatePayment == null ? 1 : 0), Done = g.Sum(x => x.DatePayment != null ? 1 : 0), Remark = "", }).ToList(); return insignia; } public async Task GetKhr4TotalReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); var data_insigniaQuery = _dbContext.Set() .Include(x => x.RequestInsignia) .ThenInclude(x => x.InsigniaType) .Where(x => x.InsigniaNote.Id == period.Id) .Where(x => x.Status == "DONE") .Where(x => x.RequestInsignia.InsigniaType != null); if (type == "officer") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToLower() == "officer"); } else if (type == "employee") { data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToLower() == "employee"); } switch (node) { case 0: data_insigniaQuery = data_insigniaQuery.Where(r => r.RootDnaId == nodeId); break; case 1: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child1DnaId == nodeId); break; case 2: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child2DnaId == nodeId); break; case 3: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child3DnaId == nodeId); break; case 4: data_insigniaQuery = data_insigniaQuery.Where(r => r.Child4DnaId == nodeId); break; default: break; } var data = await data_insigniaQuery.Select(x => new { CitizenId = x.CitizenId, Prefix = x.Prefix, FullName = $"{x.FirstName} {x.LastName}", PosTypeName = x.PosTypeName, PosLevelName = x.PosLevelName, Position = x.Position, Root = x.Root, OrganizationOrganizationReceive = x.OrganizationOrganizationReceive, OrganizationOrganizationSend = x.OrganizationOrganizationSend, IsApprove = x.IsApprove == true ? "ได้รับ" : "ไม่ได้รับ", RequestInsignia = x.RequestInsignia.Name, Number = x.Number, DatePayment = x.DatePayment, }).ToListAsync(); return data; } #endregion } }