diff --git a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs
index e8c2a907..1df9f4a7 100644
--- a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs
+++ b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs
@@ -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 "
+
+ ///
+ /// กลุ่ม ลจ ที่ค่าจ้าง >= 8340 และ < 15050
+ ///
+ ///
+ ///
+ ///
+ public async Task> GetEmployeeInsignia_Type1(Guid periodId, Guid ocId)
+ {
+ try
+ {
+ var allOc = GetAllIdByRoot(ocId);
+
+ var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId);
+
+ if (period == null)
+ throw new Exception(GlobalMessages.CoinPeriodNotFound);
+
+ var oc = await _dbContext.Set().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()
+ .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
+ {
+ 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()
+ .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
+ {
+ 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()
+ .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
+ {
+ 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();
+
+ 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;
+ }
+ }
+
+ ///
+ /// กลุ่ม ลจ ที่ค่าจ้าง >= 15050
+ ///
+ ///
+ ///
+ ///
+ public async Task> GetEmployeeInsignia_Type2(Guid periodId, Guid ocId)
+ {
+ try
+ {
+ var allOc = GetAllIdByRoot(ocId);
+
+ var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId);
+
+ if (period == null)
+ throw new Exception(GlobalMessages.CoinPeriodNotFound);
+
+ var oc = await _dbContext.Set().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()
+ .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
+ {
+ 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()
+ .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
+ {
+ 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()
+ .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
+ {
+ 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();
+
+ 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 " ทั่วไป "
///
@@ -4721,6 +5375,36 @@ namespace BMA.EHR.Application.Repositories
}
}
+ public async Task> GetEmployeeInsigniaCandidateBKK(Guid periodId, Guid ocId)
+ {
+ try
+ {
+ var result_candidate = new List();
+
+ 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;
+ }
+ }
//
/// กรองรายชื่อผู้มิสิทธิ์ยื่นขอเหรียญจักรพรรดิมาลา