From 25f2452f0210f9c445315fb7dab77b84812ac725 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Tue, 19 Nov 2024 13:15:57 +0100 Subject: [PATCH 1/2] WIP Preorderconstruction Api --- .../ADBHausnummerStatusflagValue.php | 11 +- application/ADBStatus/ADBStatus.php | 13 ++ application/Api/v1/AddressdbApicontroller.php | 6 +- .../v1/PreorderconstructionApicontroller.php | 150 ++++++++++++++++++ 4 files changed, 175 insertions(+), 5 deletions(-) create mode 100644 application/Api/v1/PreorderconstructionApicontroller.php diff --git a/application/ADBHausnummerStatusflagValue/ADBHausnummerStatusflagValue.php b/application/ADBHausnummerStatusflagValue/ADBHausnummerStatusflagValue.php index c20e63215..a6a08bf34 100644 --- a/application/ADBHausnummerStatusflagValue/ADBHausnummerStatusflagValue.php +++ b/application/ADBHausnummerStatusflagValue/ADBHausnummerStatusflagValue.php @@ -46,8 +46,15 @@ class ADBHausnummerStatusflagValue extends mfBaseModel { if($name == "flag") { if(!$this->flag_id) return null; - $flag = new ADBStatusflag($this->flag_id); - if($flag->id) { + + $flag = mfValuecache::singleton()->get("mfObjectmodel-ADBStatusflag-".$this->flag_id); + if(!$flag) { + $flag = new ADBStatusflag($this->flag_id); + if ($flag->id) { + $this->flag = $flag; + mfValuecache::singleton()->set("mfObjectmodel-ADBStatusflag-" . $flag->id, $flag); + } + } else { $this->flag = $flag; } return $this->flag; diff --git a/application/ADBStatus/ADBStatus.php b/application/ADBStatus/ADBStatus.php index 2a39a883c..220dd087f 100644 --- a/application/ADBStatus/ADBStatus.php +++ b/application/ADBStatus/ADBStatus.php @@ -6,4 +6,17 @@ class ADBStatus extends mfBaseModel { $this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $this->table = "Status"; } + + public function getApiArray() { + if(!$this->id) { + return false; + } + + $a = []; + $a['code'] = (int)$this->code; + $a['text'] = $this->name; + $a['flags'] = []; + + return $a; + } } \ No newline at end of file diff --git a/application/Api/v1/AddressdbApicontroller.php b/application/Api/v1/AddressdbApicontroller.php index deaf5fc20..16bb5f5d7 100644 --- a/application/Api/v1/AddressdbApicontroller.php +++ b/application/Api/v1/AddressdbApicontroller.php @@ -839,9 +839,9 @@ class AddressdbApicontroller extends mfBaseApicontroller { } protected function exportAddresses() { - if($this->me->username != 'r.eschner@rmlinfrastruktur.at') { - return mfResponse::Forbidden(); - } + //if($this->me->username != 'r.eschner@rmlinfrastruktur.at') { + // return mfResponse::Forbidden(); + //} if($this->me->is("Admin")) { $my_networks = NetworkModel::getAll(); diff --git a/application/Api/v1/PreorderconstructionApicontroller.php b/application/Api/v1/PreorderconstructionApicontroller.php new file mode 100644 index 000000000..671de2178 --- /dev/null +++ b/application/Api/v1/PreorderconstructionApicontroller.php @@ -0,0 +1,150 @@ +addRoute("/preorderconstruction/address", "getAddresses", "GET"); + $this->addRoute("/preorderconstruction/preorder", "getPreorders", "GET"); + } + + protected function authenticated() { + if($this->me->username != "fronk") { + return \mfResponse::Forbidden(); + } + } + + protected function getAddresses() { + $db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + /*if($this->me->username != 'r.eschner@rmlinfrastruktur.at') { + return mfResponse::Forbidden(); + }*/ + + if($this->me->is("Admin")) { + $my_networks = NetworkModel::getAll(); + } else { + $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); + } + + $netzgebiet_ids = []; + $adb_network_ids = []; + foreach($my_networks as $network) { + if($network->adb_netzgebiet_id && !in_array($network->adb_netzgebiet_id, $netzgebiet_ids)) { + $netzgebiet_ids[] = $network->id; + $adb_network_ids[] = $network->adb_netzgebiet_id; + } + } + + $sd_terms = []; + $md_terms = []; + + foreach(TT_ADB_GDA_TYPES as $term => $type) { + if($type == "sd") $sd_terms[] = $term; + if($type == "md") $md_terms[] = $term; + } + + //var_dump($adb_network_ids);exit; + $sql = "SELECT Hausnummer.*, COUNT(Wohneinheit.id) as unit_count FROM Hausnummer + LEFT JOIN Wohneinheit ON (Wohneinheit.hausnummer_id = Hausnummer.id) + WHERE netzgebiet_id IN (".implode(",", $adb_network_ids).") + AND (rimo_type IN ('".implode("', '" ,$md_terms)."') + OR ((rimo_type IS NULL OR rimo_type='') AND gdaeigenschaft IN ('".implode("', '" ,$md_terms)."'))) + GROUP BY Hausnummer.id,Wohneinheit.id"; + //echo "$sql\n";exit; + $res = $db->query($sql); + + $stati = []; + $netzgebiete = []; + $ortschaften = []; + $gemeinden = []; + $strassen = []; + $plzs = []; + $addresses = []; + + while($data = $db->fetch_object($res)) { + if(!array_key_exists($data->netzgebiet_id, $netzgebiete)) { + $netzgebiete[$data->netzgebiet_id] = new ADBNetzgebiet($data->netzgebiet_id); + } + $netzgebiet = $netzgebiete[$data->netzgebiet_id]; + + if(!array_key_exists($data->ortschaft_id, $ortschaften)) { + $ortschaften[$data->ortschaft_id] = new ADBOrtschaft($data->ortschaft_id); + } + $ortschaft = $ortschaften[$data->ortschaft_id]; + + if(!array_key_exists($data->strasse_id, $strassen)) { + $strassen[$data->strasse_id] = new ADBStrasse($data->strasse_id); + } + $strasse = $strassen[$data->strasse_id]; + + if(!array_key_exists($strassen[$data->strasse_id]->gemeinde_id, $gemeinden)) { + $gemeinden[$strasse->gemeinde_id] = new ADBGemeinde($strasse->gemeinde_id); + } + $gemeinde = $gemeinden[$strasse->gemeinde_id]; + + if(!array_key_exists($data->plz_id, $plzs)) { + $plzs[$data->plz_id] = new ADBPlz($data->plz_id); + } + $plz = $plzs[$data->plz_id]; + + if(!array_key_exists($data->status_id, $stati)) { + $stati[$data->status_id] = new ADBStatus($data->status_id); + } + $status = $stati[$data->status_id]->getApiArray(); + //$status->flags = []; + + foreach(ADBHausnummerStatusflagValueModel::search(["hausnummer_id" => $data->id]) as $sflag) { + $status["flags"][] = [ + "code" => (int)$sflag->flag->code, + "text" => $sflag->flag->name, + "value" => ($sflag->value == 1) + ]; + } + + $address = []; + $address["id"] = (int)$data->id; + $address["extref"] = $data->extref; + $address["adrcd"] = $data->adrcd; + $address["oaid"] = $data->oaid; + $address["status"] = $status; + $address["netzgebiet_extref"] = $netzgebiet->extref; + $address["netzgebiet_name"] = $netzgebiet->name; + $address["rimo_external_id"] = $data->rimo_id; + $address["skz"] = (int)$strasse->kennziffer; + $address["strasse"] = $strasse->name; + $address["hausnummer"] = $data->hausnummer; + $address["plz"] = $plz->plz; + $address["okz"] = (int)$ortschaft->kennziffer; + $address["ortschaft"] = $ortschaft->name; + $address["gkz"] = (int)$gemeinde->kennziffer; + $address["gemeinde"] = $gemeinde->name; + $address["grundstueck"] = $data->grund_nr; + $address["gps"] = [ + "lat" => $data->gps_lat, + "long" => $data->gps_long, + ]; + $address["rollout"] = $data->rollout; + $address["rollout_info"] = $data->rollout_info; + $address["freigabe"] = ($data->freigabe) ? json_decode($data->freigabe) : null; + $address["nutzungseinheiten"] = (int)$data->unit_count; + $address["gdaeigenschaft"] = $data->gdaeigenschaft; + $address["meridian"] = $data->meridian; + $address["rw"] = $data->rw; + $address["hw"] = $data->hw; + $address["order_api_visibility"] = $data->visibility; + $address['created'] = date("c", $data->create); + $address['created_ts'] = (int)$data->create; + $address['updated'] = date("c", $data->edit); + $address['updated_ts'] = (int)$data->edit; + + $addresses[] = $address; + } + + return mfResponse::Ok(["addresses" => $addresses]); + } + + protected function getPreorders() { + + } + +} \ No newline at end of file From 77f37fbc274a5b7a253abe71b18cfc55e41b5a12 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Tue, 19 Nov 2024 15:25:44 +0100 Subject: [PATCH 2/2] Create Workorder button in Preorder/Index now always visible for admins --- Layout/default/Preorder/include/preorder-detail.php | 2 +- application/Preorder/Preorder.php | 6 ++++-- application/Preorder/PreorderController.php | 5 ++++- scripts/adb-rimo-import/ADBAddressHelper/address_helper.php | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Layout/default/Preorder/include/preorder-detail.php b/Layout/default/Preorder/include/preorder-detail.php index 4656952c7..bd0f6b917 100644 --- a/Layout/default/Preorder/include/preorder-detail.php +++ b/Layout/default/Preorder/include/preorder-detail.php @@ -430,7 +430,7 @@ - adb_wohneinheit_id && $preorder->type == "legacytransfer"): ?> + adb_wohneinheit_id && $me->is("Admin")): ?> diff --git a/application/Preorder/Preorder.php b/application/Preorder/Preorder.php index 45b5ad10d..5735d4093 100644 --- a/application/Preorder/Preorder.php +++ b/application/Preorder/Preorder.php @@ -101,8 +101,10 @@ class Preorder extends mfBaseModel { } } - foreach($this->getProperty("adb_wohneinheit")->rimo_workorders as $workorder) { - Rimoapi::updateWorkorder($workorder->rimo_id, $update); + if($this->adb_wohneinheit_id && is_array($this->getProperty("adb_wohneinheit")->rimo_workorders)) { + foreach($this->getProperty("adb_wohneinheit")->rimo_workorders as $workorder) { + Rimoapi::updateWorkorder($workorder->rimo_id, $update); + } } return true; diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php index a7077e32a..20904acc5 100644 --- a/application/Preorder/PreorderController.php +++ b/application/Preorder/PreorderController.php @@ -1289,7 +1289,10 @@ class PreorderController extends mfBaseController { return false; } - if($preorder->type != "legacytransfer") { + /*if($preorder->type != "legacytransfer") { + return false; + }*/ + if(!$this->me->is("Admin")) { return false; } diff --git a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php index decf275a4..8f74014d6 100644 --- a/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php +++ b/scripts/adb-rimo-import/ADBAddressHelper/address_helper.php @@ -71,7 +71,7 @@ class AddressHelper if (array_key_exists(3, $m)) { $addresszusatz = trim($m[3]); } - } elseif (preg_match('/^(\D+)\s+(\d+[a-z0-9\/&#._-]*)(?:\s+((?:gesch(?:ae|ä)ft|werkstatt|betrieb und wohnungen|stg|paketlogistik|cafe|pavillon|pfarrheim|[^ ]*haus|[^ ]*geb(?:ae|ä)ude|[^ ]*halle|[^ ]*schule|Öhlmühle)(?:\s+[a-z0-9]+)?))?/i', $strasse_hausnummer, $m)) { + } elseif (preg_match('/^(\D+)\s+(\d+[a-z0-9\/&#._-]*)(?:\s+((?:gesch(?:ae|ä)ft|werkstatt|schmiede|betrieb und wohnungen|stg|paketlogistik|cafe|pavillon|pfarrheim|[^ ]*haus|[^ ]*geb(?:ae|ä)ude|[^ ]*halle|[^ ]*schule|Öhlmühle)(?:\s+[a-z0-9]+)?))?/i', $strasse_hausnummer, $m)) { $strasse_name = trim($m[1]); $hausnummer_name = trim($m[2]); if (array_key_exists(3, $m)) {