Preordercampaigns can use city or district as city

This commit is contained in:
Frank Schubert
2022-11-18 16:31:06 +01:00
parent 623362fb8c
commit d2853f7bea
6 changed files with 98 additions and 16 deletions

View File

@@ -363,7 +363,7 @@
$('#adb_hausnummer_id').select2({
ajax: {
url: '<?=self::getUrl("AddressDB", "api", ["do" => "findAddress"])?>',
url: '<?=self::getUrl("AddressDB", "api", ["do" => "findAddress", "campaign_id" => $campaign->id])?>',
delay: 250,
dataType: 'json'
},

View File

@@ -93,10 +93,13 @@ class ADBOrtschaftModel {
$where = self::getSqlFilter($filter);
$sql = "SELECT Ortschaft.* FROM Ortschaft
LEFT JOIN Gemeinde ON (Ortschaft.gemeinde_id = Gemeinde.id)
LEFT JOIN Plz ON (Plz.gemeinde_id = Gemeinde.id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Gemeinde.id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
WHERE $where
ORDER BY gemeinde_id,Ortschaft.name,Ortschaft.kennziffer";
//mfLoghandler::singleton()->debug($sql);
mfLoghandler::singleton()->debug($sql);
if(is_array($limit) && count($limit)) {
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
@@ -117,6 +120,15 @@ class ADBOrtschaftModel {
private static function getSqlFilter($filter) {
$where = "1=1 ";
if(array_key_exists("netzgebiet_id", $filter)) {
$netzgebiet_id = $filter['netzgebiet_id'];
if(is_numeric($netzgebiet_id)) {
$where .= " AND Netzgebiet.id=$netzgebiet_id";
} elseif(is_array($netzgebiet_id) && count($netzgebiet_id)) {
$where .= " AND Netzgebiet.id IN (". implode(",", $netzgebiet_id).")";
}
}
if(array_key_exists("gemeinde_id", $filter)) {
$gemeinde_id = $filter['gemeinde_id'];
if(is_numeric($gemeinde_id)) {
@@ -154,6 +166,20 @@ class ADBOrtschaftModel {
}
}
if(array_key_exists("plz", $filter)) {
$plz = FronkDB::singleton()->escape($filter['plz']);
if($plz) {
$where .= " AND Plz.plzstring = '$plz'";
}
}
if(array_key_exists("plz%", $filter)) {
$plz = FronkDB::singleton()->escape($filter['plz%']);
if($plz) {
$where .= " AND Plz.plzstring like '$plz%'";
}
}
//var_dump($filter, $where);exit;
return $where;
}

View File

@@ -55,6 +55,20 @@ class AddressDBController extends mfBaseController {
private function findAddressApi() {
$addresses = [];
$search = trim($this->request->q);
$campagin_id = ($this->request->campaign_id);
$campaign = new Preordercampaign($campagin_id);
if(!$campaign->id) {
header("Content-Type: application/json");
echo json_encode(["results" => []]);
exit;
}
$scluster_ids = [];
foreach($campaign->salesclusters as $scluster) {
$scluster_ids[] = $scluster->id;
}
$results = [];
$search_parts = explode(" ", $search);
@@ -70,11 +84,17 @@ class AddressDBController extends mfBaseController {
$hausnummer_search[] = "hausnummer like '%$p%'";
}
$sql = "SELECT * FROM view_hausnummer WHERE (".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).")";
//echo $sql;exit;
$where = "1=1";
if(count($scluster_ids)) {
$where .= " AND netzgebiet_id IN (".implode(', ',$scluster_ids).")";
}
$sql = "SELECT * FROM view_hausnummer WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search)."))";
$this->log->debug($sql);
$adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$res = $adb->query($sql);
$this->log->debug("done");
if(!$adb->num_rows($res)) {
header("Content-Type: application/json");

View File

@@ -4,8 +4,8 @@ class AddressdbApicontroller extends mfBaseApicontroller {
private $campaigns = [];
private $filter_salescluster_ids = [];
private $campaigns_by_scluster = [];
private $allowed_preordertypes = [];
private $district_is_city = false;
protected function init() {
$db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
@@ -46,6 +46,10 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$this->allowed_preordertypes[] = $type->type;
}
}
if($campaign->district_is_city == 1) {
$this->district_is_city = true;
}
}
foreach(PreordercampaignOriginhostnameModel::search(['preordercampaign_id' => $campaign->id]) as $origin) {
@@ -90,7 +94,11 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$city_search['netzgebiet_id'] = $this->filter_salescluster_ids;
}
$results = ADBGemeindeModel::search($city_search);
if($this->district_is_city) {
$results = ADBOrtschaftModel::search($city_search);
} else {
$results = ADBGemeindeModel::search($city_search);
}
$cities = [];
@@ -214,7 +222,6 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$search = trim($get['search']);
$street = trim($get['street']);
$city = trim($get['city']);
$district = trim($get['district']);
$zip = trim($get['zip']);
if(!$search && !$street && !$city && !$zip) {
@@ -227,10 +234,18 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$where = "1=1";
$street_search = ["name%" => $street];
$street = $this->db()->escape($street);
$where .= " AND strasse like '$street%'";
if($city) {
$street_search['gemeinde%'] = $city;
$city = $this->db()->escape($city);
$where .= " AND gemeinde like '$city%'";
if($this->district_is_city) {
$street_search['ortschaft%'] = $city;
$city = $this->db()->escape($city);
$where .= " AND ortschaft like '$city%'";
} else {
$street_search['gemeinde%'] = $city;
$city = $this->db()->escape($city);
$where .= " AND gemeinde like '$city%'";
}
}
if($zip) {
$street_search['plz%'] = $zip;
@@ -293,7 +308,11 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$where .= " AND ortschaft like '$search_district%'";
}
if($search_city && $search_city != "%") {
$where .= " AND gemeinde like '$search_city%'";
if($this->district_is_city) {
$where .= " AND ortschaft like '$search_city%'";
} else {
$where .= " AND gemeinde like '$search_city%'";
}
}
if($search_street && $search_street != "%") {
$where .= " AND strasse like '$search_street%'";
@@ -329,7 +348,7 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$addresses[] = [
'zip' => $data->plz,
'city' => $data->gemeinde,
'city' => ($this->district_is_city) ? $data->ortschaft : $data->gemeinde,
'district' => $data->ortschaft,
'street' => $data->strasse,
'housenumber' => $data->hausnummer,

View File

@@ -10,7 +10,7 @@ class PreorderApicontroller extends mfBaseApicontroller {
private $campaigns_by_scluster = [];
private $allowed_preordertypes = [];
private $district_is_city = false;
protected function init() {
$db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
@@ -42,7 +42,13 @@ class PreorderApicontroller extends mfBaseApicontroller {
$this->allowed_preordertypes[] = $type->type;
}
}
if($campaign->district_is_city == 1) {
$this->district_is_city = true;
}
}
foreach(PreordercampaignOriginhostnameModel::search(['preordercampaign_id' => $campaign->id]) as $origin) {
$this->addAllowedOrigin($origin->hostname);
@@ -107,7 +113,18 @@ class PreorderApicontroller extends mfBaseApicontroller {
}
$address_search = [];
foreach(['street' => 'strasse','housenumber' => "hausnummer",'zip' => "plz",'city' => "gemeinde", 'district' => "ortschaft"] as $key => $field_name) {
$address_search_fields = [
'street' => 'strasse',
'housenumber' => "hausnummer",
'zip' => "plz"
];
if($this->district_is_city) {
$address_search_fields['city'] = "ortschaft";
} else {
$address_search_fields['city'] = "gemeinde";
}
foreach($address_search_fields as $key => $field_name) {
if(property_exists($this->post['address'], $key)) {
$address_search[$field_name] = $this->db()->escape(trim($this->post['address']->$key));
}
@@ -148,9 +165,9 @@ class PreorderApicontroller extends mfBaseApicontroller {
}
$sql = "SELECT * FROM view_hausnummer WHERE $where";
$this->log->debug($sql);
$res = $this->db()->query($sql);
if(!$this->db()->num_rows($res)) {
//var_dump($this->db()->num_rows($res), $this->db()->fetch_object($res));
return mfResponse::NotFound(['message' => "Adresse nicht gefunden"]);
}

View File

@@ -139,7 +139,7 @@ class Preordercampaign extends mfBaseModel {
if($name == "salesclusters") {
$items = PreordercampaignSalesclusterModel::search(["preordercampaign_id" => $this->id]);
foreach($items as $pog) {
$this->salesclusters[$pog->salescluster_id] = $pog;
$this->salesclusters[$pog->salescluster_id] = new ADBNetzgebiet($pog->salescluster_id);
}
return $this->salesclusters;
}