diff --git a/scripts/adb-rimo-import/rimo-import.php b/scripts/adb-rimo-import/rimo-import.php index adf1d627c..e8d90065a 100755 --- a/scripts/adb-rimo-import/rimo-import.php +++ b/scripts/adb-rimo-import/rimo-import.php @@ -226,11 +226,14 @@ foreach ($clusters as $cluster_data) { $hausnummer_found_count = 0; $homes_count = 0; + $rimo_building_list = []; + if (is_object($buildingsResponse) && property_exists($buildingsResponse, "item") && is_array($buildingsResponse->item) && count($buildingsResponse->item)) { foreach ($buildingsResponse->item as $building) { $hausnummer_count++; $rimo_building_id = $building->id; + $rimo_building_list[] = $rimo_building_id; $hausnummer = $AddressHelper->findUpdateAddressFromRimoBuilding($building); if (!$hausnummer) { @@ -580,35 +583,10 @@ foreach ($clusters as $cluster_data) { if($option_delete_units) { // delete Homes not existing in Rimo - foreach (\ADBWohneinheitModel::search(["hausnummer_id" => $hausnummer->id]) as $adb_unit) { - $adb_unit->rimo_deleted = 1; - if(!$adb_unit->extref) { - $adb_unit->save(["no_updates" => 1]); - continue; - } - - if(!in_array($adb_unit->extref, $rimo_home_list)) { - if($adb_unit->oaid) { - $oaid = \OpenAccessIdModel::getFirstOaid($adb_unit->oaid); - $oaid_units_count = \ADBWohneinheitModel::count(["oaid" => $adb_unit->oaid]); - if($oaid && $oaid->origin == "ofaa" && $oaid_units_count === 1) { - // last unit with this OAID - $adb_unit->save(["no_updates" => 1]); - continue; - } - - } - - if(count($adb_unit->active_preorders)) { - $adb_unit->save(["no_updates" => 1]); - continue; - } - - echo "[DD] Deleting Hausnummer ".$adb_unit->hausnummer_id." Wohneinheit ".$adb_unit->id." (extref ".$adb_unit->extref.")\n"; - $addressErrors[] = "[DD] Deleting Hausnummer ".$adb_unit->hausnummer_id." Wohneinheit ".$adb_unit->id." (extref ".$adb_unit->extref.")"; - - $adb_unit->delete(); - + $delete_strings = deleteHomesIfEligible($rimo_home_list, $hausnummer); + if(is_array($delete_strings) && count($delete_strings)) { + foreach($delete_strings as $delete_string) { + $addressErrors[] = $delete_string; } } } @@ -686,13 +664,34 @@ foreach ($clusters as $cluster_data) { //var_dump($trenches);exit; $hausnummer->trenches = json_encode($trenches); $hausnummer->save(); - $hausnummer = new \ADBHausnummer($hausnummer_id); + //$hausnummer = new \ADBHausnummer($hausnummer_id); } } } } + if($option_delete_units) { + // Löscht in Rimo nicht (mehr) vorhandene Wohneinheiten, sofern keine Bestellung oder OAID + foreach(\ADBHausnummerModel::search(["netzgebiet_id" => $adb_netzgebiet->id]) as $hausnummer) { + if(!in_array($hausnummer->rimo_id, $rimo_building_list)) { + // delete Homes not existing in Rimo + $delete_strings = deleteHomesIfEligible([], $hausnummer); + if(is_array($delete_strings) && count($delete_strings)) { + foreach($delete_strings as $delete_string) { + $addressErrors[] = $delete_string; + } + } + if(!\ADBWohneinheitModel::count(["hausnummer_id" => $hausnummer->id])) { + // keine homes mehr übrig, lösche Hausnummer + $hausnummer->delete(); + echo "[DD] Deleting Hausnummer ".$hausnummer->id.", da keine Wohneinheit mehr (extref ".$hausnummer->extref.", rimo_id: ".$hausnummer->rimo_id.")\n"; + $return_strings[] = "[DD] Deleting Hausnummer ".$hausnummer->id.", da keine Wohneinheit mehr (extref ".$hausnummer->extref.", rimo_id: ".$hausnummer->rimo_id.")"; + } + } + } + } + /* * get SBIDI Orders, to create Preorders later */ @@ -943,3 +942,41 @@ function getServiceDnValues($dn) return $fields; } + +function deleteHomesIfEligible(Array $rimo_home_list, Object $hausnummer) { + $return_strings = []; + foreach (\ADBWohneinheitModel::search(["hausnummer_id" => $hausnummer->id]) as $adb_unit) { + $adb_unit->rimo_deleted = 1; + /*if(!$adb_unit->extref) { + $adb_unit->save(["no_updates" => 1]); + continue; + } + */ // auskommentiert, um auch homes ohne rimo_id zu löschen + + if(!in_array($adb_unit->extref, $rimo_home_list)) { + if($adb_unit->oaid) { + $oaid = \OpenAccessIdModel::getFirstOaid($adb_unit->oaid); + $oaid_units_count = \ADBWohneinheitModel::count(["oaid" => $adb_unit->oaid]); + if($oaid && $oaid->origin == "ofaa" && $oaid_units_count === 1) { + // last unit with this OAID + $adb_unit->save(["no_updates" => 1]); + continue; + } + + } + + if(count($adb_unit->active_preorders)) { + // don't delete if there is an active order + $adb_unit->save(["no_updates" => 1]); + continue; + } + + echo "[DD] Deleting Hausnummer ".$adb_unit->hausnummer_id." Wohneinheit ".$adb_unit->id." (extref ".$adb_unit->extref.")\n"; + $return_strings[] = "[DD] Deleting Hausnummer ".$adb_unit->hausnummer_id." Wohneinheit ".$adb_unit->id." (extref ".$adb_unit->extref.")"; + + $adb_unit->delete(); + + } + } + return $return_strings; +} \ No newline at end of file