#!/usr/bin/php escape($plz_name)."' AND o.name = '".$db->escape($ort_name)."'"; $res = $db->query($sql); if(!$db->num_rows($res)) { echo "Gemeinde not found for PLZ: $plz_name, Ort: $ort_name\n"; continue; } $gemeinde_data = $db->fetch_object($res); $gemeinde_id = $gemeinde_data->id; // Intelligent street name search with variations $strasse_variations = generateStreetVariations($strasse_name); // Search for existing Hausnummer $escaped_variations = array_map(function($var) use ($db) { return $db->escape($var); }, $strasse_variations); $hausnummer_name_escaped = $db->escape($hausnummer_name); $sql = "SELECT * FROM view_hausnummer WHERE gemeinde_id = $gemeinde_id AND hausnummer_extref = '$hausnummer_extref' OR gemeinde_id = $gemeinde_id AND strasse IN ('". implode("', '", $escaped_variations)."') AND hausnummer='$hausnummer_name_escaped'"; $res = $db->query($sql); if($db->num_rows($res)) { // Update existing Hausnummer $data = $db->fetch_object($res); $hausnummer = new ADBHausnummer($data->hausnummer_id); echo "Found existing Hausnummer: $strasse_name $hausnummer_name\n"; } else { // Create new Hausnummer echo "Creating new Hausnummer: $strasse_name $hausnummer_name\n"; // Find Strasse $strasse = null; foreach($strasse_variations as $street_var) { $strasse = ADBStrasseModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $street_var]); if($strasse) break; } if(!$strasse) { echo "Strasse not found for variations of: $strasse_name (gemeinde_id $gemeinde_id), creating new one.\n"; $strasse_data = [ "gemeinde_id" => $gemeinde_id, "name" => $strasse_name, "create" => date("U"), "edit" => date("U"), ]; $strasse = ADBStrasseModel::create($strasse_data); $strasse->save(); } $plz = ADBPlzModel::getFirst(["gemeinde_id" => $gemeinde_id, "plz" => $plz_name]); if(!$plz) { echo "PLZ $plz_name not found\n"; continue; } $ortschaft = ADBOrtschaftModel::getFirst(["gemeinde_id" => $gemeinde_id, "name" => $ort_name]); if(!$ortschaft) { echo "Ortschaft $ort_name not found\n"; continue; } $hausnummer_data = [ "netzgebiet_id" => $netzgebiet->id, "extref" => $hausnummer_extref, "ortschaft_id" => $ortschaft->id, "plz_id" => $plz->id, "strasse_id" => $strasse->id, "hausnummer" => $hausnummer_name, "zusatz" => ($addresszusatz) ? $addresszusatz : null, "gps_lat" => $lat, "gps_long" => $long, "unit_count" => $ne_count, "freigabe" => $default_freigabe, ]; $hausnummer = ADBHausnummerModel::create($hausnummer_data); $hausnummer->save(); } // var_dump($hausnummer->netzgebiet_id);exit; // Update Hausnummer properties if($hausnummer->netzgebiet_id != $netzgebiet->id) { $hausnummer->netzgebiet_id = $netzgebiet->id; } if($hausnummer->extref != $hausnummer_extref) { $hausnummer->extref = $hausnummer_extref; } if($lat && $long) { $hausnummer->gps_lat = (float)$lat; $hausnummer->gps_long = (float)$long; } // if status = Rohr im Haus set $hausnummer->status_id to 6 if($status == "Rohr im Haus") { $hausnummer->status_id = 6; // Assuming 6 is the ID for "Rohr im Haus" } else { $hausnummer->status_id = 1; // Default status } $hausnummer->freigabe = $default_freigabe; $hausnummer->unit_count = $ne_count; $hausnummer->save(); // Handle Wohneinheiten based on NE count $existing_units_count = ADBWohneinheitModel::count(["hausnummer_id" => $hausnummer->id]); if($existing_units_count < $ne_count) { echo "Creating $ne_count Wohneinheiten for: $strasse_name $hausnummer_name\n"; for($u = 0; $u < $ne_count; $u++) { $num = $u + 1; $top_name = "Top $num"; $wohneinheit_data = [ 'hausnummer_id' => $hausnummer->id, 'num' => $num, 'name' => $top_name, 'tuer' => ($ne_count > 1) ? $num : null ]; $wohneinheit = ADBWohneinheitModel::create($wohneinheit_data); $wohneinheit->save(); echo " Created Wohneinheit: $top_name\n"; } echo "Processed: $adresse ($ne_count units)\n\n"; } } fclose($input); echo "Import completed!\n";