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:
@@ -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;">
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user