Added AddressDB/Export; ADBHausnummer::unit_count is now recalculated

whenever a Wohneinheit is saved
This commit is contained in:
Frank Schubert
2023-01-17 15:04:47 +01:00
parent f25e2c3f97
commit e8de3058b5
6 changed files with 57 additions and 6 deletions

View File

@@ -3,7 +3,7 @@ ob_end_flush();
header("Content-type: text/csv");
header('Content-disposition: attachment; filename="addressdb-export-'.date('Y-m-d_H-i-s').'.csv"');
?>
AddressDB_ID;Extref;Adrcd;OAID;Neztgebiet_Extref;Netzgebiet;GKZ;Gemeinde;OKZ;Ortschaft;SKZ;Strasse;PLZ;Hausnummer;Grundstueck;GPS Breite; GPS Laenge;Rollout;Rollout_Info;Freigabe;Nutzungseinheiten
AddressDB_ID;Extref;Adrcd;OAID;Netzgebiet_Extref;Netzgebiet;GKZ;Gemeinde;OKZ;Ortschaft;PLZ;SKZ;Strasse;Hausnummer;Grundstueck;GPS Breite; GPS Laenge;Rollout;Rollout_Info;Freigabe;Nutzungseinheiten
<?php
while($data = mysqli_fetch_object($res)):
@@ -18,10 +18,9 @@ while($data = mysqli_fetch_object($res)):
} else {
$freigabe = "";
}
$unit_count = ADBWohneinheitModel::count(['hausnummer_id' => $data->id]);
//$unit_count = 1;
$unit_count = $data->unit_count;
?>
<?=$data->id?>;"<?=$data->extref?>";<?=$data->adrcd?>;"<?=$data->oaid?>";"<?=$netzgebiet->extref?>";"<?=$netzgebiet->name?>";<?=$gemeinde->kennziffer?>;"<?=$gemeinde->name?>";<?=$ortschaft->kennziffer?>;"<?=$ortschaft->name?>";<?=$strasse->kennziffer?>;"<?=$strasse->name?>";"<?=$plz->plz?>";"<?=$data->hausnummer?>";"<?=$data->grund_nr?>";<?=$data->gps_lat?>;<?=$data->gps_long?>;<?=$data->rollout?>;"<?=$data->rollout_info?>";"<?=$freigabe?>";<?=$unit_count?>;
<?=$data->id?>;"<?=$data->extref?>";<?=$data->adrcd?>;"<?=$data->oaid?>";"<?=$netzgebiet->extref?>";"<?=$netzgebiet->name?>";<?=$gemeinde->kennziffer?>;"<?=$gemeinde->name?>";<?=$ortschaft->kennziffer?>;"<?=$ortschaft->name?>";"<?=$plz->plz?>";<?=$strasse->kennziffer?>;"<?=$strasse->name?>";"<?=$data->hausnummer?>";"<?=$data->grund_nr?>";<?=$data->gps_lat?>;<?=$data->gps_long?>;<?=$data->rollout?>;"<?=$data->rollout_info?>";"<?=$freigabe?>";<?=$unit_count?>;
<?php
flush();
endwhile;

View File

@@ -145,6 +145,7 @@ class ADBHausnummerModel {
$res = $db->query($sql);
if($db->num_rows($res)) {
// hack for AddressDBController::exportAction
if($returnDBRessource) {
return $res;
}

View File

@@ -8,6 +8,20 @@ class ADBWohneinheit extends mfBaseModel {
$this->table = "Wohneinheit";
}
protected function afterSave() {
if(!$this->id) return true;
if(!$this->hausnummer_id) return true;
if(!defined("ADBWohneinheit_onSave_noAutoUnitCount") || !ADBWohneinheit_onSave_noAutoUnitCount) {
$unit_count = ADBWohneinheitModel::count(['hausnummer_id' => $this->hausnummer_id]);
$hausnummer = $this->getProperty("hausnummer");
if($hausnummer->id) {
$hausnummer->unit_count = $unit_count;
$hausnummer->save();
}
}
}
public static function parseHausnummerZusatz($text) {
$data = [];

View File

@@ -47,7 +47,14 @@ class ADBWohneinheitModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter);
$res = $db->select("Wohneinheit", "*", "$where ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer LIMIT 1");
$sql = "SELECT Wohneinheit.* FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
WHERE $where
GROUP BY Wohneinheit.id
ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer,num
LIMIT 1";
$res = $db->query($sql);
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
$item = new ADBWohneinheit($data);
@@ -65,7 +72,7 @@ class ADBWohneinheitModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$res = $db->select("Wohneinheit", "*", "1=1 ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer");
$res = $db->select("Wohneinheit", "*", "1=1 ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer,num");
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new ADBWohneinheit($data);

View File

@@ -364,6 +364,8 @@ class AddressDBController extends mfBaseController {
$addressdb_filter['netzgebiet_id'] = $netzgebiet_ids;
}
// Get mysqli resource from Model so layout can output data as it's retrieved
// Fixes lousy performance and horrendous memory usage
$res = ADBHausnummerModel::search($addressdb_filter, [], true);
$this->layout()->setTemplate("AddressDB/export.csv");

View File

@@ -0,0 +1,28 @@
#!/usr/bin/php
<?php
//require 'vendor/autoload.php';
require("../../config/config.php");
define('FRONKDB_SQLDEBUG',false);
error_reporting(E_ALL & ~(E_NOTICE | E_STRICT | E_DEPRECATED));
require_once(LIBDIR."/mvcfronk/mfRouter/mfRouter.php");
require_once(LIBDIR."/mvcfronk/mfBase/mfBaseModel.php");
require_once(LIBDIR."/mvcfronk/mfBase/mfBaseController.php");
$i = 0;
foreach(ADBWohneinheitModel::getAll() as $unit) {
$hausnummer = new ADBHausnummer($unit->hausnummer_id);
if($hausnummer->id) {
$unit_count = ADBWohneinheitModel::count(['hausnummer_id' => $unit->hausnummer_id]);
$hausnummer->unit_count = $unit_count;
if(!$hausnummer->save()) {
echo "error saving hausnummer ".$hausnummer->id."\n";
}
$i++;
}
}
echo "Updated $i Wohneinheiten\n";