คำนวณเครื่องราช ลูกจ้าง ** ยังไม่ได้ทดสอบ **

This commit is contained in:
Suphonchai Phoonsawat 2023-09-12 13:13:26 +07:00
parent cf8f487d79
commit 5c047bb2f3

View file

@ -10,6 +10,7 @@ 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
{
@ -197,6 +198,659 @@ namespace BMA.EHR.Application.Repositories
}
}
#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.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.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.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.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.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.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.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.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.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.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.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.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>
@ -4721,6 +5375,36 @@ namespace BMA.EHR.Application.Repositories
}
}
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;
}
}
// <summary>
/// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา