lookup province, district, subDistrict IDs with parent filtering

This commit is contained in:
harid 2026-06-09 10:35:30 +07:00
parent b11f64143d
commit 0ab3445ad0
3 changed files with 34 additions and 6 deletions

View file

@ -9,6 +9,9 @@ namespace BMA.EHR.Recurit.Exam.Service.Models
[Required, MaxLength(150), Column(Order = 1), Comment("เขต/อำเภอ")]
public string name { get; set; } = string.Empty;
[Column(Order = 2), Comment("รหัสอ้างอิงจังหวัด")]
public Guid? provinceId { get; set; } = null;
// [Column(Order = 2), Comment("สถานะการใช้งาน")]
// public bool IsActive { get; set; } = true;

View file

@ -12,6 +12,9 @@ namespace BMA.EHR.Recurit.Exam.Service.Models
[MaxLength(10), Column(Order = 2), Comment("รหัสไปรษณีย์")]
public string? zipCode { get; set; } = null;
[Column(Order = 3), Comment("รหัสอ้างอิงอำเภอ")]
public Guid? districtId { get; set; } = null;
// [Column(Order = 3), Comment("สถานะการใช้งาน")]
// public bool IsActive { get; set; } = true;

View file

@ -3292,6 +3292,28 @@ namespace BMA.EHR.Recurit.Exam.Service.Services
positionNameWithoutLevel = positionNameWithoutLevel.Replace(posLevelName, "").Trim();
}
// lookup province, district, subDistrict IDs with parent filtering
var registProvinceId = provincesCache.FirstOrDefault(x => x.name == firstAddress?.Province)?.Id;
var registDistrictId = districtsCache.FirstOrDefault(x => x.name == firstAddress?.Amphur && x.provinceId == registProvinceId)?.Id;
var registSubDistrictId = subDistrictsCache.FirstOrDefault(x => x.name == firstAddress?.District && x.districtId == registDistrictId)?.Id;
var currentProvinceId = provincesCache.FirstOrDefault(x => x.name == firstAddress?.Province1)?.Id;
var currentDistrictId = districtsCache.FirstOrDefault(x => x.name == firstAddress?.Amphur1 && x.provinceId == currentProvinceId)?.Id;
var currentSubDistrictId = subDistrictsCache.FirstOrDefault(x => x.name == firstAddress?.District1 && x.districtId == currentDistrictId)?.Id;
// log warning when address lookup fails
if (registProvinceId == null && !string.IsNullOrWhiteSpace(firstAddress?.Province))
Console.WriteLine($"[WARN] Regist province not found: {firstAddress?.Province}");
if (registDistrictId == null && !string.IsNullOrWhiteSpace(firstAddress?.Amphur))
Console.WriteLine($"[WARN] Regist district not found: {firstAddress?.Amphur}, Province: {firstAddress?.Province}");
if (registSubDistrictId == null && !string.IsNullOrWhiteSpace(firstAddress?.District))
Console.WriteLine($"[WARN] Regist subdistrict not found: {firstAddress?.District}, District: {firstAddress?.Amphur}");
if (currentProvinceId == null && !string.IsNullOrWhiteSpace(firstAddress?.Province1))
Console.WriteLine($"[WARN] Current province not found: {firstAddress?.Province1}");
if (currentDistrictId == null && !string.IsNullOrWhiteSpace(firstAddress?.Amphur1))
Console.WriteLine($"[WARN] Current district not found: {firstAddress?.Amphur1}, Province: {firstAddress?.Province1}");
if (currentSubDistrictId == null && !string.IsNullOrWhiteSpace(firstAddress?.District1))
Console.WriteLine($"[WARN] Current subdistrict not found: {firstAddress?.District1}, District: {firstAddress?.Amphur1}");
var placementProfile = new PlacementProfile
{
Placement = placement,
@ -3313,15 +3335,15 @@ namespace BMA.EHR.Recurit.Exam.Service.Services
Telephone = firstAddress?.Telephone ?? "",
MobilePhone = firstAddress?.Mobile ?? "",
RegistAddress = registAddress,
RegistProvinceId = provincesCache.FirstOrDefault(x => x.name == firstAddress?.Province)?.Id,
RegistDistrictId = districtsCache.FirstOrDefault(x => x.name == firstAddress?.Amphur)?.Id,
RegistSubDistrictId = subDistrictsCache.FirstOrDefault(x => x.name == firstAddress?.District)?.Id,
RegistProvinceId = registProvinceId,
RegistDistrictId = registDistrictId,
RegistSubDistrictId = registSubDistrictId,
RegistZipCode = firstAddress?.ZipCode ?? "",
RegistSame = false,
CurrentAddress = currentAddress,
CurrentProvinceId = provincesCache.FirstOrDefault(x => x.name == firstAddress?.Province1)?.Id,
CurrentDistrictId = districtsCache.FirstOrDefault(x => x.name == firstAddress?.Amphur1)?.Id,
CurrentSubDistrictId = subDistrictsCache.FirstOrDefault(x => x.name == firstAddress?.District1)?.Id,
CurrentProvinceId = currentProvinceId,
CurrentDistrictId = currentDistrictId,
CurrentSubDistrictId = currentSubDistrictId,
CurrentZipCode = firstAddress?.ZipCode1,
Marry = candidate.Marry?.Contains("สมรส") ?? false,
OccupationPositionType = "other",