Addedd CSV update for AddressDB Visibility and rimo id

This commit is contained in:
Frank Schubert
2024-07-26 13:29:33 +02:00
parent 1cff6f20bb
commit 40fc9da9af
3 changed files with 165 additions and 5 deletions

View File

@@ -0,0 +1,68 @@
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/header.php"); ?>
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box">
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="<?=self::getUrl("Dashboard")?>"><?=MFAPPNAME_SLUG?></a></li>
<li class="breadcrumb-item"><a href="<?=self::getUrl("AddressDB")?>">GWR / AddressDB</a></li>
<li class="breadcrumb-item active">Sichtbarkeit / Rimo ID Update</li>
</ol>
</div>
<h4 class="page-title">Sichtbarkeit / Rimo ID Update importieren</h4>
</div>
</div>
</div>
<!-- end page title -->
<div class="row">
<div class="col-lg-12">
<div class="card bg-light">
<div class="card-body">
<h4 class="header-title mb-2">Sichtbarkeit / Rimo ID Update importieren</h4>
<form class="form-horizontal" method="post" action="<?=self::getUrl("AddressDB", "saveVisibilityExternalId")?>" enctype="multipart/form-data">
<div class="card">
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="statusupdate_csv">Sichtbarkeit / Rimo ID Update CSV</label>
<div class="col-lg-10">
<input type="file" class="form-control" name="visibilityupdate_csv" />
<small>Format:<br />
<span class="text-monospace">AddressDB ID;Sichtbarkeit;Rimo External ID</span><br />
<span class="text-monospace">1769916;public;SDIBuilding_874840562177_1645721555<br /></span>
</small>
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label"></label>
<div class="col-lg-10">
<label>
<input type="checkbox" value="1" name="headline" />
Erste Zeile enthält Überschrift
</label>
</div>
</div>
<div class="form-group row">
<label class="col-lg-2"></label>
<div class="col-lg-10">
<button type="submit" class="btn btn-primary">Importieren</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/footer.php"); ?>

View File

@@ -146,9 +146,14 @@
</div>
</div>
<?php if($me->username == "fronk" || $me->username == "r.eschner@rmlinfrastruktur.at"): ?>
<div class="card">
<div class="card-body">
<a class="btn btn-outline-secondary" href="<?=self::getUrl("AddressDB", "updateVisibilityExternalId")?>"><i class="fas fa-fw fa-file-csv"></i> Sichtbarkeit / Rimo ID Update</a>
</div>
</div>
<?php endif; ?>
<div class="card">
<div class="card-body mb-3">

View File

@@ -162,7 +162,7 @@ class AddressDBController extends mfBaseController {
}
if(array_key_exists("visibility", $filter) && $filter['visibility']) {
$new_filter['visibility'] = $filter['visbility'];
$new_filter['visibility'] = $filter['visibility'];
} else {
$new_filter["visibility"] = ["public", "private"];
unset($filter['visibility']);
@@ -443,7 +443,94 @@ class AddressDBController extends mfBaseController {
}
protected function updateVisibilityExternalIdAction() {
$this->layout()->setTemplate("AddressDB/ExternalIdVisivilityUpdate");
}
protected function saveVisibilityExternalIdAction() {
$headline_included = $this->request->headline;
if(is_array($_FILES) && array_key_exists("visibilityupdate_csv", $_FILES) && !$_FILES['visibilityupdate_csv']['error']) {
// look for uploaded import file
try {
// returns File object or throws Exception on error
$file = mfUpload::handleFormUpload("visibilityupdate_csv");
} catch(Exception $ex) {
$this->layout()->setFlash("Fehler beim Dateiupload: " . $ex->getMessage(), "error");
$this->redirect("AddressDB", "updateVisibilityExternalId");
}
$i = 0;
$forbidden = 0;
$notfound = 0;
$nochange = 0;
$saved = 0;
$filename = $file->getFullPath();
$input = fopen($filename, "r");
while($csv = fgetcsv($input, 0, ";")) {
$i++;
if($i == 1 && $headline_included) continue;
if(!trim($csv[0])) {
continue;
}
$id = trim($csv[0]);
$visibility = trim($csv[1]);
$rimo_id = trim($csv[2]);
$address = new ADBHausnummer($id);
if(!$address) {
$notfound++;
continue;
}
$allowed_network = false;
foreach($this->me->myNetworks(["netowner", "salespartner"]) as $my_network) {
if($my_network->adb_netzgebiet_id == $address->netzgebiet_id) {
$allowed_network = true;
break;
}
}
if(!$allowed_network) {
$forbidden++;
continue;
}
if($address->rimo_id != $rimo_id || $address->visibility != $visibility) {
$address->rimo_id = $rimo_id;
$address->visibility = $visibility;
$address->save();
$saved++;
} else {
$nochange++;
}
}
$message = "Import erfolgreich. $saved/$i Adressen updated.";
if($notfound) {
$message .= "<br />$notfound Adressen nicht gefunden";
}
if($forbidden) {
$message .= "<br />$forbidden Adressen in falschem Netzgebiet";
}
if($nochange) {
$message .= "<br />$nochange Adressen ohne Änderung";
}
$this->layout()->setFlash($message, "success");
$this->redirect("AddressDB", "updateVisibilityExternalId");
} else {
$this->layout()->setFlash("Nichts importiert!", "info");
$this->redirect("AddressDB", "updateVisibilityExternalId");
}
}
protected function apiAction() {
if(!$this->me->is(["Admin","netowner"]) && !$this->me->can("Preorder")) {
$this->redirect("Dashboard");