7159 lines
No EOL
436 KiB
C#
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
|
|
}
|
|
} |