From 6a0cc89a7be8855fec53912f5a6f819a3891f266 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Wed, 9 Nov 2022 13:26:48 +0100 Subject: [PATCH] Added findDistrict to AddressDB Api --- application/Api/v1/AddressdbApicontroller.php | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/application/Api/v1/AddressdbApicontroller.php b/application/Api/v1/AddressdbApicontroller.php index 09d4536fd..3c211ac79 100644 --- a/application/Api/v1/AddressdbApicontroller.php +++ b/application/Api/v1/AddressdbApicontroller.php @@ -18,6 +18,8 @@ class AddressdbApicontroller extends mfBaseApicontroller { $this->addRoute("/addressdb/findZip", "findZip", "POST"); $this->addRoute("/addressdb/findCity", "findCity", "GET"); $this->addRoute("/addressdb/findCity", "findCity", "POST"); + $this->addRoute("/addressdb/findDistrict", "findDistrict", "GET"); + $this->addRoute("/addressdb/findDistrict", "findDistrict", "POST"); $this->allowMissingOrigin = true; } @@ -68,6 +70,7 @@ class AddressdbApicontroller extends mfBaseApicontroller { // search parameter is unofficially deprecated but still supported $search = trim($get['search']); $city = trim($get['city']); + $district = trim($get['district']); $zip = trim($get['zip']); if(!$city) { @@ -82,6 +85,9 @@ class AddressdbApicontroller extends mfBaseApicontroller { if($zip) { $city_search['plz%'] = $zip; } + if($district) { + $district_search['ortschaft%'] = $zip; + } if(count($this->filter_salescluster_ids)) { $city_search['netzgebiet_id'] = $this->filter_salescluster_ids; @@ -99,6 +105,58 @@ class AddressdbApicontroller extends mfBaseApicontroller { return mfResponse::Ok(['cities' => array_values($cities)]); } + protected function findDistrict() { + // unofficially supporting GET and POST in v1 + $get = array_merge($this->post, $this->get); + + // search parameter is unofficially deprecated but still supported + $search = trim($get['search']); + $city = trim($get['city']); + $district = trim($get['district']); + $zip = trim($get['zip']); + + if(!$district) { + $district = $search; + } + + if(!$city && !$zip && !$district) { + return mfResponse::BadRequest(['message' => "No search parameters"]); + } + + if($district) { + $city_search = ['ortschaft%' => $district]; + } + if($city) { + $city_search = ['name%' => $city]; + } + if($zip) { + $city_search['plz%'] = $zip; + } + + if(count($this->filter_salescluster_ids)) { + $city_search['netzgebiet_id'] = $this->filter_salescluster_ids; + } + + $cities = []; + foreach(ADBGemeindeModel::search($city_search) as $gem) { + $districts = []; + + if($district) { + foreach(ADBOrtschaftModel::search(["gemeinde_id" => $gem->id, "name%" => $district]) as $ort) { + $districts[] = $ort->name; + } + } else { + foreach($gem->ortschaften as $ort) { + $districts[] = $ort->name; + } + } + + $cities[$gem->name] = $districts; + } + + return mfResponse::Ok(['cities' => $cities]); + } + protected function findZip() { // unofficially supporting GET and POST in v1 $get = array_merge($this->post, $this->get); @@ -182,6 +240,7 @@ class AddressdbApicontroller extends mfBaseApicontroller { $search_street = $this->db()->escape(trim($get['street'])); $search_zip = $this->db()->escape(trim($get['zip'])); + $search_district = $this->db()->escape(trim($get['district'])); $search_city = $this->db()->escape(trim($get['city'])); $search_housenumber = $this->db()->escape(trim($get['housenumber'])); @@ -197,6 +256,9 @@ class AddressdbApicontroller extends mfBaseApicontroller { if($search_zip) { $where .= " AND plz like '%$search_zip%'"; } + if($search_district) { + $where .= " AND ortschaft like '%$search_district%'"; + } if($search_city) { $where .= " AND gemeinde like '%$search_city%'"; } @@ -229,6 +291,7 @@ class AddressdbApicontroller extends mfBaseApicontroller { $addresses[] = [ 'zip' => $data->plz, 'city' => $data->gemeinde, + 'district' => $data->ortschaft, 'street' => $data->strasse, 'housenumber' => $data->hausnummer, 'block' => $data->block,