Tweaked sorting in searchAddress

This commit is contained in:
Frank Schubert
2023-01-10 17:34:58 +01:00
parent 59b8a5bf14
commit b47bf6ca0f

View File

@@ -310,6 +310,138 @@ class AddressdbApicontroller extends mfBaseApicontroller {
return mfResponse::BadRequest(['message' => "Search string cannot be empty"]);
}
/*
* try direct search
*/
/*$m = [];
if(preg_match('/^([^,]+)\s+(\d+\w+),\s*(\d+),?\s*(.+)$/', $search, $m)) {
if($m[1] && $m[2] && $m[3] && $m[4]) {
$dsearch['Strasse.name'] = $this->db()->escape(trim($m[1]));
$dsearch['Hausnummer.hausnummer'] = $this->db()->escape(trim($m[2]));
$dsearch['Plz.plz'] = $this->db()->escape(trim($m[3]));
if($this->district_is_city) {
$dsearch['Ortschaft.name'] = $this->db()->escape(trim($m[4]));
} else {
$dsearch['Gemeinde.name'] = $this->db()->escape(trim($m[4]));
}
$where = "1=1";
if(count($this->filter_salescluster_ids)) {
$where .= " AND netzgebiet_id IN (".implode(",", $this->filter_salescluster_ids).")";
}
foreach($dsearch as $field => $value) {
$where .= " AND $field = '$value'";
}
$sql = AddressDB::$wohneinheit_query;
$sql .= "\n WHERE $where";
$this->log->debug($sql);
$res = $this->db()->query($sql);
if($this->db()->num_rows($res)) {
$address = [];
$units = [];
$hausnummer_id = false;
while($data = $this->db()->fetch_object($res)) {
if(!$hausnummer_id) {
$hausnummer_id = $data->hausnummer_id;
// get allowed preorderTypes
$ptypes = [];
if($data->freigabe) {
$freigaben = json_decode($data->freigabe);
if(is_array($freigaben) && count($freigaben)) {
foreach($freigaben as $freigabe) {
if(in_array($freigabe, $this->allowed_preordertypes)) {
$ptypes[] = $freigabe;
}
}
}
}
$housenumber = $data->hausnummer;
if($this->hausnummer_add_zusatz) {
if($data->zusatz) {
$housenumber .= " (".$data->zusatz.")";
}
}
$address = [
'oaid' => $data->hausnummer_oaid,
'cluster_id' => $data->netzgebiet_extref,
'zip' => $data->plz,
'city' => $data->gemeinde,
"municipality" => "",
'district' => $data->ortschaft,
'street' => $data->strasse,
'housenumber' => $housenumber,
'lot_number' => $data->grund_nr,
'building_unit_count' => 0,
'gps_lat' => ($data->gps_lat) ? (float)$data->gps_lat : null,
'gps_long' => ($data->gps_long) ? (float)$data->gps_long : null,
'rollout_year' => ($data->rollout) ? (int)$data->rollout : null,
'rollout_info' => $data->rollout_info,
'preorderTypes' => $ptypes,
'units' => []
];
if($this->district_is_city) {
$address['city'] = $data->ortschaft;
$address['municipality'] = $data->gemeinde;
} else {
unset($address['municipality']);
}
}
if($hausnummer_id && $hausnummer_id != $data->hausnummer_id) {
$address = [];
break;
}
$units[] = [
'oaid' => $data->wohneinheit_oaid,
'num' => (int)$data->num,
'block' => $data->block,
'stiege' => $data->stiege,
'stock' => $data->stock,
'tuer' => $data->tuer,
'zusatz' => $data->zusatz,
];
}
//var_dump($address, $units);exit;
$new_addresses = [];
if($address) {
if($format == "tree") {
$new_address = $address;
$new_address['units'] = $units;
$new_addresses[] = $address;
} else {
foreach($units as $unit) {
$new_address = $address;
unset($new_address['units']);
$new_address['building_unit_count'] = count($units);
$new_address['num'] = $unit['num'];
$new_address['block'] = $unit['block'];
$new_address['stiege'] = $unit['stiege'];
$new_address['stock'] = $unit['stock'];
$new_address['tuer'] = $unit['tuer'];
$new_address['zusatz'] = $unit['zusatz'];
$new_addresses[] = $new_address;
}
}
return mfResponse::Ok(['addresses' => $new_addresses]);
}
}
}
}*/
/*
* do normal search
*/
$search_parts = [];
$search = str_replace(",", "", $search);
$tmp_search_parts = explode(" ", $search);
@@ -452,24 +584,22 @@ class AddressdbApicontroller extends mfBaseApicontroller {
}
unset($temp_add['sort_key']);
//echo "$p $count<br />\n";
if($includes_int && (($count + 1) - count($search_parts) ) < 1) {
/*if($temp_add['oaid'] == "AT-8940-30400d5c") {
echo $temp_add['sort_key']." - count $count; count(search_parts) ".count($search_parts);
//echo "blah";exit;
exit;
}*/
continue;
}
//var_dump(count($search_parts), $count, $count_parts, $temp_add);
/*if($temp_add['oaid'] == "AT-8954-d6c41665") {
echo $temp_add['sort_key'].": AT-8954-d6c41665: count $count; uniq_parts_count $uniq_parts_count; count_parts $count_parts; search_parts ".count($search_parts)."<br /><br />\n";
//var_dump();
//exit;
}*/
if($count_parts == count($search_parts)) {
$count = 50;
$count += 50;
}
//var_dump($count);exit;
//var_dump($uniq_parts_count, $uniq_parts_found);exit;
if($uniq_parts_count <= count($uniq_parts_found)) {
if(!array_key_exists($count, $sorted_addresses)) {
$sorted_addresses[$count] = [];