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; using Amazon.S3.Model.Internal.MarshallTransformations; namespace BMA.EHR.Application.Repositories { public class InsigniaPeriodsRepository : GenericRepository { private readonly IApplicationDBContext _dbContext; private readonly IHttpContextAccessor _httpContextAccessor; private readonly MinIOService _documentService; public InsigniaPeriodsRepository(IApplicationDBContext dbContext, MinIOService documentService, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor) { _dbContext = dbContext; _httpContextAccessor = httpContextAccessor; _documentService = documentService; } 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) .FirstOrDefault(); 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 " Employee " /// /// กลุ่ม ลจ ที่ค่าจ้าง >= 8340 และ < 15050 /// /// /// /// public async Task> GetEmployeeInsignia_Type1(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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var inst_profile = _dbContext.Set() .Include(p => p.Prefix) .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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.ProfileType == "employee" && p.EmployeeClass == "perm" ) .Select(p => new { ProfileId = p.Id, Prefix = p.Prefix == null ? null : p.Prefix.Name, FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PostionSalaryAmount = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount, //FirstRecvInsigniaYear1 = 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, //FirstRecvInsigniaYear2 = 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, }); // check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-8 ขอ บม. var s1 = ((from p in inst_profile where p.ProfileDateAppoint <= new DateTime(period.Year - 8, 5, 29) && p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000") && (p.SalaryCondition >= 8340 && p.SalaryCondition < 15050) 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 - 8, 5, 29).ToThaiFullDate3() }", Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }" }, new MatchingCondition { Condition = $"2.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับปฏิบัติการ (8,340) แต่ไม่ถึงขั้นต่ำของอัตราเงินเดือนข้าราชการพลเรือนระดับชำนาญการ (15,050)", Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }" }, } })).ToList(); var s2 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.ProfileType == "employee" && p.EmployeeClass == "perm" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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(x => (x.SalaryCondition >= 8340 && x.SalaryCondition < 10150) && !x.IsHigherLevel) .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.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับปฏิบัติการ (8,340) แต่ไม่ถึงขั้นต่ำของอัตราเงินเดือนข้าราชการพลเรือนระดับชำนาญการ (15,050)", Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }" }, new MatchingCondition { Condition = $"2.ได้ บ.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ บ.ม. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})", Result = $"ได้รับ บ.ม. ในปี { p.FirstRecvInsigniaYear }" } } }) .ToList(); var s3 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.ProfileType == "employee" && p.EmployeeClass == "perm" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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(x => (x.SalaryCondition >= 8340 && x.SalaryCondition < 10150) && !x.IsHigherLevel) .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.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับปฏิบัติการ (8,340) แต่ไม่ถึงขั้นต่ำของอัตราเงินเดือนข้าราชการพลเรือนระดับชำนาญการ (15,050)", Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }" }, new MatchingCondition { Condition = $"2.ได้ บ.ช. มาแล้วไม่น้อยกว่า 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; } } /// /// กลุ่ม ลจ ที่ค่าจ้าง >= 15050 /// /// /// /// public async Task> GetEmployeeInsignia_Type2(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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var inst_profile = _dbContext.Set() .Include(p => p.Prefix) .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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.ProfileType == "employee" && p.EmployeeClass == "perm" ) .Select(p => new { ProfileId = p.Id, Prefix = p.Prefix == null ? null : p.Prefix.Name, FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PostionSalaryAmount = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount, //FirstRecvInsigniaYear1 = 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, //FirstRecvInsigniaYear2 = 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, }); var s1 = ((from p in inst_profile where p.ProfileDateAppoint <= new DateTime(period.Year - 8, 5, 29) && p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000") && (p.SalaryCondition >= 15050) 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 - 8, 5, 29).ToThaiFullDate3() }", Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }" }, new MatchingCondition { Condition = $"2.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับชำนาญการขึ้นไป (15,050)", Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }" }, } })).ToList(); var s2 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.ProfileType == "employee" && p.EmployeeClass == "perm" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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(x => (x.SalaryCondition >= 10150) && !x.IsHigherLevel) .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.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับชำนาญการขึ้นไป (15,050)", Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }" }, new MatchingCondition { Condition = $"2.ได้ บ.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ บ.ช. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})", Result = $"ได้รับ บ.ช. ในปี { p.FirstRecvInsigniaYear }" } } }) .ToList(); var s3 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.ProfileType == "employee" && p.EmployeeClass == "perm" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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(x => (x.SalaryCondition >= 10150) && !x.IsHigherLevel) .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.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับชำนาญการขึ้นไป (15,050)", Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }" }, new MatchingCondition { Condition = $"2.ได้ จ.ม. มาแล้วไม่น้อยกว่า 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_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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var inst_profile = _dbContext.Set() .Include(p => p.Prefix) .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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.ProfileType == "officer" && p.PositionType.Name == "ทั่วไป" // ) .Select(p => new { ProfileId = p.Id, Prefix = p.Prefix == null ? null : p.Prefix.Name, FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, PostionSalaryAmount = p.Salaries.Count() == 0 ? null : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "ทั่วไป" // ทั่วไป && p.PositionLevel.Name == "ปฏิบัติงาน" // ปฏิบัติงาน && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "ทั่วไป" // ทั่วไป1 && p.PositionLevel.Name == "ปฏิบัติงาน" // ปฏิบัติงาน1 && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "ทั่วไป" // ทั่วไป1 && p.PositionLevel.Name == "ปฏิบัติงาน" // ปฏิบัติงาน1 && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "ทั่วไป" // ทั่วไป && p.PositionLevel.Name == "ชำนาญงาน" // ชำนาญงาน && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "ทั่วไป" // ทั่วไป && p.PositionLevel.Name == "ชำนาญงาน" // ชำนาญงาน && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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.PositionLevel.Name == "ชำนาญงาน").OrderBy(p => p.Date).FirstOrDefault().Date }) .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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "ทั่วไป" // ทั่วไป && p.PositionLevel.Name == "อาวุโส" // อาวุโส && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "ทั่วไป" // ทั่วไป && p.PositionLevel.Name == "อาวุโส" // อาวุโส && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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.PositionLevel.Name == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date }) .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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && 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.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && 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.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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.PositionLevel.Name == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date }) .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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && 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.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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.PositionLevel.Name == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date }) .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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var inst_profile = _dbContext.Set() .Include(p => p.Prefix) .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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionType.Name == "วิชาการ" && // ประเภทวิชาการ p.ProfileType == "officer" ) .Select(p => new { ProfileId = p.Id, Prefix = p.Prefix == null ? null : p.Prefix.Name, FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, PostionSalaryAmount = p.Salaries.Count() == 0 ? null : 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 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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "ชำนาญการ" // ชำนาญการ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "ชำนาญการ" // ชำนาญการ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : 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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" }, } }) .ToList(); var s3 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "ชำนาญการ" // ชำนาญการ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : 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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" }, } }) .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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "ชำนาญการพิเศษ" // ชำนาญการพิเศษ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "ชำนาญการพิเศษ" // ชำนาญการพิเศษ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : 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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" }, 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "เชี่ยวชาญ" // เชี่ยวชสญ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "เชี่ยวชาญ" // เชี่ยวชาญ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "เชี่ยวชาญ" // เชี่ยวชาญ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.ProfileType == "officer" && (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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .ToList(); var s2 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.ProfileType == "officer" && (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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .ToList(); var s3 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.ProfileType == "officer" && (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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.ProfileType == "officer" && (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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .ToList(); var s2 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.ProfileType == "officer" && (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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .ToList(); var s3 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.ProfileType == "officer" && (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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "อำนวยการ" // อำนวยการ && p.PositionLevel.Name == "ต้น" // ต้น && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "วิชาการ" // วิชาการ && p.PositionLevel.Name == "ชำนาญการพิเศษ" // ชำนาญการพิเศษ && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : 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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" }, 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "อำนวยการ" // อำนวยการ && p.PositionLevel.Name == "สูง" // สูง && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "อำนวยการ" // อำนวยการ && p.PositionLevel.Name == "สูง" // สูง && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "อำนวยการ" // อำนวยการ && p.PositionLevel.Name == "สูง" // สูง && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "บริหาร" // บริหาร && p.PositionLevel.Name == "ต้น" // ต้น && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "บริหาร" // บริหาร && p.PositionLevel.Name == "ต้น" // ต้น && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "บริหาร" // บริหาร && p.PositionLevel.Name == "ต้น" // ต้น && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var s1 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "บริหาร" // บริหาร && p.PositionLevel.Name == "สูง" // สูง && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .ToList(); var s2 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "บริหาร" // บริหาร && p.PositionLevel.Name == "สูง" // สูง && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .ToList(); var s3 = (from p in _dbContext.Set() .Include(p => p.Prefix) .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 allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionType != null && p.PositionLevel != null && p.PositionType.Name == "บริหาร" // บริหาร && p.PositionLevel.Name == "สูง" // สูง && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 } บาท" } } }) .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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); var inst_profile = _dbContext.Set() .Include(p => p.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) .Where(p => allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.ProfileType == "officer" && p.DateAppoint != null ) .Select(p => new { ProfileId = p.Id, Prefix = p.Prefix == null ? null : p.Prefix.Name, FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 })).ToList(); var s2 = (from p in _dbContext.Set() .Include(p => p.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsActive == true && p.IsLeave == false && p.DateAppoint != null && p.PositionLevel.Name == "ชำนาญการ" && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where p.IsActive == true && allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsLeave == false && p.DateAppoint != null && p.PositionLevel.Name == "ชำนาญการ" && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id, Gender = p.Gender == null ? null : p.Gender.Name, }) .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.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where p.IsActive == true && allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsLeave == false && p.DateAppoint != null && p.PositionLevel.Name == "ชำนาญการ" && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date < new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where p.IsActive == true && allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsLeave == false && p.DateAppoint != null && p.ProfileType == "officer" && !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 == null ? null : p.Prefix.Name, FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}", Position = p.Position == null ? null : p.Position.Name, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id, Rank = p.PositionLevel == null ? null : p.PositionLevel.Name, GovAge = p.PositionLevel == null ? null : 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("เหรียญจักรพรรดิมาลา")).FirstOrDefault() == null ? null : 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, RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"), Seq = 4, Gender = p.Gender == null ? null : p.Gender.Name, })) .ToList(); // คศ3 ขอ ปม var s6 = (from p in _dbContext.Set() .Include(p => p.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where p.IsActive == true && allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsLeave == false && p.DateAppoint != null && p.PositionLevel.Name == "ชำนาญการพิเศษ" && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where p.IsActive == true && allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsLeave == false && p.DateAppoint != null && p.PositionLevel.Name == "เชี่ยวชาญ" && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where p.IsActive == true && allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsLeave == false && p.DateAppoint != null && p.PositionLevel.Name == "เชี่ยวชาญ" && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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.Prefix) .Include(p => p.Position) .Include(p => p.PosNo) .Include(p => p.Insignias) .ThenInclude(i => i.Insignia) .Include(p => p.Salaries) .Include(p => p.PositionLevel) where p.IsActive == true && allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && p.IsLeave == false && p.DateAppoint != null && p.PositionLevel.Name == "เชี่ยวชาญ" && p.ProfileType == "officer" && !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.Prefix == null ? null : p.Prefix.Name)}{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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount, PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 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 type_coin = await GetCoinCandidate(periodId, ocId); var employee_type1 = await GetEmployeeInsignia_Type1(periodId, ocId); var employee_type2 = await GetEmployeeInsignia_Type2(periodId, ocId); 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); var type = await GetInsigniaCandidate(periodId, ocId); // union result foreach (var r in type_coin) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type4_level11) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type4_level10) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type3_level11) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type3_level10) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type2_level9_2) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type2_level9_1) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type2_level8) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type2_level7) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type2_level6) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type2_level5) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type1_level4) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type1_level3) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type1_level2) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type1_level1) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in employee_type2) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in employee_type1) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } return result_candidate.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList(); } catch { throw; } } public async Task> GetEmployeeInsigniaCandidateBKK(Guid periodId, Guid ocId) { try { var result_candidate = new List(); var type1 = await GetEmployeeInsignia_Type1(periodId, ocId); var type2 = await GetEmployeeInsignia_Type2(periodId, ocId); // union result foreach (var r in type2) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } foreach (var r in type1) { var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId); if (old == null) result_candidate.Add(r); } return result_candidate.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList(); } catch { throw; } } //กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา public async Task> GetCoinCandidate(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.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var inst_profile = _dbContext.Set() .Include(p => p.Prefix) .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 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) && 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.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}", Position = p.Position == null ? null : p.Position.Name, Rank = p.PositionLevel == null ? null : p.PositionLevel.Name, ProfileDateAppoint = p.DateAppoint.Value, GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0), PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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 วันที่บรรจะต้องมากกว่า 25 ปี var result = ((from p in inst_profile where p.ProfileDateAppoint <= new DateTime(period.Year - 25, 5, 29) 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(), })).ToList(); var result_candidate = new List(); foreach (var r in result) { 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 " 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) { try { var req = await GetRequestId(period, ocId); if (req != null) { var insigniaRequestProfiles = await _dbContext.Set() .Where(x => x.Request.Id == req) .ToListAsync(); foreach (var insigniaRequestProfile in insigniaRequestProfiles) { insigniaRequestProfile.IsApprove = true; } } await _dbContext.SaveChangesAsync(); } catch { throw; } } // เช็คข้อมูล ใน table insignia_request_new public async Task GetInsigniaRequest(Guid id, Guid ocId) { try { var period = await _dbContext.Set() .Select(p => new { Id = p.Id, Name = p.Name, Round = p.Round, Year = p.Year, IsLock = p.IsLock, }) .FirstOrDefaultAsync(x => x.Id == id); if (period == null) return null; else { var request = await _dbContext.Set() .Include(x => x.Document) .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, Round = period.Round, Name = period.Name, IsLock = period.IsLock, RequestId = request == null ? null : request.Id, RequestNote = request == null ? "" : request.RequestNote, RequestStatus = request == null ? null : request.RequestStatus, OrganizationName = request == null ? "" : request.Organization.OrganizationOrganization.Name, Document = request == null ? null : (request.Document == null ? null : await _documentService.ImagesPath(request.Document.Id)), }; } } 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 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, // PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : 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, string status) { 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.PositionEmployeePosition) .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.Prefix) //.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 => status.Trim().ToUpper() == "ALL" ? h.Status != null : h.Status == status.Trim().ToUpper()) .Where(h => h.Request.Id == id) .ToList() .Select(h => new InsigniaRequestItem { Id = h.Id, CitizenId = h.Profile.CitizenId, ProfileId = h.Profile.Id, ProfileType = h.Profile.ProfileType, FullName = $"{h.Profile.Prefix?.Name}{h.Profile.FirstName} {h.Profile.LastName}", Position = h.Profile.ProfileType == "officer" ? h.Profile.Position?.Name : h.Profile.PositionEmployeePosition?.Name, PosNo = h.Profile.ProfileType == "officer" ? h.Profile.PosNo?.Name : h.Profile.PosNoEmployee, Rank = h.Profile.ProfileType == "officer" && (h.Profile.PositionType != null && h.Profile.PositionLevel != null) ? $"{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, Status = h.Status, RequestNote = h.ReasonReject, Reason = h.Reason, MarkDiscipline = h.MarkDiscipline, MarkLeave = h.MarkLeave, MarkRate = h.MarkRate, // Docs = GetDocFile(h.Profile.Id), MatchingConditions = h.MatchingConditions == null ? null : 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.InsigniaNotFound); // 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.CoinPeriodNotFound); var periodOlds = await _dbContext.Set().Where(p => p.Year == period.Year).ToListAsync(); foreach (var periodOld in periodOlds) { var requestOlds = await _dbContext.Set().Where(p => p.Period == periodOld).ToListAsync(); foreach (var requestOld in requestOlds) { var profileOlds = await _dbContext.Set().Where(p => p.Request == requestOld).Select(x => x.Profile.Id).ToListAsync(); items = items.Where(x => !profileOlds.Contains(x.ProfileId)).ToList(); } } var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) throw new Exception(GlobalMessages.OCNotFound); var req = new InsigniaRequest { Period = period, Organization = oc, RequestStatus = "st1", RequestNote = "", CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; 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 { Status = "PENDING", Profile = pf, RequestInsignia = req_insignia, Salary = item.Salary == null ? null : item.Salary, RequestDate = DateTime.Now, MatchingConditions = System.Text.Json.JsonSerializer.Serialize(item.MatchingConditions), // serialize to string CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } } 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 } }