hrms-api-backend/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs
2024-11-18 18:43:46 +07:00

7159 lines
No EOL
436 KiB
C#

using BMA.EHR.Application.Common.Interfaces;
using BMA.EHR.Application.Requests;
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;
using BMA.EHR.Application.Responses.Profiles;
using ProfileInsignia = BMA.EHR.Domain.Models.HR.ProfileInsignia;
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();
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();
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 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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 coinInsignia = await _dbContext.Set<Insignia>()
.FirstOrDefaultAsync(x => x.Name.Contains("เหรียญจักรพรรดิมาลา"));
var inst_profile = allProfilesByRoot
.Select(p => new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0
? null
: p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!
.Insignia,
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.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.Amount,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
});
// 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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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)
select new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0
? null
: p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!
.Insignia,
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.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.Amount,
IsHigherLevel = IsHigherLevel(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"เบญจมาภรณ์ช้างเผือก"),
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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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)
select new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevel == null
? Guid.Parse("00000000-0000-0000-0000-000000000000")
: p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0
? null
: p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!
.Insignia,
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.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.Amount,
IsHigherLevel = IsHigherLevel(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"จัตุรถาภรณ์มงกุฎไทย"),
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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}"
}
},
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 coinInsignia = await _dbContext.Set<Insignia>()
.FirstOrDefaultAsync(x => x.Name.Contains("เหรียญจักรพรรดิมาลา"));
var inst_profile = allProfilesByRoot
.Select(p => new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0
? null
: p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!
.Insignia,
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.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.Amount,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
});
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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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)
select new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0
? null
: p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!
.Insignia,
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.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.Amount,
IsHigherLevel = IsHigherLevel(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"จัตุรถาภรณ์มงกุฎไทย"),
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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)
select new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0
? null
: p.ProfileInsignia!.OrderByDescending(x => x.Year).FirstOrDefault()!
.Insignia,
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.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.Amount,
IsHigherLevel = IsHigherLevel(p.ProfileInsignia.ToList()
.Where(x => x.InsigniaId.Value != coinInsignia.Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"จัตุรถาภรณ์ช้างเผือก"),
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 inst_profile = allProfilesByRoot
.Select(p => new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
ProfileInsignia = p.ProfileInsignia,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
});
// 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
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "ทั่วไป"
&& p.PosLevel == "ปฏิบัติงาน"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel = IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"เบญจมาภรณ์ช้างเผือก"),
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "ทั่วไป"
&& p.PosLevel == "ปฏิบัติงาน"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"จัตุรถาภรณ์มงกุฎไทย"),
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(x => x.SalaryCondition >= 10190 && !x.IsHigherLevel)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "ทั่วไป"
&& p.PosLevel == "ปฏิบัติงาน"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"จัตุรถาภรณ์ช้างเผือก"),
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.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,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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="Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level2(Guid periodId, Guid ocId,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "ทั่วไป"
&& p.PosLevel == "ชำนาญงาน"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ตริตาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "ทั่วไป"
&& p.PosLevel == "ชำนาญงาน"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ตริตาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29))
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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="Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level3(Guid periodId, Guid ocId,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "ทั่วไป"
&& p.PosLevel == "อาวุโส"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "ทั่วไป"
&& p.PosLevel == "อาวุโส"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29))
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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="Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level4(Guid periodId, Guid ocId,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "ทั่วไป"
&& (p.PosLevel == "อาวุโส" ||
p.PosLevel == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "ทั่วไป"
&& (p.PosLevel == "อาวุโส" ||
p.PosLevel == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "ทั่วไป"
&& (p.PosLevel == "อาวุโส" ||
p.PosLevel == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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>
/// <param name="allProfilesByRoot"></param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level5(Guid periodId, Guid ocId,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "วิชาการ"
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ตริตาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "วิชาการ"
&& (p.PosLevel == "ชำนาญการ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ตริตาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "ชำนาญการ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.SalaryCondition >= 22140)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "ชำนาญการ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.SalaryCondition >= 22140)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "วิชาการ"
&& (p.PosLevel == "ชำนาญการพิเศษ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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 == "วิชาการ"
&& (p.PosLevel == "ชำนาญการพิเศษ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.SalaryCondition >= 58390)
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "วิชาการ"
&& (p.PosLevel == "เชี่ยวชาญ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "เชี่ยวชาญ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "เชี่ยวชาญ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "วิชาการ"
&& (p.PosLevel == "ทรงคุณวุฒิ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "ทรงคุณวุฒิ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo == null ? "" : p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "ทรงคุณวุฒิ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาปรมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Where(p => p.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "วิชาการ"
&& (p.PosLevel == "ทรงคุณวุฒิ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "ทรงคุณวุฒิ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "วิชาการ"
&& (p.PosLevel == "ทรงคุณวุฒิ") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาปรมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "อำนวยการ"
&& (p.PosLevel == "ต้น") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo == null ? "" : p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ทวีติยาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "อำนวยการ"
&& (p.PosLevel == "ต้น") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.SalaryCondition >= 58390)
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "อำนวยการ"
&& (p.PosLevel == "สูง") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "อำนวยการ"
&& (p.PosLevel == "สูง") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "อำนวยการ"
&& (p.PosLevel == "สูง") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "บริหาร"
&& (p.PosLevel == "ต้น") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์มงกุฎไทย"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "บริหาร"
&& (p.PosLevel == "ต้น") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "บริหาร"
&& (p.PosLevel == "ต้น") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
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 s1 = (from p in allProfilesByRoot
where p.PosType == "บริหาร"
&& (p.PosLevel == "สูง") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"ประถมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "บริหาร"
&& (p.PosLevel == "สูง") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาวชิรมงกุฎ"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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 == "บริหาร"
&& (p.PosLevel == "สูง") // อาวุโส
&& 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,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
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,
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 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.Amount,
SalaryPosition = p.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.Amount,
PosNo = p.PosNo,
Gender = p.Gender == null ? null : p.Gender,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
IsHigherLevel =
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null
? true
: IsHigherLevel(p.ProfileInsignia
.Where(x => x.InsigniaId.Value !=
GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia,
"มหาปรมาภรณ์ช้างเผือก"),
PositionLevel = p.PosLevel == null ? "" : p.PosLevel,
PositionType = p.PosType == null ? "" : p.PosType,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
CitizenId = p.CitizenId,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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,
PositionSalaryAmount = p.PositionSalaryAmount,
Amount = p.Amount,
RootId = p.RootId,
Root = p.Root,
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>> GetInsigniaCandidateBKK(Guid periodId, Guid ocId)
{
try
{
var result_candidate = new List<InsigniaResultSet>();
var allOfficerProfilesByRoot =
(await _userProfileRepository.GetOfficerProfileByRootIdAsync(ocId, AccessToken));
//var allEmployeeProfileByRoot =
// (await _userProfileRepository.GetEmployeeProfileByRootIdAsync(ocId, AccessToken));
var type_coin = await GetCoinCandidate(periodId, ocId, allOfficerProfilesByRoot);
var type1_level1 = await GetInsigniaCandidate_Type1_Level1(periodId, ocId, allOfficerProfilesByRoot);
var type1_level2 = await GetInsigniaCandidate_Type1_Level2(periodId, ocId, allOfficerProfilesByRoot);
var type1_level3 = await GetInsigniaCandidate_Type1_Level3(periodId, ocId, allOfficerProfilesByRoot);
var type1_level4 = await GetInsigniaCandidate_Type1_Level4(periodId, ocId, allOfficerProfilesByRoot);
var type2_level5 = await GetInsigniaCandidate_Type2_Level5(periodId, ocId, allOfficerProfilesByRoot);
var type2_level6 = await GetInsigniaCandidate_Type2_Level6(periodId, ocId, allOfficerProfilesByRoot);
var type2_level7 = await GetInsigniaCandidate_Type2_Level7(periodId, ocId, allOfficerProfilesByRoot);
var type2_level8 = await GetInsigniaCandidate_Type2_Level8(periodId, ocId, allOfficerProfilesByRoot);
var type2_level9_1 =
await GetInsigniaCandidate_Type2_Level9_1(periodId, ocId, allOfficerProfilesByRoot);
var type2_level9_2 =
await GetInsigniaCandidate_Type2_Level9_2(periodId, ocId, allOfficerProfilesByRoot);
var type3_level10 = await GetInsigniaCandidate_Type3_Level10(periodId, ocId, allOfficerProfilesByRoot);
var type3_level11 = await GetInsigniaCandidate_Type3_Level11(periodId, ocId, allOfficerProfilesByRoot);
var type4_level10 = await GetInsigniaCandidate_Type4_Level10(periodId, ocId, allOfficerProfilesByRoot);
var type4_level11 = await GetInsigniaCandidate_Type4_Level11(periodId, ocId, allOfficerProfilesByRoot);
// 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);
}
// TODO : Remove for Test Error
//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>> GetCoinCandidate(Guid periodId, Guid ocId,
List<GetProfileByRootIdDto> allProfilesByRoot)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var inst_profile = allProfilesByRoot.Where(x => x.DateAppoint != null)
.Select(p => new
{
ProfileId = p.Id,
p.CitizenId,
p.FirstName,
p.LastName,
p.BirthDate,
p.DateAppoint,
Prefix = p.Prefix ?? "",
FullName = $"{(p.Prefix ?? "")}{p.FirstName} {p.LastName}",
Position = p.Position ?? "",
Rank = p.PosLevel,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo,
PositionLevelId = p.PosLevelId,
PositionLevelName = p.PosLevel,
PositionTypeId = p.PosTypeId,
PositionTypeName = p.PosType,
Gender = p.Gender ?? "",
LastInsignia = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? "" :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().Insignia,
LastInsigniaId = p.ProfileInsignia == null || p.ProfileInsignia.Count == 0 ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.FirstOrDefault() == null ? Guid.Empty :
p.ProfileInsignia
.Where(x => x.InsigniaId.Value != GetInsigniaByName("เหรียญจักรพรรดิมาลา").Id)
.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId,
Salary = p.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.Amount,
PositionSalaryAmount = p.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,
CitizenId = p.CitizenId,
Prefix = p.Prefix,
FirstName = p.FirstName,
LastName = p.LastName,
PosLevelName = p.PositionLevelName,
PosTypeName = p.PositionTypeName,
PositionSalary = p.PositionSalaryAmount,
BirthDate = p.BirthDate,
DateAppoint = p.DateAppoint,
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)
.FirstOrDefaultAsync(x => x.Period.Id == period.Id && x.OrganizationId == ocId);
return new InsigniaResults
{
PeriodId = period.Id,
Year = period.Year,
Round = period.Round,
Name = period.Name,
IsLock = period.IsLock,
RequestId = request == null ? null : request.Id,
RequestNote = request == null ? "" : request.RequestNote,
RequestStatus = request == null ? null : request.RequestStatus,
OrganizationName = request == null ? "" : request.Organization,
Document = request == null
? null
: (request.Document == null
? null
: await _documentService.ImagesPath(request.Document.Id)),
};
}
}
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 result = raw_result
.Select(h => new InsigniaRequestItem
{
Id = h.Id,
CitizenId = h.CitizenId,
ProfileId = h.ProfileId,
ProfileType = h.ProfileType,
FullName = $"{h.Prefix}{h.FirstName} {h.LastName}",
Position = h.Position,
PosNo = h.PosNo,
Rank = $"{h.PosTypeName}/{h.PosLevelName}",
Salary = h.Salary.ToString(),
LastInsignia = h.LastInsigniaName,
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,
MatchingConditions = h.MatchingConditions == null || h.MatchingConditions == ""
? null
: JsonConvert.DeserializeObject<List<MatchingCondition>>(h.MatchingConditions)
})
.ToList();
return result;
}
else
{
return null;
}
}
catch
{
throw;
}
}
// เช็คข้อมูลนำเข้า กับข้อมูลที่อยู่ใน database
// public async List<InsigniaRequestProfile> GetDuplicate(List<InsigniaRequestProfile> income, Guid period, Guid ocId, bool Duplicate = false)
// {
// try
// {
// var id = GetRequestId(period, ocId);
// var req = await _dbContext.Set<InsigniaRequests>().FirstOrDefault(x => x.Id == id);
// if (req == null)
// throw new Exception(GlobalMessages.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, string oc, 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 req = new InsigniaRequest
{
Period = period,
OrganizationId = ocId,
Organization = oc,
RequestStatus = "st1",
RequestNote = "",
CreatedFullName = FullName ?? "System Administrator",
CreatedUserId = UserId ?? "",
CreatedAt = DateTime.Now,
LastUpdateFullName = FullName ?? "System Administrator",
LastUpdateUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
};
foreach (var item in items)
{
var reqInsignia = await _dbContext.Set<Insignia>()
.FirstOrDefaultAsync(i => i.Id == item.RequestInsignia.Id);
if (reqInsignia == null) throw new Exception(GlobalMessages.InsigniaNotFound);
req.RequestProfiles.Add(new InsigniaRequestProfile
{
Status = "PENDING",
ProfileId = item.ProfileId,
RequestInsignia = reqInsignia,
Salary = item.Salary,
RequestDate = DateTime.Now,
MatchingConditions =
System.Text.Json.JsonSerializer.Serialize(item.MatchingConditions),
CreatedFullName = FullName ?? "System Administrator",
CreatedUserId = UserId ?? "",
CreatedAt = DateTime.Now,
LastUpdateFullName = FullName ?? "System Administrator",
LastUpdateUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
// Add Information for reused in API Call
ProfileType = item.ProfileType ?? "officer",
Prefix = item.Prefix,
FirstName = item.FirstName,
LastName = item.LastName,
CitizenId = item.CitizenId,
BirthDate = item.BirthDate,
DateAppoint = item.DateAppoint,
Position = item.Position,
Gender = item.Gender,
PosTypeName = item.PosTypeName,
PosLevelName = item.PosLevelName,
PosNo = item.PosNo,
Amount = item.Salary,
PositionSalaryAmount = item.PositionSalary,
LastInsigniaName = item.LastInsignia,
Root = item.Root,
RootId = item.RootId,
});
}
await _dbContext.Set<InsigniaRequest>().AddAsync(req);
await _dbContext.SaveChangesAsync();
}
catch
{
throw;
}
}
#endregion
}
}