Merge branch 'fronkdev' into 'master'

Rimo Import: Added deletion of Buildings not in Rimo anymore

See merge request fronk/thetool!1416
This commit is contained in:
Frank Schubert
2025-06-05 12:21:35 +00:00

View File

@@ -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;
}