diff --git a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php index 8f74014d6..eb9e327fc 100644 --- a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php +++ b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php @@ -71,7 +71,7 @@ class AddressHelper if (array_key_exists(3, $m)) { $addresszusatz = trim($m[3]); } - } elseif (preg_match('/^(\D+)\s+(\d+[a-z0-9\/&#._-]*)(?:\s+((?:gesch(?:ae|ä)ft|werkstatt|schmiede|betrieb und wohnungen|stg|paketlogistik|cafe|pavillon|pfarrheim|[^ ]*haus|[^ ]*geb(?:ae|ä)ude|[^ ]*halle|[^ ]*schule|Öhlmühle)(?:\s+[a-z0-9]+)?))?/i', $strasse_hausnummer, $m)) { + } elseif (preg_match('/^(\D+)\s+(\d+[a-z0-9\/&#._-]*)(?:\s+((?:gesch(?:ae|ä)ft|werkstatt|schmiede|[^ ]*garage|betrieb und wohnungen|stg|paketlogistik|cafe|pavillon|pfarrheim|[^ ]*haus|[^ ]*geb(?:ae|ä)ude|[^ ]*halle|[^ ]*schule|Öhlmühle)(?:\s+[a-z0-9]+)?))?/i', $strasse_hausnummer, $m)) { $strasse_name = trim($m[1]); $hausnummer_name = trim($m[2]); if (array_key_exists(3, $m)) { @@ -91,6 +91,22 @@ class AddressHelper $strasse_name = trim($m[1]); }*/ + // explicitly test for addresszusatz, but only if that regex matches the same street and hausnummer + if(!$addresszusatz) { + $test_addresszusatz = ""; + if (preg_match('/^(.+)\s+(\d+[a-z0-9\/&#._-]*)(.+)?/i', $strasse_hausnummer, $m)) { + $test_strasse_name = trim($m[1]); + $test_hausnummer_name = trim($m[2]); + if (array_key_exists(3, $m)) { + $test_addresszusatz = trim($m[3]); + } + + if($test_addresszusatz && $test_hausnummer_name == $hausnummer_name && $test_strasse_name == $strasse_name) { + $addresszusatz = $test_addresszusatz; + } + } + } + return [$strasse_name, $hausnummer_name, $addresszusatz]; } @@ -199,15 +215,25 @@ class AddressHelper echo "found hausnummer from rimo_id $rimo_id\n"; }*/ + $force_subcd = false; + $force_no_subcd = false; + if ($adrcd && !$hausnummer) { // get Hausnummer to update if ($subcd > 1) { $hausnummer = ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => $subcd]); + // particular adrcd with subcd not found, so needs to be created + if (!$hausnummer) { + $force_subcd = true; + } } else { $hausnummer = ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => "1"]); if (!$hausnummer) { $hausnummer = ADBHausnummerModel::getFirst(['adrcd' => $adrcd, "subcd" => null]); } + if(!$hausnummer_name) { + $force_no_subcd = true; + } } /*if(!$hausnummer) { //echo "Hausnummer adrcd $adrcd not found\n"; @@ -218,11 +244,19 @@ class AddressHelper } if (!$hausnummer) { - $hausnummer = $this->findHausnummerByStreet($strasse_name, $hausnummer_name, $gemeinde_id); + //if(!$force_subcd) { + $hausnummer = $this->findHausnummerByStreet($strasse_name, $hausnummer_name, $gemeinde_id); + if($hausnummer && $subcd && $hausnummer->subcd != $subcd) { + $hausnummer = null; + } + if($hausnummer && $adrcd && $hausnummer->adrcd != $adrcd) { + $hausnummer = null; + } + //} if (!$hausnummer) { // dont create Hausnummer if Canceled in Rimo if($execution_state_id == "99") { - echo "== Not importing because execution state $execution_state_id ($execution_state_label)\n"; + $this->logFindAddressError("[==] Not importing because execution state $execution_state_id ($execution_state_label) ($addr_dbg_str)"); return false; } @@ -302,7 +336,14 @@ class AddressHelper //echo "----------------------\ncreating hausnummer:\n"; //print_r($hausnummer); $hausnummer->save(); - $this->logFindAddressError("[CC] Neues Gebäude erstellt ($addr_dbg_str)"); + if($force_subcd) { + $this->logFindAddressError("[CC] Neues Gebäude erstellt (forced subcd) ($addr_dbg_str)"); + } elseif($force_no_subcd) { + $this->logFindAddressError("[CC] Neues Gebäude erstellt (forced no subcd) ($addr_dbg_str)"); + } else { + $this->logFindAddressError("[CC] Neues Gebäude erstellt ($addr_dbg_str)"); + } + } }