คำนวณเครื่องราช ลูกจ้าง ** ยังไม่ได้ทดสอบ **
This commit is contained in:
parent
cf8f487d79
commit
5c047bb2f3
1 changed files with 684 additions and 0 deletions
|
|
@ -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>
|
||||
/// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue