Preordercampaigns can use city or district as city
This commit is contained in:
@@ -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'
|
||||
},
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"]);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user