Merge branch 'fronkdev' into 'master'
Added AddressDB bulk update + address update in rimo See merge request fronk/thetool!1780
This commit is contained in:
@@ -191,10 +191,58 @@
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<?php if($me->is("Admin")): ?>
|
||||
<button type="button" class="form-control btn btn-outline-purple mt-3 text-left" id="bulk-toggle-button" onclick="toggleBulkupdate()"><i id="bulk-update-chevron" class="fas fa-fw fa-chevron-right"></i> Bulk Update</button>
|
||||
|
||||
<div class="card hidden" id="bulk-update">
|
||||
<div class="card-body">
|
||||
<h3 class="mb-4">Bulk Update</h3>
|
||||
<p>Die hier eingegebenen Daten werden für alle Adressen übernommen, welche mit dem <strong>oben eingestellten Filter</strong> gefunden werden.</p>
|
||||
|
||||
<div class="mb-2">
|
||||
<label for="street" class="form-label">Straße</label>
|
||||
<input type="text" class="form-control" id="street" name="strasse">
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col-md-4">
|
||||
<label for="zip" class="form-label">PLZ</label>
|
||||
<input type="text" class="form-control" id="zip" name="plz">
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<label for="city" class="form-label">Ort</label>
|
||||
<input type="text" class="form-control" id="city" name="ort">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<label for="municipality" class="form-label">Gemeinde</label>
|
||||
<input type="text" class="form-control" id="gemeinde" name="gemeinde" disabled="disabled">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="request_rimo_update" name="request_rimo_update" value="1">
|
||||
<label class="form-check-label" for="request_rimo_update">
|
||||
Updates an Rimo schicken
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" name="submitBulkUpdate" value="1" class="btn btn-purple"><i class="fas fa-fw fa-highlighter"></i> Bulk Update durchführen (ca. <?=(is_array($pagination) && array_key_exists("maxItems", $pagination)) ? $pagination['maxItems'] : ""?>)</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php if($me->username == "fronk" || $me->username == "r.eschner@rmlinfrastruktur.at" || $me->username == "e.grundner@rmlinfrastruktur.at"): ?>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
@@ -205,6 +253,8 @@
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body mb-3">
|
||||
<div class="float-left">
|
||||
@@ -268,6 +318,14 @@
|
||||
<td><?=$address->rollout?></td>
|
||||
<td><?=$address->rollout_info?></td>
|
||||
<td style="text-align: left; letter-spacing: 4px; font-size: 1.1em;">
|
||||
<?php if($me->is("Admin")): ?>
|
||||
<a href="<?=self::getUrl("AddressDB", "syncAddressToRimo", ["id" => $address->id])?>" title="Adressdaten nach Rimo exportieren">
|
||||
<sup><span class="" style="margin-right: -16px;"><i class="fas fa-cloud-arrow-up text-success"></i></span></sup><i class="fal fa-r"></i>
|
||||
</a>
|
||||
<!--a href="<?=self::getUrl("AddressDB", "syncAddressFromRimo", ["id" => $address->id])?>" title="Adressdaten von Rimo holen">
|
||||
<sup><span class="" style="margin-right: -16px;"><i class="fas fa-cloud-arrow-down text-danger"></i></span></sup><i class="fal fa-r"></i>
|
||||
</a-->
|
||||
<?php endif; ?>
|
||||
<a href="<?=self::getUrl("AddressDB", "view", ["id" => $address->id])?>"><i class="far fa-fw fa-eye" title="Adresse Anzeigen"></i></a>
|
||||
<a href="<?=self::getUrl("AddressDB", "edit", ["id" => $address->id])?>" class="pl-1"><i class="far fa-fw fa-edit" title="Adresse Bearbeiten"></i></a>
|
||||
<a href="<?=self::getUrl("AddressDB", "delete", ["id" => $address->id])?>" onclick="if(!confirm('Addresse und alle Wohneinheiten wirklich löschen?')) return false;"><i class="far fa-fw fa-trash-alt text-danger" title="Adresse Löschen"></i></a>
|
||||
@@ -346,5 +404,16 @@
|
||||
});
|
||||
}).trigger('change');
|
||||
});
|
||||
|
||||
function toggleBulkupdate() {
|
||||
$("#bulk-update").toggle();
|
||||
if($("#bulk-update").is(":hidden")) {
|
||||
$("#bulk-update-chevron").addClass("fa-chevron-right").removeClass("fa-chevron-down");
|
||||
$("#bulk-toggle-button").addClass("btn-outline-purple").removeClass("btn-purple");
|
||||
} else {
|
||||
$("#bulk-update-chevron").addClass("fa-chevron-down").removeClass("fa-chevron-right");
|
||||
$("#bulk-toggle-button").addClass("btn-purple").removeClass("btn-outline-purple");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/footer.php"); ?>
|
||||
|
||||
@@ -57,6 +57,50 @@ class ADBHausnummer extends mfBaseModel {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function updateAddressInRimo() {
|
||||
if(!$this->rimo_id) return false;
|
||||
$creds = $this->getNetownerRimoApiCredentials();
|
||||
if(!$creds) {
|
||||
$this->log->warn(__METHOD__.": Keine API Credentials für Netzgebiet (Adresse {$this->id}) gefunden");
|
||||
}
|
||||
|
||||
$update_data = [];
|
||||
if($this->strasse_id && $this->getProperty("strasse")->name) $update_data["address"] = $this->getProperty("strasse")->name;
|
||||
if($this->ortschaft_id && $this->getProperty("ortschaft")->name) $update_data["city"] = $this->getProperty("ortschaft")->name;
|
||||
if($this->plz_id && $this->getProperty("plz")->plz) $update_data["zipCode"] = $this->getProperty("plz")->plz;
|
||||
if($this->strasse_id && $this->getProperty("strasse")->gemeinde_id && $this->getProperty("strasse")->gemeinde->name) $update_data["district"] = $this->getProperty("strasse")->gemeinde->name;
|
||||
|
||||
if(!count($update_data)) return true;
|
||||
|
||||
if(Rimoapi::changeBuildingAddress($creds["prod"]["key"], $this->rimo_id, $update_data)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getNetowner() {
|
||||
if(!$this->netzgebiet_id) return false;
|
||||
$network = NetworkModel::getFirst(["adb_netzgebiet_id" => $this->netzgebiet_id]);
|
||||
$this->log->debug("[".$this->_ruid."] ".__METHOD__.": netzgebiet: ".$this->getProperty("netzgebiet")->name);
|
||||
$this->log->debug("[".$this->_ruid."] ".__METHOD__.": network: ".$network->name);
|
||||
if(!$network) return false;
|
||||
|
||||
return $network->owner;
|
||||
}
|
||||
|
||||
public function getNetownerRimoApiCredentials() {
|
||||
$netowner = $this->getNetowner();
|
||||
if(!$netowner) return false;
|
||||
|
||||
foreach(TT_RIMO_API_CREDS as $api_creds) {
|
||||
if($api_creds["address_id"] == $netowner->id) {
|
||||
return $api_creds;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function refreshUnitCount() {
|
||||
if(!$this->id) return true;
|
||||
|
||||
|
||||
@@ -33,6 +33,12 @@ class AddressDBController extends mfBaseController {
|
||||
}
|
||||
|
||||
$this->layout->set("filter", $filter);
|
||||
|
||||
if($this->me->is("Admin") && $this->request->submitBulkUpdate) {
|
||||
return $this->saveBulkupdateAction();
|
||||
}
|
||||
|
||||
|
||||
$filter = $this->getPreparedFilter($filter);
|
||||
|
||||
// pagination defaults
|
||||
@@ -777,6 +783,180 @@ class AddressDBController extends mfBaseController {
|
||||
}
|
||||
}*/
|
||||
|
||||
protected function syncAddressToRimoAction() {
|
||||
if(!$this->me->is("Admin")) {
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
$hausnummer_id = $this->request->id;
|
||||
if(!$hausnummer_id) {
|
||||
$this->layout()->setFlash("Adresse nicht gefunden", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
$hausnummer = new ADBHausnummer($hausnummer_id);
|
||||
if(!$hausnummer->id) {
|
||||
$this->layout()->setFlash("Adresse nicht gefunden", "error");
|
||||
}
|
||||
|
||||
if(!$hausnummer->updateAddressInRimo()) {
|
||||
$this->layout()->setFlash("Fehler beim updaten der Adresse in Rimo", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
$this->layout()->setFlash("Adresse erfolgreich nach Rimo synchronisiert", "success");
|
||||
$this->redirect("AddressDB");
|
||||
|
||||
}
|
||||
|
||||
protected function saveBulkupdateAction() {
|
||||
if(!$this->me->is("Admin")) {
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
if(!$this->request->filter) {
|
||||
$this->layout()->setFlas("Filter erforderlich!");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
$filter = $this->getPreparedFilter($this->request->filter);
|
||||
$filter["netzgebiet_id"] = true;
|
||||
|
||||
//var_dump($this->request->get(), $filter);exit;
|
||||
|
||||
$update = [];
|
||||
|
||||
$ort_search = trim($this->request->ort);
|
||||
$gemeinde_search = trim($this->request->gemeinde);
|
||||
$plz_search = trim($this->request->plz);
|
||||
$strasse_search = trim($this->request->strasse);
|
||||
|
||||
$do_rimo_update = $this->request->request_rimo_update;
|
||||
|
||||
$i = 0;
|
||||
$u = 0;
|
||||
|
||||
if(ADBHausnummerModel::count($filter, true) > 1000) {
|
||||
$this->layout()->setFlash("Bissi viel auf einmal");
|
||||
}
|
||||
|
||||
$cache = [];
|
||||
$cache["gemeinde"] = [];
|
||||
$cache["ort"] = [];
|
||||
$cache["plz"] = [];
|
||||
$cache["strasse"] = [];
|
||||
|
||||
foreach(ADBHausnummerModel::search($filter) as $hausnummer) {
|
||||
$updated = false;
|
||||
$netzgebiet_id = $hausnummer->netzgebiet_id;
|
||||
if(!$netzgebiet_id) {
|
||||
$this->layout()->setFlash("Netzgebiet nicht gefunden??", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
$gemeinde_id = $hausnummer->strasse->gemeinde_id;
|
||||
if(!$gemeinde_id) {
|
||||
$this->layout()->setFlash("Strasse '{$hausnummer->strasse->name}' ({$hausnummer->strasse_id}) hat keine Gemeinde...", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
|
||||
/*if(array_key_exists("$gemeinde_search-$netzgebiet_id", $cache["gemeinde"])) {
|
||||
$gemeinde = $cache["gemeinde"]["$gemeinde_search-$netzgebiet_id"];
|
||||
} else {
|
||||
$gemeinde = ADBGemeindeModel::getFirst(['name' => $gemeinde_search, 'netzgebiet_id' => $netzgebiet_id]);
|
||||
$cache["gemeinde"]["$gemeinde_search-$netzgebiet_id"] = $gemeinde;
|
||||
}*/
|
||||
if(array_key_exists($gemeinde_id, $cache["gemeinde"])) {
|
||||
$gemeinde = $cache["gemeinde"][$gemeinde_id];
|
||||
} else {
|
||||
$gemeinde = new ADBGemeinde($gemeinde_id);
|
||||
}
|
||||
if(!$gemeinde) {
|
||||
$this->layout()->setFlash("Gemeinde $gemeinde_id nicht in AdressDB gefunden", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
|
||||
if($ort_search) {
|
||||
if(array_key_exists("$ort_search-$netzgebiet_id", $cache["ort"])) {
|
||||
$ort = $cache["ort"]["$ort_search-$netzgebiet_id"];
|
||||
} else {
|
||||
$ort = ADBOrtschaftModel::getFirst(['name' => $ort_search, 'netzgebiet_id' => $netzgebiet_id]);
|
||||
$cache["ort"]["$ort_search-$netzgebiet_id"] = $ort;
|
||||
}
|
||||
if(!$ort) {
|
||||
$this->layout()->setFlash("Ortschaft '$ort_search' nicht in AdressDB gefunden", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
}
|
||||
|
||||
if($plz_search) {
|
||||
if(array_key_exists("$plz_search-$gemeinde_id", $cache["plz"])) {
|
||||
$plz = $cache["plz"]["$plz_search-$gemeinde_id"];
|
||||
} else {
|
||||
$plz = ADBPlzModel::getFirst(['plz' => $plz_search, 'gemeinde_id' => $gemeinde->id]);
|
||||
$cache["plz"]["$plz_search-$gemeinde_id"] = $plz;
|
||||
}
|
||||
if(!$plz) {
|
||||
$this->layout()->setFlash("PLZ '$plz_search' nicht in AdressDB gefunden", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
}
|
||||
|
||||
if($strasse_search) {
|
||||
if(array_key_exists("$strasse_search-$gemeinde_id", $cache["strasse"])) {
|
||||
$strasse = $cache["strasse"]["$strasse_search-$gemeinde_id"];
|
||||
} else {
|
||||
$strasse = ADBStrasseModel::getFirst(['name' => $strasse_search, 'gemeinde_id' => $gemeinde->id]);
|
||||
$cache["strasse"]["$strasse_search-$gemeinde_id"] = $strasse;
|
||||
}
|
||||
if(!$strasse) {
|
||||
$this->log->debug(__METHOD__ . ": create street '$strasse_search' in gemeinde {$gemeinde->name}");
|
||||
$strasse = ADBStrasseModel::create([
|
||||
'gemeinde_id' => $gemeinde->id,
|
||||
'name' => $strasse_search
|
||||
]);
|
||||
|
||||
if(!$strasse->save()) {
|
||||
$this->layout()->setFlash("Fehler beim Speichern der neuen Straße", "error");
|
||||
$this->redirect("AddressDB");
|
||||
}
|
||||
$cache["strasse"]["$strasse_search-$gemeinde_id"] = $strasse;
|
||||
}
|
||||
}
|
||||
|
||||
//$hausnummer->gemeinde_id = $gemeinde->id;
|
||||
if($ort_search && $hausnummer->ortschaft_id != $ort->id) {
|
||||
$hausnummer->ortschaft_id = $ort->id;
|
||||
$updated = true;
|
||||
}
|
||||
if($strasse_search && $hausnummer->strasse_id != $strasse->id) {
|
||||
$hausnummer->strasse_id = $strasse->id;
|
||||
$updated = true;
|
||||
}
|
||||
if($plz_search && $hausnummer->plz_id != $plz->id) {
|
||||
$hausnummer->plz_id = $plz->id;
|
||||
$updated = true;
|
||||
}
|
||||
|
||||
if($updated) {
|
||||
$hausnummer->save(["no_aftersave" => true]);
|
||||
if($do_rimo_update) {
|
||||
$hausnummer->updateAddressInRimo();
|
||||
}
|
||||
$u++;
|
||||
}
|
||||
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
$this->layout()->setFlash("Bulk Update erfolgreich. $u/$i Adressen updated.", "success");
|
||||
$this->redirect("AddressDB");
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected function apiAction() {
|
||||
if(!$this->me->is(["Admin","netowner"]) && !$this->me->can("Preorder")) {
|
||||
|
||||
@@ -2,6 +2,56 @@
|
||||
|
||||
class Rimoapi {
|
||||
|
||||
public static function changeBuildingAddress($apikey, $building_external_id, $_data) {
|
||||
if(!$apikey) return false;
|
||||
if(!$building_external_id) return false;
|
||||
$log = mfLoghandler::singleton();
|
||||
|
||||
$update_data = [];
|
||||
foreach($_data as $key => $value) {
|
||||
if(!in_array($key, ["address", "city", "zipCode", "district", "country", "lotNumber", "district2"])) continue;
|
||||
if($value) {
|
||||
$update_data[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if(!count($update_data)) return false;
|
||||
|
||||
// send request to Rimo Api
|
||||
$params = [];
|
||||
$params['apiKey'] = $apikey;
|
||||
$params['buildingId'] = $building_external_id;
|
||||
$params = array_merge($params, $update_data);
|
||||
|
||||
$ctx_opts = [
|
||||
'http' => [
|
||||
'method' => 'PUT',
|
||||
'header' => 'accept: application/json'
|
||||
]
|
||||
];
|
||||
|
||||
$qs = http_build_query($params);
|
||||
//echo $qs."\n";
|
||||
|
||||
$createOrderEp = RIMO_API_JSON_URL.RIMO_API_JSON_EP_CHANGE_BUILDING_ADDRESS;
|
||||
$put_url = $createOrderEp."?".$qs;
|
||||
$ctx = stream_context_create($ctx_opts);
|
||||
$log->debug(__METHOD__.": Address Change in Rimo: $put_url");
|
||||
$response = file_get_contents($put_url, false, $ctx);
|
||||
//var_dump($response);exit;
|
||||
$log->debug(__METHOD__.": response: ".print_r($response,true));
|
||||
if($response === false) {
|
||||
$log->error("Fehler beim Update der Adresse in RIMO ".$building_external_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
$resp_data = json_decode($response);
|
||||
if(!$resp_data->id) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function getFtuData($oaid, $home_external_id) {
|
||||
//$oaid = $oaid;
|
||||
$log = mfLoghandler::singleton();
|
||||
@@ -254,7 +304,7 @@ class Rimoapi {
|
||||
}
|
||||
}
|
||||
|
||||
var_dump($update_data);
|
||||
//var_dump($update_data);
|
||||
if(!count($update_data)) {
|
||||
$log->debug(__METHOD__.": no valid update data");
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user