From f25e2c3f97d110d4543d5e9309d0819652951661 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Tue, 17 Jan 2023 12:47:04 +0100 Subject: [PATCH] WIP AddressDB/Export --- Layout/default/AddressDB/Index.php | 2 +- Layout/default/AddressDB/export.csv.php | 27 ++++++++++ .../ADBHausnummer/ADBHausnummerModel.php | 11 ++-- .../ADBWohneinheit/ADBWohneinheitModel.php | 4 +- application/AddressDB/AddressDBController.php | 53 ++++++++++++++++++- 5 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 Layout/default/AddressDB/export.csv.php diff --git a/Layout/default/AddressDB/Index.php b/Layout/default/AddressDB/Index.php index 42ecff33b..7fbdb49c5 100644 --- a/Layout/default/AddressDB/Index.php +++ b/Layout/default/AddressDB/Index.php @@ -121,7 +121,7 @@
">Filter zurücksetzen - +
diff --git a/Layout/default/AddressDB/export.csv.php b/Layout/default/AddressDB/export.csv.php new file mode 100644 index 000000000..2b1fc54a1 --- /dev/null +++ b/Layout/default/AddressDB/export.csv.php @@ -0,0 +1,27 @@ + +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 +netzgebiet_id); + $strasse = new ADBStrasse($data->strasse_id); + $gemeinde = new ADBGemeinde($strasse->gemeinde_id); + $ortschaft = new ADBOrtschaft($data->ortschaft_id); + $plz = new ADBPlz($data->plz_id); + $freigabe_array = json_decode($data->freigabe); + if(is_array($freigabe_array)) { + $freigabe = join(", ", $freigabe_array); + } else { + $freigabe = ""; + } + $unit_count = ADBWohneinheitModel::count(['hausnummer_id' => $data->id]); + //$unit_count = 1; +?> +id?>;"extref?>";adrcd?>;"oaid?>";"extref?>";"name?>";kennziffer?>;"name?>";kennziffer?>;"name?>";kennziffer?>;"name?>";"plz?>";"hausnummer?>";"grund_nr?>";gps_lat?>;gps_long?>;rollout?>;"rollout_info?>";"";; +debug($where); @@ -118,7 +118,7 @@ class ADBHausnummerModel { return 0; } - public static function search($filter, $limit = false) { + public static function search($filter, $limit = false, $returnDBRessource = false) { $items = []; $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); @@ -129,7 +129,7 @@ class ADBHausnummerModel { LEFT JOIN Strasse ON (Hausnummer.strasse_id = Strasse.id) LEFT JOIN Plz ON (Hausnummer.plz_id = Plz.id) WHERE $where - ORDER BY strasse_id,LENGTH(hausnummer), hausnummer"; + ORDER BY netzgebiet_id,Gemeinde.id,ortschaft_id,strasse_id,LENGTH(hausnummer), hausnummer"; mfLoghandler::singleton()->debug($sql); if(is_array($limit) && count($limit)) { @@ -144,6 +144,11 @@ class ADBHausnummerModel { $res = $db->query($sql); if($db->num_rows($res)) { + + if($returnDBRessource) { + return $res; + } + while($data = $db->fetch_object($res)) { $items[] = new ADBHausnummer($data); } diff --git a/application/ADBWohneinheit/ADBWohneinheitModel.php b/application/ADBWohneinheit/ADBWohneinheitModel.php index 71687127e..382708e2d 100644 --- a/application/ADBWohneinheit/ADBWohneinheitModel.php +++ b/application/ADBWohneinheit/ADBWohneinheitModel.php @@ -88,7 +88,7 @@ class ADBWohneinheitModel { ) as tbl "; - mfLoghandler::singleton()->debug($sql); + //mfLoghandler::singleton()->debug($sql); $res = $db->query($sql); if($db->num_rows($res)) { $data = $db->fetch_object($res); @@ -108,7 +108,7 @@ class ADBWohneinheitModel { GROUP BY Wohneinheit.id ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer,num"; - mfLoghandler::singleton()->debug($sql); + //mfLoghandler::singleton()->debug($sql); if(is_array($limit) && count($limit)) { if(is_numeric($limit['start']) && is_numeric($limit['count'])) { $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; diff --git a/application/AddressDB/AddressDBController.php b/application/AddressDB/AddressDBController.php index b2b90f894..5e4041ae0 100644 --- a/application/AddressDB/AddressDBController.php +++ b/application/AddressDB/AddressDBController.php @@ -25,7 +25,6 @@ class AddressDBController extends mfBaseController { $this->layout->set("filter", $rfilter); - $where = ""; $filter = $this->getPreparedFilter($rfilter); // pagination defaults @@ -152,7 +151,7 @@ class AddressDBController extends mfBaseController { if(is_array($filter) && count($filter)) { foreach($filter as $name => $value) { - $new_filter[$name] = $value; + if(strlen($value) > 0) $new_filter[$name] = $value; } } @@ -324,6 +323,56 @@ class AddressDBController extends mfBaseController { $this->layout()->setFlash("Adresse erfolgreich gespeichert", "success"); $this->redirect("AddressDB", "Index", $qs); + } + + protected function exportAction() { + $rfilter = $this->request->filter; + if(!is_array($rfilter)) { + $rfilter = []; + } + $filter = $this->getPreparedFilter($rfilter); + + + if($this->me->is("Admin")) { + $my_networks = NetworkModel::getAll(); + } else { + $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); + } + + $netzgebiet_ids = []; + $my_adb_networks = []; + foreach($my_networks as $network) { + if($network->adb_netzgebiet_id && !in_array($network->adb_netzgebiet_id, $netzgebiet_ids)) { + $netzgebiet_ids[] = $network->adb_netzgebiet_id; + $my_adb_networks[$network->adb_netzgebiet_id] = new ADBNetzgebiet($network->adb_netzgebiet_id); + } + } + + if(array_key_exists("network_id", $filter) && $filter['network_id']) { + if($this->me->is("Admin")) { + $filter['netzgebiet_id'] = $filter['network_id']; + } else { + if(in_array($filter['network_id'], $netzgebiet_ids)) { + $filter['netzgebiet_id'] = $filter['network_id']; + } + } + } + unset($filter['network_id']); + + $addressdb_filter = $filter; + if(!array_key_exists("netzgebiet_id", $addressdb_filter)) { + $addressdb_filter['netzgebiet_id'] = $netzgebiet_ids; + } + + $res = ADBHausnummerModel::search($addressdb_filter, [], true); + + $this->layout()->setTemplate("AddressDB/export.csv"); + $this->layout()->set("res", $res); + + //var_dump($filter, $hausnummern);exit; + + + } protected function apiAction() {