diff --git a/Models/MetaData/District.cs b/Models/MetaData/District.cs index 0478ae0..938bf08 100644 --- a/Models/MetaData/District.cs +++ b/Models/MetaData/District.cs @@ -11,6 +11,9 @@ namespace BMA.EHR.MetaData.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; diff --git a/Models/MetaData/SubDistrict.cs b/Models/MetaData/SubDistrict.cs index 45fd56e..c721d90 100644 --- a/Models/MetaData/SubDistrict.cs +++ b/Models/MetaData/SubDistrict.cs @@ -14,6 +14,9 @@ namespace BMA.EHR.MetaData.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; diff --git a/Services/RecruitService.cs b/Services/RecruitService.cs index f926ad4..4132b07 100644 --- a/Services/RecruitService.cs +++ b/Services/RecruitService.cs @@ -341,6 +341,27 @@ namespace BMA.EHR.Recruit.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 { @@ -363,15 +384,15 @@ namespace BMA.EHR.Recruit.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",