WIP AddressDB/Export

This commit is contained in:
Frank Schubert
2023-01-17 12:47:04 +01:00
parent 68a58d52f7
commit f25e2c3f97
5 changed files with 89 additions and 8 deletions

View File

@@ -121,7 +121,7 @@
<div class="col">
<button type="submit" class="btn btn-primary">Filter anwenden</button>
<a class="btn btn-secondary" href="<?=self::getUrl("AddressDB")?>">Filter zurücksetzen</a>
<!--<button type="submit" formaction="<?=self::getUrl("AddressDB", "export")?>" id="export-button" class="btn btn-outline-success ml-2"><i class="fas fa-download"></i> CSV-Export</button>-->
<button type="submit" formaction="<?=self::getUrl("AddressDB", "export")?>" id="export-button" class="btn btn-outline-success ml-2"><i class="fas fa-download"></i> CSV-Export</button>
</div>
</div>
</form>

View File

@@ -0,0 +1,27 @@
<?php
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
<?php
while($data = mysqli_fetch_object($res)):
$netzgebiet = new ADBNetzgebiet($data->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;
?>
<?=$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?>;
<?php
flush();
endwhile;

View File

@@ -64,7 +64,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
LIMIT 1";
//mfLoghandler::singleton()->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);
}

View File

@@ -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'];

View File

@@ -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() {