diff --git a/Layout/default/ConstructionConsentProject/Index.php b/Layout/default/ConstructionConsentProject/Index.php
index 0867b7e33..3e3dbb18d 100644
--- a/Layout/default/ConstructionConsentProject/Index.php
+++ b/Layout/default/ConstructionConsentProject/Index.php
@@ -78,6 +78,9 @@ $pagination_entity_name = "Zustimmungserklärungsprojekte";
| Projektname |
Netzgebiete |
+ Kontakt |
+ Email Absender |
+ Antwort an |
|
@@ -92,6 +95,12 @@ $pagination_entity_name = "Zustimmungserklärungsprojekte";
+
+ =$project->email?>
+ =$project->phone?>
+ |
+
=$project->sender_name?> <=$project->sender_email?>> |
+
=$project->sender_reply_to?> |
$project->id])?>">
|
diff --git a/application/ConstructionConsent/ConstructionConsentController.php b/application/ConstructionConsent/ConstructionConsentController.php
index 9dc42aaa4..403fbb2d5 100644
--- a/application/ConstructionConsent/ConstructionConsentController.php
+++ b/application/ConstructionConsent/ConstructionConsentController.php
@@ -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
\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;
+
+ }
}
\ No newline at end of file
diff --git a/application/ConstructionConsentProject/ConstructionConsentProject.php b/application/ConstructionConsentProject/ConstructionConsentProject.php
index 0d6397eb3..bf2d22864 100644
--- a/application/ConstructionConsentProject/ConstructionConsentProject.php
+++ b/application/ConstructionConsentProject/ConstructionConsentProject.php
@@ -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"
];
diff --git a/application/ConstructionConsentProject/ConstructionConsentProjectController.php b/application/ConstructionConsentProject/ConstructionConsentProjectController.php
index f342b6161..47bdd40a2 100644
--- a/application/ConstructionConsentProject/ConstructionConsentProjectController.php
+++ b/application/ConstructionConsentProject/ConstructionConsentProjectController.php
@@ -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) {