Merge branch 'AddressDB/improve-adb-gwr-view-and-filter' into 'master'

added new filter and changed displaying

See merge request fronk/thetool!1430
This commit is contained in:
Luca Haid
2025-06-10 12:18:46 +00:00
2 changed files with 89 additions and 47 deletions

View File

@@ -166,6 +166,11 @@
<option value="2" <?=(array_key_exists("tool_building_type", $filter) && $filter['tool_building_type'] == "2") ? "selected='selected'" : ""?>>MPH</option>
</select>
</div>
<div class="col-2">
<label class="form-label" for="filter_home_oaid_rimo_id">Home OAID / Rimo ID</label>
<input type="text" class="form-control" name="filter[home_oaid_rimo_id]" id="filter_home_oaid_rimo_id" value="<?=(array_key_exists("home_oaid_rimo_id", $filter)) ? $filter['home_oaid_rimo_id'] : ""?>" />
</div>
</div>
<div class="row mt-2">
@@ -215,10 +220,10 @@
<th>Gemeinde</th>
<th>Ortschaft</th>
<th>Straße</th>
<th>Hausnummer</th>
<th>Hausnr.</th>
<th>Stiege</th>
<th>Wohneinheiten</th>
<th>GDA-Eigenschaft</th>
<th>Rimo-ID</th>
<th>Rollout Jahr</th>
<th>Rollout Info</th>
<th></th>
@@ -236,8 +241,12 @@
<td><?=$address->strasse->name?></td>
<td><?=$address->hausnummer?></td>
<td><?=$address->stiege?></td>
<td><?=count($address->wohneinheiten)?></td>
<td><?=$address->gdaeigenschaft?></td>
<td><?=count($address->wohneinheiten)?>
<span class="text-secondary" title="<?=($address->tool_building_type == 0) ? "Unbekannt" : (($address->tool_building_type == 1) ? "EFH" : "MPH")?>">
<i class="fas fa-fw <?=($address->tool_building_type == 0) ? "fa-question" : (($address->tool_building_type == 1) ? "fa-home" : "fa-building")?>"></i>
</td>
<td><span><?=str_replace('_', '_<wbr>', $address->rimo_id)?></span>
</td>
<td><?=$address->rollout?></td>
<td><?=$address->rollout_info?></td>
<td style="text-align: left; letter-spacing: 4px; font-size: 1.1em;">

View File

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