From 4dd53c3a780b9f63d752a7d2c3c9fe77e2391268 Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Tue, 10 Jun 2025 14:18:28 +0200 Subject: [PATCH] added new filter and changed displaying --- Layout/default/AddressDB/Index.php | 17 ++- .../ADBHausnummer/ADBHausnummerModel.php | 119 +++++++++++------- 2 files changed, 89 insertions(+), 47 deletions(-) diff --git a/Layout/default/AddressDB/Index.php b/Layout/default/AddressDB/Index.php index eb7a3909f..cfce6d799 100644 --- a/Layout/default/AddressDB/Index.php +++ b/Layout/default/AddressDB/Index.php @@ -166,6 +166,11 @@ + +
+ + " /> +
@@ -215,10 +220,10 @@ Gemeinde Ortschaft Straße - Hausnummer + Hausnr. Stiege Wohneinheiten - GDA-Eigenschaft + Rimo-ID Rollout Jahr Rollout Info @@ -236,8 +241,12 @@ strasse->name?> hausnummer?> stiege?> - wohneinheiten)?> - gdaeigenschaft?> + wohneinheiten)?> + tool_building_type == 1) ? "EFH" : "MPH")?>"> + tool_building_type == 1) ? "fa-home" : "fa-building")?>"> + + ', $address->rimo_id)?> + rollout?> rollout_info?> diff --git a/application/ADBHausnummer/ADBHausnummerModel.php b/application/ADBHausnummer/ADBHausnummerModel.php index 835cdd033..4a22d52b6 100644 --- a/application/ADBHausnummer/ADBHausnummerModel.php +++ b/application/ADBHausnummer/ADBHausnummerModel.php @@ -121,15 +121,28 @@ class ADBHausnummerModel { if ($join_tables) { $sql = "SELECT COUNT(*) as cnt FROM ( - SELECT Hausnummer.id FROM Hausnummer - LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id) - LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id) - LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id) - LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id) - LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id) - WHERE $where - ) hn"; - } else $sql = "SELECT COUNT(*) as cnt FROM Hausnummer WHERE $where"; + SELECT Hausnummer.id FROM Hausnummer + LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id) + LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id) + LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id) + LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id) + LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)"; + } else { + $sql = "SELECT COUNT(*) as cnt FROM Hausnummer"; + } + + // Only join Wohneinheit table if we're searching for Wohneinheit data + if (!empty($filter['home_oaid_rimo_id'])) { + $sql .= " LEFT JOIN Wohneinheit ON (Wohneinheit.hausnummer_id = Hausnummer.id)"; + } + + $sql .= " WHERE $where"; + + if (!empty($filter['home_oaid_rimo_id'])) { + $sql .= " GROUP BY Hausnummer.id"; + } + + mfLoghandler::singleton()->debug($sql); @@ -165,45 +178,52 @@ class ADBHausnummerModel { public static function search($filter, $limit = false, $returnDBRessource = false) { - $items = []; - $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); - - $where = self::getSqlFilter($filter); - $sql = "SELECT Hausnummer.* FROM Hausnummer + $items = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + + // Base SQL with standard joins + $sql = "SELECT Hausnummer.* FROM Hausnummer LEFT JOIN Ortschaft ON (Ortschaft.id = Hausnummer.ortschaft_id) LEFT JOIN Gemeinde ON (Gemeinde.id = Ortschaft.gemeinde_id) LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id) LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id) - LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id) - WHERE $where + LEFT JOIN HausnummerStatusflagValue ON (HausnummerStatusflagValue.hausnummer_id = Hausnummer.id)"; + + if (!empty($filter['home_oaid_rimo_id'])) { + $sql .= " LEFT JOIN Wohneinheit ON (Wohneinheit.hausnummer_id = Hausnummer.id)"; + } + + $sql .= " WHERE $where GROUP BY Hausnummer.id ORDER BY netzgebiet_id,Gemeinde.id,ortschaft_id,strasse_id,LENGTH(hausnummer), hausnummer"; - - if(is_array($limit) && count($limit)) { - if(is_numeric($limit['start']) && is_numeric($limit['count'])) { - $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; - } elseif(is_numeric($limit['count'])) { - $sql .= " LIMIT ".$limit['count']; - } + + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['count']; + } + } + + mfLoghandler::singleton()->debug($sql); + + $res = $db->query($sql); + if($db->num_rows($res)) { + // hack for AddressDBController::exportAction + if($returnDBRessource) { + return $res; + } + + while($data = $db->fetch_object($res)) { + $items[] = new ADBHausnummer($data); + } + } + return $items; } - - mfLoghandler::singleton()->debug($sql); - - $res = $db->query($sql); - if($db->num_rows($res)) { - - // hack for AddressDBController::exportAction - if($returnDBRessource) { - return $res; - } - - while($data = $db->fetch_object($res)) { - $items[] = new ADBHausnummer($data); - } - } - return $items; - } - + + private static function getSqlFilter($filter) { $where = "1=1 "; @@ -494,9 +514,22 @@ class ADBHausnummerModel { : " AND Hausnummer.rimo_op_state = '$rimo_op_state'"; } + if (array_key_exists("home_oaid_rimo_id", $filter)) { + $searchTerm = $filter['home_oaid_rimo_id']; + + $searchTerms = explode(',', $searchTerm); + $where .= " AND ("; + $conditions = []; + foreach ($searchTerms as $term) { + $escapedTerm = FronkDB::singleton()->escape(trim($term)); + if ($escapedTerm) { + $conditions[] = "(Wohneinheit.oaid LIKE '%{$escapedTerm}%' OR Wohneinheit.extref LIKE '%{$escapedTerm}%')"; + } + } + $where .= implode(' OR ', $conditions); + $where .= ")"; + } - - //var_dump($filter, $where);exit; return $where; }