From 1cccb79610daf5d7bc3dc4686aeaa4851a4c2123 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Tue, 11 Oct 2022 18:23:26 +0200 Subject: [PATCH] WIP script for importing BEV adressregister --- .gitignore | 3 + application/Preorder/PreorderController.php | 9 + .../addressdb_delete_multiple_streets.php | 0 .../{ => addressdb}/addressdb_home_update.php | 0 scripts/{ => addressdb}/addressdb_import.php | 0 .../addressdb_import_bev_adressregister.php | 240 ++++++++++++++++++ scripts/{ => addressdb}/addressdb_update.php | 0 7 files changed, 252 insertions(+) rename scripts/{ => addressdb}/addressdb_delete_multiple_streets.php (100%) rename scripts/{ => addressdb}/addressdb_home_update.php (100%) rename scripts/{ => addressdb}/addressdb_import.php (100%) create mode 100755 scripts/addressdb/addressdb_import_bev_adressregister.php rename scripts/{ => addressdb}/addressdb_update.php (100%) diff --git a/.gitignore b/.gitignore index 511838bbb..1d22cf262 100644 --- a/.gitignore +++ b/.gitignore @@ -6,10 +6,13 @@ composer.lock nbproject config/config.php scripts/import +scripts/addressdb/import todo files/* vendor/ +*.sql + # Packages # ############ # it's better to unpack these files and commit the raw source diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php index 67b99dfe0..8c514c0a9 100644 --- a/application/Preorder/PreorderController.php +++ b/application/Preorder/PreorderController.php @@ -57,6 +57,15 @@ class PreorderController extends mfBaseController { private function getPreparedFilter($filter) { $new_filter = []; + if(array_key_exists("show_deleted", $filter)) { + if($filter['show_deleted'] == "show") { + $new_filter['deleted'] = null; + } + if($filter['show_deleted'] == "only") { + $new_filter['deleted'] = 1; + } + } + if(is_array($filter) && count($filter)) { foreach($filter as $name => $value) { $new_filter[$name] = $value; diff --git a/scripts/addressdb_delete_multiple_streets.php b/scripts/addressdb/addressdb_delete_multiple_streets.php similarity index 100% rename from scripts/addressdb_delete_multiple_streets.php rename to scripts/addressdb/addressdb_delete_multiple_streets.php diff --git a/scripts/addressdb_home_update.php b/scripts/addressdb/addressdb_home_update.php similarity index 100% rename from scripts/addressdb_home_update.php rename to scripts/addressdb/addressdb_home_update.php diff --git a/scripts/addressdb_import.php b/scripts/addressdb/addressdb_import.php similarity index 100% rename from scripts/addressdb_import.php rename to scripts/addressdb/addressdb_import.php diff --git a/scripts/addressdb/addressdb_import_bev_adressregister.php b/scripts/addressdb/addressdb_import_bev_adressregister.php new file mode 100755 index 000000000..d07115e34 --- /dev/null +++ b/scripts/addressdb/addressdb_import_bev_adressregister.php @@ -0,0 +1,240 @@ +#!/usr/bin/php + $gkz, + 'code' => $gkz, + 'name' => $gemeinde_name + ]); + $gemeinde_id = $gemeinde->save(); + if(!$gemeinde_id) { + die("Fehler beim Speichern der Gemeinde ($gkz, $gemeinde_name)\n"); + } + } + + } + +} + +echo ($i-1)." Gemeinden importiert\n"; + +/* + * Import Ortschaften + */ + +$filename = "$folder/ORTSCHAFT.csv"; +$input = fopen($filename, "r"); + +$i = 0; +while($csv = fgetcsv($input, 0, ";")) { + $i++; + if($i == 1) continue; + + if(!trim($csv[0])) { + continue; + } else { + $gkz = trim($csv[0]); + $okz = trim($csv[1]); + $ortschaft_name = trim($csv[2]); + + $gemeinde = getGemeinde($gkz); + if(!$gemeinde) { + die("Kann Ortschaft nicht importieren: Gemeinde nicht gefunden ($gkz)\n"); + } + + $ortschaft = ADBOrtschaftModel::getFirst(["kennziffer" => $okz]); + if(!$ortschaft) { + $ortschaft = ADBOrtschaftModel::create([ + 'gemeinde_id' => $gemeinde->id, + 'kennziffer' => $okz, + 'name' => $ortschaft_name + ]); + $ortschaft_id = $ortschaft->save(); + if(!$ortschaft_id) { + die("Fehler beim Speichern der Ortschaft ($okz, $ortschaft_name)\n"); + } + } + } + +} + +echo ($i-1)." Ortschaften importiert\n"; + +/* + * Import Strassen + */ + +$filename = "$folder/STRASSE.csv"; +$input = fopen($filename, "r"); + +$i = 0; +while($csv = fgetcsv($input, 0, ";")) { + $i++; + if($i == 1) continue; + + if($i % 1000 == 0) { + echo "."; + } + + if(!trim($csv[0])) { + continue; + } else { + $skz = trim($csv[0]); + $strasse_name = trim($csv[1]); + $gkz = trim($csv[4]); + + if(!$skz) continue; + + $gemeinde = getGemeinde($gkz); + if(!$gemeinde) { + die("Kann Strasse nicht importieren: Gemeinde nicht gefunden ($gkz)\n"); + } + + $strasse = ADBStrasseModel::getFirst(["kennziffer" => $skz]); + if(!$strasse) { + if($gemeinde->id == 1) { + // Adresse in Premstaetten + // try to find strasse by fuzzy name + $strasse_search = [$db->escape($strasse_name)]; + + if(strpos($strasse_name, ' ') !== false) $strasse_search[] = $db->escape(str_replace(' ', '-', $strasse_name)); + if(strpos($strasse_name, '-') !== false) $strasse_search[] = $db->escape(str_replace('-', ' ', $strasse_name)); + if(strpos($strasse_name, '.') !== false) $strasse_search[] = $db->escape(str_replace('.', '. ', $strasse_name)); + if(strpos($strasse_name, '.') !== false) $strasse_search[] = $db->escape(str_replace('.', '.-', $strasse_name)); + if(strpos($strasse_name, '. ') !== false) $strasse_search[] = $db->escape(str_replace('. ', '.', $strasse_name)); + if(strpos($strasse_name, '. ') !== false) $strasse_search[] = $db->escape(str_replace('. ', '.-', $strasse_name)); + if(strpos($strasse_name, '.') !== false) $strasse_search[] = $db->escape(str_replace('.-', '.', $strasse_name)); + if(strpos($strasse_name, '.') !== false) $strasse_search[] = $db->escape(str_replace('.-', '. ', $strasse_name)); + + foreach($strasse_search as $search) { + if(strpos($search, 'ß') !== false) $strasse_search[] = $db->escape(str_replace('ß', 'ss', $search)); + if(strpos($search, 'ä') !== false) $strasse_search[] = $db->escape(str_replace('ä', 'ae', $search)); + if(strpos($search, 'ö') !== false) $strasse_search[] = $db->escape(str_replace('ö', 'oe', $search)); + if(strpos($search, 'ü') !== false) $strasse_search[] = $db->escape(str_replace('ü', 'ue', $search)); + + if(strpos($search, 'ss') !== false) $strasse_search[] = $db->escape(str_replace('ss', 'ß', $search)); + if(strpos($search, 'ae') !== false) $strasse_search[] = $db->escape(str_replace('ae', 'ä', $search)); + if(strpos($search, 'oe') !== false) $strasse_search[] = $db->escape(str_replace('oe', 'ö', $search)); + if(strpos($search, 'ue') !== false) $strasse_search[] = $db->escape(str_replace('ue', 'ü', $search)); + } + + + $strasse_ids = []; + + $sql = "SELECT * FROM Strasse WHERE name IN ('". implode("', '", $strasse_search)."') AND gemeinde_id=".$gemeinde->id; + //echo $sql."\n"; + $res = $db->query($sql); + if($db->num_rows($res) > 1) { + echo "Found multiple streets for '$strasse_name' in Gemeinde ".$gemeinde->name." (".$gemeinde->id.")\n"; + while($data = $db->fetch_object($res)) { + $strasse_ids[] = $data->id; + } + } elseif($db->num_rows($res)) { + $data = $db->fetch_object($res); + $strasse_ids[] = $data->id; + //echo "Found matching street for '$strasse_name': ".$data->name."\n"; + } + + if(count($strasse_ids)) { + // update skz for eisting streets + foreach($strasse_ids as $strasse_id) { + $strasse = new ADBStrasse($strasse_id); + $strasse->kennziffer = $skz; + + if($strasse_name != $strasse->name) { + echo "Updating strasse name from '".$strasse->name."' to '$strasse_name' (".$strasse->id.")\n"; + $strasse->name = $strasse_name; + } + + if(!$strasse->save()) { + echo "Fehler beim Speichern der Strase ($skz, $strasse_name, ".$gemeinde->name.")\n"; + } + } + } else { + // create strasse + + $strasse = ADBStrasseModel::create([ + 'gemeinde_id' => $gemeinde->id, + 'kennziffer' => $skz, + 'name' => $strasse_name + ]); + $strasse_id = $strasse->save(); + if(!$strasse_id) { + die("Fehler beim Speichern der Ortschaft ($okz, $ortschaft_name)\n"); + } + } + } else { + // nicht in premstätten + // create strasse + + $strasse = ADBStrasseModel::create([ + 'gemeinde_id' => $gemeinde->id, + 'kennziffer' => $skz, + 'name' => $strasse_name + ]); + $strasse_id = $strasse->save(); + if(!$strasse_id) { + die("Fehler beim Speichern der Ortschaft ($okz, $ortschaft_name)\n"); + } + } + + } + } + +} + +echo "\n".($i-1)." Straßen importiert\n"; + + +$gemeinden_cache = []; +function getGemeinde($kz) { + global $gemeinden_cache; + + if(array_key_exists($kz, $gemeinden_cache)) { + return $gemeinden_cache[$kz]; + } + + $gemeinde = ADBGemeindeModel::getFirst(['kennziffer' => $kz]); + if(!$gemeinde) { + return false; + } + $gemeinden_cache[$kz] = $gemeinde; + return $gemeinde; +} \ No newline at end of file diff --git a/scripts/addressdb_update.php b/scripts/addressdb/addressdb_update.php similarity index 100% rename from scripts/addressdb_update.php rename to scripts/addressdb/addressdb_update.php