@@ -268,6 +318,14 @@
=$address->rollout?> |
=$address->rollout_info?> |
+ is("Admin")): ?>
+ $address->id])?>" title="Adressdaten nach Rimo exportieren">
+
+
+
+
$address->id])?>">
$address->id])?>" class="pl-1">
$address->id])?>" onclick="if(!confirm('Addresse und alle Wohneinheiten wirklich löschen?')) return false;">
@@ -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");
+ }
+ }
diff --git a/application/ADBHausnummer/ADBHausnummer.php b/application/ADBHausnummer/ADBHausnummer.php
index 7a8e06811..5e0d38397 100644
--- a/application/ADBHausnummer/ADBHausnummer.php
+++ b/application/ADBHausnummer/ADBHausnummer.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;
diff --git a/application/AddressDB/AddressDBController.php b/application/AddressDB/AddressDBController.php
index fc5a73dfc..c491cf599 100644
--- a/application/AddressDB/AddressDBController.php
+++ b/application/AddressDB/AddressDBController.php
@@ -33,8 +33,14 @@ 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
$pagination = [];
$pagination['start'] = 0;
@@ -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")) {
diff --git a/lib/Rimoapi/Rimoapi.php b/lib/Rimoapi/Rimoapi.php
index 922a36677..e58de712a 100644
--- a/lib/Rimoapi/Rimoapi.php
+++ b/lib/Rimoapi/Rimoapi.php
@@ -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;
|