hrms-api-backend/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs

6258 lines
467 KiB
C#

using BMA.EHR.Application.Common.Interfaces;
using BMA.EHR.Application.Requests;
using BMA.EHR.Domain.Models.HR;
using BMA.EHR.Domain.Models.Insignias;
using BMA.EHR.Domain.Models.MetaData;
using BMA.EHR.Domain.Models.OrganizationEmployee;
using BMA.EHR.Domain.Shared;
using 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<Guid, InsigniaPeriod>
{
private readonly IApplicationDBContext _dbContext;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly MinIOService _documentService;
private readonly UserProfileRepository _userProfileRepository;
private List<Insignia> _insigniaLists = new();
public InsigniaPeriodsRepository(IApplicationDBContext dbContext,
MinIOService documentService,
IHttpContextAccessor httpContextAccessor,
UserProfileRepository userProfileRepository) : base(dbContext, httpContextAccessor)
{
_dbContext = dbContext;
_httpContextAccessor = httpContextAccessor;
_documentService = documentService;
_userProfileRepository = userProfileRepository;
_insigniaLists = _dbContext.Set<Insignia>().AsNoTracking().Include(x => x.InsigniaType).ToList();
}
public async Task<IEnumerable<InsigniaPeriod>> FindByNameAsync(string name)
{
var data = await _dbContext.Set<InsigniaPeriod>().Where(x => x.Name == name).ToListAsync();
return data;
}
#region " Private "
private List<Guid> GetAllIdByRoot(Guid? id)
{
try
{
var ret = new List<Guid>();
if (id == null)
return ret;
var oc = _dbContext.Set<OrganizationEntity>().FirstOrDefault(x => x.Id == id);
if (oc != null)
ret.Add(oc.Id);
var child = _dbContext.Set<OrganizationEntity>().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;
}
}
public InsigniaItem? GetInsigniaByName(string name)
{
try
{
var insignia = _insigniaLists
.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();
//var insignia = _dbContext.Set<Insignia>()
// .Include(x => x.InsigniaType)
// .Where(x => x.Name == name)
// .Select(i => new InsigniaItem
// {
// Id = i.Id,
// Name = i.Name,
// ShortName = i.ShortName,
// Level = i.InsigniaType.Name,
// LevelId = i.InsigniaType.Id
// })
// .FirstOrDefault();
return insignia;
}
catch
{
throw;
}
}
public InsigniaItem? GetInsigniaById(Guid id)
{
try
{
var insignia = _insigniaLists
.Where(x => x.Id == id)
.Select(i => new InsigniaItem
{
Id = i.Id,
Name = i.Name,
ShortName = i.ShortName,
Level = i.InsigniaType.Name,
LevelId = i.InsigniaType.Id
})
.FirstOrDefault();
//var insignia = _dbContext.Set<Insignia>()
// .Include(x => x.InsigniaType)
// .Where(x => x.Id == id)
// .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<Insignia>().FirstOrDefault(x => x.Name.ToLower().Trim() == last.ToLower().Trim());
if (last_ins == null)
return true;
var req_ins = _dbContext.Set<Insignia>().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<ProfileInsignia>()
.Where(x => x.ProfileId == profileId)
.Where(x => x.Year == ce_year - 1)
.FirstOrDefault();
if (insignia != null)
{
return false;
}
else
{
var prev_period = _dbContext.Set<InsigniaPeriod>().FirstOrDefault(x => x.Year == ce_year - 1);
if (prev_period == null)
return true;
else
{
var req = _dbContext.Set<InsigniaRequestProfile>()
.FirstOrDefault(x => x.Request.Period.Id == prev_period.Id && x.ProfileId == profileId);
if (req != null)
return false;
else
return true;
}
}
}
catch
{
throw;
}
}
#region " Employee "
/// <summary>
/// กลุ่ม ลจ ที่ค่าจ้าง >= 8340 และ < 15050
/// </summary>
/// <param name="periodId"></param>
/// <param name="ocId"></param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetEmployeeInsignia_Type1(Guid periodId, Guid ocId)
{
try
{
//var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
//var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
//if (oc == null)
// throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var coinInsignia = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("เหรียญจักรพรรดิมาลา"));
var allProfilesByRoot = (await _userProfileRepository.GetEmployeeProfileByRootIdAsync(ocId, AccessToken));
var inst_profile = allProfilesByRoot
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? null : GetInsigniaById(p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
});
// 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<MatchingCondition>
{
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 bcpRoyal = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("เบญจมาภรณ์ช้างเผือก"));
var bcmRoyal = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("เบญจมาภรณ์มงกุฎไทย"));
var jtmRoyal = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("จัตุรถาภรณ์มงกุฎไทย"));
var s2 = (from p in allProfilesByRoot
where p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != coinInsignia.Id &&
x.InsigniaId.Value == bcpRoyal.Id)
.ToList()
.Count() == 0)
//where !(p.ProfileInsignia.Where(x => x.InsigniaId != coinInsignia.Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId == bcpRoyal.Id)
select new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? null : GetInsigniaById(p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
IsHigherLevel = IsHigherLevel(GetInsigniaById(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"เบญจมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.ProfileInsignia == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == bcmRoyal.Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == bcmRoyal.Id).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<MatchingCondition>
{
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 allProfilesByRoot
where p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != coinInsignia.Id &&
x.InsigniaId.Value == jtmRoyal.Id)
.ToList()
.Count() == 0)
//where !(p.ProfileInsignia.Where(x => x.InsigniaId != coinInsignia.Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId == jtmRoyal.Id)
select new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? null : GetInsigniaById(p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
IsHigherLevel = IsHigherLevel(GetInsigniaById(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"จัตุรถาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.ProfileInsignia == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == bcmRoyal.Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == bcmRoyal.Id).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<MatchingCondition>
{
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<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
//if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// กลุ่ม ลจ ที่ค่าจ้าง >= 15050
/// </summary>
/// <param name="periodId"></param>
/// <param name="ocId"></param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetEmployeeInsignia_Type2(Guid periodId, Guid ocId)
{
try
{
// var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
//var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
//if (oc == null)
// throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var coinInsignia = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("เหรียญจักรพรรดิมาลา"));
var allProfilesByRoot = (await _userProfileRepository.GetEmployeeProfileByRootIdAsync(ocId, AccessToken));
var inst_profile = allProfilesByRoot
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? null : GetInsigniaById(p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
});
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<MatchingCondition>
{
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 bcpRoyal = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("เบญจมาภรณ์ช้างเผือก"));
var bcmRoyal = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("เบญจมาภรณ์มงกุฎไทย"));
var jtcRoyal = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("จัตุรถาภรณ์ช้างเผือก"));
var jtmRoyal = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(x => x.Name.Contains("จัตุรถาภรณ์มงกุฎไทย"));
var s2 = (from p in allProfilesByRoot
where p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != coinInsignia.Id &&
x.InsigniaId.Value == jtmRoyal.Id)
.ToList()
.Count() == 0)
//where !(p.ProfileInsignia.Where(x => x.InsigniaId != coinInsignia.Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId == jtmRoyal.Id)
select new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? null : GetInsigniaById(p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
IsHigherLevel = IsHigherLevel(GetInsigniaById(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"จัตุรถาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.ProfileInsignia == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == bcpRoyal.Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == bcpRoyal.Id).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<MatchingCondition>
{
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 allProfilesByRoot
where p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != coinInsignia.Id &&
x.InsigniaId.Value == jtcRoyal.Id)
.ToList()
.Count() == 0)
//where !(p.ProfileInsignia.Where(x => x.InsigniaId != coinInsignia.Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId == jtcRoyal.Id)
select new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? null : GetInsigniaById(p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!.InsigniaId.Value,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
IsHigherLevel = IsHigherLevel(GetInsigniaById(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"จัตุรถาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.ProfileInsignia == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == jtmRoyal.Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == jtmRoyal.Id).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<MatchingCondition>
{
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<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
//if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
// continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " ทั่วไป "
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับปฏิบัติงาน.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level1(Guid periodId, Guid ocId)
{
try
{
//var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
//var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
//if (oc == null)
// throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var inst_profile = allProfilesByRoot
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
ProfileInsignia = p.ProfileInsignia
});
// 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 == "ปฏิบัติงาน" // ปฏิบัติงาน
&& p.ProfileInsignia == null
//&& p.ProfileInsignia.Count > 0
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
// x.InsigniaId.Value == GetInsigniaByName("เบญจมาภรณ์มงกุฎไทย").Id)
// .ToList()
// .Count() == 0)
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("เบญจมาภรณ์มงกุฎไทย"),
Seq = 1,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})).ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& p.PosLevel.PosLevelName == "ปฏิบัติงาน"
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("เบญจมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("เบญจมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือนน้อยกว่า 10,190 บาท)",
Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
},
new MatchingCondition
{
Condition = $"2.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 10 ปี บริบูรณ์ (รับราชการก่อน { new DateTime(period.Year - 10, 5, 29).ToThaiFullDate3() })",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& p.PosLevel.PosLevelName == "ปฏิบัติงาน"
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("จัตุรถาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("จัตุรถาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 10,190 บาทขึ้นไป)",
Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
}
}
})
.ToList();
var s4 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& p.PosLevel.PosLevelName == "ปฏิบัติงาน"
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("จัตุรถาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("จัตุรถาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 10,190 บาทขึ้นไป)",
Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
},
new MatchingCondition
{
Condition = $"2.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 10 ปี บริบูรณ์ (รับราชการก่อน { new DateTime(period.Year - 10, 5, 29).ToThaiFullDate3() })",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s4)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับชำนาญงาน.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
/// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level2(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& p.PosLevel.PosLevelName == "ชำนาญงาน"
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ตริตาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ตริตาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับชำนาญงาน",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& p.PosLevel.PosLevelName == "ชำนาญงาน"
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ตริตาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ตริตาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ตริตาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญงาน").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญงาน").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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (เป็นระดับชำนาญงาน ก่อนวันที่ {(new DateTime(period.Year - 5, 5, 29)).ToThaiFullDate3()})",
Result = $"ดำรงตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel } ตั้งแต่วันที่ { (p.FirstPositonLevelDate == null ? "-" : p.FirstPositonLevelDate.Value.ToThaiFullDate3()) }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับอาวุโส.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
/// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level3(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& p.PosLevel.PosLevelName == "อาวุโส"
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับอาวุโส",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& p.PosLevel.PosLevelName == "อาวุโส"
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (เป็นระดับอาวุโส ก่อนวันที่ {(new DateTime(period.Year - 5, 5, 29)).ToThaiFullDate3()})",
Result = $"ดำรงตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel } ตั้งแต่วันที่ { (p.FirstPositonLevelDate == null ? "-" : p.FirstPositonLevelDate.Value.ToThaiFullDate3()) }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับทักษะพิเศษ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
/// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level4(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& (p.PosLevel.PosLevelName == "อาวุโส" || p.PosLevel.PosLevelName == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับทักษะพิเศษ",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& (p.PosLevel.PosLevelName == "อาวุโส" || p.PosLevel.PosLevelName == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้รับ ท.ช. ก่อนวันที่ {(new DateTime(period.Year - 3, 7, 28)).ToThaiFullDate3()})",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "ทั่วไป"
&& (p.PosLevel.PosLevelName == "อาวุโส" || p.PosLevel.PosLevelName == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ ป.ม. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " วิชาการ "
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับปฏิบัติการ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level5(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ตริตาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ตริตาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
Seq = 1,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level6(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ชำนาญการ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ตริตาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ตริตาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ตริตาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับชำนาญการ",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ชำนาญการ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.SalaryCondition >= 22140)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญการพิเศษ (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 22,140 บาท)",
Result = $"เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition } บาท"
},
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ชำนาญการ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.SalaryCondition >= 22140)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญการพิเศษมาแล้วไม่น้อยกว่า 5 ปี (เงินเดือนก่อนวันที่ { (new DateTime(period.Year-5, 4, 29)).ToThaiFullDate3() } 22,140 บาท)",
Result = $"เงินเดือนก่อนวันที่ { (new DateTime(period.Year-5, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition } บาท"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการพิเศษ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level7(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ชำนาญการพิเศษ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการพิเศษ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการพิเศษ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับชำนาญการพิเศษ",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ชำนาญการพิเศษ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการพิเศษ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ชำนาญการพิเศษ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
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.Value.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับเชี่ยวชาญ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level8(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "เชี่ยวชาญ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "เชี่ยวชาญ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "เชี่ยวชาญ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับเชี่ยวชาญ",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "เชี่ยวชาญ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "เชี่ยวชาญ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "เชี่ยวชาญ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "เชี่ยวชาญ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "เชี่ยวชาญ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "เชี่ยวชาญ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 13000.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level9_1(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ทรงคุณวุฒิ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ทรงคุณวุฒิ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาวชิรมงกุฎ").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? "" : p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ทรงคุณวุฒิ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาปรมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Where(p => p.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ม.ว.ม. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 15600.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level9_2(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ทรงคุณวุฒิ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ทรงคุณวุฒิ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาวชิรมงกุฎ").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "วิชาการ"
&& (p.PosLevel.PosLevelName == "ทรงคุณวุฒิ") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาปรมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ทรงคุณวุฒิ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ม.ว.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })",
Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " อำนวยการ "
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type3_Level10(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "อำนวยการ"
&& (p.PosLevel.PosLevelName == "ต้น") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? "" : p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับอำนวยการ/ต้น",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "อำนวยการ"
&& (p.PosLevel.PosLevelName == "ต้น") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
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.Value.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type3_Level11(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "อำนวยการ"
&& (p.PosLevel.PosLevelName == "สูง") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "อำนวยการ"
&& (p.PosLevel.PosLevelName == "สูง") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "อำนวยการ"
&& (p.PosLevel.PosLevelName == "สูง") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาวชิรมงกุฎ").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "อำนวยการ").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " บริหาร "
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type4_Level10(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "บริหาร"
&& (p.PosLevel.PosLevelName == "ต้น") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "บริหาร"
&& (p.PosLevel.PosLevelName == "ต้น") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "บริหาร"
&& (p.PosLevel.PosLevelName == "ต้น") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาวชิรมงกุฎ").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "ต้น" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).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<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type4_Level11(Guid periodId, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "บริหาร"
&& (p.PosLevel.PosLevelName == "สูง") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์มงกุฎไทย").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s2 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "บริหาร"
&& (p.PosLevel.PosLevelName == "สูง") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาวชิรมงกุฎ").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("ประถมาภรณ์ช้างเผือก").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s3 = (from p in allProfilesByRoot
where p.PosType.PosTypeName == "บริหาร"
&& (p.PosLevel.PosLevelName == "สูง") // อาวุโส
&& p.ProfileInsignia != null
&& p.ProfileInsignia.Count > 0
&& (p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id &&
x.InsigniaId.Value == GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก").Id)
.ToList()
.Count() == 0)
//&& p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
// .OrderByDescending(x => x.Year)
// .FirstOrDefault().InsigniaId.Value != GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก").Id
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix,
FullName = $"{(p.Prefix == null ? null : p.Prefix)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position,
Rank = p.PosLevel.PosLevelName,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryPosition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null : p.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
Gender = p.Gender == null ? null : p.Gender,
IsHigherLevel = p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? true :
IsHigherLevel(GetInsigniaById(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().InsigniaId.Value).Name,
"มหาปรมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel.PosLevelName,
PositionType = p.PosType == null ? "" : p.PosType.PosTypeName,
FirstPositonLevelDate = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault() == null ? null :
p.ProfileSalary.Where(x => x.PositionLevel == "สูง" && x.PositionType == "บริหาร").OrderBy(p => p.Date).FirstOrDefault().Date,
FirstRecvInsigniaYear = p.ProfileInsignia.Count == 0 ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.ProfileInsignia.Where(x => x.InsigniaId.Value == GetInsigniaByName("มหาวชิรมงกุฎ").Id).OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ม.ว.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.Value.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#endregion
#region " Public "
/// <summary>
/// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเครื่องราช
/// </summary>
/// <param name="periodId">รหัสของรอบการขอ</param>
/// <param name="ocId">รหัสโรงเรียน</param>
/// <returns></returns>
//public async Task<List<InsigniaResultSet>> GetInsigniaCandidate(Guid periodId, Guid ocId)
//{
// try
// {
// var allOc = GetAllIdByRoot(ocId);
// var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
// if (period == null)
// throw new Exception(GlobalMessages.CoinPeriodNotFound);
// var oc = await _dbContext.Set<OrganizationEntity>().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<Profile>()
// .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<Profile>()
// .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<Profile>()
// .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<Profile>()
// .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<Profile>()
// .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<Profile>()
// .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<Profile>()
// .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<Profile>()
// .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<Profile>()
// .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<InsigniaResultSet>();
// if (s1.Count() > 0)
// ret.AddRange(s1);
// if (s2_1.Count() > 0)
// ret.AddRange(s2_1);
// if (s3_1.Count() > 0)
// ret.AddRange(s3_1);
// if (s4.Count() > 0)
// ret.AddRange(s4);
// if (s5_1.Count() > 0)
// ret.AddRange(s5_1);
// if (s6.Count() > 0)
// ret.AddRange(s6);
// if (s7_1.Count() > 0)
// ret.AddRange(s7_1);
// if (s8_1.Count() > 0)
// ret.AddRange(s8_1);
// if (s9.Count() > 0)
// ret.AddRange(s9);
// return ret.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList();
// }
// catch
// {
// throw;
// }
//}
public async Task<List<InsigniaResultSet>> GetInsigniaCandidateBKK(Guid periodId, Guid ocId)
{
try
{
var result_candidate = new List<InsigniaResultSet>();
if (ocId != Guid.Parse("e8493cd1-d371-402e-add6-566e68d5d1b3")) return result_candidate;
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<List<InsigniaResultSet>> GetEmployeeInsigniaCandidateBKK(Guid periodId, Guid ocId)
{
try
{
var result_candidate = new List<InsigniaResultSet>();
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<List<InsigniaResultSet>> GetCoinCandidate(Guid periodId, Guid ocId)
{
try
{
//var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var allProfilesByRoot = (await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
//var inst_profile = _dbContext.Set<Profile>()
// .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,
// });
var inst_profile = allProfilesByRoot.Where(x => x.DateAppoint != null)
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? "" : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PosNo,
PositionLevelId = p.PosLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosLevel.Id,
PositionLevelName = p.PosLevel == null ? null : p.PosLevel.PosLevelName,
PositionTypeId = p.PosType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosType.Id,
PositionTypeName = p.PosType == null ? null : p.PosType.PosTypeName,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? "" :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).FirstOrDefault() == null ? Guid.Empty :
GetInsigniaById(p.ProfileInsignia.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id).OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Id,
Salary = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 : p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.Amount,
//SalaryCondition = p.ProfileSalary == null ? 0 : p.ProfileSalary.Amount,
SalaryCondition = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault() != null ?
p.ProfileSalary.Where(x => x.Date.Value <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount :
p.ProfileSalary.OrderBy(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.ProfileSalary == null || p.ProfileSalary.Count == 0 ? 0 :
p.ProfileSalary!.OrderByDescending(x => x.Order).FirstOrDefault()!.PositionSalaryAmount,
});
// 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<MatchingCondition>(),
})).ToList();
var result_candidate = new List<InsigniaResultSet>();
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<string> CalStatusByDate(DateTime start, DateTime end, string year)
{
var nowDate = DateTime.Now;
if (nowDate.Year < Int32.Parse(year) || nowDate.Year > Int32.Parse(year)) return "ไม่ใช้งาน";
if (nowDate.Date >= start.Date && nowDate.Date <= end.Date) return "ใช้งาน";
return "ไม่ใช้งาน";
}
public async Task<Guid?> GetRequestId(Guid period, Guid ocId)
{
try
{
var req = await _dbContext.Set<InsigniaRequest>()
.Where(x => x.OrganizationId != null)
.FirstOrDefaultAsync(x => x.Period.Id == period && x.OrganizationId == 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<InsigniaRequestProfile>()
.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<InsigniaResults?> GetInsigniaRequest(Guid id, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>()
.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<InsigniaRequest>()
.Include(x => x.Document)
//.Include(x => x.Organization)
//.ThenInclude(x => x.OrganizationOrganization)
.FirstOrDefaultAsync(x => x.Period.Id == period.Id && x.OrganizationId == ocId);
var oc = _userProfileRepository.GetOc(ocId, 0, AccessToken);
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 ? "" : oc.Root,
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<Insignias>().AsQueryable()
// .Include(x => x.InsigniaType)
// .Where(x => id != null ? x.Id == id : x.Name.Contains("ตริตาภรณ์มงกุฎไทย"))
// .Select(i => new InsigniaItem
// {
// Id = i.Id,
// Name = i.Name,
// ShortName = i.ShortName,
// Level = i.InsigniaType.Description,
// LevelId = i.InsigniaType.Id
// }).FirstOrDefault();
// return insignia;
// }
// catch
// {
// throw;
// }
// }
// ดึงข้อมูลเอกสารแนบ
// TODO: return empty for POC Only.
// public async List<InsigniaRequestDoc> GetDocFile(string profile)
// {
// // return empty for POC Only.
// return new List<InsigniaRequestDoc>();
// }
// Get Profile
// public async List<InsigniaProfileResult> GetProfileByInstitute(Guid ocId)
// {
// try
// {
// var profiles = (await _dbContext.Set<Profile>()
// .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<List<InsigniaRequestItem>> InsigniaHasProfile(Guid period, Guid ocId, string status)
{
try
{
var id = await GetRequestId(period, ocId);
if (id != null)
{
var raw_result = _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Request)
.Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType)
.Where(h => status.Trim().ToUpper() == "ALL" ? h.Status != null : h.Status == status.Trim().ToUpper())
.Where(h => h.Request.Id == id)
.ToList();
var pre_result = raw_result
.Select(h => new
{
Id = h.Id,
Profile = _userProfileRepository.GetOfficerProfileById(h.ProfileId, AccessToken),
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,
Salary = h.Salary == null ? 0 : h.Salary.Value,
// Docs = GetDocFile(h.Profile.Id),
MatchingConditions = h.MatchingConditions == null || h.MatchingConditions == "" ? null : JsonConvert.DeserializeObject<List<MatchingCondition>>(h.MatchingConditions)
})
.ToList();
var result = (pre_result
.Select(h => new InsigniaRequestItem
{
Id = h.Id,
CitizenId = h.Profile.CitizenId,
ProfileId = h.Profile.Id,
ProfileType = "officer",
//ProfileType = h.Profile.ProfileType,
FullName = $"{h.Profile.Prefix}{h.Profile.FirstName} {h.Profile.LastName}",
Position = h.Profile.Position,
PosNo = h.Profile.ProfileSalary == null || h.Profile.ProfileSalary.Count == 0 ? "" :
h.Profile.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PosNo,
Rank = h.Profile.PosLevel.PosLevelName,
Salary = h.Salary.ToString(),
LastInsignia = h.Profile.ProfileInsignia == null || h.Profile.ProfileInsignia.Count == 0 ? "" :
GetInsigniaById(h.Profile.ProfileInsignia.OrderByDescending(x => x.Year).FirstOrDefault().Id.Value).Name,
RequestInsignia = h.RequestInsignia,
RequestInsigniaShortName = h.RequestInsigniaShortName,
Level = h.Level,
IsApprove = h.IsApprove,
RequestDate = h.RequestDate,
Status = h.Status,
RequestNote = h.RequestNote,
Reason = h.Reason,
MarkDiscipline = h.MarkDiscipline,
MarkLeave = h.MarkLeave,
MarkRate = h.MarkRate,
// Docs = GetDocFile(h.Profile.Id),
MatchingConditions = h.MatchingConditions
})).ToList();
return result;
}
else
{
return null;
}
}
catch
{
throw;
}
}
// เช็คข้อมูลนำเข้า กับข้อมูลที่อยู่ใน database
// public async List<InsigniaRequestProfile> GetDuplicate(List<InsigniaRequestProfile> income, Guid period, Guid ocId, bool Duplicate = false)
// {
// try
// {
// var id = GetRequestId(period, ocId);
// var req = await _dbContext.Set<InsigniaRequests>().FirstOrDefault(x => x.Id == id);
// if (req == null)
// throw new Exception(GlobalMessages.InsigniaNotFound);
// var profile = await _dbContext.Set<InsigniaRequestsProfiles>().AsQueryable()
// .Include(x => x.RequestInsignia)
// .ThenInclude(x => x.InsigniaType)
// .Include(x => x.Profile)
// .ThenInclude(x => x.Insignias)
// .Where(x => x.Request.Id == id)
// .Select(h => new DuplicateProfile
// {
// ProfileId = h.Profile.Id,
// IsApprove = h.IsApprove,
// RequestQualificationStatus = h.QualificationStatus,
// RequestDocumentStatus = h.DocumentStatus,
// Special = h.Special
// });
// var newIncome = income.GroupJoin(profile,
// pdb => pdb.Profile.Id,
// dp => dp.ProfileId,
// (pdb, dp) => new
// {
// Profile = pdb.Profile,
// pdb.Profile.Insignias,
// pdb.RequestInsignia,
// //pdb.RequestInsignia.InsigniaType,
// pdb.Salary,
// pdb.RequestDate,
// ProfileDB = dp
// })
// .ToList()
// .Where(d => !Duplicate ? d.ProfileDB.Count() == 0 : d.ProfileDB.Count() != 0)
// .Select(d => !Duplicate ? new InsigniaRequestProfile
// {
// Request = req,
// Profile = d.Profile,
// RequestInsignia = d.RequestInsignia,
// Salary = d.Salary,
// RequestDate = d.RequestDate,
// } : new InsigniaRequestProfile
// {
// Request = req,
// Profile = d.Profile,
// RequestInsignia = d.RequestInsignia,
// Salary = d.Salary,
// RequestDate = d.RequestDate,
// IsApprove = d.ProfileDB.First().IsApprove,
// QualificationStatus = d.ProfileDB.First().RequestQualificationStatus,
// DocumentStatus = d.ProfileDB.First().RequestDocumentStatus,
// Special = d.ProfileDB.First().Special
// })
// .ToList();
// return newIncome;
// }
// catch
// {
// throw;
// }
// }
// ลบข้อมูลใน db ที่ไม่เท่ากับ income
// public async List<InsigniaRequestProfile> DeleteProfile(List<InsigniaRequestProfile> income, Guid period, Guid ocId)
// {
// try
// {
// var id = GetRequestId(period, ocId);
// var incomProfileId = income.Select(i => i.Profile.Id).ToList();
// var arrayData = await _dbContext.Set<InsigniaRequestsProfiles>().AsQueryable()
// .Where(i => !(incomProfileId.Contains(i.Profile.Id)) && i.Request.Id == id)
// .ToList();
// return arrayData;
// }
// catch
// {
// throw;
// }
// }
// insert candidate list
public async Task InsertCandidate(Guid periodId, Guid ocId, List<InsigniaResultSet> items)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var periodOlds = await _dbContext.Set<InsigniaPeriod>().Where(p => p.Year == period.Year).ToListAsync();
foreach (var periodOld in periodOlds)
{
var requestOlds = await _dbContext.Set<InsigniaRequest>().Where(p => p.Period == periodOld).ToListAsync();
foreach (var requestOld in requestOlds)
{
var profileOlds = await _dbContext.Set<InsigniaRequestProfile>().Where(p => p.Request == requestOld).Select(x => x.ProfileId).ToListAsync();
items = items.Where(x => !profileOlds.Contains(x.ProfileId)).ToList();
}
}
//var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
var oc = _userProfileRepository.GetOc(ocId, 0, AccessToken);
//if (oc == null)
// throw new Exception(GlobalMessages.OCNotFound);
var req = new InsigniaRequest
{
Period = period,
OrganizationId = oc!.RootId!.Value,
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<Profile>().FirstOrDefaultAsync(p => p.Id == item.ProfileId);
var pf = _userProfileRepository.GetOfficerProfileById(item.ProfileId, AccessToken);
var req_insignia = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(i => i.Id == item.RequestInsignia.Id);
if (pf != null)
{
req.RequestProfiles.Add(new InsigniaRequestProfile
{
Status = "PENDING",
ProfileId = pf.Id,
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<InsigniaRequest>().AddAsync(req);
await _dbContext.SaveChangesAsync();
}
catch
{
throw;
}
}
// เช็คข้อมูลใน kp7insignia
// public async ProfileInsignia ListKp7Insignia(string name, string profile, int year)
// {
// try
// {
// var item = await _dbContext.Set<ProfileInsignias>().AsQueryable()
// .Include(x => x.Insignia)
// .Include(x => x.Profile)
// .FirstOrDefault(x => x.Profile.Id == profile &&
// x.Year == year &&
// x.Insignia.Name.Contains(name));
// return item;
// }
// catch
// {
// throw;
// }
// }
// บันทึกข้อมูลลง กพ.7
// public async ProfileInsignia InsertKp7Insignia(InsigniaKp7Item kp7, InsigniaProfile profile)
// {
// try
// {
// var pf = await _dbContext.Set<Profiles>().FirstOrDefault(x => x.Id == profile.FkProfileId);
// var insignia = await _dbContext.Set<Insignias>().FirstOrDefault(x => x.Name == profile.InsigniaName);
// var kp7Insignia = new ProfileInsignia
// {
// Profile = pf,
// Year = DateTime.Now.Year,
// DateReceive = kp7.InsigniaDatereceive.Value,
// Insignia = insignia,
// Level = kp7.InsigniaLevel,
// No = profile.InsigniaNo,
// Issue = kp7.InsigniaIssue,
// VolumeNo = kp7.InsigniaVolumeno.Value.ToString(),
// Volume = kp7.InsigniaVolume,
// Section = kp7.InsigniaSection,
// DateStamp = DateTime.Now,
// DateAnnounce = kp7.InsigniaDateannounce.Value,
// Page = profile.InsigniaPage,
// };
// return kp7Insignia;
// }
// catch
// {
// throw;
// }
// }
// update กพ.7
// public async ProfileInsignia UpdateKp7Insignia(Guid id)
// {
// try
// {
// var item = await _dbContext.Set<ProfileInsignias>().FirstOrDefaultAsync(x => x.Id == id);
// return item;
// }
// catch
// {
// throw;
// }
// }
#endregion
}
}