From cb33987976fb2eb956c409ad343261414ec08a10 Mon Sep 17 00:00:00 2001 From: Kittapath Date: Thu, 20 Jul 2023 20:18:09 +0700 Subject: [PATCH] =?UTF-8?q?api=20=E0=B9=80=E0=B8=84=E0=B8=A3=E0=B8=B7?= =?UTF-8?q?=E0=B9=88=E0=B8=AD=E0=B8=87=E0=B8=A3=E0=B8=B2=E0=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApplicationServicesRegistration.cs | 2 +- .../Repositories/InsigniaPeriodsRepository.cs | 10443 ++++++++-------- .../Requests/InsigniaResults.cs | 2 +- BMA.EHR.Domain/Models/HR/Profile.cs | 34 +- BMA.EHR.Domain/Models/HR/ProfileInsignia.cs | 5 +- BMA.EHR.Domain/Models/HR/ProfileSalary.cs | 5 +- .../Models/Insignias/InsigniaRequest.cs | 3 +- .../Models/Placement/PlacementProfile.cs | 4 +- BMA.EHR.Domain/Shared/GlobalMessages.cs | 4 + .../Controllers/InsigniaRequestController.cs | 46 +- .../Controllers/PlacementController.cs | 63 +- 11 files changed, 5290 insertions(+), 5321 deletions(-) diff --git a/BMA.EHR.Application/ApplicationServicesRegistration.cs b/BMA.EHR.Application/ApplicationServicesRegistration.cs index d278780c..a1664be0 100644 --- a/BMA.EHR.Application/ApplicationServicesRegistration.cs +++ b/BMA.EHR.Application/ApplicationServicesRegistration.cs @@ -14,7 +14,7 @@ namespace BMA.EHR.Application services.AddTransient(); services.AddTransient(); services.AddTransient(); - // services.AddTransient(); + services.AddTransient(); return services; } diff --git a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs index 40b99dff..20c7111d 100644 --- a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs +++ b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs @@ -1,5268 +1,5175 @@ -// 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 -// { -// private readonly IApplicationDBContext _dbContext; -// private readonly IHttpContextAccessor _httpContextAccessor; -// public InsigniaPeriodsRepository(IApplicationDBContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor) -// { -// _dbContext = dbContext; -// _httpContextAccessor = httpContextAccessor; -// } - -// public async Task> FindByNameAsync(string name) -// { -// var data = await _dbContext.Set().Where(x => x.Name == name).ToListAsync(); - -// return data; -// } - -// #region " Private " - -// private async Task GetInsigniaByName(string name) -// { -// try -// { -// var insignia = await _dbContext.Set() -// .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().FirstOrDefault(x => x.Name.ToLower().Trim() == last.ToLower().Trim()); - -// // if (last_ins == null) -// // return true; - -// // var req_ins = await _dbContext.Set().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() -// // .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().FirstOrDefault(x => x.Year == ce_year - 1); - -// // if (prev_period == null) -// // return true; -// // else -// // { -// // var req = await _dbContext.Set() -// // .FirstOrDefault(x => x.Request.Period.Id == prev_period.Id && x.Profile.Id == profileId); - -// // if (req != null) -// // return false; -// // else -// // return true; -// // } -// // } -// // } -// // catch -// // { -// // throw; -// // } -// // } - -// #region " ทั่วไป " - -// /// -// /// Gets the insignia candidate ประเภททั่วไป ระดับปฎิบัติงาน. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// // public async List GetInsigniaCandidate_Type1_Level1(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // 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().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 -// // { -// // 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().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 -// // { -// // 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().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 -// // { -// // 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(); - -// // 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; -// // } -// // } - -// /// -// /// Gets the insignia candidate ประเภททั่วไป ระดับชำนาญงาน. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// /// -// // public async List GetInsigniaCandidate_Type1_Level2(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.เป็นระดับชำนาญงาน", -// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var s2 = (from p in await _dbContext.Set().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 -// // { -// // 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(); - -// // 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; -// // } -// // } - -// /// -// /// Gets the insignia candidate ประเภททั่วไป ระดับอาวุโส. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// /// -// // public async List GetInsigniaCandidate_Type1_Level3(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.เป็นระดับอาวุโส", -// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var s2 = (from p in await _dbContext.Set().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 -// // { -// // 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(); - -// // 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; -// // } -// // } - -// /// -// /// Gets the insignia candidate ประเภททั่วไป ระดับทักษะพิเศษ. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// /// -// // public async List GetInsigniaCandidate_Type1_Level4(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.เป็นระดับทักษะพิเศษ", -// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var s2 = (from p in await _dbContext.Set().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 -// // { -// // 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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ ป.ม. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})", -// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var result_candidate = new List(); - -// // 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 " วิชาการ " - - -// /// -// /// Gets the insignia candidate ประเภทวิชาการ ระดับปฎิบัติการ. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// // public async List GetInsigniaCandidate_Type2_Level5(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }", -// // Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }" -// // } -// // } -// // })).ToList(); - - - -// // var result_candidate = new List(); - -// // 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; -// // } -// // } - -// /// -// /// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการ. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// // public async List GetInsigniaCandidate_Type2_Level6(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.เป็นระดับชำนาญการ", -// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var s2 = (from p in await _dbContext.Set().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 -// // { -// // 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().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 -// // { -// // 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(); - -// // 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; -// // } -// // } - - -// /// -// /// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการพิเศษ. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// // public async List GetInsigniaCandidate_Type2_Level7(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.เป็นระดับชำนาญการพิเศษ", -// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var s2 = (from p in await _dbContext.Set().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 -// // { -// // 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(); - -// // 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; -// // } -// // } - -// /// -// /// Gets the insignia candidate ประเภทวิชาการ ระดับเชี่ยวชาญ. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// // public async List GetInsigniaCandidate_Type2_Level8(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.เป็นระดับเชี่ยวชาญ", -// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var s2 = (from p in await _dbContext.Set().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 -// // { - -// // 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().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 -// // { - -// // new MatchingCondition -// // { -// // Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })", -// // Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" -// // }, - -// // } -// // }) -// // .ToList(); - - -// // var result_candidate = new List(); - -// // 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; -// // } -// // } - -// /// -// /// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 13000. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// // public async List GetInsigniaCandidate_Type2_Level9_1(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // 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().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 -// // { - -// // 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().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 -// // { - -// // 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(); - -// // 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; -// // } -// // } - -// /// -// /// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 15600. -// /// -// /// The period identifier. -// /// The oc identifier. -// /// -// // public async List GetInsigniaCandidate_Type2_Level9_2(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // 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().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 -// // { - -// // 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().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 -// // { -// // 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(); - -// // 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 GetInsigniaCandidate_Type3_Level10(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.เป็นระดับอำนวยการ/ต้น", -// // Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" -// // }, - -// // } -// // }) -// // .ToList(); - -// // var s2 = (from p in await _dbContext.Set().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 -// // { -// // 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(); - - -// // 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 GetInsigniaCandidate_Type3_Level11(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // 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().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 -// // { -// // 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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", -// // Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" -// // }, - -// // } -// // }) -// // .ToList(); - - - -// // var result_candidate = new List(); - -// // 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 GetInsigniaCandidate_Type4_Level10(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // 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().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 -// // { -// // 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().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 -// // { -// // new MatchingCondition -// // { -// // Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", -// // Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" -// // }, - -// // } -// // }) -// // .ToList(); - - - -// // var result_candidate = new List(); - -// // 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 GetInsigniaCandidate_Type4_Level11(int periodId, int ocId) -// // { -// // try -// // { -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().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().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 -// // { -// // 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().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 -// // { -// // 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().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 -// // { -// // 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(); - -// // 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 " - -// /// -// /// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเครื่องราช -// /// -// /// รหัสของรอบการขอ -// /// รหัสโรงเรียน -// /// -// public async Task> GetInsigniaCandidate(Guid periodId, Guid ocId) -// { -// try -// { -// var allOc = profileService.GetAllIdByRoot(ocId); - -// var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); - -// if (period == null) -// throw new Exception(GlobalMessages.DataNotFound); - -// var oc = await _dbContext.Set().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() -// .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() -// .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() -// .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() -// .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() -// .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() -// .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() -// .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() -// .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() -// .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(); -// 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> GetInsigniaCandidateBKK(Guid periodId, Guid ocId) -// { -// try -// { -// var result_candidate = new List(); - -// 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; -// } -// } - - -// // -// /// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา -// /// -// /// รหัสของรอบการขอ -// /// รหัสโรงเรียน -// /// -// // public async List GetCoinCandidate(Guid periodId, Guid ocId) -// // { -// // try -// // { - -// // var allOc = profileService.GetAllIdByRoot(ocId); - -// // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); - -// // if (period == null) -// // throw new Exception(GlobalMessages.InvalidCoinPeriod); - -// // var oc = await _dbContext.Set().FirstOrDefault(x => x.OCId == ocId); - -// // if (oc == null) -// // throw new Exception(GlobalMessages.InvalidOC); - -// // var result = await _dbContext.Set().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 GetRequestId(Guid period, Guid ocId) -// { -// try -// { -// var req = await _dbContext.Set() -// .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() -// .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 GetInsigniaRequest(string type, Guid ocId) -// { -// try -// { -// var period = await _dbContext.Set() -// .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() -// .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().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 GetDocFile(string profile) -// // { -// // // return empty for POC Only. -// // return new List(); -// // } - -// // Get Profile -// // public async List GetProfileByInstitute(Guid ocId) -// // { -// // try -// // { -// // var profiles = (await _dbContext.Set().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> InsigniaHasProfile(Guid period, Guid ocId) -// { -// try -// { -// var id = await GetRequestId(period, ocId); -// if (id != null) -// { -// var result = (_dbContext.Set() -// .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>(h.MatchingConditions) -// })).ToList(); - -// return result; -// } -// else -// { -// return null; -// } - -// } -// catch -// { -// throw; -// } -// } - -// // เช็คข้อมูลนำเข้า กับข้อมูลที่อยู่ใน database -// // public async List GetDuplicate(List income, Guid period, Guid ocId, bool Duplicate = false) -// // { -// // try -// // { -// // var id = GetRequestId(period, ocId); - -// // var req = await _dbContext.Set().FirstOrDefault(x => x.Id == id); - -// // if (req == null) -// // throw new Exception(GlobalMessages.InvalidInsigniaRequest); - -// // var profile = await _dbContext.Set().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 DeleteProfile(List 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().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 items) -// { -// try -// { -// var period = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == periodId); - -// if (period == null) -// throw new Exception(GlobalMessages.InvalidInsigniaPeriod); - -// var oc = await _dbContext.Set().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().FirstOrDefaultAsync(p => p.Id == item.ProfileId); -// var req_insignia = await _dbContext.Set().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().AddAsync(req); -// await _dbContext.SaveChangesAsync(); -// } -// catch -// { -// throw; -// } -// } - -// // เช็คข้อมูลใน kp7insignia -// // public async ProfileInsignia ListKp7Insignia(string name, string profile, int year) -// // { -// // try -// // { -// // var item = await _dbContext.Set().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().FirstOrDefault(x => x.Id == profile.FkProfileId); -// // var insignia = await _dbContext.Set().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().FirstOrDefaultAsync(x => x.Id == id); - -// // return item; -// // } -// // catch -// // { -// // throw; -// // } -// // } - -// #endregion -// } -// } +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 BMA.EHR.Domain.Extensions; +using Microsoft.AspNetCore.Http; +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; +using BMA.EHR.Domain.Models.Organizations; + +namespace BMA.EHR.Application.Repositories +{ + public class InsigniaPeriodsRepository : GenericRepository + { + private readonly IApplicationDBContext _dbContext; + private readonly IHttpContextAccessor _httpContextAccessor; + public InsigniaPeriodsRepository(IApplicationDBContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor) + { + _dbContext = dbContext; + _httpContextAccessor = httpContextAccessor; + } + + public async Task> FindByNameAsync(string name) + { + var data = await _dbContext.Set().Where(x => x.Name == name).ToListAsync(); + + return data; + } + + #region " Private " + + private List GetAllIdByRoot(Guid? id) + { + try + { + var ret = new List(); + if (id == null) + return ret; + + var oc = _dbContext.Set().FirstOrDefault(x => x.Id == id); + if (oc != null) + ret.Add(oc.Id); + + var child = _dbContext.Set().AsQueryable().Where(x => x.Parent != null && x.Parent.Id == id).ToList(); + if (child.Any()) + { + foreach (var item in child) + { + ret.AddRange(GetAllIdByRoot(item.Id)); + } + } + + return ret; + } + catch + { + throw; + } + } + + private InsigniaItem? GetInsigniaByName(string name) + { + try + { + var insignia = _dbContext.Set() + .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 + }) + .FirstOrDefault(); + + return insignia; + } + catch + { + throw; + } + } + + private bool IsHigherLevel2(string last, string request) + { + try + { + var last_ins = _dbContext.Set().FirstOrDefault(x => x.Name.ToLower().Trim() == last.ToLower().Trim()); + + if (last_ins == null) + return true; + + var req_ins = _dbContext.Set().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 bool CanRequestInsignia(Guid profileId, int year) + { + try + { + var ce_year = year; + + var insignia = _dbContext.Set() + .Where(x => x.Profile.Id == profileId) + .Where(x => x.Year == ce_year - 1) + .FirstOrDefaultAsync(); + + if (insignia != null) + return false; + else + { + var prev_period = _dbContext.Set().FirstOrDefault(x => x.Year == ce_year - 1); + + if (prev_period == null) + return true; + else + { + var req = _dbContext.Set() + .FirstOrDefault(x => x.Request.Period.Id == prev_period.Id && x.Profile.Id == profileId); + + if (req != null) + return false; + else + return true; + } + } + } + catch + { + throw; + } + } + + #region " ทั่วไป " + + /// + /// Gets the insignia candidate ประเภททั่วไป ระดับปฎิบัติงาน. + /// + /// The period identifier. + /// The oc identifier. + /// + public async Task GetInsigniaCandidate_Type1_Level1(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var inst_profile = _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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 != null && + p.PositionType.Name == "ทั่วไป" // + ) + .Select(p => new + { + ProfileId = p.Id, + Prefix = p.Prefix == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.Name, + ProfileDateAppoint = p.DateAppoint.Value, + GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0), + PosNo = p.PosNo.Id, + PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id, + PositionLevelName = p.PositionLevel == null ? null : p.PositionLevel.Name, + PositionTypeId = p.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionType.Id, + PositionTypeName = p.PositionType == null ? null : p.PositionType.Name, + Gender = p.Gender == null ? null : p.Gender.Name, + 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 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 + }); + + // check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5 + var s1 = ((from p in inst_profile + where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29) + && p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000") + && p.PositionLevelName == "ปฏิบัติงาน" // ปฎิบัติงาน + select p) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }", + Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }" + } + } + })).ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.OcId != null + // && allOc.Contains(p.OcId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "เบญจมาภรณ์ช้างเผือก"), + }) + .ToList() + .Where(x => x.SalaryCondition < 10190 && !x.IsHigherLevel) + .Where(x => x.ProfileDateAppoint <= new DateTime(period.Year - 10, 5, 29)) + .Select(p => new + { + 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 + { + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.OcId != null + // && allOc.Contains(p.OcId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป1 + && p.PositionLevel.Name == "ปฎิบัติงาน" // ปฎิบัติงาน1 + && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์มงกุฎไทย") + select new + { + ProfileId = p.Id, + Prefix = p.Prefix == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "จัตุรถาภรณ์มงกุฎไทย"), + }) + .ToList() + .Where(x => x.SalaryCondition >= 10190 && !x.IsHigherLevel) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 10,190 บาทขึ้นไป)", + Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท" + } + } + }) + .ToList(); + + var s4 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.OcId != null + // && allOc.Contains(p.OcId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป1 + && p.PositionLevel.Name == "ปฎิบัติงาน" // ปฎิบัติงาน1 + && !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์ช้างเผือก") + select new + { + ProfileId = p.Id, + Prefix = p.Prefix == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "จัตุรถาภรณ์ช้างเผือก"), + }) + .ToList() + .Where(x => x.SalaryCondition >= 10190 && !x.IsHigherLevel) + .Where(x => x.ProfileDateAppoint <= new DateTime(period.Year - 10, 5, 29)) + .Select(p => new + { + 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 + { + 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(); + + 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; + } + } + + /// + /// Gets the insignia candidate ประเภททั่วไป ระดับชำนาญงาน. + /// + /// The period identifier. + /// The oc identifier. + /// + /// + public async Task GetInsigniaCandidate_Type1_Level2(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ตริตาภรณ์มงกุฎไทย"), + }) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.เป็นระดับชำนาญงาน", + Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + // .Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29)) + .Select(p => new + { + 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 + { + 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(); + + 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; + } + } + + /// + /// Gets the insignia candidate ประเภททั่วไป ระดับอาวุโส. + /// + /// The period identifier. + /// The oc identifier. + /// + /// + public async Task GetInsigniaCandidate_Type1_Level3(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ทวีติยาภรณ์มงกุฎไทย"), + }) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.เป็นระดับอาวุโส", + Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + // .Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29)) + .Select(p => new + { + 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 + { + 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(); + + 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; + } + } + + /// + /// Gets the insignia candidate ประเภททั่วไป ระดับทักษะพิเศษ. + /// + /// The period identifier. + /// The oc identifier. + /// + /// + public async Task GetInsigniaCandidate_Type1_Level4(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && (p.PositionLevel.Name == "อาวุโส" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ทวีติยาภรณ์ช้างเผือก"), + }) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.เป็นระดับทักษะพิเศษ", + Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && (p.PositionLevel.Name == "อาวุโส" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + // .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้รับ ท.ช. ก่อนวันที่ {(new DateTime(period.Year - 3, 7, 28)).ToThaiFullDate3()})", + Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + var s3 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && (p.PositionLevel.Name == "อาวุโส" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + // .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ ป.ม. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})", + Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear }" + }, + + } + }) + .ToList(); + + var result_candidate = new List(); + + 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 " วิชาการ " + + + /// + /// Gets the insignia candidate ประเภทวิชาการ ระดับปฎิบัติการ. + /// + /// The period identifier. + /// The oc identifier. + /// + public async Task GetInsigniaCandidate_Type2_Level5(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var inst_profile = _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.OCId) && + p.IsActive == true && + p.IsLeave == false && + p.DateAppoint != null && + p.PositionType != null && + p.PositionType.Name == "วิชาการ" // ประเภทวิชาการ + ) + .Select(p => new + { + ProfileId = p.Id, + Prefix = p.Prefix, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + Rank = p.PositionLevel.Name, + ProfileDateAppoint = p.DateAppoint.Value, + GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0), + PosNo = p.PosNo.Id, + PositionLevelId = p.PositionLevel.Id, + PositionLevelName = p.PositionLevel.Name, + PositionTypeId = p.PositionType.Id, + PositionTypeName = p.PositionType.Name, + Gender = p.Gender == null ? null : p.Gender.Name, + 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 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 + }); + + // check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5 + var s1 = ((from p in inst_profile + where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29) + && p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000") + && p.PositionLevelName == "ปฎิบัติการ" // ปฎิบัติการ + select p) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }", + Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }" + } + } + })).ToList(); + + + + var result_candidate = new List(); + + 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; + } + } + + /// + /// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการ. + /// + /// The period identifier. + /// The oc identifier. + /// + public async Task GetInsigniaCandidate_Type2_Level6(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ตริตาภรณ์ช้างเผือก"), + }) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.เป็นระดับชำนาญการ", + Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ทวีติยาภรณ์มงกุฎไทย"), + }) + .ToList() + .Where(p => p.SalaryCondition >= 22140) + .Select(p => new + { + 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 + { + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date < new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ทวีติยาภรณ์ช้างเผือก"), + }) + .ToList() + .Where(p => p.SalaryCondition >= 22140) + .Select(p => new + { + 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 + { + 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(); + + 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; + } + } + + + /// + /// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการพิเศษ. + /// + /// The period identifier. + /// The oc identifier. + /// + public async Task GetInsigniaCandidate_Type2_Level7(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ทวีติยาภรณ์ช้างเผือก"), + }) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.เป็นระดับชำนาญการพิเศษ", + Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.SalaryCondition >= 58390) + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5) + .Select(p => new + { + 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 + { + 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(); + + 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; + } + } + + /// + /// Gets the insignia candidate ประเภทวิชาการ ระดับเชี่ยวชาญ. + /// + /// The period identifier. + /// The oc identifier. + /// + public async Task GetInsigniaCandidate_Type2_Level8(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ทวีติยาภรณ์ช้างเผือก"), + }) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.เป็นระดับเชี่ยวชาญ", + Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Select(p => new + { + 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 + { + + new MatchingCondition + { + Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })", + Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + var s3 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5) + .Select(p => new + { + 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 + { + + new MatchingCondition + { + Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })", + Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + + var result_candidate = new List(); + + 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; + } + } + + /// + /// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 13000. + /// + /// The period identifier. + /// The oc identifier. + /// + public async Task GetInsigniaCandidate_Type2_Level9_1(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3) + .Where(x => x.SalaryPosition == 13000) + .Select(p => new + { + 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 + { + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Where(p => p.SalaryPosition == 13000) + .Select(p => new + { + 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 + { + + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5) + .Where(p => p.SalaryPosition == 13000) + .Select(p => new + { + 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 + { + + 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(); + + 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; + } + } + + /// + /// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 15600. + /// + /// The period identifier. + /// The oc identifier. + /// + public async Task GetInsigniaCandidate_Type2_Level9_2(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3) + .Where(x => x.SalaryPosition == 15600) + .Select(p => new + { + 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 + { + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Where(p => p.SalaryPosition == 15600) + .Select(p => new + { + 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 + { + + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Where(p => p.SalaryPosition == 15600) + .Select(p => new + { + 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 + { + 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(); + + 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 Task GetInsigniaCandidate_Type3_Level10(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = IsHigherLevel(p.Insignias + .Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")) + .OrderByDescending(x => x.Year) + .FirstOrDefault().Insignia.Name, + "ทวีติยาภรณ์ช้างเผือก"), + }) + .ToList() + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.เป็นระดับอำนวยการ/ต้น", + Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "วิชาการ" // วิชาการ + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.SalaryCondition >= 58390) + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5) + .Select(p => new + { + 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 + { + 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(); + + + 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 Task GetInsigniaCandidate_Type3_Level11(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", + Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", + Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + var s3 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", + Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + + + var result_candidate = new List(); + + 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 Task GetInsigniaCandidate_Type4_Level10(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", + Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", + Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + var s3 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5) + .Select(p => new + { + 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 + { + new MatchingCondition + { + Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)", + Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }" + }, + + } + }) + .ToList(); + + + + var result_candidate = new List(); + + 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 Task GetInsigniaCandidate_Type4_Level11(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var s1 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Where(x => x.SalaryPosition == 14500) + .Select(p => new + { + 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 + { + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3) + .Where(x => x.SalaryPosition == 14500) + .Select(p => new + { + 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 + { + 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 _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.PositionType) + .Include(p => p.PositionLevel) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.Oc != null + // && allOc.Contains(p.OCId) + && p.IsActive == true + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionType != null + && p.PositionLevel != null + && p.PositionType.Name == "ทั่วไป" // ทั่วไป + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PositionLevel = p.PositionLevel.Name, + PositionType = p.PositionType.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + }) + .ToList() + .Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5) + .Where(x => x.SalaryPosition == 14500) + .Select(p => new + { + 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 + { + 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(); + + 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 " + + /// + /// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเครื่องราช + /// + /// รหัสของรอบการขอ + /// รหัสโรงเรียน + /// + public async Task GetInsigniaCandidate(Guid periodId, Guid ocId) + { + try + { + var allOc = GetAllIdByRoot(ocId); + + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var CurrentRetireDate = new DateTime(period.Year, 9, 30); + + var inst_profile = _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.Name, + ProfileDateAppoint = p.DateAppoint.Value, + GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0), + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + 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 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id, + Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, + }); + + // check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5 + var s1 = ((from p in inst_profile + where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29) + && p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000") + select p) + .ToList() + .Select(p => new + { + 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 + })).ToList(); + + var s2 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + IsHigherLevel = 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 + { + 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() + .Include(p => p.Position) + .Include(p => p.PosNo) + .Include(p => p.Insignias) + .ThenInclude(i => i.Insignia) + .Include(p => p.Salaries) + where p.IsActive == true + // && allOc.Contains(p.OCId) + && p.IsLeave == false + && p.DateAppoint != null + && p.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + }) + .ToList() + .Where(x => x.SalaryCondition >= 22140) + .Select(p => new + { + 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() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date < new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + SalaryCondition2 = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date < new DateTime(period.Year - 5, 4, 29)).Select(x => new { order = x.Order, AsId = x.PositionLevel.Id, AsName = x.PositionLevel.Name, salary = x.Amount }) + }) + .ToList() + .Where(x => x.SalaryCondition2 != null && (x.SalaryCondition2.Where(x => x.AsName == "ชำนาญการ").Count() > 0 && x.SalaryCondition2.Where(x => x.AsName == "ชำนาญการ").OrderByDescending(x => x.order).FirstOrDefault().salary >= 22140)) + .Select(p => new + { + 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() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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 + { + ProfileId = p.Id, + Prefix = p.Prefix == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position.Name, + PosNo = p.PosNo.Id, + Rank = p.PositionLevel.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.Gender == null ? null : p.Gender.Name, + })) + .ToList(); + + // คศ3 ขอ ปม + var s6 = (from p in _dbContext.Set() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + 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 + { + 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() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + 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 + { + 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() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + 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 + { + 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() + .Include(p => p.Position) + .Include(p => p.PosNo) + .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.PositionLevel.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 == null ? null : p.Prefix.Name, + FullName = $"{p.FirstName} {p.LastName}", + Position = p.Position == null ? null : p.Position.Name, + Rank = p.PositionLevel.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.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PosNo = p.PosNo.Id, + Gender = p.Gender == null ? null : p.Gender.Name, + 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 + { + 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(); + 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 GetInsigniaCandidateBKK(Guid periodId, Guid ocId) + { + try + { + var result_candidate = new List(); + + var type1_level1 = await GetInsigniaCandidate_Type1_Level1(periodId, ocId); + var type1_level2 = await GetInsigniaCandidate_Type1_Level2(periodId, ocId); + var type1_level3 = await GetInsigniaCandidate_Type1_Level3(periodId, ocId); + var type1_level4 = await GetInsigniaCandidate_Type1_Level4(periodId, ocId); + var type2_level5 = await GetInsigniaCandidate_Type2_Level5(periodId, ocId); + var type2_level6 = await GetInsigniaCandidate_Type2_Level6(periodId, ocId); + var type2_level7 = await GetInsigniaCandidate_Type2_Level7(periodId, ocId); + var type2_level8 = await GetInsigniaCandidate_Type2_Level8(periodId, ocId); + var type2_level9_1 = await GetInsigniaCandidate_Type2_Level9_1(periodId, ocId); + var type2_level9_2 = await GetInsigniaCandidate_Type2_Level9_2(periodId, ocId); + var type3_level10 = await GetInsigniaCandidate_Type3_Level10(periodId, ocId); + var type3_level11 = await GetInsigniaCandidate_Type3_Level11(periodId, ocId); + var type4_level10 = await GetInsigniaCandidate_Type4_Level10(periodId, ocId); + var type4_level11 = await 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; + } + } + + + // + /// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา + /// + /// รหัสของรอบการขอ + /// รหัสโรงเรียน + /// + // public async List GetCoinCandidate(Guid periodId, Guid ocId) + // { + // try + // { + + // var allOc = profileService.GetAllIdByRoot(ocId); + + // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); + + // if (period == null) + // throw new Exception(GlobalMessages.InvalidCoinPeriod); + + // var oc = await _dbContext.Set().FirstOrDefault(x => x.OCId == ocId); + + // if (oc == null) + // throw new Exception(GlobalMessages.InvalidOC); + + // var result = await _dbContext.Set() + // .Include(p => p.Position) + // .Include(p => p.PosNo) + // .Include(p => p.PositionLevel) + // .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 + // { + // ProfileId = p.Id, + // Prefix = p.Prefix, + // FullName = $"{p.FirstName} {p.LastName}", + // Position = p.Position.Name, + // Rank = p.PositionLevel.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.PosNo.Id, + // RequestInsignia = GetInsigniaByName("เหรียญจักรพรรดิมาลา") + // }); + + // result = result.Where(x => !x.LastInsignia.Contains("เหรียญจักรพรรดิมาลา")); + + // return result.ToList(); + // } + // catch + // { + // throw; + // } + // } + + #endregion + + #region " From Ming " + + // คำนวณระยะเวลาของรอบการยืนขอ + public async Task 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 GetRequestId(Guid period, Guid ocId) + { + try + { + var req = await _dbContext.Set() + .Where(x => x.Organization != null) + .FirstOrDefaultAsync(x => x.Period.Id == period && x.Organization.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() + .FirstOrDefaultAsync(x => x.Profile.Id == item.ProfileId && x.Request.Id == req); + approve.IsApprove = item.IsApprove; + } + } + + await _dbContext.SaveChangesAsync(); + } + catch + { + throw; + } + } + + // เช็คข้อมูล ใน table insignia_request_new + public async Task GetInsigniaRequest(string type, Guid ocId) + { + try + { + var period = await _dbContext.Set() + .Select(p => new + { + Id = p.Id, + Name = p.Name, + Type = p.Type, + Year = p.Year, + }) + .FirstOrDefaultAsync(x => x.Type == type && x.Year == DateTime.Now.Year + 1); + + if (period == null) + return null; + else + { + var request = await _dbContext.Set() + .Include(x => x.Organization) + .ThenInclude(x => x.OrganizationOrganization) + .Where(x => x.Organization != null) + .FirstOrDefaultAsync(x => x.Period.Id == period.Id && x.Organization.Id == ocId); + + return new InsigniaResults + { + PeriodId = period.Id, + Year = period.Year.ToString(), + Name = period.Name, + RequestStatus = request == null ? null : request.RequestStatus, + OrganizationName = request == null ? "" : request.Organization.OrganizationOrganization.Name + }; + + } + } + catch + { + throw; + } + } + + // public async InsigniaItem GetInsigniaLast(Guid? id) + // { + // try + // { + // var insignia = await _dbContext.Set().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 GetDocFile(string profile) + // { + // // return empty for POC Only. + // return new List(); + // } + + // Get Profile + // public async List GetProfileByInstitute(Guid ocId) + // { + // try + // { + // var profiles = (await _dbContext.Set() + // .Include(x => x.Salaries) + // .Include(x => x.PositionLevel) + // .Include(x => x.Position) + // .Include(x => x.PosNo) + // .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.PositionLevel.Name, + // Salary = p.Salaries.Count() == 0 ? 0 : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, + // PosNo = p.PosNo.Id, + // Organization = p.OrganizationChart.OrganizationName + // })).ToList(); + + // return profiles; + // } + // catch + // { + // throw; + // } + // } + + // Get Data Table insignai_has_profile + public async Task InsigniaHasProfile(Guid period, Guid ocId) + { + try + { + var id = await GetRequestId(period, ocId); + if (id != null) + { + var result = (_dbContext.Set() + .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.PosNo) + .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.PositionLevel) + .Include(x => x.Profile) + .ThenInclude(x => x.Insignias) + .ThenInclude(x => x.Insignia) + .Where(h => h.Request.Id == id) + .ToList() + .Select(h => new + { + ProfileId = h.Profile.Id, + FullName = $"{h.Profile.FirstName} {h.Profile.LastName}", + Position = h.Profile.Position.Name, + PosNo = h.Profile.PosNo.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>(h.MatchingConditions) + })).ToList(); + + return result; + } + else + { + return null; + } + + } + catch + { + throw; + } + } + + // เช็คข้อมูลนำเข้า กับข้อมูลที่อยู่ใน database + // public async List GetDuplicate(List income, Guid period, Guid ocId, bool Duplicate = false) + // { + // try + // { + // var id = GetRequestId(period, ocId); + + // var req = await _dbContext.Set().FirstOrDefault(x => x.Id == id); + + // if (req == null) + // throw new Exception(GlobalMessages.InvalidInsigniaRequest); + + // var profile = await _dbContext.Set().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 DeleteProfile(List 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().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 items) + { + try + { + var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); + + if (period == null) + throw new Exception(GlobalMessages.InvalidCoinPeriod); + + var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); + + if (oc == null) + throw new Exception(GlobalMessages.InvalidOC); + + var req = new InsigniaRequest + { + Period = period, + Organization = oc, + RequestStatus = "st1" + }; + + foreach (var item in items) + { + var pf = _dbContext.Set().FirstOrDefault(p => p.Id == item.ProfileId); + var req_insignia = await _dbContext.Set().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().AddAsync(req); + await _dbContext.SaveChangesAsync(); + } + catch + { + throw; + } + } + + // เช็คข้อมูลใน kp7insignia + // public async ProfileInsignia ListKp7Insignia(string name, string profile, int year) + // { + // try + // { + // var item = await _dbContext.Set().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().FirstOrDefault(x => x.Id == profile.FkProfileId); + // var insignia = await _dbContext.Set().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().FirstOrDefaultAsync(x => x.Id == id); + + // return item; + // } + // catch + // { + // throw; + // } + // } + + #endregion + } +} diff --git a/BMA.EHR.Application/Requests/InsigniaResults.cs b/BMA.EHR.Application/Requests/InsigniaResults.cs index b704d7f0..2b2584e0 100644 --- a/BMA.EHR.Application/Requests/InsigniaResults.cs +++ b/BMA.EHR.Application/Requests/InsigniaResults.cs @@ -9,6 +9,6 @@ namespace BMA.EHR.Application.Requests public string Year { get; set; } public string RequestStatus { get; set; } public string OrganizationName { get; set; } - public List Items { get; set; } + public List Items { get; set; } } } diff --git a/BMA.EHR.Domain/Models/HR/Profile.cs b/BMA.EHR.Domain/Models/HR/Profile.cs index 7b0e336b..86823202 100644 --- a/BMA.EHR.Domain/Models/HR/Profile.cs +++ b/BMA.EHR.Domain/Models/HR/Profile.cs @@ -2,13 +2,15 @@ using Microsoft.EntityFrameworkCore; using BMA.EHR.Domain.Models.Base; using BMA.EHR.Domain.Models.Documents; +using BMA.EHR.Domain.Models.MetaData; +using BMA.EHR.Domain.Models.Organizations; namespace BMA.EHR.Domain.Models.HR { public class Profile : EntityBase { - [Key] - public Guid Id { get; set; } + // [Key] + // public Guid Id { get; set; } [MaxLength(13), Comment("รหัสบัตรประชาชน")] public string? CitizenId { get; set; } [MaxLength(50)] @@ -18,7 +20,7 @@ namespace BMA.EHR.Domain.Models.HR [MaxLength(20), Comment("ประเภทลูกจ้าง")] public string? EmployeeClass { get; set; } [Comment("Id คำนำหน้า")] - public Guid? PrefixId { get; set; } + public Prefix? Prefix { get; set; } [Required, MaxLength(100), Comment("ชื่อ")] public string? FirstName { get; set; } [Required, MaxLength(100), Comment("นามสกุล")] @@ -32,7 +34,7 @@ namespace BMA.EHR.Domain.Models.HR [MaxLength(100)] public string AvatarRef { get; set; } [Comment("Id เพศ")] - public Guid? GenderId { get; set; } + public Gender? Gender { get; set; } [MaxLength(100), Comment("สัญชาติ")] public string? Nationality { get; set; } [MaxLength(100), Comment("เชื้อชาติ")] @@ -127,13 +129,13 @@ namespace BMA.EHR.Domain.Models.HR public Guid? OrganizationOrganizationId { get; set; } public string? OrganizationOrganization { get; set; } [Comment("Id ตำแหน่ง")] - public Guid? PositionId { get; set; } - [Comment("ตำแหน่ง")] - public string? Position { get; set; } + public PositionPath? Position { get; set; } + // [Comment("ตำแหน่ง")] + // public string? Position { get; set; } [Comment("Id เลขที่ตำแหน่ง")] - public Guid? PosNoId { get; set; } - [Comment("เลขที่ตำแหน่ง")] - public string? PosNo { get; set; } + public PositionNumberEntity? PosNo { get; set; } + // [Comment("เลขที่ตำแหน่ง")] + // public string? PosNo { get; set; } [Comment("เลขที่ตำแหน่งลูกจ้าง")] public string? PosNoEmployee { get; set; } [Comment("Id สายงาน")] @@ -144,14 +146,14 @@ namespace BMA.EHR.Domain.Models.HR public Guid? PositionPathSideId { get; set; } [Comment("ด้าน/สาขา")] public string? PositionPathSide { get; set; } - [Comment("Id ประเภทตำแหน่ง")] - public Guid? PositionTypeId { get; set; } + // [Comment("Id ประเภทตำแหน่ง")] + // public Guid? PositionTypeId { get; set; } [Comment("ประเภทตำแหน่ง")] - public string? PositionType { get; set; } - [Comment(" Id ระดับ")] - public Guid? PositionLevelId { get; set; } + public PositionType? PositionType { get; set; } + // [Comment(" Id ระดับ")] + // public Guid? PositionLevelId { get; set; } [Comment("ระดับ")] - public string? PositionLevel { get; set; } + public PositionLevel? PositionLevel { get; set; } [Comment("Id ตำแหน่งทางการบริหาร")] public Guid? PositionExecutiveId { get; set; } [Comment("ตำแหน่งทางการบริหาร")] diff --git a/BMA.EHR.Domain/Models/HR/ProfileInsignia.cs b/BMA.EHR.Domain/Models/HR/ProfileInsignia.cs index 60dd55db..b8fe5ccb 100644 --- a/BMA.EHR.Domain/Models/HR/ProfileInsignia.cs +++ b/BMA.EHR.Domain/Models/HR/ProfileInsignia.cs @@ -1,6 +1,7 @@ using System.ComponentModel.DataAnnotations; using Microsoft.EntityFrameworkCore; using BMA.EHR.Domain.Models.Base; +using BMA.EHR.Domain.Models.MetaData; namespace BMA.EHR.Domain.Models.HR { @@ -27,8 +28,8 @@ namespace BMA.EHR.Domain.Models.HR [Comment("ประเภท")] public string? InsigniaType { get; set; } [Comment("ชื่อเครื่องราชฯ")] - public string? Insignia { get; set; } - public Guid? InsigniaId { get; set; } + // public string? Insignia { get; set; } + public Insignia? Insignia { get; set; } public virtual List ProfileInsigniaHistorys { get; set; } = new List(); public virtual Profile? Profile { get; set; } } diff --git a/BMA.EHR.Domain/Models/HR/ProfileSalary.cs b/BMA.EHR.Domain/Models/HR/ProfileSalary.cs index 158001be..5a373289 100644 --- a/BMA.EHR.Domain/Models/HR/ProfileSalary.cs +++ b/BMA.EHR.Domain/Models/HR/ProfileSalary.cs @@ -1,4 +1,5 @@ using BMA.EHR.Domain.Models.Base; +using BMA.EHR.Domain.Models.MetaData; using Microsoft.EntityFrameworkCore; namespace BMA.EHR.Domain.Models.HR @@ -7,6 +8,8 @@ namespace BMA.EHR.Domain.Models.HR { [Comment("วัน เดือน ปี รับตำแหน่ง")] public DateTime? Date { get; set; } + [Comment("ลำดับ")] + public int? Order { get; set; } [Comment("เงินเดือน")] public double? Amount { get; set; } [Comment("เงินประจำตำแหน่ง")] @@ -30,7 +33,7 @@ namespace BMA.EHR.Domain.Models.HR [Comment("Id ประเภทตำแหน่ง")] public Guid? PositionTypeId { get; set; } [Comment("Id ระดับ")] - public Guid? PositionLevelId { get; set; } + public PositionLevel? PositionLevel { get; set; } [Comment("Id ตำแหน่งทางการบริหาร")] public Guid? PositionExecutiveId { get; set; } [Comment("Id ด้านทางการบริหาร")] diff --git a/BMA.EHR.Domain/Models/Insignias/InsigniaRequest.cs b/BMA.EHR.Domain/Models/Insignias/InsigniaRequest.cs index f71d38fe..f260c33c 100644 --- a/BMA.EHR.Domain/Models/Insignias/InsigniaRequest.cs +++ b/BMA.EHR.Domain/Models/Insignias/InsigniaRequest.cs @@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations; using BMA.EHR.Domain.Models.Base; using System.ComponentModel.DataAnnotations.Schema; using BMA.EHR.Domain.Models.MetaData; +using BMA.EHR.Domain.Models.Organizations; namespace BMA.EHR.Domain.Models.Insignias { @@ -16,7 +17,7 @@ namespace BMA.EHR.Domain.Models.Insignias public InsigniaPeriod Period { get; set; } - public OrganizationOrganization OrganizationOrganization { get; set; } + public OrganizationEntity Organization { get; set; } public virtual List RequestProfiles { get; set; } = new List(); } diff --git a/BMA.EHR.Domain/Models/Placement/PlacementProfile.cs b/BMA.EHR.Domain/Models/Placement/PlacementProfile.cs index 80abfcaa..c8ccdb14 100644 --- a/BMA.EHR.Domain/Models/Placement/PlacementProfile.cs +++ b/BMA.EHR.Domain/Models/Placement/PlacementProfile.cs @@ -20,8 +20,8 @@ namespace BMA.EHR.Domain.Models.Placement public string? Lastname { get; set; } [Comment("Id เพศ")] public Gender? Gender { get; set; } - [Comment("ลำดับที่สอบได้")] - public int? Number { get; set; } + // [Comment("ลำดับที่สอบได้")] + // public int? Number { get; set; } [Comment("Id ตำแหน่งที่สอบได้")] public PositionPath? PositionCandidate { get; set; } diff --git a/BMA.EHR.Domain/Shared/GlobalMessages.cs b/BMA.EHR.Domain/Shared/GlobalMessages.cs index d9468b32..426ea983 100644 --- a/BMA.EHR.Domain/Shared/GlobalMessages.cs +++ b/BMA.EHR.Domain/Shared/GlobalMessages.cs @@ -68,6 +68,10 @@ public static readonly string InvalidInsigniaRequest = "ไม่พบข้อมูลการยื่นขอพระราชทานเครื่องราชย์ของหน่วยงานที่ระบุ!!"; public static readonly string InvalidInsigniaPeriod = "ไม่พบรอบการยื่นขอพระราชทานเครื่องราชย์อิสริยาภรณ์"; + + public static readonly string InvalidCoinPeriod = "ไม่พบรอบการขอพระราชทานเหรียญจักรพรรดิมาลาที่ระบุ!!"; + + public static readonly string InvalidOC = "ไม่พบหน่วยงานที่ระบุในระบบ"; #endregion } diff --git a/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs b/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs index 344ce509..752401e1 100644 --- a/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs +++ b/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs @@ -94,9 +94,9 @@ namespace BMA.EHR.Insignia.Service.Controllers Name = periodName, RequestStatus = requestStatus, OrganizationName = result.OrganizationName, - Items = new List() + Items = new List() }; - var candidate = _repository.GetInsigniaCandidate(period, ocId); + var candidate = await _repository.GetInsigniaCandidate(period, ocId); // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new if (requestStatus == null) @@ -106,15 +106,15 @@ namespace BMA.EHR.Insignia.Service.Controllers } if (role == "officer") { - resend.Items = _repository.InsigniaHasProfile(period, ocId); + resend.Items = await _repository.InsigniaHasProfile(period, ocId); return Success(resend); } else { var passData = _context.InsigniaRequests.AsQueryable() - .Include(x => x.OrganizationOrganization) + .Include(x => x.Organization) .Include(x => x.RequestProfiles) - .Where(x => x.OrganizationOrganization.Id == ocId) + .Where(x => x.Organization.Id == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { @@ -122,8 +122,8 @@ namespace BMA.EHR.Insignia.Service.Controllers requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, - fkDivisionId = ir.OrganizationOrganization.Id, - fkDivision = ir.OrganizationOrganization.Name, + // fkDivisionId = ir.Organization.Id, + // fkDivision = ir.Organization.Name, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() @@ -169,9 +169,9 @@ namespace BMA.EHR.Insignia.Service.Controllers .FirstOrDefault(); var failData = _context.InsigniaRequests.AsQueryable() - .Include(x => x.OrganizationOrganization) + .Include(x => x.Organization) .Include(x => x.RequestProfiles) - .Where(x => x.OrganizationOrganization.Id == ocId) + .Where(x => x.Organization.Id == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { @@ -179,8 +179,8 @@ namespace BMA.EHR.Insignia.Service.Controllers requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, - fkDivisionId = ir.OrganizationOrganization.Id, - fkDivision = ir.OrganizationOrganization.Name, + // fkDivisionId = ir.Organization.Id, + // fkDivision = ir.Organization.Name, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() @@ -256,28 +256,28 @@ namespace BMA.EHR.Insignia.Service.Controllers Name = periodName, RequestStatus = requestStatus, OrganizationName = result.OrganizationName, - Items = new List() + Items = new List() }; - var candidate = _repository.GetInsigniaCandidateBKK(period, ocId); + var candidate = await _repository.GetInsigniaCandidateBKK(period, ocId); // ตรวจสอบว่ารายการอยู่ใน table insignia_request_new if (requestStatus == null) { // บันทึกรายชื่อ - _repository.InsertCandidate(period, ocId, candidate); + await _repository.InsertCandidate(period, ocId, candidate); } if (role == "officer") { - resend.Items = _repository.InsigniaHasProfile(period, ocId); + resend.Items = await _repository.InsigniaHasProfile(period, ocId); return Success(resend); } else { var passData = _context.InsigniaRequests.AsQueryable() - .Include(x => x.OrganizationOrganization) + .Include(x => x.Organization) .Include(x => x.RequestProfiles) - .Where(x => x.OrganizationOrganization.Id == ocId) + .Where(x => x.Organization.Id == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { @@ -285,8 +285,8 @@ namespace BMA.EHR.Insignia.Service.Controllers requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, - fkDivisionId = ir.OrganizationOrganization.Id, - fkDivision = ir.OrganizationOrganization.Name, + // fkDivisionId = ir.Organization.Id, + // fkDivision = ir.Organization.Name, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() @@ -333,9 +333,9 @@ namespace BMA.EHR.Insignia.Service.Controllers .FirstOrDefault(); var failData = _context.InsigniaRequests.AsQueryable() - .Include(x => x.OrganizationOrganization) + .Include(x => x.Organization) .Include(x => x.RequestProfiles) - .Where(x => x.OrganizationOrganization.Id == ocId) + .Where(x => x.Organization.Id == ocId) .Where(x => x.Period.Id == period) .Select(ir => new { @@ -343,8 +343,8 @@ namespace BMA.EHR.Insignia.Service.Controllers requstStatus = ir.RequestStatus, requstStatusName = GetRequestlStatusText(ir.RequestStatus), fkInstituteId = -1, - fkDivisionId = ir.OrganizationOrganization.Id, - fkDivision = ir.OrganizationOrganization.Name, + // fkDivisionId = ir.Organization.Id, + // fkDivision = ir.Organization.Name, fkInstitute = "", fkPeriodId = ir.Period.Id, insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementController.cs index e7d09923..60d33ea7 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementController.cs @@ -116,9 +116,21 @@ namespace BMA.EHR.Placement.Service.Controllers BmaOfficer = x.IsOfficer, StatusId = x.PlacementStatus, Draft = x.Draft, - Number = x.Number, + ExamNumber = x.ExamNumber, Deferment = x.IsRelief, - }).ToListAsync(); + + ContainDate = x.RecruitDate, + OrganizationPositionId = x.OrganizationPosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationPosition.Id, + PosNoId = x.PositionNumber == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionNumber.Id, + PositionId = x.PositionPath == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionPath.Id, + PositionLevelId = x.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionLevel.Id, + PositionLineId = x.PositionLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionLine.Id, + PositionPathSideId = x.PositionPathSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionPathSide.Id, + PositionTypeId = x.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionType.Id, + SalaryAmount = x.Amount, + MouthSalaryAmount = x.MouthSalaryAmount, + PositionSalaryAmount = x.PositionSalaryAmount, + }).OrderBy(x => x.ExamNumber).ToListAsync(); var result = new List(); foreach (var p in data) @@ -139,8 +151,20 @@ namespace BMA.EHR.Placement.Service.Controllers BmaOfficer = await _documentService.CheckBmaOfficer(p.IdCard), p.StatusId, p.Draft, - p.Number, + p.ExamNumber, p.Deferment, + + p.ContainDate, + p.OrganizationPositionId, + p.PosNoId, + p.PositionId, + p.PositionLevelId, + p.PositionLineId, + p.PositionPathSideId, + p.PositionTypeId, + p.SalaryAmount, + p.MouthSalaryAmount, + p.PositionSalaryAmount, }; result.Add(_data); } @@ -157,6 +181,7 @@ namespace BMA.EHR.Placement.Service.Controllers .Where(x => x.Placement.Id == examId) .Where(x => x.OrganizationPosition != null) .Where(x => x.OrganizationPosition.Organization != null) + .Where(x => x.Draft == true) .Where(x => ocIdList.Contains(x.OrganizationPosition.Organization.Id)) .Select(x => new { @@ -174,9 +199,21 @@ namespace BMA.EHR.Placement.Service.Controllers BmaOfficer = x.IsOfficer, StatusId = x.PlacementStatus, Draft = x.Draft, - Number = x.Number, + ExamNumber = x.ExamNumber, Deferment = x.IsRelief, - }).OrderBy(x => x.Number).ToListAsync(); + + ContainDate = x.RecruitDate, + OrganizationPositionId = x.OrganizationPosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationPosition.Id, + PosNoId = x.PositionNumber == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionNumber.Id, + PositionId = x.PositionPath == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionPath.Id, + PositionLevelId = x.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionLevel.Id, + PositionLineId = x.PositionLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionLine.Id, + PositionPathSideId = x.PositionPathSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionPathSide.Id, + PositionTypeId = x.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionType.Id, + SalaryAmount = x.Amount, + MouthSalaryAmount = x.MouthSalaryAmount, + PositionSalaryAmount = x.PositionSalaryAmount, + }).OrderBy(x => x.ExamNumber).ToListAsync(); var result = new List(); foreach (var p in data) @@ -197,8 +234,20 @@ namespace BMA.EHR.Placement.Service.Controllers BmaOfficer = await _documentService.CheckBmaOfficer(p.IdCard), p.StatusId, p.Draft, - p.Number, + p.ExamNumber, p.Deferment, + + p.ContainDate, + p.OrganizationPositionId, + p.PosNoId, + p.PositionId, + p.PositionLevelId, + p.PositionLineId, + p.PositionPathSideId, + p.PositionTypeId, + p.SalaryAmount, + p.MouthSalaryAmount, + p.PositionSalaryAmount, }; result.Add(_data); } @@ -550,6 +599,8 @@ namespace BMA.EHR.Placement.Service.Controllers var person = await _context.PlacementProfiles.FindAsync(req.PersonalId); if (person == null) return Error(GlobalMessages.DataNotFound, 404); + if (person.Draft == true) + return Error("ไม่สามารถแก้ไขข้อมูลนี้ได้เนื่องจากเผยแพร่ไปแล้ว"); if (req.PosNoId != null) {