diff --git a/app/web/routes.py b/app/web/routes.py index 55fff6a..6a6223b 100644 --- a/app/web/routes.py +++ b/app/web/routes.py @@ -916,6 +916,10 @@ def _build_status_ctx(request: Request, conn, account_id: int, *, oob: bool = Fa else: sanatate_text = "Declaratiile curg normal" + # US-011 (5.20): mediul RAR activ per cont pentru indicatorul din statusbar. + medii_disp = medii_disponibile_cont(conn, account_id) + env_default = rar_env_efectiv_cont(conn, account_id) or "prod" + status_ctx = { "request": request, "worker_lbl": worker_lbl, @@ -937,6 +941,10 @@ def _build_status_ctx(request: Request, conn, account_id: int, *, oob: bool = Fa "tab_activ": tab_activ, "mapari_badge": counts.get("needs_mapping", 0), "oob": oob, + # US-011: indicator mediu RAR + toggle conditionat + "env_default": env_default, + "medii_disponibile": medii_disp, + "csrf_token": get_csrf_token(request), } # US-006 (5.17): context plan pentru linia de consum/trial in _status.html. status_ctx.update(_plan_ctx(conn, account_id)) @@ -4699,3 +4707,38 @@ async def cont_rar_medii(request: Request) -> HTMLResponse: ) finally: conn.close() + + +@router.post("/_fragments/status/toggle-env", response_class=HTMLResponse) +async def fragment_status_toggle_env(request: Request) -> HTMLResponse: + """Comuta rar_env_default intre mediile disponibile ale contului (US-011, PRD 5.20). + + Valideaza ca noul mediu e in lista mediilor disponibile inainte de UPDATE. + Intoarce statusbar-ul actualizat (acelasi format ca /_fragments/status). + Ignorat silentios daca contul are un singur mediu sau zero medii disponibile. + """ + account_id = require_login(request) + form = await request.form() + verify_csrf(request, str(form.get("csrf_token") or "")) + acct = account_or_default(account_id) + + conn = get_connection() + try: + medii = medii_disponibile_cont(conn, account_id) + if len(medii) >= 2: + env_curent = rar_env_efectiv_cont(conn, account_id) or medii[0] + # Alterneaza la urmatorul mediu din lista disponibile (ciclic) + idx_curent = medii.index(env_curent) if env_curent in medii else 0 + env_nou = medii[(idx_curent + 1) % len(medii)] + # Dubla validare: env_nou trebuie sa fie in medii disponibile + if env_nou in medii: + conn.execute( + "UPDATE accounts SET rar_env_default=? WHERE id=?", + (env_nou, acct), + ) + conn.commit() + + ctx = _build_status_ctx(request, conn, account_id, tab_activ="acasa") + return templates.TemplateResponse("_status.html", ctx) + finally: + conn.close() diff --git a/app/web/templates/_status.html b/app/web/templates/_status.html index ba464a3..b77256f 100644 --- a/app/web/templates/_status.html +++ b/app/web/templates/_status.html @@ -123,6 +123,43 @@ + {# === US-011 (5.20): Indicator mediu RAR activ per cont. + La 0 medii: nu afisa (cont fara configuratie RAR). + La 1 mediu: eticheta statica (fara toggle). + La 2 medii: buton de comutare HTMX (toggle conditionat). + #} + {% set _medii = medii_disponibile | default([]) %} + {% set _env = env_default | default('prod') %} + {% set _env_label = "Testare" if _env == "test" else "Productie" %} + {% if _medii | length >= 1 %} +