WIP 2025-09-18

This commit is contained in:
Frank Schubert
2025-09-19 10:45:12 +02:00
parent 822680e16f
commit 80cdbcb4ca
4 changed files with 311 additions and 4 deletions

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,154 @@ class AddressDBController extends mfBaseController {
}
}*/
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()->setFlas("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 != $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")) {