fix: alles auf eine Adresse, Rueckfrage wieder entfernt
Die Zustandsseite /zentrale/{durchwahl} war ein Fehlgriff. Sie wurde als
"Adresse fuer den Alltag" eingefuehrt und war damit eine zweite URL, die
man sich merken muss. Wer sie nicht hatte, kam nicht mehr aus der Zentrale
heraus: auf /zentrale sah man nur, dass jemand anderes eingetragen ist,
ohne einen Weg zum Freigeben.
Jetzt gibt es genau eine Adresse. Auf /zentrale die eigene Durchwahl
eintragen, und die Seite zeigt die Knoepfe, die fuer diese Person gerade
gelten - derselbe Weg fuehrt zum Uebernehmen und zum Freigeben. Das
Durchwahl-Feld ist immer da, auch wenn die Zentrale besetzt ist, und der
Hilfetext nennt beide Wege.
- /zentrale/{durchwahl} bleibt als Kurzform fuer QR-Codes, leitet aber nur
auf /zentrale?durchwahl=... um
- alle Aktionen leiten auf /zentrale zurueck statt auf eine Unterseite
- der Knopf heisst "Zentrale freigeben" statt "Zurueck auf mein
Tuerschild", weil das die Sicht des Bedienenden ist
- kein Hinweis mehr, sich eine persoenliche Adresse als Lesezeichen zu
merken - das war die Ursache der Verwirrung
Die Bestaetigungsstufe vor dem Verdraengen ist wieder raus, sie war nicht
gewuenscht. Die Unterscheidung der drei Faelle am Knopf bleibt, damit
sichtbar ist, was mit dem bisherigen Besetzer passiert.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -666,51 +666,47 @@ def _zentrale_page(request, conn, target, extension="", user=None, done=None):
|
||||
|
||||
|
||||
def _zentrale_redirect(extension, done):
|
||||
"""Nach jeder Aktion zurueck auf die Zustandsseite (POST/Redirect/GET)."""
|
||||
"""Nach jeder Aktion zurueck auf /zentrale (POST/Redirect/GET).
|
||||
|
||||
Es gibt absichtlich nur diese eine Adresse: wer die Zentrale freigeben will,
|
||||
soll sich keine zweite URL gemerkt haben muessen.
|
||||
"""
|
||||
ext = quote((extension or "").strip(), safe="")
|
||||
if not ext:
|
||||
return RedirectResponse(f"/zentrale?done={done}", status_code=303)
|
||||
return RedirectResponse(f"/zentrale/{ext}?done={done}", status_code=303)
|
||||
return RedirectResponse(f"/zentrale?durchwahl={ext}&done={done}", status_code=303)
|
||||
|
||||
|
||||
@app.get("/zentrale", response_class=HTMLResponse)
|
||||
async def zentrale_page(request: Request):
|
||||
"""Self-Service-Seite fuer den Empfangsbereich. Absichtlich ohne Admin-Login."""
|
||||
# Das Formular schickt die Durchwahl per GET - auf die Personenseite umleiten,
|
||||
# damit die Adresse merkbar und neu ladbar ist.
|
||||
"""Self-Service-Seite fuer den Empfangsbereich. Absichtlich ohne Admin-Login.
|
||||
|
||||
Die eine Adresse fuer alles: Durchwahl eintragen, und die Seite zeigt die
|
||||
Knoepfe, die fuer diese Person gerade gelten - Uebernehmen oder Freigeben.
|
||||
"""
|
||||
typed = (request.query_params.get("durchwahl") or "").strip()
|
||||
if typed:
|
||||
return RedirectResponse(f"/zentrale/{quote(typed, safe='')}", status_code=303)
|
||||
done = request.query_params.get("done")
|
||||
|
||||
conn = database.get_db()
|
||||
try:
|
||||
return _zentrale_page(request, conn, _selfservice_target(conn),
|
||||
done=request.query_params.get("done"))
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.get("/zentrale/{extension}", response_class=HTMLResponse)
|
||||
async def zentrale_page_for_extension(request: Request, extension: str):
|
||||
"""Zustandsseite pro Mitarbeiter. Zeigt nur an, geaendert wird per Knopf."""
|
||||
conn = database.get_db()
|
||||
try:
|
||||
target = _selfservice_target(conn)
|
||||
user = _user_by_extension(extension, conn)
|
||||
done = request.query_params.get("done") if user else "err_unbekannt"
|
||||
return _zentrale_page(request, conn, target, extension=extension, user=user, done=done)
|
||||
user = _user_by_extension(typed, conn) if typed else None
|
||||
if typed and not user and not done:
|
||||
done = "err_unbekannt"
|
||||
return _zentrale_page(request, conn, target, extension=typed, user=user, done=done)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.post("/api/zentrale/uebernehmen")
|
||||
async def zentrale_takeover(extension: str = Form(...), confirm: str = Form("")):
|
||||
"""Mitarbeiter setzt sich selbst auf das Busylight der Zentrale.
|
||||
@app.get("/zentrale/{extension}")
|
||||
async def zentrale_page_for_extension(extension: str):
|
||||
"""Kurzform fuer QR-Codes. Leitet auf die eine Adresse um."""
|
||||
return RedirectResponse(f"/zentrale?durchwahl={quote(extension, safe='')}", status_code=303)
|
||||
|
||||
Sitzt bereits jemand anderes darauf, braucht es eine ausdrueckliche
|
||||
Bestaetigung. Eine Rueckgabe zu erzwingen waere die Alternative, wuerde die
|
||||
Zentrale aber sperren, sobald jemand ohne Freigabe nach Hause geht.
|
||||
"""
|
||||
|
||||
@app.post("/api/zentrale/uebernehmen")
|
||||
async def zentrale_takeover(extension: str = Form(...)):
|
||||
"""Mitarbeiter setzt sich selbst auf das Busylight der Zentrale."""
|
||||
conn = database.get_db()
|
||||
try:
|
||||
target = _selfservice_target(conn)
|
||||
@@ -721,14 +717,6 @@ async def zentrale_takeover(extension: str = Form(...), confirm: str = Form(""))
|
||||
if not user:
|
||||
return _zentrale_redirect(extension, "err_unbekannt")
|
||||
|
||||
if confirm != "ja":
|
||||
besetzt = conn.execute("""
|
||||
SELECT 1 FROM assignments
|
||||
WHERE wled_device_id = ? AND segment = ? AND user_azure_id != ?
|
||||
""", (target["id"], target["segment"], user["azure_id"])).fetchone()
|
||||
if besetzt:
|
||||
return _zentrale_redirect(extension, "bestaetigen")
|
||||
|
||||
already = conn.execute("""
|
||||
SELECT 1 FROM assignments
|
||||
WHERE user_azure_id = ? AND wled_device_id = ? AND segment = ?
|
||||
|
||||
Reference in New Issue
Block a user