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
@@ -145,6 +145,7 @@ class ADBHausnummerModel {
$res = $db->query($sql);
if($db->num_rows($res)) {
// hack for AddressDBController::exportAction
if($returnDBRessource) {
return $res;
}
@@ -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 = [];
@@ -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);
@@ -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");