diff --git a/app/web/routes.py b/app/web/routes.py index f0a0669..f66e19a 100644 --- a/app/web/routes.py +++ b/app/web/routes.py @@ -464,7 +464,7 @@ def _render_panel_cont(request: Request, conn, account_id: int) -> str: "account_meta": account_meta, "date_firma_mesaj": None, "date_firma_eroare": None, - "activ_subtab": "firma", + "activ_subtab": "cont", "parola_mesaj": None, "parola_eroare": None, "creds_test_mesaj": None, @@ -4507,9 +4507,9 @@ def _render_cont( date_firma_mesaj: str | None = None, date_firma_eroare: str | None = None, are_cheie: bool = False, - # Sub-tab activ dupa re-randare: 'firma' | 'rar' | 'api' | 'cont'. - # Fiecare handler POST intoarce sub-tabul propriu, ca swap-ul HTMX sa nu resete la firma. - activ_subtab: str = "firma", + # Sub-tab activ dupa re-randare: 'cont' | 'rar' | 'api'. + # Fiecare handler POST intoarce sub-tabul propriu, ca swap-ul HTMX sa nu resete la primul. + activ_subtab: str = "cont", # Schimbare parola de acces (sub-tab Cont). parola_mesaj: str | None = None, parola_eroare: str | None = None, @@ -4985,7 +4985,7 @@ async def cont_rar_medii(request: Request) -> HTMLResponse: if prod_enabled_form and not was_prod_enabled and not prod_confirmare: creds_prod_eroare = ( "Bifati confirmarea de mai jos pentru a activa mediul Productie: " - "\"Inteleg ca trimiterile pe Productie sunt declaratii reale (L.142)\"." + "\"Confirm: trimiterile pe Productie sunt declaratii reale (L.142)\"." ) account_meta = _fetch_account_meta(conn, acct) env_ctx = _fetch_cont_env_state(conn, acct) diff --git a/app/web/templates/_cont.html b/app/web/templates/_cont.html index 5525324..b1d6fbb 100644 --- a/app/web/templates/_cont.html +++ b/app/web/templates/_cont.html @@ -1,80 +1,138 @@ -{# Pagina Setari: sub-taburi interne — Date firma / Credentiale RAR / Cheie API / - Cont (plan + parola). `activ_subtab` (server) alege panoul activ dupa fiecare +{# Pagina Setari: sub-taburi interne — Cont (date firma + plan + parola) / + Credentiale RAR / Cheie API. `activ_subtab` (server) alege panoul activ dupa fiecare swap HTMX, ca re-randarea sa nu resete la primul tab. Comutarea intre taburi fara server = JS delegat in base.html (#card-cont). #} {% set _firma_ok = account_meta.name and account_meta.email and account_meta.cui %} {% set _rar_ok = medii_disponibile and medii_disponibile|length > 0 %} -
-
-

- - Setari -

-

Datele firmei, credentialele RAR, cheia API si contul tau.

-
+{% set _subtab = activ_subtab|default('cont') %} +{% if _subtab == 'firma' %}{% set _subtab = 'cont' %}{% endif %} +
+

+ + Setari +

- - + - -
- {# ============================ Sub-tab: Date firma ============================ #} -
+ {# ================= Sub-tab: Cont (date firma + plan + parola) ================ #} +
+ + {# --- Date firma --- #}
Date firma {{ 'complet' if _firma_ok else 'incomplet' }}
-

Apar pe declaratiile catre RAR si pe facturile de plan.

{% if date_firma_mesaj %}
{{ date_firma_mesaj }}
{% endif %} {% if date_firma_eroare %}{% endif %}
-

-
- -

-

-
- -

-

-
- -

- +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + Apar pe declaratiile RAR si pe facturi. +
+
+ + {# --- Plan --- #} + {% if plan_linie is defined %} +
+
+ + Plan +
+ {# plan_linie vine ca "Plan: · "; aici tier-ul apare O data, bold. #} + {% set _plan_text = plan_linie|replace('Plan: ', '', 1) %} + {% set _plan_parts = _plan_text.split(' · ', 1) %} +
+ {{ _plan_parts[0] }} + {% if _plan_parts|length > 1 %} + {{ _plan_parts[1] }} + {% endif %} +
+ {% if monthly_limit_val|default(none) and usage_lunar is defined %} + {% set _pct = (usage_lunar / monthly_limit_val * 100)|round|int %} +
+ +
+ {% endif %} + {% if plan_limita_atinsa|default(false) %} +

Limita lunara atinsa — trimiterile noi sunt blocate pana luna viitoare.

+ {% endif %} +

Pentru mai mult volum sau acces API, contacteaza-ne.

+ {% endif %} + + {# --- Parola de acces --- #} +
+
+ + Parola de acces +
+

Parola dashboard-ului — separata de credentialele RAR. Minim 10 caractere.

+ + {% if parola_mesaj %}
{{ parola_mesaj }}
{% endif %} + {% if parola_eroare %}{% endif %} + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
{# ========================= Sub-tab: Credentiale RAR ========================= #}
+ {% if _subtab != 'rar' %}hidden{% endif %}>
- Credentiale RAR (portal AUTOPASS) + Credentiale RAR {{ 'configurat' if _rar_ok else 'neconfigurat' }}

- Configureaza mediile RAR — Testare si/sau Productie — fiecare cu credentialele lui, - validate separat la salvare pe sistemul RAR corespunzator. Un mediu devine activ cand e - bifat si are credentiale; abia atunci importul web poate trimite pe el. (Canalul API ramane - pe mediul global al instantei, {{ mediu_instanta() }}, pentru ca isi cara singur credentialele.) + Fiecare mediu are propriile credentiale, verificate la salvare. Trimiterile merg doar pe mediile active.

{% if creds_mesaj %}
{{ creds_mesaj }}
{% endif %} @@ -93,10 +151,11 @@ Activare Testare - - - - + + + + {% if creds_test_mesaj %}
{{ creds_test_mesaj }}
{% endif %} {% if creds_test_eroare %}{% endif %}
@@ -110,13 +169,14 @@ Activare Productie - - - - + + + + {% if creds_prod_mesaj %}
{{ creds_prod_mesaj }}
{% endif %} {% if creds_prod_eroare %}{% endif %} @@ -124,9 +184,9 @@
- + {% if medii_disponibile %} - {% for env in medii_disponibile %} {% endfor %} @@ -138,22 +198,23 @@ {% if creds_default_eroare %}{% endif %}
- - Parolele stocate criptat, niciodata in clar. +
+ + Parolele se stocheaza criptat. +
{# ============================ Sub-tab: Cheie API ============================ #}
+ {% if _subtab != 'api' %}hidden{% endif %}>
Cheie API {{ 'activa' if are_cheie else 'lipsa' }}

- O foloseste softul propriu / ROAAUTO ca sa trimita prezentari prin API. Se vede integral o - singura data, la creare sau rotire. + Pentru trimiteri din softul propriu / ROAAUTO. Se afiseaza integral o singura data.

{% if api_key %} @@ -164,9 +225,6 @@ onclick="navigator.clipboard.writeText(this.dataset.key).then(()=>this.textContent='Copiat!')"> Copiaza cheia -

- Atentie: la urmatoarea vizita aceasta cheie dispare. Daca o pierzi, roteste din nou. -

{% endif %} {% if rot_eroare %}{% endif %} @@ -174,62 +232,10 @@
- - Cheia veche se revoca imediat. -
-
- - {# ========================= Sub-tab: Cont (plan + parola) ==================== #} -
- - {# --- Plan curent --- #} - {% if plan_linie is defined %} -
- - Plan curent - {{ tier_label|default('Gratuit') }} -
-
- {{ plan_linie }} -
- {% if plan_limita_atinsa|default(false) %} -

Limita lunara a fost atinsa — trimiterile noi sunt blocate pana la inceputul lunii urmatoare.

- {% elif plan_warn|default(false) %} -

Te apropii de limita lunara.

- {% endif %} -

- Pentru mai mult volum sau import prin API, contacteaza-ne — alocarea planurilor se face manual. -

-
- {% endif %} - - {# --- Parola de acces --- #} -
- - Parola de acces -
-

Parola cu care te autentifici in dashboard (separata de credentialele RAR). Minim 10 caractere.

- - {% if parola_mesaj %}
{{ parola_mesaj }}
{% endif %} - {% if parola_eroare %}{% endif %} - -
- -

-
- -

-

-
- -

-

-
- -

- +
+ + Rotirea revoca imediat cheia veche. +
diff --git a/app/web/templates/base.html b/app/web/templates/base.html index 8ac67eb..8e2d734 100644 --- a/app/web/templates/base.html +++ b/app/web/templates/base.html @@ -857,10 +857,30 @@ .st-dot.warn { background:var(--warn); } .st-dot.info { background:var(--muted); } .setari-pane[hidden] { display:none; } - .setari-zone-title { font-size:var(--fs-md); font-weight:600; margin:0 0 4px; display:flex; - align-items:center; gap:10px; flex-wrap:wrap; } - .setari-zone-title .ic { opacity:.7; } - .setari-zone-desc { color:var(--muted); font-size:var(--fs-sm); margin:0 0 16px; max-width:64ch; line-height:1.5; } + /* Titlu de sectiune compact (uppercase mic) — ierarhie sub titlul paginii, nu concurenta cu el. */ + .setari-zone-title { font-size:var(--fs-xs); font-weight:600; text-transform:uppercase; + letter-spacing:.07em; color:var(--muted); margin:0 0 10px; display:flex; + align-items:center; gap:8px; flex-wrap:wrap; } + .setari-zone-title .ic { opacity:.7; width:15px; height:15px; } + .setari-zone-title .setari-badge { text-transform:none; letter-spacing:0; } + .setari-zone-desc { color:var(--muted); font-size:var(--fs-sm); margin:0 0 12px; max-width:60ch; line-height:1.5; } + /* Formulare compacte pe 2 coloane in Setari. */ + .setari-fgrid { display:grid; grid-template-columns:1fr 1fr; gap:10px 14px; max-width:560px; margin:0 0 12px; } + .setari-fgrid .fg-full { grid-column:1 / -1; } + .setari-fgrid label { display:block; font-size:var(--fs-xs); color:var(--muted); margin-bottom:3px; } + .setari-fgrid input { width:100%; box-sizing:border-box; font:inherit; font-size:14px; + background:var(--bg); color:var(--ink); border:1px solid var(--line); + border-radius:6px; padding:7px 10px; } + @media (max-width:560px) { .setari-fgrid { grid-template-columns:1fr; } } + .setari-btn-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; } + .setari-micro { font-size:var(--fs-xs); color:var(--muted); } + /* Plan: tier + consum pe un rand, bara de progres sub ele. */ + .plan-row { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin:0 0 8px; } + .plan-tier { font-size:var(--fs-md); font-weight:600; color:var(--ink); } + .plan-usage { font-size:var(--fs-sm); color:var(--muted); font-variant-numeric:tabular-nums; } + .plan-meter { height:6px; border-radius:99px; background:var(--line2); max-width:340px; + overflow:hidden; margin:0 0 8px; } + .plan-meter > span { display:block; height:100%; border-radius:99px; background:var(--accent); } .setari-badge { font-size:11px; font-weight:700; padding:2px 9px; border-radius:99px; text-transform:uppercase; letter-spacing:.03em; border:1px solid transparent; } .setari-badge.sb-ok { color:var(--ok); background:color-mix(in srgb,var(--ok) 12%,transparent); @@ -869,7 +889,7 @@ border-color:color-mix(in srgb,var(--warn) 40%,transparent); } .setari-badge.sb-info { color:var(--muted); background:color-mix(in srgb,var(--muted) 12%,transparent); border-color:color-mix(in srgb,var(--muted) 35%,transparent); } - .setari-subzone-sep { border:none; border-top:1px solid var(--line); margin:26px 0 22px; } + .setari-subzone-sep { border:none; border-top:1px solid var(--line); margin:20px 0 18px; } /* Cheie API afisata o singura data. */ .keybox { font-family:var(--font-mono); font-size:14px; background:var(--card2); border:1px solid var(--line); border-radius:8px; padding:12px 14px; word-break:break-all;