6118 lines
403 KiB
C#
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
|
|
}
|
|
}
|