hrms-api-backend/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs
2023-07-19 10:25:54 +07:00

5268 lines
376 KiB
C#

// using BMA.EHR.Application.Common.Interfaces;
// using BMA.EHR.Application.Requests;
// using BMA.EHR.Domain.Models.HR;
// using BMA.EHR.Domain.Models.Insignias;
// using BMA.EHR.Domain.Models.MetaData;
// using BMA.EHR.Domain.Models.OrganizationEmployee;
// using BMA.EHR.Domain.Shared;
// using Microsoft.AspNetCore.Http;
// using Microsoft.EntityFrameworkCore;
// using Newtonsoft.Json;
// namespace BMA.EHR.Application.Repositories
// {
// public class InsigniaPeriodsRepository : GenericRepository<Guid, InsigniaPeriod>
// {
// private readonly IApplicationDBContext _dbContext;
// private readonly IHttpContextAccessor _httpContextAccessor;
// public InsigniaPeriodsRepository(IApplicationDBContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
// {
// _dbContext = dbContext;
// _httpContextAccessor = httpContextAccessor;
// }
// public async Task<IEnumerable<InsigniaPeriod>> FindByNameAsync(string name)
// {
// var data = await _dbContext.Set<InsigniaPeriod>().Where(x => x.Name == name).ToListAsync();
// return data;
// }
// #region " Private "
// private async Task<InsigniaItem?> GetInsigniaByName(string name)
// {
// try
// {
// var insignia = await _dbContext.Set<Insignia>()
// .Include(x => x.InsigniaType)
// .Where(x => x.Name == name)
// .Select(i => new InsigniaItem
// {
// Id = i.Id,
// Name = i.Name,
// ShortName = i.ShortName,
// Level = i.InsigniaType.Name,
// LevelId = i.InsigniaType.Id
// })
// .FirstOrDefaultAsync();
// return insignia;
// }
// catch
// {
// throw;
// }
// }
// // private bool IsHigherLevel2(string last, string request)
// // {
// // try
// // {
// // var last_ins = await _dbContext.Set<Insignias>().FirstOrDefault(x => x.Name.ToLower().Trim() == last.ToLower().Trim());
// // if (last_ins == null)
// // return true;
// // var req_ins = await _dbContext.Set<Insignias>().FirstOrDefault(x => x.Name.ToLower().Trim() == request.ToLower().Trim());
// // if (req_ins == null)
// // throw new Exception("Invalid Request Insignia!!");
// // return req_ins.Level > last_ins.Level;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// private static bool IsHigherLevel(string last, string request)
// {
// if (request.Contains("ตริตาภรณ์ช้างเผือก"))
// return (last.Contains("ตริตาภรณ์มงกุฎไทย")) ? false : true;
// else if (request.Contains("ทวีติยาภรณ์มงกุฎไทย"))
// return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
// last.Contains("ตริตาภรณ์ช้างเผือก")) ? false : true;
// else if (request.Contains("ทวีติยาภรณ์ช้างเผือก"))
// return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
// last.Contains("ตริตาภรณ์ช้างเผือก") ||
// last.Contains("ทวีติยาภรณ์มงกุฎไทย")) ? false : true;
// else if (request.Contains("ประถมาภรณ์มงกุฎไทย"))
// return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
// last.Contains("ตริตาภรณ์ช้างเผือก") ||
// last.Contains("ทวีติยาภรณ์มงกุฎไทย") ||
// last.Contains("ทวีติยาภรณ์ช้างเผือก")) ? false : true;
// else if (request.Contains("ประถมาภรณ์ช้างเผือก"))
// return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
// last.Contains("ตริตาภรณ์ช้างเผือก") ||
// last.Contains("ทวีติยาภรณ์มงกุฎไทย") ||
// last.Contains("ทวีติยาภรณ์ช้างเผือก") ||
// last.Contains("ประถมาภรณ์มงกุฎไทย")) ? false : true;
// else if (request.Contains("มหาวชิรมงกุฎ"))
// return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
// last.Contains("ตริตาภรณ์ช้างเผือก") ||
// last.Contains("ทวีติยาภรณ์มงกุฎไทย") ||
// last.Contains("ทวีติยาภรณ์ช้างเผือก") ||
// last.Contains("ประถมาภรณ์มงกุฎไทย") ||
// last.Contains("ประถมาภรณ์ช้างเผือก")) ? false : true;
// else return false;
// }
// // private InsigniaItem GetNextInsignia(string name)
// // {
// // if (name.Contains("ตริตาภรณ์มงกุฎไทย"))
// // return GetInsigniaByName("ตริตาภรณ์ช้างเผือก");
// // else if (name.Contains("ตริตาภรณ์ช้างเผือก"))
// // return GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย");
// // else if (name.Contains("ทวีติยาภรณ์มงกุฎไทย"))
// // return GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก");
// // else if (name.Contains("ทวีติยาภรณ์ช้างเผือก"))
// // return GetInsigniaByName("ประถมาภรณ์มงกุฎไทย");
// // else if (name.Contains("ประถมาภรณ์มงกุฎไทย"))
// // return GetInsigniaByName("ประถมาภรณ์ช้างเผือก");
// // else if (name.Contains("ประถมาภรณ์ช้างเผือก"))
// // return GetInsigniaByName("มหาวชิรมงกุฎ");
// // else return null;
// // }
// // private async bool CanRequestInsignia(string profileId, int year)
// // {
// // try
// // {
// // var ce_year = year;
// // var insignia = await _dbContext.Set<ProfileInsignias>()
// // .Where(x => x.Profile.Id == profileId)
// // .Where(x => x.Year == ce_year - 1)
// // .FirstOrDefaultAsync();
// // if (insignia != null)
// // return false;
// // else
// // {
// // var prev_period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(x => x.Year == ce_year - 1);
// // if (prev_period == null)
// // return true;
// // else
// // {
// // var req = await _dbContext.Set<InsigniaRequestsProfiles>()
// // .FirstOrDefault(x => x.Request.Period.Id == prev_period.Id && x.Profile.Id == profileId);
// // if (req != null)
// // return false;
// // else
// // return true;
// // }
// // }
// // }
// // catch
// // {
// // throw;
// // }
// // }
// #region " ทั่วไป "
// /// <summary>
// /// Gets the insignia candidate ประเภททั่วไป ระดับปฎิบัติงาน.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type1_Level1(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var inst_profile = await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // .Where(p =>
// // allOc.Contains(p.OrganizationChart.OCId) &&
// // p.IsActive == true &&
// // p.IsLeave == false &&
// // p.DateAppoint != null &&
// // p.PositionType.Id == 1 // ประเภททั่วไป
// // )
// // .Select(p => new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// // ProfileDateAppoint = p.DateAppoint.Value,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // PosNo = p.PositionNumber.Id,
// // PositionLevelId = p.PositionLevel.Id,
// // PositionLevelName = p.PositionLevel.Name,
// // PositionTypeId = p.PositionType.Id,
// // PositionTypeName = p.PositionType.Name,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Count == 0 ? -1 : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // PostionSalaryAmount = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // });
// // // check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5
// // var s1 = ((from p in inst_profile
// // //where p.CanRequestInsignia == true
// // where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29)
// // && p.LastInsigniaId == -1
// // && p.PositionLevelId == 1 // ปฎิบัติงาน
// // select p)
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("เบญจมาภรณ์มงกุฎไทย"),
// // Seq = 1,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }",
// // Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
// // }
// // }
// // })).ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && p.PositionLevel.Id == 1 // ปฎิบัติงาน
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("เบญจมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "เบญจมาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.SalaryCondition < 10190 && !x.IsHigherLevel)
// // .Where(x => x.ProfileDateAppoint <= new DateTime(period.Year - 10, 5, 29))
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("เบญจมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้รับเงินเดือนต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือนน้อยกว่า 10,190 บาท)",
// // Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
// // },
// // new MatchingCondition
// // {
// // Condition = $"2.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 10 ปี บริบูรณ์ (รับราชการก่อน { new DateTime(period.Year - 10, 5, 29).ToThaiFullDate3() })",
// // Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
// // }
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && p.PositionLevel.Id == 1 // ปฎิบัติงาน
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "จัตุรถาภรณ์มงกุฎไทย"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.SalaryCondition >= 10190 && !x.IsHigherLevel)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("จัตุรถาภรณ์มงกุฎไทย"),
// // Seq = 3,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 10,190 บาทขึ้นไป)",
// // Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
// // }
// // }
// // })
// // .ToList();
// // var s4 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && p.PositionLevel.Id == 1 // ปฎิบัติงาน
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "จัตุรถาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.SalaryCondition >= 10190 && !x.IsHigherLevel)
// // .Where(x => x.ProfileDateAppoint <= new DateTime(period.Year - 10, 5, 29))
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("จัตุรถาภรณ์ช้างเผือก"),
// // Seq = 4,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 10,190 บาทขึ้นไป)",
// // Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
// // },
// // new MatchingCondition
// // {
// // Condition = $"2.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 10 ปี บริบูรณ์ (รับราชการก่อน { new DateTime(period.Year - 10, 5, 29).ToThaiFullDate3() })",
// // Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
// // }
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s4)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภททั่วไป ระดับชำนาญงาน.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// /// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type1_Level2(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && p.PositionLevel.Id == 2 // ชำนาญงาน
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ตริตาภรณ์มงกุฎไทย"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.เป็นระดับชำนาญงาน",
// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // .ThenInclude(p => p.SalaryPositionLevel)
// // .ThenInclude(p => p.PositionLevel)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && p.PositionLevel.Id == 2 // ชำนาญงาน
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ตริตาภรณ์ช้างเผือก"),
// // FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
// // p.Salaries.Where(x => x.SalaryPositionLevel.PositionLevel.Id == 2).OrderBy(p => p.SalaryDateAnnounce).FirstOrDefault().SalaryDateAnnounce
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29))
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ตริตาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (เป็นระดับชำนาญงาน ก่อนวันที่ {(new DateTime(period.Year - 5, 5, 29)).ToThaiFullDate3()})",
// // Result = $"ดำรงตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel } ตั้งแต่วันที่ { (p.FirstPositonLevelDate == null ? "-" : p.FirstPositonLevelDate.Value.ToThaiFullDate3()) }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภททั่วไป ระดับอาวุโส.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// /// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type1_Level3(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && p.PositionLevel.Id == 3 // อาวุโส
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์มงกุฎไทย"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.เป็นระดับอาวุโส",
// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // .ThenInclude(p => p.SalaryPositionLevel)
// // .ThenInclude(p => p.PositionLevel)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && p.PositionLevel.Id == 3 // อาวุโส
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์ช้างเผือก"),
// // FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
// // p.Salaries.Where(x => x.SalaryPositionLevel.PositionLevel.Id == 3).OrderBy(p => p.SalaryDateAnnounce).FirstOrDefault().SalaryDateAnnounce
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29))
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (เป็นระดับอาวุโส ก่อนวันที่ {(new DateTime(period.Year - 5, 5, 29)).ToThaiFullDate3()})",
// // Result = $"ดำรงตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel } ตั้งแต่วันที่ { (p.FirstPositonLevelDate == null ? "-" : p.FirstPositonLevelDate.Value.ToThaiFullDate3()) }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภททั่วไป ระดับทักษะพิเศษ.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// /// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type1_Level4(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && (p.PositionLevel.Id == 3 || p.PositionLevel.Id == 13) // อาวุโส
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.เป็นระดับทักษะพิเศษ",
// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // .ThenInclude(p => p.SalaryPositionLevel)
// // .ThenInclude(p => p.PositionLevel)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && (p.PositionLevel.Id == 3 || p.PositionLevel.Id == 13) // อาวุโส
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์มงกุฎไทย"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
// // FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
// // p.Salaries.Where(x => x.SalaryPositionLevel.PositionLevel.Id == 3).OrderBy(p => p.SalaryDateAnnounce).FirstOrDefault().SalaryDateAnnounce
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้รับ ท.ช. ก่อนวันที่ {(new DateTime(period.Year - 3, 7, 28)).ToThaiFullDate3()})",
// // Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // .ThenInclude(p => p.SalaryPositionLevel)
// // .ThenInclude(p => p.PositionLevel)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 1 // ทั่วไป
// // && (p.PositionLevel.Id == 3 || p.PositionLevel.Id == 13) // อาวุโส
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
// // FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
// // p.Salaries.Where(x => x.SalaryPositionLevel.PositionLevel.Id == 3).OrderBy(p => p.SalaryDateAnnounce).FirstOrDefault().SalaryDateAnnounce
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ ป.ม. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})",
// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// #endregion
// #region " วิชาการ "
// /// <summary>
// /// Gets the insignia candidate ประเภทวิชาการ ระดับปฎิบัติการ.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type2_Level5(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var inst_profile = await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // .Where(p =>
// // allOc.Contains(p.OrganizationChart.OCId) &&
// // p.IsActive == true &&
// // p.IsLeave == false &&
// // p.DateAppoint != null &&
// // p.PositionType.Id == 2 // ประเภทวิชาการ
// // )
// // .Select(p => new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// // ProfileDateAppoint = p.DateAppoint.Value,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // PosNo = p.PositionNumber.Id,
// // PositionLevelId = p.PositionLevel.Id,
// // PositionLevelName = p.PositionLevel.Name,
// // PositionTypeId = p.PositionType.Id,
// // PositionTypeName = p.PositionType.Name,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Count == 0 ? -1 : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // PostionSalaryAmount = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // });
// // // check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5
// // var s1 = ((from p in inst_profile
// // //where p.CanRequestInsignia == true
// // where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29)
// // && p.LastInsigniaId == -1
// // && p.PositionLevelId == 5 // ปฎิบัติการ
// // select p)
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
// // Seq = 1,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }",
// // Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
// // }
// // }
// // })).ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการ.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type2_Level6(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 6 // ชำนาญการ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ตริตาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ตริตาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.เป็นระดับชำนาญการ",
// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 6 // ชำนาญการ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์มงกุฎไทย"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.SalaryCondition >= 22140)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญการพิเศษ (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 22,140 บาท)",
// // Result = $"เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition.ToNumericText() } บาท"
// // },
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 6 // ชำนาญการ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate < new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.SalaryCondition >= 22140)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญการพิเศษมาแล้วไม่น้อยกว่า 5 ปี (เงินเดือนก่อนวันที่ { (new DateTime(period.Year-5, 4, 29)).ToThaiFullDate3() } 22,140 บาท)",
// // Result = $"เงินเดือนก่อนวันที่ { (new DateTime(period.Year-5, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition.ToNumericText() } บาท"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการพิเศษ.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type2_Level7(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 7 // ชำนาญการพิเศษ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.เป็นระดับชำนาญการพิเศษ",
// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 7 // ชำนาญการพิเศษ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์มงกุฎไทย"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.SalaryCondition >= 58390)
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้รับเงินเดือนขั้นสูง (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 58,390 บาท)",
// // Result = $"เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition.ToNumericText() } บาท"
// // },
// // new MatchingCondition
// // {
// // Condition = $"2.ได้ ท.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภทวิชาการ ระดับเชี่ยวชาญ.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type2_Level8(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 8 // เชี่ยวชสญ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.เป็นระดับเชี่ยวชาญ",
// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 8 // เชี่ยวชาญ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์มงกุฎไทย"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 8 // เชี่ยวชาญ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 13000.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type2_Level9_1(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && (p.PositionLevel.Id == 9 || p.PositionLevel.Id == 12) // ทรงคุณวุฒิ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
// // .Where(x => x.SalaryPosition == 13000)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && (p.PositionLevel.Id == 9 || p.PositionLevel.Id == 12) // ทรงคุณวุฒิ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาวชิรมงกุฎ"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Where(p => p.SalaryPosition == 13000)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && (p.PositionLevel.Id == 9 || p.PositionLevel.Id == 12) // ทรงคุณวุฒิ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาปรมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาปรมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
// // .Where(p => p.SalaryPosition == 13000)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ม.ว.ม. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// /// <summary>
// /// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 15600.
// /// </summary>
// /// <param name="periodId">The period identifier.</param>
// /// <param name="ocId">The oc identifier.</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type2_Level9_2(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && (p.PositionLevel.Id == 9 || p.PositionLevel.Id == 12) // ทรงคุณวุฒิ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
// // .Where(x => x.SalaryPosition == 15600)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && (p.PositionLevel.Id == 9 || p.PositionLevel.Id == 12) // ทรงคุณวุฒิ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาวชิรมงกุฎ"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Where(p => p.SalaryPosition == 15600)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && (p.PositionLevel.Id == 9 || p.PositionLevel.Id == 12) // ทรงคุณวุฒิ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาปรมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาปรมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Where(p => p.SalaryPosition == 15600)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ม.ว.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
// // Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// #endregion
// #region " อำนวยการ "
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type3_Level10(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 3 // ทั่วไป
// // && p.PositionLevel.Id == 10 // ระดับต้น
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ทวีติยาภรณ์ช้างเผือก"),
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.เป็นระดับอำนวยการ/ต้น",
// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 2 // วิชาการ
// // && p.PositionLevel.Id == 7 // ชำนาญการพิเศษ
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์มงกุฎไทย"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.SalaryCondition >= 58390)
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้รับเงินเดือนขั้นสูง (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 58,390 บาท)",
// // Result = $"เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition.ToNumericText() } บาท"
// // },
// // new MatchingCondition
// // {
// // Condition = $"2.ได้ ท.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type3_Level11(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 3 // ทั่วไป
// // && p.PositionLevel.Id == 11 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์มงกุฎไทย"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 3 // ทั่วไป
// // && p.PositionLevel.Id == 11 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 3 // ทั่วไป
// // && p.PositionLevel.Id == 11 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาวชิรมงกุฎ"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // // Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
// // if (!CanRequestInsignia(r.ProfileId, period.Year))
// // continue;
// // // Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
// // if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// // continue;
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// #endregion
// #region " บริหาร "
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type4_Level10(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 4 // ทั่วไป
// // && p.PositionLevel.Id == 10 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์มงกุฎไทย"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 4 // ทั่วไป
// // && p.PositionLevel.Id == 10 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 4 // ทั่วไป
// // && p.PositionLevel.Id == 10 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาวชิรมงกุฎ"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // public async List<InsigniaResultSet> GetInsigniaCandidate_Type4_Level11(int periodId, int ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// // var s1 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 4 // ทั่วไป
// // && p.PositionLevel.Id == 11 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "ประถมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Where(x => x.SalaryPosition == 14500)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var s2 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 4 // ทั่วไป
// // && p.PositionLevel.Id == 11 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาวชิรมงกุฎ"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
// // .Where(x => x.SalaryPosition == 14500)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var s3 = (from p in await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.PositionType)
// // .Include(p => p.PositionLevel)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // where p.OrganizationChart != null
// // && allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsActive == true
// // && p.IsLeave == false
// // && p.DateAppoint != null
// // && p.PositionType.Id == 4 // ทั่วไป
// // && p.PositionLevel.Id == 11 // ระดับสูง
// // && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name.Contains("มหาปรมาภรณ์ช้างเผือก")
// // //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// // //&& CanRequestInsignia(p.Id, period.Year.ToString())
// // select new
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // PositionLevel = p.PositionLevel.Name,
// // PositionType = p.PositionType.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // ProfileDateAppoint = p.DateAppoint.Value,
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// // PosNo = p.PositionNumber.Id,
// // Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// // IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias
// // .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
// // .OrderByDescending(x => x.Year)
// // .FirstOrDefault().Insignia.Name,
// // "มหาปรมาภรณ์ช้างเผือก"),
// // FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// // p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault().Year,
// // SalaryPosition = p.Salaries.Count == 0 ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
// // p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount.ToInteger()
// // //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// // //RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย")
// // })
// // .ToList()
// // .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
// // .Where(x => x.SalaryPosition == 14500)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.ProfileId,
// // Prefix = p.Prefix,
// // FullName = p.FullName,
// // Position = p.Position,
// // PosNo = p.PosNo,
// // Rank = p.Rank,
// // GovAge = p.GovAge,
// // LastInsignia = p.LastInsignia,
// // LastInsigniaId = p.LastInsigniaId,
// // Salary = p.Salary,
// // RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
// // Seq = 2,
// // Gender = p.Gender,
// // MatchingConditions = new List<MatchingCondition>
// // {
// // new MatchingCondition
// // {
// // Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ม.ว.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
// // Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
// // },
// // new MatchingCondition
// // {
// // Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
// // Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition.ToNumericText() } บาท"
// // }
// // }
// // })
// // .ToList();
// // var result_candidate = new List<InsigniaResultSet>();
// // foreach (var r in s3)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s2)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // foreach (var r in s1)
// // {
// // var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// // if (old == null)
// // {
// // result_candidate.Add(r);
// // }
// // }
// // return result_candidate;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// #endregion
// #endregion
// #region " Public "
// /// <summary>
// /// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเครื่องราช
// /// </summary>
// /// <param name="periodId">รหัสของรอบการขอ</param>
// /// <param name="ocId">รหัสโรงเรียน</param>
// /// <returns></returns>
// public async Task<List<InsigniaResultSet>> GetInsigniaCandidate(Guid periodId, Guid ocId)
// {
// try
// {
// var allOc = profileService.GetAllIdByRoot(ocId);
// var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
// if (period == null)
// throw new Exception(GlobalMessages.DataNotFound);
// var oc = await _dbContext.Set<OrganizationOrganization>().FirstOrDefaultAsync(x => x.Id == ocId);
// if (oc == null)
// throw new Exception(GlobalMessages.DataNotFound);
// var CurrentRetireDate = new DateTime(period.Year, 9, 30);
// var inst_profile = await _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// .Where(p =>
// // allOc.Contains(p.OrganizationOrganization.Id) &&
// p.IsActive == true &&
// p.IsLeave == false &&
// p.DateAppoint != null
// )
// .Select(p => new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// ProfileDateAppoint = p.DateAppoint.Value,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Count == 0 ? -1 : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// //CanRequestInsignia = CanRequestInsignia(p.Id, period.Year.ToString())
// });
// // check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5
// var s1 = ((from p in inst_profile
// //where p.CanRequestInsignia == true
// where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29)
// && p.LastInsigniaId == -1
// select p)
// .ToList()
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = await GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
// Seq = 1,
// Gender = p.Gender
// })).ToList();
// var s2 = (from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.OrganizationOrganization != null
// // && allOc.Contains(p.OrganizationOrganization.Id)
// && p.IsActive == true
// && p.IsLeave == false
// && p.DateAppoint != null
// // && p.AcademicStanding.Name == "ชำนาญการ"
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์ช้างเผือก")
// //&& !IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก")
// //&& CanRequestInsignia(p.Id, period.Year.ToString())
// select new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// IsHigherLevel = InsigniaService.IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก"),
// })
// .ToList()
// .Where(x => x.SalaryCondition < 22140 && !x.IsHigherLevel)
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = GetInsigniaByName("ตริตาภรณ์ช้างเผือก"),
// Seq = 2,
// Gender = p.Gender
// })
// .ToList();
// // คศ2 ขอ ทม
// var s3 = (from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.IsActive == true
// // && allOc.Contains(p.OrganizationChart.OCId)
// && p.IsLeave == false
// && p.DateAppoint != null
// // && p.AcademicStanding.Name == "ชำนาญการ"
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์มงกุฎไทย")
// select new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2"
// })
// .ToList()
// .Where(x => x.SalaryCondition >= 22140)
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
// Seq = 3,
// Gender = p.Gender
// })
// .ToList();
// // คศ2 ขอ ทช
// var s4 = (from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.IsActive == true
// // && allOc.Contains(p.OrganizationOrganization.OCId)
// && p.IsLeave == false
// && p.DateAppoint != null
// && p.AcademicStanding.Name == "ชำนาญการ"
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// select new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate < new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// SalaryCondition2 = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.SalaryDate < new DateTime(period.Year - 5, 4, 29)).Select(x => new { order = x.Order, AsId = x.SalaryAcademicStanding.Id, salary = x.Amount.Replace(".00", "").Replace(",", "").ToInteger() })
// })
// .ToList()
// .Where(x => x.SalaryCondition2 != null && (x.SalaryCondition2.Where(x => x.AsId == 1).Count() > 0 && x.SalaryCondition2.Where(x => x.AsId == 1).OrderByDescending(x => x.order).FirstOrDefault().salary >= 22140))
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// Seq = 4,
// Gender = p.Gender
// })
// .ToList();
// // คศ3 ขอ ทช
// var s5 = ((from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.IsActive == true
// // && allOc.Contains(p.OrganizationOrganization.OCId)
// && p.IsLeave == false
// && p.DateAppoint != null
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
// select p)
// .ToList()
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// PosNo = p.PositionNumber.Id,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
// Seq = 4,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2"
// }))
// .ToList();
// // คศ3 ขอ ปม
// var s6 = (from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.IsActive == true
// // && allOc.Contains(p.OrganizationOrganization.OCId)
// && p.IsLeave == false
// && p.DateAppoint != null
// // && p.AcademicStanding.Name == "ชำนาญการพิเศษ"
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// select new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault().Year : 9999 : 9999,
// RetireDate = p.BirthDate.CalculateRetireDate()
// })
// .ToList()
// .Where(x => x.RetireDate == CurrentRetireDate && x.SalaryCondition >= 58390 && x.InsigniaConditionYear <= period.Year - 5)
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// Seq = 5,
// Gender = p.Gender
// })
// .ToList();
// // คศ4 ขอ ปม
// var s7 = (from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.IsActive == true
// // && allOc.Contains(p.OrganizationOrganization.OCId)
// && p.IsLeave == false
// && p.DateAppoint != null
// // && p.AcademicStanding.Name == "เชี่ยวชาญ"
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
// select new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault().Year : 9999 : 9999
// })
// .ToList()
// .Where(x => x.InsigniaConditionYear <= period.Year - 3)
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
// Seq = 5,
// Gender = p.Gender
// })
// .ToList();
// // คศ4 ขอ ปชa
// var s8 = (from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.IsActive == true
// // && allOc.Contains(p.OrganizationOrganization.OCId)
// && p.IsLeave == false
// && p.DateAppoint != null
// // && p.AcademicStanding.Name == "เชี่ยวชาญ"
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
// select new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")).FirstOrDefault().Year : 9999 : 9999
// })
// .ToList()
// .Where(x => x.InsigniaConditionYear <= period.Year - 3)
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
// Seq = 6,
// Gender = p.Gender
// })
// .ToList();
// // คศ4 ขอ มวม
// var s9 = (from p in _dbContext.Set<Profile>()
// .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// .Include(p => p.Insignias)
// .ThenInclude(i => i.Insignia)
// .Include(p => p.Salaries)
// where p.IsActive == true
// // && allOc.Contains(p.OrganizationOrganization.OCId)
// && p.IsLeave == false
// && p.DateAppoint != null
// // && p.AcademicStanding.Name == "เชี่ยวชาญ"
// && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
// select new
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.AcademicStanding.Name,
// GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
// Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.SalaryDate <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount.Replace(".00", "").Replace(",", "").ToInteger(),
// PosNo = p.PositionNumber.Id,
// Gender = p.Gendor.IsNull("") == "male" ? "1" : "2",
// InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")).FirstOrDefault().Year : 9999 : 9999
// })
// .ToList()
// .Where(x => x.InsigniaConditionYear <= period.Year - 5)
// .Select(p => new InsigniaResultSet
// {
// ProfileId = p.ProfileId,
// Prefix = p.Prefix,
// FullName = p.FullName,
// Position = p.Position,
// PosNo = p.PosNo,
// Rank = p.Rank,
// GovAge = p.GovAge,
// LastInsignia = p.LastInsignia,
// LastInsigniaId = p.LastInsigniaId,
// Salary = p.Salary,
// RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
// Seq = 7,
// Gender = p.Gender
// })
// .ToList();
// // คัดรายชื่อซ้ำออก
// var s2_criteria = s4.Select(p => p.ProfileId).Union(s3.Select(p => p.ProfileId));
// var s3_criteria = s4.Select(p => p.ProfileId).Union(s6.Select(p => p.ProfileId));
// var s5_criteria = s4.Select(p => p.ProfileId);
// var s7_criteria = s9.Select(p => p.ProfileId).Union(s8.Select(p => p.ProfileId));
// var s8_criteria = s9.Select(p => p.ProfileId);
// var s2_1 = s2.Where(x => s2_criteria.Contains(x.ProfileId)).ToList();
// var s3_1 = s3.Where(x => s3_criteria.Contains(x.ProfileId)).ToList();
// var s5_1 = s5.Where(x => s5_criteria.Contains(x.ProfileId)).ToList();
// var s7_1 = s7.Where(x => s7_criteria.Contains(x.ProfileId)).ToList();
// var s8_1 = s8.Where(x => s8_criteria.Contains(x.ProfileId)).ToList();
// var ret = new List<InsigniaResultSet>();
// if (s1.Count > 0)
// ret.AddRange(s1);
// if (s2_1.Count > 0)
// ret.AddRange(s2_1);
// if (s3_1.Count > 0)
// ret.AddRange(s3_1);
// if (s4.Count > 0)
// ret.AddRange(s4);
// if (s5_1.Count > 0)
// ret.AddRange(s5_1);
// if (s6.Count > 0)
// ret.AddRange(s6);
// if (s7_1.Count > 0)
// ret.AddRange(s7_1);
// if (s8_1.Count > 0)
// ret.AddRange(s8_1);
// if (s9.Count > 0)
// ret.AddRange(s9);
// return ret.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList();
// }
// catch
// {
// throw;
// }
// }
// public async Task<List<InsigniaResultSet>> GetInsigniaCandidateBKK(Guid periodId, Guid ocId)
// {
// try
// {
// var result_candidate = new List<InsigniaResultSet>();
// var type1_level1 = GetInsigniaCandidate_Type1_Level1(periodId, ocId);
// var type1_level2 = GetInsigniaCandidate_Type1_Level2(periodId, ocId);
// var type1_level3 = GetInsigniaCandidate_Type1_Level3(periodId, ocId);
// var type1_level4 = GetInsigniaCandidate_Type1_Level4(periodId, ocId);
// var type2_level5 = GetInsigniaCandidate_Type2_Level5(periodId, ocId);
// var type2_level6 = GetInsigniaCandidate_Type2_Level6(periodId, ocId);
// var type2_level7 = GetInsigniaCandidate_Type2_Level7(periodId, ocId);
// var type2_level8 = GetInsigniaCandidate_Type2_Level8(periodId, ocId);
// var type2_level9_1 = GetInsigniaCandidate_Type2_Level9_1(periodId, ocId);
// var type2_level9_2 = GetInsigniaCandidate_Type2_Level9_2(periodId, ocId);
// var type3_level10 = GetInsigniaCandidate_Type3_Level10(periodId, ocId);
// var type3_level11 = GetInsigniaCandidate_Type3_Level11(periodId, ocId);
// var type4_level10 = GetInsigniaCandidate_Type4_Level10(periodId, ocId);
// var type4_level11 = GetInsigniaCandidate_Type4_Level11(periodId, ocId);
// // union result
// result_candidate.AddRange(type1_level1);
// result_candidate.AddRange(type1_level2);
// result_candidate.AddRange(type1_level3);
// result_candidate.AddRange(type1_level4);
// result_candidate.AddRange(type2_level5);
// result_candidate.AddRange(type2_level6);
// result_candidate.AddRange(type2_level7);
// result_candidate.AddRange(type2_level8);
// result_candidate.AddRange(type2_level9_1);
// result_candidate.AddRange(type2_level9_2);
// result_candidate.AddRange(type3_level10);
// result_candidate.AddRange(type3_level11);
// result_candidate.AddRange(type4_level10);
// result_candidate.AddRange(type4_level11);
// return result_candidate.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList();
// }
// catch
// {
// throw;
// }
// }
// // <summary>
// /// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา
// /// </summary>
// /// <param name="periodId">รหัสของรอบการขอ</param>
// /// <param name="ocId">รหัสโรงเรียน</param>
// /// <returns></returns>
// // public async List<InsigniaResultSet> GetCoinCandidate(Guid periodId, Guid ocId)
// // {
// // try
// // {
// // var allOc = profileService.GetAllIdByRoot(ocId);
// // var period = await _dbContext.Set<InsigniaPeriods>().FirstOrDefault(p => p.Id == periodId);
// // if (period == null)
// // throw new Exception(GlobalMessages.InvalidCoinPeriod);
// // var oc = await _dbContext.Set<OrganizationCharts>().FirstOrDefault(x => x.OCId == ocId);
// // if (oc == null)
// // throw new Exception(GlobalMessages.InvalidOC);
// // var result = await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(p => p.Position)
// // .Include(p => p.PositionNumber)
// // .Include(p => p.AcademicStanding)
// // .Include(p => p.Insignias)
// // .ThenInclude(i => i.Insignia)
// // .Include(p => p.Salaries)
// // .Where(p => allOc.Contains(p.OrganizationChart.OCId)
// // && p.IsLeave == false
// // && p.IsActive == true
// // && p.DateAppoint != null
// // && p.DateAppoint.Value.CalculateGovAgeInYear(0, 0).ToInteger() >= 25)
// // .Select(p => new InsigniaResultSet
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// // GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
// // LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // PosNo = p.PositionNumber.Id,
// // RequestInsignia = GetInsigniaByName("เหรียญจักรพรรดิมาลา")
// // });
// // result = result.Where(x => !x.LastInsignia.Contains("เหรียญจักรพรรดิมาลา"));
// // return result.ToList();
// // }
// // catch
// // {
// // throw;
// // }
// // }
// #endregion
// #region " From Ming "
// // คำนวณระยะเวลาของรอบการยืนขอ
// // public async string CalStatusByDate(DateTime start, DateTime end, string year)
// // {
// // var nowDate = DateTime.Now;
// // if (nowDate.Year < Int32.Parse(year) || nowDate.Year > Int32.Parse(year)) return "ไม่ใช้งาน";
// // if (nowDate.Date >= start.Date && nowDate.Date <= end.Date) return "ใช้งาน";
// // return "ไม่ใช้งาน";
// // }
// public async Task<Guid?> GetRequestId(Guid period, Guid ocId)
// {
// try
// {
// var req = await _dbContext.Set<InsigniaRequest>()
// .Where(x => x.OrganizationOrganization != null)
// .FirstOrDefaultAsync(x => x.Period.Id == period && x.OrganizationOrganization.Id == ocId);
// if (req == null)
// return null;
// return req.Id;
// }
// catch
// {
// throw;
// }
// }
// // Save Aprove
// public async Task SaveAprove(Guid period, Guid ocId, InsigniaApproveRequest prm)
// {
// try
// {
// var req = await GetRequestId(period, ocId);
// if (req != null)
// {
// foreach (var item in prm.Items)
// {
// var approve = await _dbContext.Set<InsigniaRequestProfile>()
// .FirstOrDefaultAsync(x => x.Profile.Id == item.ProfileId && x.Request.Id == req);
// approve.IsApprove = item.IsApprove;
// }
// }
// // await _dbContext.Set < SaveChanges();
// }
// catch
// {
// throw;
// }
// }
// // เช็คข้อมูล ใน table insignia_request_new
// public async Task<InsigniaResults?> GetInsigniaRequest(string type, Guid ocId)
// {
// try
// {
// var period = await _dbContext.Set<InsigniaPeriod>()
// .Select(p => new
// {
// Id = p.Id,
// Name = p.Name,
// Type = p.Type,
// Year = p.Year,
// //Status = CalStatusByDate(p.StartDate.Date, p.EndDate.Date, p.Year.ToString())
// })
// .FirstOrDefaultAsync(x => x.Type == type && x.Year == DateTime.Now.Year + 1);
// if (period == null)
// return null;
// else
// {
// var request = await _dbContext.Set<InsigniaRequest>()
// .Include(x => x.OrganizationOrganization)
// .Where(x => x.OrganizationOrganization != null)
// .FirstOrDefaultAsync(x => x.Period.Id == period.Id && x.OrganizationOrganization.Id == ocId);
// return new InsigniaResults
// {
// PeriodId = period.Id,
// Year = period.Year.ToString(),
// Name = period.Name,
// RequestStatus = request != null ? request.RequestStatus : null,
// OrganizationName = request == null ? "" : request.OrganizationOrganization.Name
// };
// }
// }
// catch
// {
// throw;
// }
// }
// // public async InsigniaItem GetInsigniaLast(Guid? id)
// // {
// // try
// // {
// // var insignia = await _dbContext.Set<Insignias>().AsQueryable()
// // .Include(x => x.InsigniaType)
// // .Where(x => id != null ? x.Id == id : x.Name.Contains("ตริตาภรณ์มงกุฎไทย"))
// // .Select(i => new InsigniaItem
// // {
// // Id = i.Id,
// // Name = i.Name,
// // ShortName = i.ShortName,
// // Level = i.InsigniaType.Description,
// // LevelId = i.InsigniaType.Id
// // }).FirstOrDefault();
// // return insignia;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // ดึงข้อมูลเอกสารแนบ
// // TODO: return empty for POC Only.
// // public async List<InsigniaRequestDoc> GetDocFile(string profile)
// // {
// // // return empty for POC Only.
// // return new List<InsigniaRequestDoc>();
// // }
// // Get Profile
// // public async List<InsigniaProfileResult> GetProfileByInstitute(Guid ocId)
// // {
// // try
// // {
// // var profiles = (await _dbContext.Set<Profiles>().AsQueryable()
// // .Include(x => x.Salaries)
// // .Include(x => x.AcademicStanding)
// // .Include(x => x.Position)
// // .Include(x => x.PositionNumber)
// // .Include(x => x.OrganizationChart)
// // .Where(x => x.OrganizationChart.OCId == ocId)
// // .Select(p => new InsigniaProfileResult
// // {
// // ProfileId = p.Id,
// // Prefix = p.Prefix,
// // FullName = $"{p.Prefix}{p.FirstName} {p.LastName}",
// // Position = p.Position.Name,
// // Rank = p.AcademicStanding.Name,
// // Salary = p.Salaries.Count() == 0 ? "0" : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// // PosNo = p.PositionNumber.Id,
// // Organization = p.OrganizationChart.OrganizationName
// // })).ToList();
// // return profiles;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // Get Data Table insignai_has_profile
// public async Task<List<InsigniaRequestItem>> InsigniaHasProfile(Guid period, Guid ocId)
// {
// try
// {
// var id = await GetRequestId(period, ocId);
// if (id != null)
// {
// var result = (_dbContext.Set<InsigniaRequestProfile>()
// .Include(x => x.Request)
// .Include(x => x.RequestInsignia)
// .ThenInclude(x => x.InsigniaType)
// .Include(x => x.Profile)
// .ThenInclude(x => x.Salaries)
// .Include(x => x.Profile)
// .ThenInclude(x => x.Position)
// .Include(x => x.Profile)
// // .ThenInclude(x => x.PositionNumber)
// .Include(x => x.Profile)
// .ThenInclude(x => x.PositionLevel)
// .Include(x => x.Profile)
// .ThenInclude(x => x.PositionType)
// .Include(x => x.Profile)
// .ThenInclude(x => x.OrganizationOrganization)
// .Include(x => x.Profile)
// // .ThenInclude(x => x.AcademicStanding)
// .Include(x => x.Profile)
// .ThenInclude(x => x.Insignias)
// .ThenInclude(x => x.Insignia)
// .Where(h => h.Request.Id == id)
// .ToList()
// .Select(h => new InsigniaRequestItem
// {
// ProfileId = h.Profile.Id,
// FullName = $"{h.Profile.FirstName} {h.Profile.LastName}",
// // Position = h.Profile.Position.Name,
// // PosNo = h.Profile.PositionNumber.Id,
// // Rank = $"{h.Profile.PositionType.Name}/{h.Profile.PositionLevel.Name}",
// Salary = h.Salary.ToString(),
// // LastInsignia = h.Profile.Insignias.Count == 0 ? "" : h.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
// RequestInsignia = h.RequestInsignia.Name,
// RequestInsigniaShortName = h.RequestInsignia.ShortName,
// Level = h.RequestInsignia.InsigniaType.Name,
// IsApprove = h.IsApprove,
// RequestDate = h.RequestDate,
// RequestNote = "",
// // Docs = GetDocFile(h.Profile.Id),
// MatchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(h.MatchingConditions)
// })).ToList();
// return result;
// }
// else
// {
// return null;
// }
// }
// catch
// {
// throw;
// }
// }
// // เช็คข้อมูลนำเข้า กับข้อมูลที่อยู่ใน database
// // public async List<InsigniaRequestProfile> GetDuplicate(List<InsigniaRequestProfile> income, Guid period, Guid ocId, bool Duplicate = false)
// // {
// // try
// // {
// // var id = GetRequestId(period, ocId);
// // var req = await _dbContext.Set<InsigniaRequests>().FirstOrDefault(x => x.Id == id);
// // if (req == null)
// // throw new Exception(GlobalMessages.InvalidInsigniaRequest);
// // var profile = await _dbContext.Set<InsigniaRequestsProfiles>().AsQueryable()
// // .Include(x => x.RequestInsignia)
// // .ThenInclude(x => x.InsigniaType)
// // .Include(x => x.Profile)
// // .ThenInclude(x => x.Insignias)
// // .Where(x => x.Request.Id == id)
// // .Select(h => new DuplicateProfile
// // {
// // ProfileId = h.Profile.Id,
// // IsApprove = h.IsApprove,
// // RequestQualificationStatus = h.QualificationStatus,
// // RequestDocumentStatus = h.DocumentStatus,
// // Special = h.Special
// // });
// // var newIncome = income.GroupJoin(profile,
// // pdb => pdb.Profile.Id,
// // dp => dp.ProfileId,
// // (pdb, dp) => new
// // {
// // Profile = pdb.Profile,
// // pdb.Profile.Insignias,
// // pdb.RequestInsignia,
// // //pdb.RequestInsignia.InsigniaType,
// // pdb.Salary,
// // pdb.RequestDate,
// // ProfileDB = dp
// // })
// // .ToList()
// // .Where(d => !Duplicate ? d.ProfileDB.Count() == 0 : d.ProfileDB.Count() != 0)
// // .Select(d => !Duplicate ? new InsigniaRequestProfile
// // {
// // Request = req,
// // Profile = d.Profile,
// // RequestInsignia = d.RequestInsignia,
// // Salary = d.Salary,
// // RequestDate = d.RequestDate,
// // } : new InsigniaRequestProfile
// // {
// // Request = req,
// // Profile = d.Profile,
// // RequestInsignia = d.RequestInsignia,
// // Salary = d.Salary,
// // RequestDate = d.RequestDate,
// // IsApprove = d.ProfileDB.First().IsApprove,
// // QualificationStatus = d.ProfileDB.First().RequestQualificationStatus,
// // DocumentStatus = d.ProfileDB.First().RequestDocumentStatus,
// // Special = d.ProfileDB.First().Special
// // })
// // .ToList();
// // return newIncome;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // ลบข้อมูลใน db ที่ไม่เท่ากับ income
// // public async List<InsigniaRequestProfile> DeleteProfile(List<InsigniaRequestProfile> income, Guid period, Guid ocId)
// // {
// // try
// // {
// // var id = GetRequestId(period, ocId);
// // var incomProfileId = income.Select(i => i.Profile.Id).ToList();
// // var arrayData = await _dbContext.Set<InsigniaRequestsProfiles>().AsQueryable()
// // .Where(i => !(incomProfileId.Contains(i.Profile.Id)) && i.Request.Id == id)
// // .ToList();
// // return arrayData;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // insert candidate list
// public async Task InsertCandidate(Guid periodId, Guid ocId, List<InsigniaResultSet> items)
// {
// try
// {
// var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(x => x.Id == periodId);
// if (period == null)
// throw new Exception(GlobalMessages.InvalidInsigniaPeriod);
// var oc = await _dbContext.Set<OrganizationOrganization>().FirstOrDefaultAsync(x => x.Id == ocId);
// if (oc == null)
// throw new Exception(GlobalMessages.DataNotFound);
// var req = new InsigniaRequest
// {
// Period = period,
// OrganizationOrganization = oc,
// RequestStatus = "st1"
// };
// foreach (var item in items)
// {
// var pf = await _dbContext.Set<Profile>().FirstOrDefaultAsync(p => p.Id == item.ProfileId);
// var req_insignia = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(i => i.Id == item.RequestInsignia.Id);
// if (pf != null)
// {
// req.RequestProfiles.Add(new InsigniaRequestProfile
// {
// Profile = pf,
// RequestInsignia = req_insignia,
// Salary = item.Salary == null ? 0 : Decimal.Parse(item.Salary),
// RequestDate = DateTime.Now,
// MatchingConditions = System.Text.Json.JsonSerializer.Serialize(item.MatchingConditions) // serialize to string
// });
// }
// }
// await _dbContext.Set<InsigniaRequest>().AddAsync(req);
// await _dbContext.SaveChangesAsync();
// }
// catch
// {
// throw;
// }
// }
// // เช็คข้อมูลใน kp7insignia
// // public async ProfileInsignia ListKp7Insignia(string name, string profile, int year)
// // {
// // try
// // {
// // var item = await _dbContext.Set<ProfileInsignias>().AsQueryable()
// // .Include(x => x.Insignia)
// // .Include(x => x.Profile)
// // .FirstOrDefault(x => x.Profile.Id == profile &&
// // x.Year == year &&
// // x.Insignia.Name.Contains(name));
// // return item;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // บันทึกข้อมูลลง กพ.7
// // public async ProfileInsignia InsertKp7Insignia(InsigniaKp7Item kp7, InsigniaProfile profile)
// // {
// // try
// // {
// // var pf = await _dbContext.Set<Profiles>().FirstOrDefault(x => x.Id == profile.FkProfileId);
// // var insignia = await _dbContext.Set<Insignias>().FirstOrDefault(x => x.Name == profile.InsigniaName);
// // var kp7Insignia = new ProfileInsignia
// // {
// // Profile = pf,
// // Year = DateTime.Now.Year,
// // DateReceive = kp7.InsigniaDatereceive.Value,
// // Insignia = insignia,
// // Level = kp7.InsigniaLevel,
// // No = profile.InsigniaNo,
// // Issue = kp7.InsigniaIssue,
// // VolumeNo = kp7.InsigniaVolumeno.Value.ToString(),
// // Volume = kp7.InsigniaVolume,
// // Section = kp7.InsigniaSection,
// // DateStamp = DateTime.Now,
// // DateAnnounce = kp7.InsigniaDateannounce.Value,
// // Page = profile.InsigniaPage,
// // };
// // return kp7Insignia;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// // update กพ.7
// // public async ProfileInsignia UpdateKp7Insignia(Guid id)
// // {
// // try
// // {
// // var item = await _dbContext.Set<ProfileInsignias>().FirstOrDefaultAsync(x => x.Id == id);
// // return item;
// // }
// // catch
// // {
// // throw;
// // }
// // }
// #endregion
// }
// }