@@ -127,7 +127,7 @@ $pagination_entity_name = "Adressen";
-
+
@@ -140,41 +140,71 @@ $pagination_entity_name = "Adressen";
owners) || !count($item->owners)): ?>
Noch keine Besitzer bekannt
- owners as $owner): ?>
-
-
-
-
- | Name: |
- =$owner->name?> |
-
- | Anschrift: |
-
- =$owner->street?>
- =$owner->zip?> =$owner->city?>
- =$owner->country?>
- |
-
- | Telefon: |
- =$owner->phone?> |
-
- | Fax: |
- =$owner->fax?> |
-
- | Email: |
- =$owner->email?> |
-
- | Anfragestatus |
- =__($item->status, "consent")?> |
-
- | Anfrage Resultat |
- =($item->result) ? __($item->result, "consent") : ""?> |
-
-
-
$owner->id])?>"> Zustimmungserklärungsformular herunterladen
-
-
-
+
+
+ |
+ Name/Anschrift |
+ Telefon Fax Email |
+ Anfragestatus |
+ Ergebnis |
+
+ owners as $owner): ?>
+
+ |
+ $owner->id])?>" title="Zustimmungserklärungsformular herunterladen">
+ |
+
+ =$owner->name?>
+ =$owner->street?>
+ =$owner->zip?> =$owner->city?>
+ =$owner->country?>
+ |
+
+ =$owner->phone?>
+ =$owner->fax?>
+ =$owner->email?>
+ |
+
+ =__($owner->status, "consent")?>
+
+ |
+
+ =($owner->result) ? __($owner->result, "consent") : ""?>
+
+
+
+
+
+
+ |
+
+
+
+
@@ -255,13 +285,146 @@ $pagination_entity_name = "Adressen";
+
+
diff --git a/application/ConstructionConsent/ConstructionConsentController.php b/application/ConstructionConsent/ConstructionConsentController.php
index 9e110303d..3a77154a9 100644
--- a/application/ConstructionConsent/ConstructionConsentController.php
+++ b/application/ConstructionConsent/ConstructionConsentController.php
@@ -167,7 +167,7 @@ class ConstructionConsentController extends mfBaseController {
$this->layout()->set("consent", $cc);
//return true;
- $filename = $cc->createConsentFormPdf();
+ $filename = $cc->createConsentFormPdf($owner);
if(!$filename) {
$this->layout()->setFlash("Beim Erstellen des PDFs ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", "error");
$this->redirect("ConstructionConsent", "View", ["id" => $cc->id]);
diff --git a/application/ConstructionConsentFile/ConstructionConsentFile.php b/application/ConstructionConsentFile/ConstructionConsentFile.php
index 8a04cf568..fdd2977ae 100644
--- a/application/ConstructionConsentFile/ConstructionConsentFile.php
+++ b/application/ConstructionConsentFile/ConstructionConsentFile.php
@@ -160,10 +160,10 @@ class ConstructionConsentFile extends mfBaseModel {
$db = FronkDB::singleton();
//var_dump($filter);exit;
- if(array_key_exists("mailtemplate_id", $filter)) {
- $mailtemplate_id = $filter['mailtemplate_id'];
- if(is_numeric($mailtemplate_id)) {
- $where .= " AND ConstructionConsentFile.`mailtemplate_id` = $mailtemplate_id";
+ if(array_key_exists("constructionconsent_id", $filter)) {
+ $constructionconsent_id = $filter['constructionconsent_id'];
+ if(is_numeric($constructionconsent_id)) {
+ $where .= " AND ConstructionConsentFile.`constructionconsent_id` = $constructionconsent_id";
}
}
diff --git a/application/ConstructionConsentOwner/ConstructionConsentOwner.php b/application/ConstructionConsentOwner/ConstructionConsentOwner.php
index 94ad5b59f..b1d68c0cf 100644
--- a/application/ConstructionConsentOwner/ConstructionConsentOwner.php
+++ b/application/ConstructionConsentOwner/ConstructionConsentOwner.php
@@ -2,10 +2,24 @@
class ConstructionConsentOwner extends mfBaseModel {
private $consent;
+ private $files;
+ private $result_file;
+
public function getProperty($name) {
if($this->$name == null) {
+ if($name == "files") {
+ if(!$this->id) return null;
+ $files = ConstructionConsentOwnerFile::search(["constructionconsentowner_id" => $this->id]);
+ if(count($files)) {
+ foreach($files as $file) {
+ $this->files[$file->filename] = $file;
+ }
+ }
+ return $this->files;
+ }
+
if($name == "consent") {
$consent = new ConstructionConsent($this->constructionconsent_id);
if($consent->id) {
diff --git a/application/ConstructionConsentOwner/ConstructionConsentOwnerController.php b/application/ConstructionConsentOwner/ConstructionConsentOwnerController.php
index 8b69c2476..0f9bf12ef 100644
--- a/application/ConstructionConsentOwner/ConstructionConsentOwnerController.php
+++ b/application/ConstructionConsentOwner/ConstructionConsentOwnerController.php
@@ -16,6 +16,44 @@ class ConstructionConsentOwnerController extends mfBaseController
}
}
+ protected function uploadDocumentAction() {
+ $owner_id = $this->request->owner_id;
+ $filename = trim($this->request->name);
+
+ $owner = new ConstructionConsentOwner($owner_id);
+ if(!$owner->id) {
+ $this->layout()->setFlash("Besitzer nicht gefunden!", "error");
+ $this->redirect("ConstructionConsent");
+ }
+
+ if(is_array($_FILES) && array_key_exists("consentOwnerUpload", $_FILES) && !$_FILES['consentOwnerUpload']['error']) {
+ try {
+ // returns File object or throws Exception on error
+ $file = mfUpload::handleFormUpload("consentOwnerUpload", false, TT_CONSTRUCTIONCONSENT_FILE_UPLOAD_SUBFOLDER);
+ } catch (Exception $ex) {
+ $this->layout()->setFlash("Fehler beim Hochladen: " . $ex->getMessage(), "warning");
+ return $this->editAction();
+ }
+
+ $ccof = ConstructionConsentOwnerFile::create([
+ 'constructionconsentowner_id' => $owner->id,
+ 'file_id' => $file->id,
+ 'filename' => $filename,
+ ]);
+
+ if(!$ccof->save()) {
+ $this->layout()->setFlash("Fehler beim Hochladen", "error");
+ $this->redirect("ConstructionConsent", "View", ["id" => $owner->constructionconsent_id]);
+ }
+
+ $this->layout()->setFlash("Datei erfolgreich hochgeladen", "success");
+ $this->redirect("ConstructionConsent", "View", ["id" => $owner->constructionconsent_id]);
+ }
+
+ $this->layout()->setFlash("Keine Datei ausgewählt", "info");
+ $this->redirect("ConstructionConsent", "View", ["id" => $owner->constructionconsent_id]);
+ }
+
protected function saveAction()
{
$r = $this->request;
@@ -67,4 +105,85 @@ class ConstructionConsentOwnerController extends mfBaseController
$this->redirect("ConstructionConsent", "View", ["id" => $cc_id]);
}
+
+ protected function apiAction() {
+ if(!$this->me->is(["Admin"])) {
+ $this->redirect("Dashboard");
+ }
+ $do = $this->request->do;
+ $data = [];
+
+ switch($do) {
+ case "updateStatus":
+ $return = $this->updateStatusApi();
+ break;
+ case "updateResult":
+ $return = $this->updateResultApi();
+ 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 updateStatusApi() {
+ $owner_id = trim($this->request->id);
+ $new_status = trim($this->request->status);
+
+ $owner = new ConstructionConsentOwner($owner_id);
+ if(!$owner->id) {
+ return false;
+ }
+
+ if(!in_array($new_status, ["new", "requested", "answered"])) {
+ return false;
+ }
+
+ $owner->status = $new_status;
+ if(!$owner->save()) {
+ return false;
+ }
+
+ return ["message" => "Status saved successfully", "update" => ["id" => $owner->id, "status" => $owner->status, "status_text" => __($owner->status, "consent")]];
+ }
+
+ private function updateResultApi() {
+ $owner_id = trim($this->request->id);
+ $new_result = trim($this->request->result);
+
+ $owner = new ConstructionConsentOwner($owner_id);
+ if(!$owner->id) {
+ return false;
+ }
+
+ // allow empty result
+ if($new_result) {
+ if(!in_array($new_result, ["success", "failure"])) {
+ return false;
+ }
+
+ $owner->result = $new_result;
+ } else {
+ $owner->result = null;
+ }
+
+ if(!$owner->save()) {
+ return false;
+ }
+
+ if($owner->result) {
+ return ["message" => "Result saved successfully", "update" => ["id" => $owner->id, "result" => $owner->result, "result_text" => __($owner->result, "consent")]];
+ } else {
+ return ["message" => "Result saved successfully", "update" => ["id" => $owner->id, "result" => null, "result_text" => ""]];
+ }
+
+ }
}
\ No newline at end of file
diff --git a/application/ConstructionConsentOwnerFile/ConstructionConsentOwnerFile.php b/application/ConstructionConsentOwnerFile/ConstructionConsentOwnerFile.php
new file mode 100644
index 000000000..499e4e5f6
--- /dev/null
+++ b/application/ConstructionConsentOwnerFile/ConstructionConsentOwnerFile.php
@@ -0,0 +1,180 @@
+$name == null) {
+
+ if($name == "creator") {
+ $user = mfValuecache::singleton()->get("Worker-id-" . $this->create_by);
+ if($user) {
+ $this->creator = $user;
+ return $this->creator;
+ }
+ $this->creator = new User($this->create_by);
+ if($this->creator->id) {
+ mfValuecache::singleton()->set("Worker-id-" . $this->create_by, $this->creator);
+ }
+ return $this->creator;
+ }
+
+ if($name == "editor") {
+ $this->editor = new User($this->edit_by);
+ return $this->editor;
+ }
+
+ $classname = ucfirst($name);
+ $idfield = $name . "_id";
+ $this->$name = mfValuecache::singleton()->get("mfObjectmodel-$name-" . $this->$idfield);
+ if(!$this->$name) {
+ $this->$name = new $classname($this->$idfield);
+ }
+
+ if($this->$name->id) {
+ mfValuecache::singleton()->set("mfObjectmodel-$name-" . $this->$name->id, $this->$name);
+ return $this->$name;
+ } else {
+ return null;
+ }
+ }
+
+ return $this->$name;
+ }
+
+ /********************************
+ * Begin static Model functions
+ */
+
+ public static function create(array $data) {
+ $model = new ConstructionConsentOwnerFile();
+
+ $table_fields = [
+ "constructionconsentowner_id", "file_id", "filename",
+ "create_by", "edit_by", "create", "edit"
+ ];
+
+ foreach($data as $field => $value) {
+ if(in_array($field, $table_fields)) {
+ $model->$field = $value;
+ }
+ }
+
+ $me = new User();
+ $me->loadMe();
+
+ if($model->create_by === null) {
+ $model->create_by = $me->id;
+ }
+ if($model->edit_by === null) {
+ $model->edit_by = $me->id;
+ }
+
+ return $model;
+ }
+
+ public static function getAll() {
+ $items = [];
+
+ $db = FronkDB::singleton();
+
+ $res = $db->select("ConstructionConsentOwnerFile", "*", "1 = 1 ORDER BY file_id");
+ if($db->num_rows($res)) {
+ while($data = $db->fetch_object($res)) {
+ $items[] = new ConstructionConsentOwnerFile($data);
+ }
+ }
+ return $items;
+
+ }
+
+ public static function getFirst($filter = []) {
+ $db = FronkDB::singleton();
+
+ $where = self::getSqlFilter($filter);
+ $res = $db->select("ConstructionConsentOwnerFile", "*", "$where ORDER BY file_id LIMIT 1");
+ if($db->num_rows($res)) {
+ $data = $db->fetch_object($res);
+ $item = new ConstructionConsentOwnerFile($data);
+ if($item->id) {
+ return $item;
+ } else {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ public static function count($filter) {
+ $db = FronkDB::singleton();
+
+ $where = self::getSqlFilter($filter);
+ $sql = "SELECT COUNT(*) as cnt FROM `ConstructionConsentOwnerFile`
+ WHERE $where
+ ";
+
+ mfLoghandler::singleton()->debug($sql);
+ $res = $db->query($sql);
+ if($db->num_rows($res)) {
+ $data = $db->fetch_object($res);
+ return $data->cnt;
+ }
+ return 0;
+ }
+
+ public static function search($filter, $limit = false) {
+ $items = [];
+ $db = FronkDB::singleton();
+
+ $where = self::getSqlFilter($filter);
+
+ $sql = "SELECT ConstructionConsentOwnerFile.* FROM `ConstructionConsentOwnerFile`
+ WHERE $where
+ ORDER BY file_id
+ ";
+
+ 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'];
+ } elseif(is_numeric($limit['count'])) {
+ $sql .= " LIMIT " . $limit['count'];
+ }
+ }
+
+ $res = $db->query($sql);
+ if($db->num_rows($res)) {
+ while($data = $db->fetch_object($res)) {
+ $items[] = new ConstructionConsentOwnerFile($data);
+ }
+ }
+ return $items;
+ }
+
+ private static function getSqlFilter($filter) {
+ $where = "1=1 ";
+
+ $db = FronkDB::singleton();
+
+ //var_dump($filter);exit;
+ if(array_key_exists("constructionconsentowner_id", $filter)) {
+ $constructionconsentowner_id = $filter['constructionconsentowner_id'];
+ if(is_numeric($constructionconsentowner_id)) {
+ $where .= " AND ConstructionConsentOwnerFile.`constructionconsentowner_id` = $constructionconsentowner_id";
+ }
+ }
+
+ if(array_key_exists("file_id", $filter)) {
+ $file_id = $filter['file_id'];
+ if(is_numeric($file_id)) {
+ $where .= " AND ConstructionConsentOwnerFile.`file_id` = $file_id";
+ }
+ }
+
+ //var_dump($filter, $where);exit;
+ return $where;
+ }
+}
\ No newline at end of file
diff --git a/db/migrations/20250115135530_create_contruction_consent_owner_file.php b/db/migrations/20250115135530_create_contruction_consent_owner_file.php
new file mode 100644
index 000000000..f5503d05a
--- /dev/null
+++ b/db/migrations/20250115135530_create_contruction_consent_owner_file.php
@@ -0,0 +1,37 @@
+getEnvironment() == "thetool") {
+ $table = $this->table("ConstructionConsentOwnerFile");
+ $table->addColumn("constructionconsentowner_id", "integer", ["null" => false]);
+ $table->addColumn("file_id", "integer", ["null" => false]);
+ $table->addColumn("filename", "string", ["null" => false]);
+ $table->addColumn("create_by", "integer", ["null" => false]);
+ $table->addColumn("edit_by", "integer", ["null" => false]);
+ $table->addColumn("create", "integer", ["null" => false]);
+ $table->addColumn("edit", "integer", ["null" => false]);
+ $table->create();
+ }
+
+ if($this->getEnvironment() == "addressdb") {
+
+ }
+ }
+
+ public function down(): void
+ {
+ if($this->getEnvironment() == "thetool") {
+ $this->table("ConstructionConsentOwnerFile")->drop()->save();
+ }
+
+ if($this->getEnvironment() == "addressdb") {
+
+ }
+ }
+}