From fed54514c8250307cf3f8fbabe107c68b0204f1b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20G=C3=BCnther?=
Date: Sun, 21 Jun 2026 18:00:20 +0200
Subject: [PATCH] Admin function for tenant
---
.../TenantContactGetController.php | 20 +++
.../TenantContactUpdateController.php | 25 +++
.../Controllers/TenantGdprGetController.php | 17 ++
.../TenantGdprUpdateController.php | 22 +++
.../TenantImpressGetController.php | 17 ++
.../TenantImpressUpdateController.php | 22 +++
.../Controllers/TenantPageController.php | 24 +++
.../TenantPaymentGetController.php | 19 +++
.../TenantPaymentUpdateController.php | 24 +++
app/Domains/Admin/Routes/api.php | 26 ++++
.../Admin/Views/Partials/TenantContact.vue | 145 ++++++++++++++++++
.../Admin/Views/Partials/TenantGdpr.vue | 86 +++++++++++
.../Admin/Views/Partials/TenantImpress.vue | 55 +++++++
.../Admin/Views/Partials/TenantPayment.vue | 139 +++++++++++++++++
app/Domains/Admin/Views/TenantData.vue | 109 +++++++++++++
...alter_tenants_gdpr_impress_to_longtext.php | 23 +++
resources/templates/gdpr-template.html | 54 +++++++
17 files changed, 827 insertions(+)
create mode 100644 app/Domains/Admin/Controllers/TenantContactGetController.php
create mode 100644 app/Domains/Admin/Controllers/TenantContactUpdateController.php
create mode 100644 app/Domains/Admin/Controllers/TenantGdprGetController.php
create mode 100644 app/Domains/Admin/Controllers/TenantGdprUpdateController.php
create mode 100644 app/Domains/Admin/Controllers/TenantImpressGetController.php
create mode 100644 app/Domains/Admin/Controllers/TenantImpressUpdateController.php
create mode 100644 app/Domains/Admin/Controllers/TenantPageController.php
create mode 100644 app/Domains/Admin/Controllers/TenantPaymentGetController.php
create mode 100644 app/Domains/Admin/Controllers/TenantPaymentUpdateController.php
create mode 100644 app/Domains/Admin/Routes/api.php
create mode 100644 app/Domains/Admin/Views/Partials/TenantContact.vue
create mode 100644 app/Domains/Admin/Views/Partials/TenantGdpr.vue
create mode 100644 app/Domains/Admin/Views/Partials/TenantImpress.vue
create mode 100644 app/Domains/Admin/Views/Partials/TenantPayment.vue
create mode 100644 app/Domains/Admin/Views/TenantData.vue
create mode 100644 database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php
create mode 100644 resources/templates/gdpr-template.html
diff --git a/app/Domains/Admin/Controllers/TenantContactGetController.php b/app/Domains/Admin/Controllers/TenantContactGetController.php
new file mode 100644
index 0000000..f69f58e
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantContactGetController.php
@@ -0,0 +1,20 @@
+json([
+ 'email' => $this->tenant->email,
+ 'email_finance' => $this->tenant->email_finance,
+ 'postcode' => $this->tenant->postcode,
+ 'city' => $this->tenant->city,
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantContactUpdateController.php b/app/Domains/Admin/Controllers/TenantContactUpdateController.php
new file mode 100644
index 0000000..8acf166
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantContactUpdateController.php
@@ -0,0 +1,25 @@
+tenant->update([
+ 'email' => $request->input('email'),
+ 'email_finance' => $request->input('email_finance'),
+ 'postcode' => $request->input('postcode'),
+ 'city' => $request->input('city'),
+ ]);
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Kontaktdaten wurden gespeichert.',
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantGdprGetController.php b/app/Domains/Admin/Controllers/TenantGdprGetController.php
new file mode 100644
index 0000000..c0017b1
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantGdprGetController.php
@@ -0,0 +1,17 @@
+json([
+ 'gdpr_text' => $this->tenant->gdpr_text ?? '',
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantGdprUpdateController.php b/app/Domains/Admin/Controllers/TenantGdprUpdateController.php
new file mode 100644
index 0000000..974495b
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantGdprUpdateController.php
@@ -0,0 +1,22 @@
+tenant->update([
+ 'gdpr_text' => $request->input('gdpr_text'),
+ ]);
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Datenschutzerklärung wurde gespeichert.',
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantImpressGetController.php b/app/Domains/Admin/Controllers/TenantImpressGetController.php
new file mode 100644
index 0000000..e18b835
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantImpressGetController.php
@@ -0,0 +1,17 @@
+json([
+ 'impress_text' => $this->tenant->impress_text ?? '',
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantImpressUpdateController.php b/app/Domains/Admin/Controllers/TenantImpressUpdateController.php
new file mode 100644
index 0000000..e2feaac
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantImpressUpdateController.php
@@ -0,0 +1,22 @@
+tenant->update([
+ 'impress_text' => $request->input('impress_text'),
+ ]);
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Impressum wurde gespeichert.',
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantPageController.php b/app/Domains/Admin/Controllers/TenantPageController.php
new file mode 100644
index 0000000..72bd738
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantPageController.php
@@ -0,0 +1,24 @@
+ [
+ 'name' => $this->tenant->name,
+ 'slug' => $this->tenant->slug,
+ 'url' => $this->tenant->url,
+ 'is_active_local_group' => $this->tenant->is_active_local_group,
+ ],
+ ]);
+ return $inertiaProvider->render();
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantPaymentGetController.php b/app/Domains/Admin/Controllers/TenantPaymentGetController.php
new file mode 100644
index 0000000..0f38df1
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantPaymentGetController.php
@@ -0,0 +1,19 @@
+json([
+ 'account_iban' => $this->tenant->account_iban,
+ 'account_bic' => $this->tenant->account_bic,
+ 'account_name' => $this->tenant->account_name,
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php b/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php
new file mode 100644
index 0000000..7bf6fef
--- /dev/null
+++ b/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php
@@ -0,0 +1,24 @@
+tenant->update([
+ 'account_iban' => $request->input('account_iban'),
+ 'account_bic' => $request->input('account_bic'),
+ 'account_name' => $request->input('account_name'),
+ ]);
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Bezahldaten wurden gespeichert.',
+ ]);
+ }
+}
diff --git a/app/Domains/Admin/Routes/api.php b/app/Domains/Admin/Routes/api.php
new file mode 100644
index 0000000..81a4241
--- /dev/null
+++ b/app/Domains/Admin/Routes/api.php
@@ -0,0 +1,26 @@
+group(function () {
+ Route::prefix('api/v1/admin/tenant')->group(function () {
+ Route::get('/contact', TenantContactGetController::class);
+ Route::post('/contact', TenantContactUpdateController::class);
+ Route::get('/payment', TenantPaymentGetController::class);
+ Route::post('/payment', TenantPaymentUpdateController::class);
+ Route::get('/impress', TenantImpressGetController::class);
+ Route::post('/impress', TenantImpressUpdateController::class);
+ Route::get('/gdpr', TenantGdprGetController::class);
+ Route::post('/gdpr', TenantGdprUpdateController::class);
+ });
+});
diff --git a/app/Domains/Admin/Views/Partials/TenantContact.vue b/app/Domains/Admin/Views/Partials/TenantContact.vue
new file mode 100644
index 0000000..d6bf63a
--- /dev/null
+++ b/app/Domains/Admin/Views/Partials/TenantContact.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+ Email: {{ form.email }}
+ Email Schatzmeister*in: {{ form.email_finance }}
+ Postleitzahl: {{ form.postcode }}
+ Ort: {{ form.city }}
+
+
Bearbeiten
+
+
+
+
+
+ Speichern
+ Abbrechen
+
+
+
+
+
diff --git a/app/Domains/Admin/Views/Partials/TenantGdpr.vue b/app/Domains/Admin/Views/Partials/TenantGdpr.vue
new file mode 100644
index 0000000..2fdf97a
--- /dev/null
+++ b/app/Domains/Admin/Views/Partials/TenantGdpr.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+ Speichern
+ Auto-generieren
+
+
+
+
+
diff --git a/app/Domains/Admin/Views/Partials/TenantImpress.vue b/app/Domains/Admin/Views/Partials/TenantImpress.vue
new file mode 100644
index 0000000..628d311
--- /dev/null
+++ b/app/Domains/Admin/Views/Partials/TenantImpress.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+ Speichern
+
+
+
+
diff --git a/app/Domains/Admin/Views/Partials/TenantPayment.vue b/app/Domains/Admin/Views/Partials/TenantPayment.vue
new file mode 100644
index 0000000..0b385ae
--- /dev/null
+++ b/app/Domains/Admin/Views/Partials/TenantPayment.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+ IBAN: {{ form.account_iban }}
+ BIC: {{ form.account_bic }}
+ Name Kontoinhaber: {{ form.account_name }}
+
+
Bearbeiten
+
+
+
+
+
+ Speichern
+ Abbrechen
+
+
+
+
+
diff --git a/app/Domains/Admin/Views/TenantData.vue b/app/Domains/Admin/Views/TenantData.vue
new file mode 100644
index 0000000..5622db5
--- /dev/null
+++ b/app/Domains/Admin/Views/TenantData.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php b/database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php
new file mode 100644
index 0000000..5f26e73
--- /dev/null
+++ b/database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php
@@ -0,0 +1,23 @@
+longText('gdpr_text')->nullable()->change();
+ $table->longText('impress_text')->nullable()->change();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::table('tenants', function (Blueprint $table) {
+ $table->string('gdpr_text')->nullable()->change();
+ $table->string('impress_text')->nullable()->change();
+ });
+ }
+};
diff --git a/resources/templates/gdpr-template.html b/resources/templates/gdpr-template.html
new file mode 100644
index 0000000..39402af
--- /dev/null
+++ b/resources/templates/gdpr-template.html
@@ -0,0 +1,54 @@
+1. Verantwortlicher
+Verantwortlich für die Datenverarbeitung auf dieser Website ist:
+[Name des Vereins]
+[Straße und Hausnummer]
+[PLZ Ort]
+E-Mail: [E-Mail-Adresse]
+
+Der Verein hat keinen Datenschutzbeauftragten bestellt, da die Voraussetzungen nach Art. 37 DSGVO nicht vorliegen.
+
+2. Erhebung und Speicherung personenbezogener Daten
+Beim Besuch dieser Website werden durch den Webserver automatisch folgende Daten in Server-Logfiles gespeichert:
+
+IP-Adresse des anfragenden Rechners
+Datum und Uhrzeit des Zugriffs
+Aufgerufene Seite bzw. Name der abgerufenen Datei
+Verwendeter Browser und Betriebssystem
+
+Diese Daten sind nicht bestimmten Personen zuordenbar. Eine Zusammenführung mit anderen Datenquellen findet nicht statt. Die Daten werden nach einer statistischen Auswertung gelöscht.
+
+3. Registrierung und Nutzerkonto
+Zur Nutzung bestimmter Funktionen ist eine Registrierung erforderlich. Dabei werden folgende Daten erhoben:
+
+Vor- und Nachname
+E-Mail-Adresse
+Weitere freiwillige Angaben je nach Funktion (z. B. Geburtsdatum, Telefonnummer, Adresse)
+
+Die Verarbeitung erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung bzw. vorvertragliche Maßnahmen) sowie Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an der Vereinsverwaltung).
+
+4. Cookies
+Diese Website verwendet ausschließlich technisch notwendige Cookies, die für den Betrieb der Seite erforderlich sind (z. B. Session-Cookies zur Authentifizierung). Diese Cookies werden nach Ende der Browser-Sitzung automatisch gelöscht.
+Es werden keine Tracking-Cookies, Analyse-Cookies oder Cookies von Drittanbietern eingesetzt. Eine Einwilligung ist für technisch notwendige Cookies nicht erforderlich (§ 25 Abs. 2 TDDDG).
+
+5. Keine Weitergabe an Dritte und keine externen Dienste
+Es werden keine externen Tools, Analysedienste, Social-Media-Plugins oder Content-Delivery-Networks eingebunden. Sämtliche Daten werden ausschließlich auf unserem eigenen Server verarbeitet.
+Eine Weitergabe personenbezogener Daten an Dritte erfolgt nur, wenn dies zur Vertragserfüllung erforderlich ist (z. B. Weitergabe von Teilnehmerdaten an Veranstaltungsorte) oder eine gesetzliche Verpflichtung besteht.
+
+6. Deine Rechte
+Du hast jederzeit das Recht auf:
+
+Auskunft über deine bei uns gespeicherten Daten (Art. 15 DSGVO)
+Berichtigung unrichtiger Daten (Art. 16 DSGVO)
+Löschung deiner Daten (Art. 17 DSGVO)
+Einschränkung der Verarbeitung (Art. 18 DSGVO)
+Datenübertragbarkeit (Art. 20 DSGVO)
+Widerspruch gegen die Verarbeitung (Art. 21 DSGVO)
+
+Zur Ausübung deiner Rechte genügt eine formlose Mitteilung an die oben genannte E-Mail-Adresse.
+
+7. Beschwerderecht
+Du hast das Recht, dich bei einer Datenschutz-Aufsichtsbehörde über die Verarbeitung deiner personenbezogenen Daten zu beschweren.
+
+8. Aktualität dieser Datenschutzerklärung
+Diese Datenschutzerklärung ist aktuell gültig.
+Stand: [Datum]