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

6118 lines
403 KiB
C#

using BMA.EHR.Application.Common.Interfaces;
using BMA.EHR.Application.Requests;
using BMA.EHR.Domain.Models.HR;
using BMA.EHR.Domain.Models.Insignias;
using BMA.EHR.Domain.Models.MetaData;
using BMA.EHR.Domain.Models.OrganizationEmployee;
using BMA.EHR.Domain.Shared;
using BMA.EHR.Domain.Extensions;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using BMA.EHR.Domain.Models.Organizations;
using Amazon.S3.Model.Internal.MarshallTransformations;
namespace BMA.EHR.Application.Repositories
{
public class InsigniaPeriodsRepository : GenericRepository<Guid, InsigniaPeriod>
{
private readonly IApplicationDBContext _dbContext;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly MinIOService _documentService;
public InsigniaPeriodsRepository(IApplicationDBContext dbContext,
MinIOService documentService,
IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
_dbContext = dbContext;
_httpContextAccessor = httpContextAccessor;
_documentService = documentService;
}
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;
}
}
private InsigniaItem? GetInsigniaByName(string name)
{
try
{
var insignia = _dbContext.Set<Insignia>()
.Include(x => x.InsigniaType)
.Where(x => x.Name == name)
.Select(i => new InsigniaItem
{
Id = i.Id,
Name = i.Name,
ShortName = i.ShortName,
Level = i.InsigniaType.Name,
LevelId = i.InsigniaType.Id
})
.FirstOrDefault();
return insignia;
}
catch
{
throw;
}
}
private bool IsHigherLevel2(string last, string request)
{
try
{
var last_ins = _dbContext.Set<Insignia>().FirstOrDefault(x => x.Name.ToLower().Trim() == last.ToLower().Trim());
if (last_ins == null)
return true;
var req_ins = _dbContext.Set<Insignia>().FirstOrDefault(x => x.Name.ToLower().Trim() == request.ToLower().Trim());
if (req_ins == null)
throw new Exception("Invalid Request Insignia!!");
return req_ins.Level > last_ins.Level;
}
catch
{
throw;
}
}
private static bool IsHigherLevel(string last, string request)
{
if (request.Contains("ตริตาภรณ์ช้างเผือก"))
return (last.Contains("ตริตาภรณ์มงกุฎไทย")) ? false : true;
else if (request.Contains("ทวีติยาภรณ์มงกุฎไทย"))
return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
last.Contains("ตริตาภรณ์ช้างเผือก")) ? false : true;
else if (request.Contains("ทวีติยาภรณ์ช้างเผือก"))
return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
last.Contains("ตริตาภรณ์ช้างเผือก") ||
last.Contains("ทวีติยาภรณ์มงกุฎไทย")) ? false : true;
else if (request.Contains("ประถมาภรณ์มงกุฎไทย"))
return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
last.Contains("ตริตาภรณ์ช้างเผือก") ||
last.Contains("ทวีติยาภรณ์มงกุฎไทย") ||
last.Contains("ทวีติยาภรณ์ช้างเผือก")) ? false : true;
else if (request.Contains("ประถมาภรณ์ช้างเผือก"))
return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
last.Contains("ตริตาภรณ์ช้างเผือก") ||
last.Contains("ทวีติยาภรณ์มงกุฎไทย") ||
last.Contains("ทวีติยาภรณ์ช้างเผือก") ||
last.Contains("ประถมาภรณ์มงกุฎไทย")) ? false : true;
else if (request.Contains("มหาวชิรมงกุฎ"))
return (last.Contains("ตริตาภรณ์มงกุฎไทย") ||
last.Contains("ตริตาภรณ์ช้างเผือก") ||
last.Contains("ทวีติยาภรณ์มงกุฎไทย") ||
last.Contains("ทวีติยาภรณ์ช้างเผือก") ||
last.Contains("ประถมาภรณ์มงกุฎไทย") ||
last.Contains("ประถมาภรณ์ช้างเผือก")) ? false : true;
else return false;
}
// private InsigniaItem GetNextInsignia(string name)
// {
// if (name.Contains("ตริตาภรณ์มงกุฎไทย"))
// return GetInsigniaByName("ตริตาภรณ์ช้างเผือก");
// else if (name.Contains("ตริตาภรณ์ช้างเผือก"))
// return GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย");
// else if (name.Contains("ทวีติยาภรณ์มงกุฎไทย"))
// return GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก");
// else if (name.Contains("ทวีติยาภรณ์ช้างเผือก"))
// return GetInsigniaByName("ประถมาภรณ์มงกุฎไทย");
// else if (name.Contains("ประถมาภรณ์มงกุฎไทย"))
// return GetInsigniaByName("ประถมาภรณ์ช้างเผือก");
// else if (name.Contains("ประถมาภรณ์ช้างเผือก"))
// return GetInsigniaByName("มหาวชิรมงกุฎ");
// else return null;
// }
private bool CanRequestInsignia(Guid profileId, int year)
{
try
{
var ce_year = year;
var insignia = _dbContext.Set<ProfileInsignia>()
.Where(x => x.Profile.Id == 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.Profile.Id == profileId);
if (req != null)
return false;
else
return true;
}
}
}
catch
{
throw;
}
}
#region " Employee "
/// <summary>
/// กลุ่ม ลจ ที่ค่าจ้าง >= 8340 และ < 15050
/// </summary>
/// <param name="periodId"></param>
/// <param name="ocId"></param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetEmployeeInsignia_Type1(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var inst_profile = _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Where(p =>
allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) &&
p.IsActive == true &&
p.IsLeave == false &&
p.DateAppoint != null &&
p.ProfileType == "employee" &&
p.EmployeeClass == "perm"
)
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id,
PositionLevelName = p.PositionLevel == null ? null : p.PositionLevel.Name,
PositionTypeId = p.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionType.Id,
PositionTypeName = p.PositionType == null ? null : p.PositionType.Name,
Gender = p.Gender == null ? null : p.Gender.Name,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
//FirstRecvInsigniaYear1 = p.Insignias.Count == 0 ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
//FirstRecvInsigniaYear2 = p.Insignias.Count == 0 ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
});
// check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-8 ขอ บม.
var s1 = ((from p in inst_profile
where p.ProfileDateAppoint <= new DateTime(period.Year - 8, 5, 29)
&& p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000")
&& (p.SalaryCondition >= 8340
&& p.SalaryCondition < 15050)
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("เบญจมาภรณ์มงกุฎไทย"),
Seq = 1,
Gender = p.Gender,
MatchingConditions = new List<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 s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.ProfileType == "employee"
&& p.EmployeeClass == "perm"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("เบญจมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"เบญจมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
})
.ToList()
.Where(x => (x.SalaryCondition >= 8340 && x.SalaryCondition < 10150) && !x.IsHigherLevel)
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("เบญจมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<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 _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.ProfileType == "employee"
&& p.EmployeeClass == "perm"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"จัตุรถาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
})
.ToList()
.Where(x => (x.SalaryCondition >= 8340 && x.SalaryCondition < 10150) && !x.IsHigherLevel)
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("จัตุรถาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับปฏิบัติการ (8,340) แต่ไม่ถึงขั้นต่ำของอัตราเงินเดือนข้าราชการพลเรือนระดับชำนาญการ (15,050)",
Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }"
},
new MatchingCondition
{
Condition = $"2.ได้ บ.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ บ.ช. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})",
Result = $"ได้รับ บ.ช. ในปี { p.FirstRecvInsigniaYear }"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// กลุ่ม ลจ ที่ค่าจ้าง >= 15050
/// </summary>
/// <param name="periodId"></param>
/// <param name="ocId"></param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetEmployeeInsignia_Type2(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var inst_profile = _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Where(p =>
allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) &&
p.IsActive == true &&
p.IsLeave == false &&
p.DateAppoint != null &&
p.ProfileType == "employee" &&
p.EmployeeClass == "perm"
)
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id,
PositionLevelName = p.PositionLevel == null ? null : p.PositionLevel.Name,
PositionTypeId = p.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionType.Id,
PositionTypeName = p.PositionType == null ? null : p.PositionType.Name,
Gender = p.Gender == null ? null : p.Gender.Name,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount,
//FirstRecvInsigniaYear1 = p.Insignias.Count == 0 ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
//FirstRecvInsigniaYear2 = p.Insignias.Count == 0 ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
// p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
});
var s1 = ((from p in inst_profile
where p.ProfileDateAppoint <= new DateTime(period.Year - 8, 5, 29)
&& p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000")
&& (p.SalaryCondition >= 15050)
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("เบญจมาภรณ์ช้างเผือก"),
Seq = 1,
Gender = p.Gender,
MatchingConditions = new List<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 s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.ProfileType == "employee"
&& p.EmployeeClass == "perm"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"จัตุรถาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "เบญจมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
})
.ToList()
.Where(x => (x.SalaryCondition >= 10150) && !x.IsHigherLevel)
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("จัตุรถาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<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 _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.ProfileType == "employee"
&& p.EmployeeClass == "perm"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"จัตุรถาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "จัตุรถาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "จัตุรถาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
})
.ToList()
.Where(x => (x.SalaryCondition >= 10150) && !x.IsHigherLevel)
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("จัตุรถาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับอัตราค่าจ้างตั้งแต่อัตราเงินเดือนขั้นต่ำของข้าราขการพลเรือนระดับชำนาญการขึ้นไป (15,050)",
Result = $"อัตราค่าจ้าง { p.SalaryCondition.Value.ToString("#,##0") }"
},
new MatchingCondition
{
Condition = $"2.ได้ จ.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ จ.ม. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})",
Result = $"ได้รับ จ.ม. ในปี { p.FirstRecvInsigniaYear }"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " ทั่วไป "
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับปฏิบัติงาน.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level1(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var inst_profile = _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Where(p =>
allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) &&
p.IsActive == true &&
p.IsLeave == false &&
p.DateAppoint != null &&
p.PositionType != null &&
p.ProfileType == "officer" &&
p.PositionType.Name == "ทั่วไป" //
)
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id,
PositionLevelName = p.PositionLevel == null ? null : p.PositionLevel.Name,
PositionTypeId = p.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionType.Id,
PositionTypeName = p.PositionType == null ? null : p.PositionType.Name,
Gender = p.Gender == null ? null : p.Gender.Name,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount
});
// check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5
var s1 = ((from p in inst_profile
where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29)
&& p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000")
&& p.PositionLevelName == "ปฏิบัติงาน" // ปฏิบัติงาน
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("เบญจมาภรณ์มงกุฎไทย"),
Seq = 1,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }xxx1",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})).ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& p.PositionLevel.Name == "ปฏิบัติงาน" // ปฏิบัติงาน
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("เบญจมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"เบญจมาภรณ์ช้างเผือก"),
})
.ToList()
.Where(x => x.SalaryCondition < 10190 && !x.IsHigherLevel)
.Where(x => x.ProfileDateAppoint <= new DateTime(period.Year - 10, 5, 29))
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("เบญจมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือนน้อยกว่า 10,190 บาท)xxx2",
Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
},
new MatchingCondition
{
Condition = $"2.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 10 ปี บริบูรณ์ (รับราชการก่อน { new DateTime(period.Year - 10, 5, 29).ToThaiFullDate3() })",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป1
&& p.PositionLevel.Name == "ปฏิบัติงาน" // ปฏิบัติงาน1
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"จัตุรถาภรณ์มงกุฎไทย"),
})
.ToList()
.Where(x => x.SalaryCondition >= 10190 && !x.IsHigherLevel)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("จัตุรถาภรณ์มงกุฎไทย"),
Seq = 3,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 10,190 บาทขึ้นไป)xxx3",
Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
}
}
})
.ToList();
var s4 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป1
&& p.PositionLevel.Name == "ปฏิบัติงาน" // ปฏิบัติงาน1
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("จัตุรถาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"จัตุรถาภรณ์ช้างเผือก"),
})
.ToList()
.Where(x => x.SalaryCondition >= 10190 && !x.IsHigherLevel)
.Where(x => x.ProfileDateAppoint <= new DateTime(period.Year - 10, 5, 29))
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("จัตุรถาภรณ์ช้างเผือก"),
Seq = 4,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญงาน (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 10,190 บาทขึ้นไป)xxx4",
Result = $"ได้รับเงินเดือน { p.SalaryCondition } บาท"
},
new MatchingCondition
{
Condition = $"2.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 10 ปี บริบูรณ์ (รับราชการก่อน { new DateTime(period.Year - 10, 5, 29).ToThaiFullDate3() })",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s4)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับชำนาญงาน.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
/// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level2(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& p.PositionLevel.Name == "ชำนาญงาน" // ชำนาญงาน
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ตริตาภรณ์มงกุฎไทย"),
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับชำนาญงานxxx5",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
// .ThenInclude(p => p.SalaryPositionLevel)
.ThenInclude(p => p.PositionLevel)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& p.PositionLevel.Name == "ชำนาญงาน" // ชำนาญงาน
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ตริตาภรณ์ช้างเผือก"),
FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
p.Salaries.Where(x => x.PositionLevel.Name == "ชำนาญงาน").OrderBy(p => p.Date).FirstOrDefault().Date
})
.ToList()
.Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29))
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (เป็นระดับชำนาญงาน ก่อนวันที่ {(new DateTime(period.Year - 5, 5, 29)).ToThaiFullDate3()})xxx6",
Result = $"ดำรงตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel } ตั้งแต่วันที่ { (p.FirstPositonLevelDate == null ? "-" : p.FirstPositonLevelDate.Value.ToThaiFullDate3()) }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับอาวุโส.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
/// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level3(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& p.PositionLevel.Name == "อาวุโส" // อาวุโส
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์มงกุฎไทย"),
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับอาวุโสxxx7",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
// .ThenInclude(p => p.SalaryPositionLevel)
.ThenInclude(p => p.PositionLevel)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& p.PositionLevel.Name == "อาวุโส" // อาวุโส
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์ช้างเผือก"),
FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
p.Salaries.Where(x => x.PositionLevel.Name == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date
})
.ToList()
.Where(x => x.FirstPositonLevelDate < new DateTime(period.Year - 5, 5, 29))
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ดำรงตำแหน่งมาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (เป็นระดับอาวุโส ก่อนวันที่ {(new DateTime(period.Year - 5, 5, 29)).ToThaiFullDate3()})xxx8",
Result = $"ดำรงตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel } ตั้งแต่วันที่ { (p.FirstPositonLevelDate == null ? "-" : p.FirstPositonLevelDate.Value.ToThaiFullDate3()) }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภททั่วไป ระดับทักษะพิเศษ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
/// <exception cref="EHR.Bangkok.Models.Log.Exception"></exception>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type1_Level4(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& (p.PositionLevel.Name == "อาวุโส" || p.PositionLevel.Name == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์ช้างเผือก"),
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับทักษะพิเศษxxx9",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
// .ThenInclude(p => p.SalaryPositionLevel)
.ThenInclude(p => p.PositionLevel)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& (p.PositionLevel.Name == "อาวุโส" || p.PositionLevel.Name == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
p.Salaries.Where(x => x.PositionLevel.Name == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้รับ ท.ช. ก่อนวันที่ {(new DateTime(period.Year - 3, 7, 28)).ToThaiFullDate3()})xxx10",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
// .ThenInclude(p => p.SalaryPositionLevel)
.ThenInclude(p => p.PositionLevel)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "ทั่วไป" // ทั่วไป
&& (p.PositionLevel.Name == "อาวุโส" || p.PositionLevel.Name == "อาวุโส (เฉพาะสายงาน)") // อาวุโส
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
FirstPositonLevelDate = p.Salaries.Count == 0 ? null :
p.Salaries.Where(x => x.PositionLevel.Name == "อาวุโส").OrderBy(p => p.Date).FirstOrDefault().Date
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้รับ ป.ม. ก่อนวันที่ {(new DateTime(period.Year - 5, 7, 28)).ToThaiFullDate3()})xxx11",
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_Type2_Level5(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var inst_profile = _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Where(p =>
allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) &&
p.IsActive == true &&
p.IsLeave == false &&
p.DateAppoint != null &&
p.PositionType != null &&
p.PositionType.Name == "วิชาการ" && // ประเภทวิชาการ
p.ProfileType == "officer"
)
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
Rank = p.PositionLevel.Name,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
PositionLevelId = p.PositionLevel.Id,
PositionLevelName = p.PositionLevel.Name,
PositionTypeId = p.PositionType.Id,
PositionTypeName = p.PositionType.Name,
Gender = p.Gender == null ? null : p.Gender.Name,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PostionSalaryAmount = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount
});
// check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5
var s1 = ((from p in inst_profile
where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29)
&& p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000")
&& p.PositionLevelName == "ปฏิบัติการ" // ปฏิบัติการ
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
Seq = 1,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.รับราชการก่อน { new DateTime(period.Year - 5, 5, 29).ToThaiFullDate3() }xxx12",
Result = $"วันที่บรรจุเข้ารับราชการ { p.ProfileDateAppoint.ToThaiFullDate3() }"
}
}
})).ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level6(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "ชำนาญการ" // ชำนาญการ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ตริตาภรณ์ช้างเผือก"),
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับชำนาญการxxx13",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "ชำนาญการ" // ชำนาญการ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์มงกุฎไทย"),
})
.ToList()
.Where(p => p.SalaryCondition >= 22140)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญการพิเศษ (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 22,140 บาท)xxx14",
Result = $"เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition } บาท"
},
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "ชำนาญการ" // ชำนาญการ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.Date < new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์ช้างเผือก"),
})
.ToList()
.Where(p => p.SalaryCondition >= 22140)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนไม่ต่ำกว่าขั้นต่ำของระดับชำนาญการพิเศษมาแล้วไม่น้อยกว่า 5 ปี (เงินเดือนก่อนวันที่ { (new DateTime(period.Year-5, 4, 29)).ToThaiFullDate3() } 22,140 บาท)xxx15",
Result = $"เงินเดือนก่อนวันที่ { (new DateTime(period.Year-5, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition } บาท"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับชำนาญการพิเศษ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level7(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "ชำนาญการพิเศษ" // ชำนาญการพิเศษ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์ช้างเผือก"),
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับชำนาญการพิเศษxxx16",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "ชำนาญการพิเศษ" // ชำนาญการพิเศษ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.SalaryCondition >= 58390)
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนขั้นสูง (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 58,390 บาท)xxx17",
Result = $"เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition } บาท"
},
new MatchingCondition
{
Condition = $"2.ได้ ท.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับเชี่ยวชาญ.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level8(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "เชี่ยวชาญ" // เชี่ยวชสญ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์ช้างเผือก"),
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับเชี่ยวชาญxxx18",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "เชี่ยวชาญ" // เชี่ยวชาญ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })xxx19",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "เชี่ยวชาญ" // เชี่ยวชาญ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })xxx20",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 13000.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level9_1(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.ProfileType == "officer"
&& (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.Name == "ทรงคุณวุฒิ (เฉพาะสายงาน)") // ทรงคุณวุฒิ
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })xxx21",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.ProfileType == "officer"
&& (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.Name == "ทรงคุณวุฒิ (เฉพาะสายงาน)") // ทรงคุณวุฒิ
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาวชิรมงกุฎ"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })xxx22",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.ProfileType == "officer"
&& (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.Name == "ทรงคุณวุฒิ (เฉพาะสายงาน)") // ทรงคุณวุฒิ
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาปรมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาปรมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Where(p => p.SalaryPosition == 13000)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ม.ว.ม. ก่อนวันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() })xxx23",
Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 13,000 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
/// <summary>
/// Gets the insignia candidate ประเภทวิชาการ ระดับทรงคุณวุฒิ ได้เงินตำแหน้ง 15600.
/// </summary>
/// <param name="periodId">The period identifier.</param>
/// <param name="ocId">The oc identifier.</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type2_Level9_2(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.ProfileType == "officer"
&& (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.Name == "ทรงคุณวุฒิ (เฉพาะสายงาน)") // ทรงคุณวุฒิ
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(x => x.FirstRecvInsigniaYear != 0 && x.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })xxx24",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.ProfileType == "officer"
&& (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.Name == "ทรงคุณวุฒิ (เฉพาะสายงาน)") // ทรงคุณวุฒิ
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาวชิรมงกุฎ"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })xxx25",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.ProfileType == "officer"
&& (p.PositionLevel.Name == "ทรงคุณวุฒิ" || p.PositionLevel.Name == "ทรงคุณวุฒิ (เฉพาะสายงาน)") // ทรงคุณวุฒิ
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาปรมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาปรมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(p => p.SalaryPosition == 15600)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ม.ว.ม. ก่อนวันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() })xxx26",
Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 15,600 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " อำนวยการ "
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type3_Level10(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "อำนวยการ" // อำนวยการ
&& p.PositionLevel.Name == "ต้น" // ต้น
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ทวีติยาภรณ์ช้างเผือก"),
})
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.เป็นระดับอำนวยการ/ต้นxxx27",
Result = $"ตำแหน่ง { p.Position } ประเภท { p.PositionType } ระดับ { p.PositionLevel }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "วิชาการ" // วิชาการ
&& p.PositionLevel.Name == "ชำนาญการพิเศษ" // ชำนาญการพิเศษ
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? 0 : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.SalaryCondition >= 58390)
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้รับเงินเดือนขั้นสูง (เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } 58,390 บาท)xxx28",
Result = $"เงินเดือน ณ วันที่ { (new DateTime(period.Year, 4, 29)).ToThaiFullDate3() } เป็นเงิน { p.SalaryCondition } บาท"
},
new MatchingCondition
{
Condition = $"2.ได้ ท.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-5, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type3_Level11(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "อำนวยการ" // อำนวยการ
&& p.PositionLevel.Name == "สูง" // สูง
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx29",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "อำนวยการ" // อำนวยการ
&& p.PositionLevel.Name == "สูง" // สูง
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx30",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "อำนวยการ" // อำนวยการ
&& p.PositionLevel.Name == "สูง" // สูง
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาวชิรมงกุฎ"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx31",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " บริหาร "
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type4_Level10(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "บริหาร" // บริหาร
&& p.PositionLevel.Name == "ต้น" // ต้น
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์มงกุฎไทย"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ทวีติยาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ท.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ท.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx32",
Result = $"ได้รับ ท.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "บริหาร" // บริหาร
&& p.PositionLevel.Name == "ต้น" // ต้น
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx33",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "บริหาร" // บริหาร
&& p.PositionLevel.Name == "ต้น" // ต้น
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาวชิรมงกุฎ"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx34",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate_Type4_Level11(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var s1 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "บริหาร" // บริหาร
&& p.PositionLevel.Name == "สูง" // สูง
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"ประถมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์มงกุฎไทย").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ม. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx35",
Result = $"ได้รับ ป.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "บริหาร" // บริหาร
&& p.PositionLevel.Name == "สูง" // สูง
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาวชิรมงกุฎ"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "ประถมาภรณ์ช้างเผือก").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 3)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ป.ช. มาแล้วไม่น้อยกว่า 3 ปี บริบูรณ์ (ได้ ป.ช. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx36",
Result = $"ได้รับ ป.ช. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionType != null
&& p.PositionLevel != null
&& p.PositionType.Name == "บริหาร" // บริหาร
&& p.PositionLevel.Name == "สูง" // สูง
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name.Contains("มหาปรมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position.Name,
PositionLevel = p.PositionLevel.Name,
PositionType = p.PositionType.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
ProfileDateAppoint = p.DateAppoint.Value,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias
.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา"))
.OrderByDescending(x => x.Year)
.FirstOrDefault().Insignia.Name,
"มหาปรมาภรณ์ช้างเผือก"),
FirstRecvInsigniaYear = p.Insignias.Count == 0 ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault() == null ? 0 :
p.Insignias.Where(x => x.Insignia.Name == "มหาวชิรมงกุฎ").OrderBy(x => x.Year).FirstOrDefault().Year,
SalaryPosition = p.Salaries.Count == 0 ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount == null ? 0 :
p.Salaries.AsQueryable().OrderBy(x => x.Order).LastOrDefault().PositionSalaryAmount
})
.ToList()
.Where(p => p.FirstRecvInsigniaYear != 0 && p.FirstRecvInsigniaYear <= period.Year - 5)
.Where(x => x.SalaryPosition == 14500)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาปรมาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>
{
new MatchingCondition
{
Condition = $"1.ได้ ม.ว.ม. มาแล้วไม่น้อยกว่า 5 ปี บริบูรณ์ (ได้ ม.ว.ม. วันที่ { (new DateTime(period.Year-3, 7, 28)).ToThaiFullDate3() } หรือก่อนหน้านั้น)xxx37",
Result = $"ได้รับ ม.ว.ม. ในปี { p.FirstRecvInsigniaYear.ToThaiYear() }"
},
new MatchingCondition
{
Condition = $"ได้รับเงินประจำตำแหน่ง 14,500 บาท",
Result = $"ได้รับเงินประจำตำแหน่ง { p.SalaryPosition } บาท"
}
}
})
.ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in s3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
foreach (var r in s1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#endregion
#region " Public "
/// <summary>
/// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเครื่องราช
/// </summary>
/// <param name="periodId">รหัสของรอบการขอ</param>
/// <param name="ocId">รหัสโรงเรียน</param>
/// <returns></returns>
public async Task<List<InsigniaResultSet>> GetInsigniaCandidate(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var CurrentRetireDate = new DateTime(period.Year, 9, 30);
var inst_profile = _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
.Where(p =>
allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) &&
p.IsActive == true &&
p.IsLeave == false &&
p.ProfileType == "officer" &&
p.DateAppoint != null
)
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
});
// check วันที่บรรจะต้องน้อยกว่า 29/5/ปี-5
var s1 = ((from p in inst_profile
where p.ProfileDateAppoint <= new DateTime(period.Year - 5, 5, 29)
&& p.LastInsigniaId == Guid.Parse("00000000-0000-0000-0000-000000000000")
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์มงกุฎไทย"),
Seq = 1,
Gender = p.Gender
})).ToList();
var s2 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsActive == true
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionLevel.Name == "ชำนาญการ"
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ตริตาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
IsHigherLevel = IsHigherLevel(p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, "ตริตาภรณ์ช้างเผือก"),
})
.ToList()
.Where(x => x.SalaryCondition < 22140 && !x.IsHigherLevel)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ตริตาภรณ์ช้างเผือก"),
Seq = 2,
Gender = p.Gender
})
.ToList();
// คศ2 ขอ ทม
var s3 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where p.IsActive == true
&& allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionLevel.Name == "ชำนาญการ"
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
})
.ToList()
.Where(x => x.SalaryCondition >= 22140)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์มงกุฎไทย"),
Seq = 3,
Gender = p.Gender
})
.ToList();
// คศ2 ขอ ทช
var s4 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where p.IsActive == true
&& allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionLevel.Name == "ชำนาญการ"
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date < new DateTime(period.Year - 5, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
SalaryCondition2 = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date < new DateTime(period.Year - 5, 4, 29)).Select(x => new { order = x.Order, AsId = x.PositionLevel.Id, AsName = x.PositionLevel.Name, salary = x.Amount })
})
.ToList()
.Where(x => x.SalaryCondition2 != null && (x.SalaryCondition2.Where(x => x.AsName == "ชำนาญการ").Count() > 0 && x.SalaryCondition2.Where(x => x.AsName == "ชำนาญการ").OrderByDescending(x => x.order).FirstOrDefault().salary >= 22140))
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 4,
Gender = p.Gender
})
.ToList();
// คศ3 ขอ ทช
var s5 = ((from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where p.IsActive == true
&& allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Rank = p.PositionLevel == null ? null : p.PositionLevel.Name,
GovAge = p.PositionLevel == null ? null : p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).FirstOrDefault() == null ? null : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
RequestInsignia = GetInsigniaByName("ทวีติยาภรณ์ช้างเผือก"),
Seq = 4,
Gender = p.Gender == null ? null : p.Gender.Name,
}))
.ToList();
// คศ3 ขอ ปม
var s6 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where p.IsActive == true
&& allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionLevel.Name == "ชำนาญการพิเศษ"
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault().Year : 9999 : 9999,
RetireDate = p.BirthDate.CalculateRetireDate()
})
.ToList()
.Where(x => x.RetireDate == CurrentRetireDate && x.SalaryCondition >= 58390 && x.InsigniaConditionYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 5,
Gender = p.Gender
})
.ToList();
// คศ4 ขอ ปม
var s7 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where p.IsActive == true
&& allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionLevel.Name == "เชี่ยวชาญ"
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ทวีติยาภรณ์ช้างเผือก")).FirstOrDefault().Year : 9999 : 9999
})
.ToList()
.Where(x => x.InsigniaConditionYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์มงกุฎไทย"),
Seq = 5,
Gender = p.Gender
})
.ToList();
// คศ4 ขอ ปชa
var s8 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where p.IsActive == true
&& allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionLevel.Name == "เชี่ยวชาญ"
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์มงกุฎไทย")).FirstOrDefault().Year : 9999 : 9999
})
.ToList()
.Where(x => x.InsigniaConditionYear <= period.Year - 3)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("ประถมาภรณ์ช้างเผือก"),
Seq = 6,
Gender = p.Gender
})
.ToList();
// คศ4 ขอ มวม
var s9 = (from p in _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Include(p => p.PositionLevel)
where p.IsActive == true
&& allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value)
&& p.IsLeave == false
&& p.DateAppoint != null
&& p.PositionLevel.Name == "เชี่ยวชาญ"
&& p.ProfileType == "officer"
&& !p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name.Contains("มหาวชิรมงกุฎ")
select new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel.Name,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
SalaryCondition = p.Salaries.Count() == 0 ? null : p.Salaries.Where(x => x.Date <= new DateTime(period.Year, 4, 29)).OrderByDescending(x => x.Order).FirstOrDefault().Amount,
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
InsigniaConditionYear = p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")).Count() > 0 ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")).FirstOrDefault() != null ? p.Insignias.Where(x => x.Insignia.Name.Contains("ประถมาภรณ์ช้างเผือก")).FirstOrDefault().Year : 9999 : 9999
})
.ToList()
.Where(x => x.InsigniaConditionYear <= period.Year - 5)
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("มหาวชิรมงกุฎ"),
Seq = 7,
Gender = p.Gender
})
.ToList();
// คัดรายชื่อซ้ำออก
var s2_criteria = s4.Select(p => p.ProfileId).Union(s3.Select(p => p.ProfileId));
var s3_criteria = s4.Select(p => p.ProfileId).Union(s6.Select(p => p.ProfileId));
var s5_criteria = s4.Select(p => p.ProfileId);
var s7_criteria = s9.Select(p => p.ProfileId).Union(s8.Select(p => p.ProfileId));
var s8_criteria = s9.Select(p => p.ProfileId);
var s2_1 = s2.Where(x => s2_criteria.Contains(x.ProfileId)).ToList();
var s3_1 = s3.Where(x => s3_criteria.Contains(x.ProfileId)).ToList();
var s5_1 = s5.Where(x => s5_criteria.Contains(x.ProfileId)).ToList();
var s7_1 = s7.Where(x => s7_criteria.Contains(x.ProfileId)).ToList();
var s8_1 = s8.Where(x => s8_criteria.Contains(x.ProfileId)).ToList();
var ret = new List<InsigniaResultSet>();
if (s1.Count() > 0)
ret.AddRange(s1);
if (s2_1.Count() > 0)
ret.AddRange(s2_1);
if (s3_1.Count() > 0)
ret.AddRange(s3_1);
if (s4.Count() > 0)
ret.AddRange(s4);
if (s5_1.Count() > 0)
ret.AddRange(s5_1);
if (s6.Count() > 0)
ret.AddRange(s6);
if (s7_1.Count() > 0)
ret.AddRange(s7_1);
if (s8_1.Count() > 0)
ret.AddRange(s8_1);
if (s9.Count() > 0)
ret.AddRange(s9);
return ret.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList();
}
catch
{
throw;
}
}
public async Task<List<InsigniaResultSet>> GetInsigniaCandidateBKK(Guid periodId, Guid ocId)
{
try
{
var result_candidate = new List<InsigniaResultSet>();
var type_coin = await GetCoinCandidate(periodId, ocId);
var employee_type1 = await GetEmployeeInsignia_Type1(periodId, ocId);
var employee_type2 = await GetEmployeeInsignia_Type2(periodId, ocId);
var type1_level1 = await GetInsigniaCandidate_Type1_Level1(periodId, ocId);
var type1_level2 = await GetInsigniaCandidate_Type1_Level2(periodId, ocId);
var type1_level3 = await GetInsigniaCandidate_Type1_Level3(periodId, ocId);
var type1_level4 = await GetInsigniaCandidate_Type1_Level4(periodId, ocId);
var type2_level5 = await GetInsigniaCandidate_Type2_Level5(periodId, ocId);
var type2_level6 = await GetInsigniaCandidate_Type2_Level6(periodId, ocId);
var type2_level7 = await GetInsigniaCandidate_Type2_Level7(periodId, ocId);
var type2_level8 = await GetInsigniaCandidate_Type2_Level8(periodId, ocId);
var type2_level9_1 = await GetInsigniaCandidate_Type2_Level9_1(periodId, ocId);
var type2_level9_2 = await GetInsigniaCandidate_Type2_Level9_2(periodId, ocId);
var type3_level10 = await GetInsigniaCandidate_Type3_Level10(periodId, ocId);
var type3_level11 = await GetInsigniaCandidate_Type3_Level11(periodId, ocId);
var type4_level10 = await GetInsigniaCandidate_Type4_Level10(periodId, ocId);
var type4_level11 = await GetInsigniaCandidate_Type4_Level11(periodId, ocId);
var type = await GetInsigniaCandidate(periodId, ocId);
// union result
foreach (var r in type_coin)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type4_level11)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type4_level10)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type3_level11)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type3_level10)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type2_level9_2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type2_level9_1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type2_level8)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type2_level7)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type2_level6)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type2_level5)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type1_level4)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type1_level3)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type1_level2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type1_level1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in employee_type2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in employee_type1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
return result_candidate.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList();
}
catch
{
throw;
}
}
public async Task<List<InsigniaResultSet>> GetEmployeeInsigniaCandidateBKK(Guid periodId, Guid ocId)
{
try
{
var result_candidate = new List<InsigniaResultSet>();
var type1 = await GetEmployeeInsignia_Type1(periodId, ocId);
var type2 = await GetEmployeeInsignia_Type2(periodId, ocId);
// union result
foreach (var r in type2)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
foreach (var r in type1)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
if (old == null)
result_candidate.Add(r);
}
return result_candidate.OrderBy(x => x.Seq).ThenBy(x => x.Gender).ThenBy(x => x.ProfileId).ToList();
}
catch
{
throw;
}
}
//กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา
public async Task<List<InsigniaResultSet>> GetCoinCandidate(Guid periodId, Guid ocId)
{
try
{
var allOc = GetAllIdByRoot(ocId);
var period = await _dbContext.Set<InsigniaPeriod>().FirstOrDefaultAsync(p => p.Id == periodId);
if (period == null)
throw new Exception(GlobalMessages.CoinPeriodNotFound);
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var inst_profile = _dbContext.Set<Profile>()
.Include(p => p.Prefix)
.Include(p => p.Position)
.Include(p => p.PosNo)
.Include(p => p.PositionType)
.Include(p => p.PositionLevel)
.Include(p => p.Insignias)
.ThenInclude(i => i.Insignia)
.Include(p => p.Salaries)
.Where(p =>
allOc.Contains(p.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OcId.Value) &&
p.IsActive == true &&
p.IsLeave == false &&
p.DateAppoint != null
)
.Select(p => new
{
ProfileId = p.Id,
Prefix = p.Prefix == null ? null : p.Prefix.Name,
FullName = $"{(p.Prefix == null ? null : p.Prefix.Name)}{p.FirstName} {p.LastName}",
Position = p.Position == null ? null : p.Position.Name,
Rank = p.PositionLevel == null ? null : p.PositionLevel.Name,
ProfileDateAppoint = p.DateAppoint.Value,
GovAge = p.DateAppoint.Value.CalculateGovAgeStr(0, 0),
PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
Gender = p.Gender == null ? null : p.Gender.Name,
LastInsignia = p.Insignias.Count == 0 ? "" : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
LastInsigniaId = p.Insignias.Count == 0 ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Insignias.Where(x => !x.Insignia.Name.Contains("เหรียญจักรพรรดิมาลา")).OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Id,
Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
});
// check วันที่บรรจะต้องมากกว่า 25 ปี
var result = ((from p in inst_profile
where p.ProfileDateAppoint <= new DateTime(period.Year - 25, 5, 29)
select p)
.ToList()
.Select(p => new InsigniaResultSet
{
ProfileId = p.ProfileId,
Prefix = p.Prefix,
FullName = p.FullName,
Position = p.Position,
PosNo = p.PosNo,
Rank = p.Rank,
GovAge = p.GovAge,
LastInsignia = p.LastInsignia,
LastInsigniaId = p.LastInsigniaId,
Salary = p.Salary,
RequestInsignia = GetInsigniaByName("เหรียญจักรพรรดิมาลา"),
Seq = 1,
Gender = p.Gender,
MatchingConditions = new List<MatchingCondition>(),
})).ToList();
var result_candidate = new List<InsigniaResultSet>();
foreach (var r in result)
{
var old = result_candidate.FirstOrDefault(x => x.ProfileId == r.ProfileId);
// Check ได้รับหรือเคยยื่นขอไปในปีที่แล้วหรือไม่?
if (!CanRequestInsignia(r.ProfileId, period.Year))
continue;
// Check ว่าชั้นที่ขอสูงกว่าชั้นที่เคยได้รับแล้วหรือไม่?
if (!IsHigherLevel2(r.LastInsignia, r.RequestInsignia.Name))
continue;
if (old == null)
{
result_candidate.Add(r);
}
}
return result_candidate;
}
catch
{
throw;
}
}
#endregion
#region " From Ming "
// คำนวณระยะเวลาของรอบการยืนขอ
public async Task<string> CalStatusByDate(DateTime start, DateTime end, string year)
{
var nowDate = DateTime.Now;
if (nowDate.Year < Int32.Parse(year) || nowDate.Year > Int32.Parse(year)) return "ไม่ใช้งาน";
if (nowDate.Date >= start.Date && nowDate.Date <= end.Date) return "ใช้งาน";
return "ไม่ใช้งาน";
}
public async Task<Guid?> GetRequestId(Guid period, Guid ocId)
{
try
{
var req = await _dbContext.Set<InsigniaRequest>()
.Where(x => x.Organization != null)
.FirstOrDefaultAsync(x => x.Period.Id == period && x.Organization.Id == ocId);
if (req == null)
return null;
return req.Id;
}
catch
{
throw;
}
}
// Save Aprove
public async Task SaveAprove(Guid period, Guid ocId)
{
try
{
var req = await GetRequestId(period, ocId);
if (req != null)
{
var insigniaRequestProfiles = await _dbContext.Set<InsigniaRequestProfile>()
.Where(x => x.Request.Id == req)
.ToListAsync();
foreach (var insigniaRequestProfile in insigniaRequestProfiles)
{
insigniaRequestProfile.IsApprove = true;
}
}
await _dbContext.SaveChangesAsync();
}
catch
{
throw;
}
}
// เช็คข้อมูล ใน table insignia_request_new
public async Task<InsigniaResults?> GetInsigniaRequest(Guid id, Guid ocId)
{
try
{
var period = await _dbContext.Set<InsigniaPeriod>()
.Select(p => new
{
Id = p.Id,
Name = p.Name,
Round = p.Round,
Year = p.Year,
IsLock = p.IsLock,
})
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
return null;
else
{
var request = await _dbContext.Set<InsigniaRequest>()
.Include(x => x.Document)
.Include(x => x.Organization)
.ThenInclude(x => x.OrganizationOrganization)
.Where(x => x.Organization != null)
.FirstOrDefaultAsync(x => x.Period.Id == period.Id && x.Organization.Id == ocId);
return new InsigniaResults
{
PeriodId = period.Id,
Year = period.Year,
Round = period.Round,
Name = period.Name,
IsLock = period.IsLock,
RequestId = request == null ? null : request.Id,
RequestNote = request == null ? "" : request.RequestNote,
RequestStatus = request == null ? null : request.RequestStatus,
OrganizationName = request == null ? "" : request.Organization.OrganizationOrganization.Name,
Document = request == null ? null : (request.Document == null ? null : await _documentService.ImagesPath(request.Document.Id)),
};
}
}
catch
{
throw;
}
}
// public async InsigniaItem GetInsigniaLast(Guid? id)
// {
// try
// {
// var insignia = await _dbContext.Set<Insignias>().AsQueryable()
// .Include(x => x.InsigniaType)
// .Where(x => id != null ? x.Id == id : x.Name.Contains("ตริตาภรณ์มงกุฎไทย"))
// .Select(i => new InsigniaItem
// {
// Id = i.Id,
// Name = i.Name,
// ShortName = i.ShortName,
// Level = i.InsigniaType.Description,
// LevelId = i.InsigniaType.Id
// }).FirstOrDefault();
// return insignia;
// }
// catch
// {
// throw;
// }
// }
// ดึงข้อมูลเอกสารแนบ
// TODO: return empty for POC Only.
// public async List<InsigniaRequestDoc> GetDocFile(string profile)
// {
// // return empty for POC Only.
// return new List<InsigniaRequestDoc>();
// }
// Get Profile
// public async List<InsigniaProfileResult> GetProfileByInstitute(Guid ocId)
// {
// try
// {
// var profiles = (await _dbContext.Set<Profile>()
// .Include(x => x.Salaries)
// .Include(x => x.PositionLevel)
// .Include(x => x.Position)
// .Include(x => x.PosNo)
// .Include(x => x.OrganizationChart)
// .Where(x => x.OrganizationChart.OcId == ocId)
// .Select(p => new InsigniaProfileResult
// {
// ProfileId = p.Id,
// Prefix = p.Prefix,
// FullName = $"{p.Prefix}{p.FirstName} {p.LastName}",
// Position = p.Position.Name,
// Rank = p.PositionLevel.Name,
// Salary = p.Salaries.Count() == 0 ? null : p.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
// PosNo = p.PosNo == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PosNo.Id,
// Organization = p.OrganizationChart.OrganizationName
// })).ToList();
// return profiles;
// }
// catch
// {
// throw;
// }
// }
// Get Data Table insignai_has_profile
public async Task<List<InsigniaRequestItem>> InsigniaHasProfile(Guid period, Guid ocId, string status)
{
try
{
var id = await GetRequestId(period, ocId);
if (id != null)
{
var result = (_dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Request)
.Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType)
.Include(x => x.Profile)
.ThenInclude(x => x.Salaries)
.Include(x => x.Profile)
.ThenInclude(x => x.Position)
.Include(x => x.Profile)
.ThenInclude(x => x.PositionEmployeePosition)
.Include(x => x.Profile)
.ThenInclude(x => x.PosNo)
.Include(x => x.Profile)
.ThenInclude(x => x.PositionLevel)
.Include(x => x.Profile)
.ThenInclude(x => x.PositionType)
.Include(x => x.Profile)
.ThenInclude(x => x.Prefix)
//.Include(x => x.Profile)
//.ThenInclude(x => x.OrganizationOrganization)
.Include(x => x.Profile)
.ThenInclude(x => x.PositionLevel)
.Include(x => x.Profile)
.ThenInclude(x => x.Insignias)
.ThenInclude(x => x.Insignia)
.Where(h => status.Trim().ToUpper() == "ALL" ? h.Status != null : h.Status == status.Trim().ToUpper())
.Where(h => h.Request.Id == id)
.ToList()
.Select(h => new InsigniaRequestItem
{
Id = h.Id,
CitizenId = h.Profile.CitizenId,
ProfileId = h.Profile.Id,
ProfileType = h.Profile.ProfileType,
FullName = $"{h.Profile.Prefix?.Name}{h.Profile.FirstName} {h.Profile.LastName}",
Position = h.Profile.ProfileType == "officer" ? h.Profile.Position?.Name : h.Profile.PositionEmployeePosition?.Name,
PosNo = h.Profile.ProfileType == "officer" ? h.Profile.PosNo?.Name : h.Profile.PosNoEmployee,
Rank = h.Profile.ProfileType == "officer" ? $"{h.Profile.PositionType?.Name}/{h.Profile.PositionLevel?.Name}" : $"-",
Salary = h.Salary.ToString(),
LastInsignia = h.Profile.Insignias.Count == 0 ? "" : h.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name,
RequestInsignia = h.RequestInsignia.Name,
RequestInsigniaShortName = h.RequestInsignia.ShortName,
Level = h.RequestInsignia.InsigniaType.Name,
IsApprove = h.IsApprove,
RequestDate = h.RequestDate,
Status = h.Status,
RequestNote = h.ReasonReject,
Reason = h.Reason,
MarkDiscipline = h.MarkDiscipline,
MarkLeave = h.MarkLeave,
MarkRate = h.MarkRate,
// Docs = GetDocFile(h.Profile.Id),
MatchingConditions = h.MatchingConditions == null ? null : JsonConvert.DeserializeObject<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, 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.Profile.Id).ToListAsync();
items = items.Where(x => !profileOlds.Contains(x.ProfileId)).ToList();
}
}
var oc = await _dbContext.Set<OrganizationEntity>().FirstOrDefaultAsync(x => x.Id == ocId);
if (oc == null)
throw new Exception(GlobalMessages.OCNotFound);
var req = new InsigniaRequest
{
Period = period,
Organization = oc,
RequestStatus = "st1",
RequestNote = "",
CreatedUserId = UserId ?? "System Administrator",
CreatedFullName = FullName ?? "",
CreatedAt = DateTime.Now,
LastUpdateFullName = FullName ?? "System Administrator",
LastUpdateUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
};
foreach (var item in items)
{
var pf = await _dbContext.Set<Profile>().FirstOrDefaultAsync(p => p.Id == item.ProfileId);
var req_insignia = await _dbContext.Set<Insignia>().FirstOrDefaultAsync(i => i.Id == item.RequestInsignia.Id);
if (pf != null)
{
req.RequestProfiles.Add(new InsigniaRequestProfile
{
Status = "PENDING",
Profile = pf,
RequestInsignia = req_insignia,
Salary = item.Salary == null ? null : item.Salary,
RequestDate = DateTime.Now,
MatchingConditions = System.Text.Json.JsonSerializer.Serialize(item.MatchingConditions), // serialize to string
CreatedUserId = UserId ?? "System Administrator",
CreatedFullName = FullName ?? "",
CreatedAt = DateTime.Now,
LastUpdateFullName = FullName ?? "System Administrator",
LastUpdateUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
});
}
}
await _dbContext.Set<InsigniaRequest>().AddAsync(req);
await _dbContext.SaveChangesAsync();
}
catch
{
throw;
}
}
// เช็คข้อมูลใน kp7insignia
// public async ProfileInsignia ListKp7Insignia(string name, string profile, int year)
// {
// try
// {
// var item = await _dbContext.Set<ProfileInsignias>().AsQueryable()
// .Include(x => x.Insignia)
// .Include(x => x.Profile)
// .FirstOrDefault(x => x.Profile.Id == profile &&
// x.Year == year &&
// x.Insignia.Name.Contains(name));
// return item;
// }
// catch
// {
// throw;
// }
// }
// บันทึกข้อมูลลง กพ.7
// public async ProfileInsignia InsertKp7Insignia(InsigniaKp7Item kp7, InsigniaProfile profile)
// {
// try
// {
// var pf = await _dbContext.Set<Profiles>().FirstOrDefault(x => x.Id == profile.FkProfileId);
// var insignia = await _dbContext.Set<Insignias>().FirstOrDefault(x => x.Name == profile.InsigniaName);
// var kp7Insignia = new ProfileInsignia
// {
// Profile = pf,
// Year = DateTime.Now.Year,
// DateReceive = kp7.InsigniaDatereceive.Value,
// Insignia = insignia,
// Level = kp7.InsigniaLevel,
// No = profile.InsigniaNo,
// Issue = kp7.InsigniaIssue,
// VolumeNo = kp7.InsigniaVolumeno.Value.ToString(),
// Volume = kp7.InsigniaVolume,
// Section = kp7.InsigniaSection,
// DateStamp = DateTime.Now,
// DateAnnounce = kp7.InsigniaDateannounce.Value,
// Page = profile.InsigniaPage,
// };
// return kp7Insignia;
// }
// catch
// {
// throw;
// }
// }
// update กพ.7
// public async ProfileInsignia UpdateKp7Insignia(Guid id)
// {
// try
// {
// var item = await _dbContext.Set<ProfileInsignias>().FirstOrDefaultAsync(x => x.Id == id);
// return item;
// }
// catch
// {
// throw;
// }
// }
#endregion
}
}