kundenplattform/templates/organisation.html
Thomas Stallinger ec11de1ee9 feat: Self-Service-Kontenverwaltung + Organisationsdaten unter /organisation
Neue Rolle ist_organisationsadmin (auth.py), bewusst getrennt von
is_superuser: is_superuser bleibt exklusiv internes, organisationsuebergreifendes
Tuxflotte-Personal mit Zugriff auf /admin/* - ist_organisationsadmin ist
auf die eigene Organisation beschränkt und kann nie über Self-Service
gesetzt werden (organization_id/is_superuser kommen bei
POST /organisation/konten nie aus dem Formular, sondern immer aus der
Session).

/organisation zeigt jetzt Kontakt-/Stammdaten (bearbeitbar) und die
Kolleg:innen-Liste der eigenen Organisation (für alle sichtbar,
Verwaltung nur für Org-Admins/internes Personal via require_org_admin).
Selbstlöschung des eigenen Kontos wird verweigert.

fetch_benutzer_fuer_organisation() von admin_kunden.py nach auth.py
verschoben (jetzt von beiden Routern importiert, kein Duplikat) -
liefert zusätzlich id + ist_organisationsadmin. admin_kunden.py bekommt
eine neue Organisationsdaten-Sektion (nutzt denselben PATCH-Endpoint)
und die neue Checkbox beim Konto-Anlegen, um den ersten Org-Admin einer
neuen Organisation zu bootstrappen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 07:40:05 +02:00

76 lines
2.8 KiB
HTML

{% extends "base.html" %}
{% block title %}Organisation — Tuxflotte{% endblock %}
{% block content %}
<h2>Organisation</h2>
<form method="post" action="/organisation">
<label for="name">Name</label>
<input type="text" id="name" name="name" value="{{ organization.name }}" required>
<label for="kontakt_name">Ansprechpartner:in</label>
<input type="text" id="kontakt_name" name="kontakt_name" value="{{ organization.kontakt_name or '' }}">
<label for="adresse">Adresse</label>
<input type="text" id="adresse" name="adresse" value="{{ organization.adresse or '' }}">
<label for="telefon">Telefon</label>
<input type="text" id="telefon" name="telefon" value="{{ organization.telefon or '' }}">
<label for="kontakt_email">Kontakt-E-Mail</label>
<input type="email" id="kontakt_email" name="kontakt_email" value="{{ organization.kontakt_email or '' }}">
<label for="notizen">Notizen</label>
<textarea id="notizen" name="notizen" rows="3">{{ organization.notizen or '' }}</textarea>
<button type="submit">Speichern</button>
</form>
<section>
<h3>Kolleg:innen</h3>
{% if not benutzer %}
<p>Keine Konten gefunden.</p>
{% else %}
<figure>
<table>
<thead><tr><th>E-Mail</th><th>Org-Admin</th><th>Angelegt</th>{% if user.is_superuser or user.ist_organisationsadmin %}<th></th>{% endif %}</tr></thead>
<tbody>
{% for b in benutzer %}
<tr>
<td>{{ b.email }}</td>
<td>{{ "ja" if b.ist_organisationsadmin else "nein" }}</td>
<td>{{ b.created_at }}</td>
{% if user.is_superuser or user.ist_organisationsadmin %}
<td>
{% if b.id != user.id|string %}
<form method="post" action="/organisation/konten/{{ b.id }}/loeschen">
<button type="submit" class="outline secondary">Löschen</button>
</form>
{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</figure>
{% endif %}
{% if user.is_superuser or user.ist_organisationsadmin %}
<details>
<summary role="button" class="secondary outline">Neues Konto anlegen</summary>
<form method="post" action="/organisation/konten">
<label for="konto_email">E-Mail</label>
<input type="email" id="konto_email" name="email" required>
<label for="konto_password">Passwort</label>
<input type="password" id="konto_password" name="password" required>
<label>
<input type="checkbox" name="ist_organisationsadmin">
Admin dieser Organisation (darf Kolleg:innen-Konten verwalten)
</label>
<button type="submit">Anlegen</button>
</form>
</details>
{% endif %}
</section>
{% endblock %}