WIP 2024-12-16 ConstructionConsent
This commit is contained in:
@@ -88,4 +88,160 @@ class ConstructionConsentController extends mfBaseController {
|
||||
$this->addAction();
|
||||
}
|
||||
|
||||
protected function apiAction() {
|
||||
if(!$this->me->is(["Admin","netowner"]) && !$this->me->can("Preorder")) {
|
||||
$this->redirect("Dashboard");
|
||||
}
|
||||
$do = $this->request->do;
|
||||
$data = [];
|
||||
|
||||
switch($do) {
|
||||
case "findStreet":
|
||||
$return = $this->findStreetApi();
|
||||
break;
|
||||
default:
|
||||
$this->log->warn(__METHOD__ . ": Called API function '$do' does not exist");
|
||||
$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 findStreetApi() {
|
||||
$addresses = [];
|
||||
$search = trim($this->request->q);
|
||||
$project_id = $this->request->project_id;
|
||||
|
||||
$scluster_ids = [];
|
||||
|
||||
if($project_id) {
|
||||
$project = new ConstructionConsentProject($project_id);
|
||||
if(!$project->id) {
|
||||
header("Content-Type: application/json");
|
||||
echo json_encode(["results" => []]);
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach($project->adb_networks as $network) {
|
||||
$scluster_ids[] = $network->id;
|
||||
}
|
||||
} else {
|
||||
// get all salesclusters
|
||||
foreach(ADBNetzgebietModel::getAll() as $network) {
|
||||
$scluster_ids[] = $network->id;
|
||||
}
|
||||
}
|
||||
|
||||
$results = [];
|
||||
|
||||
$search_parts = explode(" ", $search);
|
||||
|
||||
$ort_search = $strasse_search = $plz_search = $hausnummer_search = $gst_search = [];
|
||||
|
||||
foreach($search_parts as $p) {
|
||||
$p = $this->db->escape(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%'";
|
||||
$gst_search[] = "grund_nr like '%$p%'";
|
||||
}
|
||||
|
||||
$where = "1=1";
|
||||
if(count($scluster_ids)) {
|
||||
$where .= " AND netzgebiet_id IN (".implode(', ',$scluster_ids).")";
|
||||
}
|
||||
|
||||
/*if($include_gst) {
|
||||
$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).") OR (".implode(" OR ", $gst_search).") ) ORDER BY strasse, LENGTH(hausnummer), hausnummer";
|
||||
} else {
|
||||
$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).")) ORDER BY strasse, LENGTH(hausnummer), hausnummer";
|
||||
}*/
|
||||
|
||||
$sql = "SELECT strasse_id,plz,ortschaft,strasse 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)."))
|
||||
GROUP BY plz,ortschaft,strasse,strasse_id
|
||||
ORDER BY strasse
|
||||
";
|
||||
|
||||
$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");
|
||||
echo json_encode(["results" => []]);
|
||||
exit;
|
||||
}
|
||||
|
||||
while($data = $adb->fetch_object($res)) {
|
||||
//$address_string = $data->plz." ".$data->ortschaft.", ".$data->strasse." ".$data->hausnummer;
|
||||
$address_string = $data->plz." ".$data->ortschaft.", ".$data->strasse;
|
||||
/*if($include_gst) {
|
||||
$address_string .= " | GST: ".$data->grund_nr;
|
||||
}*/
|
||||
$sort_key = $data->plz." ".$data->ortschaft." ".$data->strasse;
|
||||
|
||||
$address = [];
|
||||
$address['id'] = $data->strasse_id;
|
||||
$address["text"] = $address_string;
|
||||
$address['sort_key'] = $sort_key;
|
||||
$addresses[] = $address;
|
||||
}
|
||||
|
||||
|
||||
// sort results by most occurences of search strings
|
||||
$sort = [];
|
||||
foreach($addresses as $key => $address) {
|
||||
$includes_int = false;
|
||||
$count = 0;
|
||||
foreach($search_parts as $p) {
|
||||
$p = $this->db->escape(trim($p));
|
||||
if(!$p) continue;
|
||||
if(is_numeric(($p))) {
|
||||
$includes_int = true;
|
||||
if(substr_count(strtolower($address['text']), strtolower($p))) {
|
||||
$count++;
|
||||
}
|
||||
} else {
|
||||
$count += substr_count(strtolower($address['text']), strtolower($p));
|
||||
}
|
||||
}
|
||||
unset($address['sort_key']);
|
||||
//echo $address['text']." $p $count<br />\n";
|
||||
|
||||
if($includes_int && (($count + 1) - count($search_parts) ) < 1) {
|
||||
continue;
|
||||
}
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,7 @@ class ConstructionConsentProject extends mfBaseModel {
|
||||
return [];
|
||||
}
|
||||
foreach($networks as $network) {
|
||||
$this->networks[$network->adb_netzgebiet->id] = $network->adb_netzgebiet_id;
|
||||
$this->networks[$network->adb_netzgebiet->id] = $network->adb_netzgebiet;
|
||||
}
|
||||
return $this->networks;
|
||||
}
|
||||
@@ -67,7 +67,7 @@ class ConstructionConsentProject extends mfBaseModel {
|
||||
$model = new ConstructionConsentProject();
|
||||
|
||||
$table_fields = [
|
||||
"name", "note",
|
||||
"name", "sender_name", "sender_email", "sender_reply_to", "email", "phone", "note",
|
||||
"create_by","edit_by","create","edit"
|
||||
];
|
||||
|
||||
|
||||
@@ -18,11 +18,55 @@ class ConstructionConsentProjectController extends mfBaseController {
|
||||
protected function indexAction() : void {
|
||||
$this->layout()->setTemplate("ConstructionConsentProject/Index");
|
||||
|
||||
if ($this->request->resetFilter) {
|
||||
unset($_SESSION[MFAPPNAME . '-ConstructionConsentProject-filter']);
|
||||
}
|
||||
|
||||
$filter = [];
|
||||
if (is_array($this->request->filter)) {
|
||||
$filter = $this->request->filter;
|
||||
$_SESSION[MFAPPNAME . '-ConstructionConsentProject-filter'] = $filter;
|
||||
} else {
|
||||
if (array_key_exists(MFAPPNAME . '-ConstructionConsentProject-filter', $_SESSION) && count($_SESSION[MFAPPNAME . '-ConstructionConsentProject-filter'])) {
|
||||
$filter = $_SESSION[MFAPPNAME . '-ConstructionConsentProject-filter'];
|
||||
}
|
||||
}
|
||||
|
||||
$this->layout->set("filter", $filter);
|
||||
$filter = $this->getPreparedFilter($filter);
|
||||
|
||||
// pagination defaults
|
||||
$pagination = [];
|
||||
$pagination['start'] = 0;
|
||||
$pagination['count'] = 25;
|
||||
$pagination['maxItems'] = 0;
|
||||
|
||||
if (is_numeric($this->request->s)) {
|
||||
$pagination['start'] = intval($this->request->s);
|
||||
}
|
||||
//var_dump($filter);exit;
|
||||
$pagination['maxItems'] = ConstructionConsentProject::count($filter);
|
||||
|
||||
$projects = ConstructionConsentProject::getAll();
|
||||
$this->layout()->set("projects", $projects);
|
||||
$this->layout()->set("pagination", $pagination);
|
||||
|
||||
}
|
||||
|
||||
private function getPreparedFilter($filter) {
|
||||
$new_filter = [];
|
||||
|
||||
|
||||
|
||||
if (is_array($filter) && count($filter)) {
|
||||
foreach ($filter as $name => $value) {
|
||||
$new_filter[$name] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $new_filter;
|
||||
}
|
||||
|
||||
protected function addAction() {
|
||||
$this->layout()->setTemplate("ConstructionConsentProject/Form");
|
||||
|
||||
@@ -68,18 +112,36 @@ class ConstructionConsentProjectController extends mfBaseController {
|
||||
|
||||
$data = [];
|
||||
$data["name"] = $r->name;
|
||||
$data["sender_name"] = $r->sender_name;
|
||||
$data["sender_email"] = $r->sender_email;
|
||||
$data["sender_reply_to"] = $r->sender_reply_to;
|
||||
$data["email"] = $r->email;
|
||||
$data["phone"] = $r->phone;
|
||||
$data["note"] = $r->note;
|
||||
|
||||
if(!$r->name) {
|
||||
if($mode == "add") {
|
||||
$project = ConstructionConsentProject::create($data);
|
||||
} else {
|
||||
$project->update($data);
|
||||
}
|
||||
$this->layout()->set("project", $project);
|
||||
|
||||
if(!$r->name || !$r->sender_name || !$r->sender_email || !$r->email || !$r->phone) {
|
||||
$this->layout()->setFlash("Bitte alle erforderlichen Felder ausfüllen", "error");
|
||||
$this->redirect("ConstructionConsentProject");
|
||||
return $this->addAction();
|
||||
}
|
||||
if(!is_array($r->adb_netzgebiet_id) || !count($r->adb_netzgebiet_id)) {
|
||||
$this->layout()->setFlash("Bitte alle erforderlichen Felder ausfüllen", "error");
|
||||
$this->redirect("ConstructionConsentProject");
|
||||
$this->layout()->setFlash("Bitte mindestens ein Netzgebiet auswählen", "error");
|
||||
return $this->addAction();
|
||||
}
|
||||
|
||||
$netzgebiete = [];
|
||||
|
||||
if(!$project->save()) {
|
||||
$this->layout()->setFlash("Fehler beim Speichern", "error");
|
||||
return $this->addAction();
|
||||
}
|
||||
|
||||
foreach($r->adb_netzgebiet_id as $netzgebiet_id) {
|
||||
$netzgebiet = new ADBNetzgebiet($netzgebiet_id);
|
||||
if(!$netzgebiet->id) continue;
|
||||
@@ -87,20 +149,14 @@ class ConstructionConsentProjectController extends mfBaseController {
|
||||
$netzgebiete[] = $netzgebiet_id;
|
||||
}
|
||||
|
||||
/*
|
||||
if($mode == "add") {
|
||||
$project = ConstructionConsentProject::create($data);
|
||||
} else {
|
||||
$project->update($data);
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
if(!$project->save()) {
|
||||
$this->layout()->setFlash("Fehler beim Speichern", "error");
|
||||
if($mode == "add") {
|
||||
$this->redirect("ConstructionConsentProject", "add");
|
||||
} else {
|
||||
$this->redirect("ConstructionConsentProject", "edit", ["id" => $project->id]);
|
||||
}
|
||||
}
|
||||
|
||||
//save networks
|
||||
foreach($netzgebiete as $netzgebiet_id) {
|
||||
|
||||
Reference in New Issue
Block a user