Switched Preorder building source to AddressDB

This commit is contained in:
Frank Schubert
2022-09-08 14:58:18 +02:00
parent 490e729f69
commit c7bd7ea8f3
13 changed files with 724 additions and 243 deletions
+31 -7
View File
@@ -1,11 +1,8 @@
<?php
class ADBHausnummer extends mfBaseModel {
public $strasse;
public $plz;
public $status;
public $providers = [];
public $providerlist = [];
private $strasse;
private $plz;
protected function init() {
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
@@ -13,8 +10,35 @@ class ADBHausnummer extends mfBaseModel {
}
public function afterLoad() {
$this->strasse = new ADBStrasse($this->strasse_id);
$this->plz = new ADBPlz($this->plz_id);
//$this->strasse = new ADBStrasse($this->strasse_id);
//$this->plz = new ADBPlz($this->plz_id);
}
public function getProperty($name) {
if($this->$name == null) {
if($name == "strasse") {
$this->strasse = new ADBStrasse($this->strasse_id);
return $this->strasse;
}
if($name == "plz") {
$this->plz = new ADBPlz($this->plz_id);
return $this->plz;
}
$classname = ucfirst($name);
$idfield = $name."_id";
$this->$name = new $classname($this->$idfield);
if($this->$name->id) {
return $this->$name;
} else {
return null;
}
}
return $this->$name;
}
}
+24
View File
@@ -1,6 +1,8 @@
<?php
class ADBOrtschaft extends mfBaseModel {
private $gemeinde;
protected function init() {
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
@@ -25,5 +27,27 @@ class ADBOrtschaft extends mfBaseModel {
return $results;
}
public function getProperty($name) {
if($this->$name == null) {
if($name == "gemeinde") {
$this->gemeinde = new ADBGemeinde($this->hausnummer_id);
return $this->gemeinde;
}
$classname = ucfirst($name);
$idfield = $name."_id";
$this->$name = new $classname($this->$idfield);
if($this->$name->id) {
return $this->$name;
} else {
return null;
}
}
return $this->$name;
}
}
+31 -2
View File
@@ -1,7 +1,8 @@
<?php
class ADBStrasse extends mfBaseModel {
public $gemeinde = [];
private $ortschaft;
private $gemeinde;
protected function init() {
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
@@ -9,7 +10,35 @@ class ADBStrasse extends mfBaseModel {
}
public function afterLoad() {
$this->gemeinde = new ADBGemeinde($this->gemeinde_id);
//$this->gemeinde = new ADBGemeinde($this->gemeinde_id);
}
public function getProperty($name) {
if($this->$name == null) {
if($name == "ortschaft") {
$this->ortschaft = new ADBOrtschaft($this->ortschaft_id);
return $this->ortschaft;
}
if($name == "gemeinde") {
$this->gemeinde = new ADBGemeinde($this->gemeinde_id);
return $this->gemeinde;
}
$classname = ucfirst($name);
$idfield = $name."_id";
$this->$name = new $classname($this->$idfield);
if($this->$name->id) {
return $this->$name;
} else {
return null;
}
}
return $this->$name;
}
}
+50 -2
View File
@@ -1,7 +1,7 @@
<?php
class ADBWohneinheit extends mfBaseModel {
public $hausnummer;
private $hausnummer;
protected function init() {
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
@@ -54,7 +54,7 @@ class ADBWohneinheit extends mfBaseModel {
}
public function afterLoad() {
$this->hausnummer = new ADBHausnummer($this->hausnummer_id);
//$this->hausnummer = new ADBHausnummer($this->hausnummer_id);
//$this->loadStatus();
//$this->loadProvider();
}
@@ -84,4 +84,52 @@ class ADBWohneinheit extends mfBaseModel {
return true;
}*/
public function getProperty($name) {
if($this->$name == null) {
if($name == "hausnummer") {
$this->hausnummer = new ADBHausnummer($this->hausnummer_id);
return $this->hausnummer;
}
$classname = ucfirst($name);
$idfield = $name."_id";
$this->$name = new $classname($this->$idfield);
if($this->$name->id) {
return $this->$name;
} else {
return null;
}
}
return $this->$name;
}
public function __toString() {
$parts = [];
if($this->block) {
$parts[] = "Block ".$this->block;
}
if($this->stiege) {
$parts[] = "Stiege ".$this->stiege;
}
if($this->stock) {
if(is_numeric($this->stock)) {
$parts[] = $this->stock.". Stock";
} elseif(preg_match('/^(erdgescho(ss|ß)|parterre)$/i', $this->stock)) {
$parts[] = "Erdgeschoss";
} else {
$parts[] = "Stock ".$this->stock;
}
}
if($this->tuer) {
$parts[] = "Tür ".$this->tuer;
}
if($this->zusatz) {
$parts[] = $this->zusatz;
}
return implode(" ", $parts);
}
}
@@ -43,7 +43,7 @@ class ADBWohneinheitModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter);
$res = $db->select("Wohneinheit", "*", "$where ORDER BY hausnummer_id,block,stiege,stock,tuer LIMIT 1");
$res = $db->select("Wohneinheit", "*", "$where ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer LIMIT 1");
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
$item = new ADBWohneinheit($data);
@@ -61,7 +61,7 @@ class ADBWohneinheitModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$res = $db->select("Wohneinheit", "*", "1=1 ORDER BY hausnummer_id,block,stiege,stock,tuer");
$res = $db->select("Wohneinheit", "*", "1=1 ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer");
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new ADBWohneinheit($data);
@@ -95,7 +95,7 @@ class ADBWohneinheitModel {
$where = self::getSqlFilter($filter);
$sql = "SELECT Wohneinheit.* FROM Wohneinheit
WHERE $where
ORDER BY hausnummer_id,block,stiege,stock,tuer";
ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer";
//mfLoghandler::singleton()->debug($sql);
if(is_array($limit) && count($limit)) {
@@ -2,4 +2,261 @@
class AddressDBController extends mfBaseController {
protected function init() {
$this->needlogin=true;
$me = new User();
$me->loadMe();
$this->me = $me;
$this->layout()->set("me",$me);
if(!$me->is(["Admin", "netowner", "pipeplanner"])) {
$this->redirect("Dashboard");
}
}
protected function apiAction() {
if(!$this->me->is(["Admin","netowner"])) {
$this->redirect("Dashboard");
}
$do = $this->request->do;
$data = [];
switch($do) {
case "findAddress":
$return = $this->findAddressApi();
break;
case "getFilteredBuildings":
$return = $this->getFilteredBuildingsApi();
break;
case "getUnits":
$return = $this->getUnitsApi();
break;
case "findCities":
$return = $this->findCitiesApi();
break;
case 'findBuildings':
$return = $this->findBuildingsApi();
break;
case "findUnit":
break;
default:
$return = false;
}
if(!is_array($return) || !count($return)) {
$data = ["status" => "error"];
$this->returnJson($data);
}
$data['status'] = "OK";
$data['result'] = $return;
$this->returnJson($data);
}
private function findAddressApi() {
$addresses = [];
$search = trim($this->request->q);
$results = [];
$search_parts = explode(" ", $search);
$ort_search = $strasse_search = $plz_search = $hausnummer_search = [];
foreach($search_parts as $p) {
$p = trim($p);
if(!$p) continue;
$ort_search[] = "ortschaft like '%$p%'";
$strasse_search[] = "strasse like '%$p%'";
$plz_search[] = "plz like '%$p%'";
$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;
$adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$res = $adb->query($sql);
if(!$adb->num_rows($res)) {
header("Content-Type: application/json");
echo json_encode(["results" => []]);
exit;
}
while($data = $adb->fetch_object($res)) {
$address_string = $data->plz." ".$data->ortschaft.", ".$data->strasse." ".$data->hausnummer;
$address = [];
$address['id'] = $data->hausnummer_id;
$address["text"] = $address_string;
$addresses[] = $address;
}
// sort results by most occurences of search strings
$sort = [];
foreach($addresses as $address) {
$count = 0;
foreach($search_parts as $p) {
$count += substr_count(strtolower($address['text']), strtolower($p));
}
//echo $address['text']." $p $count<br />\n";
if(!array_key_exists($count, $sort)) {
$sort[$count] = [];
}
$sort[$count][] = $address;
}
ksort($sort, SORT_NUMERIC);
$sort = array_reverse($sort, true);
//var_dump($sort);exit;
foreach($sort as $res) {
foreach($res as $a) {
$results[] = $a;
}
}
header("Content-Type: application/json");
echo json_encode(["results" => $results]);
exit;
}
private function getUnitsApi() {
$results = [];
$hausnummer_id = intval($this->request->hausnummer_id);
if(!$hausnummer_id) {
return ['results' => []];
}
$units = ADBWohneinheitModel::search(['hausnummer_id' => $hausnummer_id]);
foreach($units as $unit) {
$u = [];
$u['id'] = $unit->id;
$u['zip'] = $unit->hausnummer->plz->plzstring;
$u['city'] = $unit->hausnummer->strasse->ortschaft->name;
$u['street'] = $unit->hausnummer->strasse->name;
$u['housenumber'] = $unit->hausnummer->hausnummer;
$u['block'] = $unit->block;
$u['stiege'] = $unit->stiege;
$u['stock'] = $unit->stock;
$u['tuer'] = $unit->tuer;
$u['extra'] = (string)$unit;
$u['zusatz'] = $unit->zusatz;
$u['usage'] = $unit->nutzung;
$results[] = $u;
}
return ['units' => $results];
}
private function findCitiesApi() {
$cities = [];
$search = $this->request->search;
$ort_ids = [];
if(is_numeric($search)) {
$adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$sql = "SELECT ortschaft_id from view_wohneinheit WHERE plz like '%$search%' GROUP BY ortschaft_id";
$res = $adb->query($sql);
if($adb->num_rows($res)) {
while($data = $adb->fetch_object($res)) {
$ort_ids[] = $data->ortschaft_id;
}
}
}
if($ort_ids) {
foreach($ort_ids as $oid) {
$results[] = new ADBOrtschaft($oid);
}
} else {
$results = ADBOrtschaftModel::search(['name%' => $search]);
}
foreach($results as $city) {
$gemeinde = new ADBGemeinde($city->gemeinde_id);
$data = [];
$data['id'] = $city->id;
$data['gemeinde_id'] = $city->gemeinde_id;
$data['gemeinde'] = $gemeinde->name;
$data['kennziffer'] = $city->kennziffer;
$data['name'] = $city->name;
$cities[] = $data;
}
return ['cities' => $cities];
}
private function getFilteredBuildingsApi() {
$buildings = [];
$filter = $this->request->filter;
$results = BuildingModel::search($filter);
foreach($results as $building) {
$data = $building->data;
$data->id = $building->id;
$buildings[] = $data;
}
return ["buildings" => $buildings];
}
private function findBuildingsApi() {
$buildings = [];
$search = $this->request->search;
$city_id = intval($this->request->city_id);
$sql = "SELECT * FROM view_hausnummer WHERE (ortschaft like '%$search%' OR strasse like '%$search%' OR plz like '%$search%' OR hausnummer like '%$search%')";
if($city_id) {
$sql .= " AND ortschaft_id=$city_id";
}
$adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$res = $adb->query($sql);
if(!$adb->num_rows($res)) {
return ["count" => 0, "buildings" => []];
}
while($data = $adb->fetch_object($res)) {
$buildings[$data->hausnummer_id] = $data;
}
$unsorted = [];
foreach($buildings as $building) {
$u = [];
$u['id'] = $building->hausnummer_id;
$u['street'] = $building->strasse . " ".$building->hausnummer;
$u['zip'] = $building->plz;
$u['city'] = $building->ortschaft;
$u['oan_id'] = ($building->oan_id) ? $building->oan_id : "";
$u['code'] = ($building->code) ? $building->code : "";
$u['units'] = ($building->units) ? $building->units : 1;
//$u['units_used'] = $building->getUsedTerminationCount(true);
$u['units_used'] = 1;
//$u['status'] = $building->status->name;
$u['status'] = "";
$unsorted[$building->strasse."-".$building->hausnummer_id] = $u;
}
ksort($unsorted);
$results = [];
foreach($unsorted as $r) {
$results[] = $r;
/*if(count($results) >= 20) {
break;
}*/
}
return ["count" => count($buildings), "buildings" => $results];
}
}
+13
View File
@@ -5,6 +5,8 @@ class Preorder extends mfBaseModel {
private $campaign;
private $partner;
private $building;
private $adb_hausnummer;
private $adb_wohneinheit;
public function getProperty($name) {
if($this->$name == null) {
@@ -36,6 +38,17 @@ class Preorder extends mfBaseModel {
return $this->building;
}
if($name == "adb_hausnummer") {
$this->adb_hausnummer = new ADBHausnummer($this->adb_hausnummer_id);
return $this->adb_hausnummer;
}
if($name == "adb_wohneinheit") {
$this->adb_wohneinheit = new ADBWohneinheit($this->adb_wohneinheit_id);
return $this->adb_wohneinheit;
}
if($name == "creator") {
$user = mfValuecache::singleton()->get("Worker-id-".$this->create_by);
if($user) {
+4 -2
View File
@@ -124,7 +124,7 @@ class PreorderController extends mfBaseController {
protected function saveAction() {
$r = $this->request;
var_dump($r);
//var_dump($r);
/*
* add or edit
@@ -147,7 +147,9 @@ class PreorderController extends mfBaseController {
*/
$data = [];
$data['preordercampaign_id'] = $r->campaign_id;
$data['building_id'] = $r->building_id;
$data['building_id'] = ($r->building_id) ? $r->building_id : null;
$data['adb_hausnummer_id'] = $r->adb_hausnummer_id;
$data['adb_wohneinheit_id'] = ($r->adb_wohneinheit_id) ? $r->adb_wohneinheit_id : null;
$data['termination_id'] = ($r->termination_id) ? $r->termination_id : null;
if($campaign->product_type != "setup_only") {
+23
View File
@@ -2,6 +2,8 @@
class PreorderModel {
public $preordercampaign_id;
public $adb_hausnummer_id;
public $adb_wohneinheit_id;
public $building_id;
public $termination_id;
public $product_id;
@@ -131,6 +133,27 @@ class PreorderModel {
}
}
if(array_key_exists("adb_hausnummer_id", $filter)) {
$adb_hausnummer_id = $filter['adb_hausnummer_id'];
if(is_numeric($adb_hausnummer_id)) {
$where .= " AND adb_hausnummer_id=$adb_hausnummer_id";
} elseif(is_array($adb_hausnummer_id)) {
$where .= " AND adb_hausnummer_id IN (".implode(",",$adb_hausnummer_id).")";
} elseif($adb_hausnummer_id === null) {
$where .= " AND adb_hausnummer_id IS NULL";
}
}
if(array_key_exists("adb_wohneinheit_id", $filter)) {
$adb_wohneinheit_id = $filter['adb_wohneinheit_id'];
if(is_numeric($adb_wohneinheit_id)) {
$where .= " AND adb_wohneinheit_id=$adb_wohneinheit_id";
} elseif(is_array($adb_wohneinheit_id)) {
$where .= " AND adb_wohneinheit_id IN (".implode(",",$adb_wohneinheit_id).")";
} elseif($adb_wohneinheit_id === null) {
$where .= " AND adb_wohneinheit_id IS NULL";
}
}
//var_dump($filter, $where);exit;