diff --git a/application/ADBHausnummer/ADBHausnummerModel.php b/application/ADBHausnummer/ADBHausnummerModel.php index 55bd8b713..27fae9a8e 100644 --- a/application/ADBHausnummer/ADBHausnummerModel.php +++ b/application/ADBHausnummer/ADBHausnummerModel.php @@ -158,9 +158,14 @@ class ADBHausnummerModel { } if(array_key_exists("hausnummer", $filter)) { - $hausnummer = FronkDB::singleton()->escape($filter['hausnummer']); - if($hausnummer) { - $where .= " AND Hausnummer.`hausnummer` = '$hausnummer'"; + if(is_array($filter['hausnummer'])) { + $hausnummer = $filter['hausnummer']; + $where .= " AND Hausnummer.`hausnummer` IN ('".implode("','", $hausnummer)."')"; + } else { + $hausnummer = FronkDB::singleton()->escape($filter['hausnummer']); + if($hausnummer) { + $where .= " AND Hausnummer.`hausnummer` = '$hausnummer'"; + } } } diff --git a/scripts/addressdb/addressdb_import_bev_adressregister.php b/scripts/addressdb/addressdb_import_bev_adressregister.php index 018ff2267..ce09ba416 100755 --- a/scripts/addressdb/addressdb_import_bev_adressregister.php +++ b/scripts/addressdb/addressdb_import_bev_adressregister.php @@ -22,13 +22,15 @@ $folder = BASEDIR."/scripts/addressdb/import/bev"; $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $log = mfLoghandler::singleton(); +$db->query("SET autocommit=0"); + /* * Import Gemeinden */ $filename = "$folder/GEMEINDE.csv"; $input = fopen($filename, "r"); -/* + $i = 0; while($csv = fgetcsv($input, 0, ";")) { $i++; @@ -59,11 +61,11 @@ while($csv = fgetcsv($input, 0, ";")) { } echo ($i-1)." Gemeinden importiert\n"; -*/ + /* * Import Ortschaften */ -/* + $filename = "$folder/ORTSCHAFT.csv"; $input = fopen($filename, "r"); @@ -101,11 +103,11 @@ while($csv = fgetcsv($input, 0, ";")) { } echo ($i-1)." Ortschaften importiert\n"; -*/ + /* * Import Strassen */ -/* + $filename = "$folder/STRASSE.csv"; $input = fopen($filename, "r"); @@ -226,11 +228,14 @@ while($csv = fgetcsv($input, 0, ";")) { } echo "\n".($i-1)." Straßen importiert\n"; -*/ + $filename = "$folder/ADRESSE.csv"; $input = fopen($filename, "r"); +$current_skz = false; +$current_gkz = false; +$sdata = []; $i = 0; while($csv = fgetcsv($input, 0, ";")) { $i++; @@ -248,6 +253,8 @@ while($csv = fgetcsv($input, 0, ";")) { continue; } + + $adrcd = trim($csv[0]); $gkz = trim($csv[1]); $okz = trim($csv[2]); @@ -260,76 +267,167 @@ while($csv = fgetcsv($input, 0, ";")) { $hnz2 = trim($csv[10]); $hnb2 = trim($csv[11]); - if(!$skz) continue; - - $gemeinde = getGemeinde($gkz); - if(!$gemeinde) { - die("Kann Adresse nicht importieren: Gemeinde nicht gefunden ($gkz)\n"); - } - - $ortschaft = getOrtschaft($okz); - if(!$ortschaft) { - die("Kann Adresse nicht importieren: Ortschaft nicht gefunden ($okz)\n"); - } - - $strasse = getStrasse($skz); - if(!$strasse) { - die("Kann Adresse nicht importieren: Strasse nicht gefunden ($okz)\n"); - } - - - //$plz = ADBPlzModel::getFirst(['gemeinde_id' => $gemeinde->id, "plz" => $plz_string]); - $plz = getPlz($plz_string, $gemeinde->id); - if(!$plz) { - $plz = ADBPlzModel::create([ - "gemeinde_id" => $gemeinde->id, - "plz" => $plz_string, - "plzstring" => $plz_string - ]); - if(!$plz->save()) { - die("Cannot create PLZ $plz_string (gemeinde ".$gemeinde->id.")\n"); - } - } - $hausnummer_string = makeHausnummer($hnz1, $hnz2, $hnv, $hnb1, $hnb2); if(!$hausnummer_string) { continue; //die("Keine Hausnummer: adrcd $adrcd, gkz $gkz, okz $okz, skz $skz, $hnz1, $hnb1, $hnv, $hnz2, $hnb2\n"); } - $hausnummer = ADBHausnummerModel::getFirst([ - 'ortschaft_id' => $ortschaft->id, - //'plz_id' => $plz->id, - 'strasse_id' => $strasse->id, - 'hausnummer' => $hausnummer_string - ]); - - if($hausnummer) { - // update plz if necessary - //var_dump($hausnummer->plz);exit; - if($hausnummer->plz->plz != $plz->plz ) { - echo "Updating PLZ from ".$hausnummer->plz->plz." to ".$plz->plz."\n"; - $hausnummer->plz_id = $plz->id; - $hausnummer->save(); - } - - } else { - // create new Hausnummer - $hausnummer = ADBHausnummerModel::create([ - "netzgebiet_id" => 0, - "ortschaft_id" => $ortschaft->id, - "plz_id" => $plz->id, - "strasse_id" => $strasse->id, + if($skz == $current_skz) { + $sdata[(string)$hausnummer_string] = [ + "adrcd" => $adrcd, + "gkz" => $gkz, + "okz" => $okz, + "plz" => $plz_string, + "skz" => $skz, "hausnummer" => $hausnummer_string - ]); - if(!$hausnummer->save()) { - die("Error creating Hausnummer: ".print_r($hausnummer, true)); - } + ]; + + continue; } + if($current_skz) { + //var_dump($sdata);exit; + $gemeinde = getGemeinde($current_gkz); + if(!$gemeinde) { + die("Kann Adresse nicht importieren: Gemeinde nicht gefunden ($gkz)\n"); + } + + $strasse = getStrasse($current_skz); + if(!$strasse) { + die("Kann Adresse nicht importieren: Strasse nicht gefunden ($okz)\n"); + } + + // do database work for all sdata + $hausnummern_filter = []; + + foreach($sdata as $s) { + $plz = getPlz($s["plz"], $gemeinde->id); + if(!$plz) { + //echo "Creating PLZ ".$s["plz"]."\n"; + $plz = ADBPlzModel::create([ + "gemeinde_id" => $gemeinde->id, + "plz" => $s["plz"], + "plzstring" => $s["plz"] + ]); + if(!$plz->save()) { + die("Cannot create PLZ $plz_string (gemeinde ".$gemeinde->id.")\n"); + } + } + + $hausnummern_filter[] = $s['hausnummer']; + } + + + $hausnummern = ADBHausnummerModel::search(["strasse_id" => $strasse->id, "hausnummer" => $hausnummern_filter]); + $new_hausnummern = []; + + foreach($sdata as $shausnummer => $s) { + $found = false; + foreach($hausnummern as $h) { + if($h->hausnummer == $shausnummer) { + //exists already + $found = true; + + // check to update plz + if($h->plz->plz != $s['plz'] ) { + echo "Updating PLZ for Hausnummer ".$h->id." from ".$h->plz->plz." to ".$s["plz"]."\n"; + $plz = getPlz($s['plz'], $gemeinde->id); + $h->plz_id = $plz->id; + $h->save(); + } + + } + } + if(!$found) { + $new_hausnummern[$shausnummer] = $s; + } + } + + if(count($new_hausnummern)) { + $insert = "INSERT INTO `Hausnummer` (`netzgebiet_id`, `adrcd`, `ortschaft_id`, `plz_id`, `strasse_id`, `hausnummer`, `create`, `edit`) VALUES "; + foreach($new_hausnummern as $h_string => $s) { + //var_dump($h_string, $s);exit; + //$h_string = $h->hausnummer; + //$s = $sdata[$h_string]; + $adrcd = $s["adrcd"]; + $strasse_id = $strasse->id; + $plz = getPlz($s['plz'],$gemeinde->id); + if(!$plz) { + var_dump($s);exit; + } + $plz_id = $plz->id; + $ortschaft = getOrtschaft($s["okz"]); + if(!$ortschaft) { + die("Kann Adresse nicht importieren: Ortschaft nicht gefunden (strasse: hausnummer: $h_string, okz: ".$sdata[$h_string]["okz"].")\n"); + } + $ortschaft_id = $ortschaft->id; + // add to INSERT statement + $insert .= "(0, '$adrcd', $ortschaft_id, $plz_id, $strasse_id,'$h_string', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),"; + + } + $insert = preg_replace('/,$/', "", $insert); + //echo "$insert\n"; + $db->query($insert); + + } + + + + + + + + + /* + $hausnummer = ADBHausnummerModel::getFirst([ + 'ortschaft_id' => $ortschaft->id, + //'plz_id' => $plz->id, + 'strasse_id' => $strasse->id, + 'hausnummer' => $hausnummer_string + ]); + + if($hausnummer) { + // update plz if necessary + //var_dump($hausnummer->plz);exit; + if($hausnummer->plz->plz != $plz->plz ) { + echo "Updating PLZ from ".$hausnummer->plz->plz." to ".$plz->plz."\n"; + $hausnummer->plz_id = $plz->id; + $hausnummer->save(); + } + + } else { + // create new Hausnummer + $hausnummer = ADBHausnummerModel::create([ + "netzgebiet_id" => 0, + "ortschaft_id" => $ortschaft->id, + "plz_id" => $plz->id, + "strasse_id" => $strasse->id, + "hausnummer" => $hausnummer_string + ]); + if(!$hausnummer->save()) { + die("Error creating Hausnummer: ".print_r($hausnummer, true)); + } + } + */ + } + + $current_skz = $skz; + $current_gkz = $gkz; + $sdata = []; + $sdata[(string)$hausnummer_string] = [ + "adrcd" => $adrcd, + "gkz" => $gkz, + "okz" => $okz, + "plz" => $plz_string, + "skz" => $skz, + "hausnummer" => $hausnummer_string + ]; + } +$db->query("COMMIT"); function makeHausnummer($z1 = false, $z2 = false, $v = false, $b1 = false, $b2 = false) { $h = ""; @@ -368,6 +466,7 @@ function getGemeinde($kz) { return $gemeinde; } + function getOrtschaft($kz) { global $ortschaft_cache; @@ -383,6 +482,7 @@ function getOrtschaft($kz) { return $ortschaft; } + function getStrasse($kz) { global $strasse_cache; @@ -398,6 +498,7 @@ function getStrasse($kz) { return $strasse; } + function getPlz($plz_search, $gemeinde_id) { global $plz_cache;