Merge branch 'fronkdev' into 'master'

Added AddressDB bulk update + address update in rimo

See merge request fronk/thetool!1780
This commit is contained in:
Frank Schubert
2025-09-19 09:34:02 +00:00
4 changed files with 347 additions and 4 deletions
@@ -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;
+181 -1
View File
@@ -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")) {