refactor: comentarii strict functionale, fara referinte PRD/stories
Curatare globala a comentariilor si docstring-urilor (app, tools, teste, scripturi): eliminate referintele la PRD-uri, US-xxx, task-uri istorice si review-uri; pastrata doar informatia functionala, formulata scurt. Regula adaugata in CLAUDE.md (sectiunea Stil). Fara modificari de cod sau comportament. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -127,7 +127,7 @@ def _apply_lifecycle(conn, ids: list[int], action: str) -> None:
|
||||
for aid in ids:
|
||||
try:
|
||||
if action == "activate":
|
||||
# Gate US-002: nu activam conturi fara identitate completa (companie+email+CUI)
|
||||
# Nu activam conturi fara identitate completa (companie+email+CUI)
|
||||
acct_row = conn.execute(
|
||||
"SELECT id, name, cui, email FROM accounts WHERE id=?", (aid,)
|
||||
).fetchone()
|
||||
|
||||
@@ -79,7 +79,6 @@ async def signup_post(
|
||||
name=name, cui=cui, email=email, plan=requested_plan,
|
||||
), status_code=422)
|
||||
|
||||
# CUI obligatoriu la signup (US-001, PRD 5.12)
|
||||
cui_norm = cui.strip().upper() if cui else ""
|
||||
if not cui_norm:
|
||||
return _TMPL.TemplateResponse(request, "signup.html", _ctx(
|
||||
|
||||
@@ -72,7 +72,7 @@ ETICHETE_SCURTE: dict[str, str] = {
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Randuri tinute manual (held) — US-006, PRD 5.19
|
||||
# Randuri tinute manual (held).
|
||||
#
|
||||
# `held` NU e o stare noua in masina de stari: un rand cu `status='queued' AND
|
||||
# held=1` este in coada, dar tinut pana la eliberarea umana. Il afisam distinct
|
||||
@@ -96,9 +96,8 @@ def eticheta_scurta(status: str, held: bool = False) -> str:
|
||||
Returneaza eticheta compacta (pill) pentru o stare de submission.
|
||||
|
||||
Cand `status='queued'` si `held` este adevarat, randul e tinut manual si
|
||||
intoarce "Manual" (distinct de "In coada") — vezi PRD 5.19 D5. Pentru orice
|
||||
alta stare `held` este ignorat, iar apelul fara `held` ramane identic cu cel
|
||||
dinainte de US-006.
|
||||
intoarce "Manual" (distinct de "In coada"). Pentru orice alta stare `held`
|
||||
este ignorat.
|
||||
|
||||
Arunca KeyError daca starea nu este mapata — intentionat, ca sa prinda
|
||||
stari noi adaugate in schema fara mapare corespunzatoare.
|
||||
@@ -120,8 +119,7 @@ def eticheta_stare(status: str, held: bool = False) -> Eticheta:
|
||||
|
||||
Cand `status='queued'` si `held` este adevarat, randul e tinut manual si
|
||||
intoarce eticheta "In asteptare (manual)" cu clasa de avertizare (amber /
|
||||
--warn) — vezi PRD 5.19 US-006/D5. Pentru orice alta stare `held` este
|
||||
ignorat, iar apelul fara `held` ramane identic cu cel dinainte de US-006.
|
||||
--warn). Pentru orice alta stare `held` este ignorat.
|
||||
|
||||
Arunca KeyError daca starea nu este mapata — intentionat, ca sa prinda
|
||||
stari noi adaugate in schema fara mapare corespunzatoare.
|
||||
@@ -385,7 +383,7 @@ def nota_umana_preview(status: str, errors: list, flags: list) -> str:
|
||||
|
||||
Primeste ``errors`` ca lista Python (nu JSON string) — NU pasa la motiv_uman
|
||||
sau parse_erori care asteapta un JSON string si ar produce repr Python brut
|
||||
prin fallback ``raw[:160]`` (bug documentat in PRD 5.11 US-003).
|
||||
prin fallback ``raw[:160]``.
|
||||
|
||||
Logica de prioritate:
|
||||
- already_sent / duplicate_in_file -> "" (template le afiseaza separat)
|
||||
@@ -436,7 +434,7 @@ def nota_umana_preview(status: str, errors: list, flags: list) -> str:
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Etichete mediu RAR (Test / Productie) — US-010 PRD 5.20
|
||||
# Etichete mediu RAR (Test / Productie)
|
||||
#
|
||||
# Conventia de culori (semantica risc L.142):
|
||||
# prod = env-badge-prod (fill atentie, text alb) — declaratie REALA, ireversibila.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div id="acasa-section">
|
||||
|
||||
{# === Banner ne-blocant: cont incomplet (US-002) ===
|
||||
{# === Banner ne-blocant: cont incomplet ===
|
||||
Apare cand accounts.name / email / CUI sunt necompletate (conturi legacy sau create din CLI).
|
||||
NU blocheaza importul sau uploadul — doar orienteaza operatorul sa completeze datele.
|
||||
Dispare automat dupa ce contul devine complet (re-render la urmatoarea navigare/reload).
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# === Container colapsabil: stepper + upload intr-un singur element <details> (US-006).
|
||||
{# === Container colapsabil: stepper + upload intr-un singur element <details>.
|
||||
Serverul seteaza atributul `open` din are_trimiteri:
|
||||
are_trimiteri=False (first-run) → open (importul e vizibil imediat, fara JS)
|
||||
are_trimiteri=True (returning) → colapsat (nu ocupa ecranul, dar e accesibil la click)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{#
|
||||
_auto_send_toggle.html — comutatorul "Trimite automat la RAR" (PRD 5.19 US-004).
|
||||
_auto_send_toggle.html — comutatorul "Trimite automat la RAR".
|
||||
|
||||
Plasat in clusterul de header (base.html, langa .rar-chip) — D1. NU face parte din
|
||||
swap-ul periodic al #status-bar (every 15s) -> fara flicker / pierdere focus (D3).
|
||||
Plasat in clusterul de header (base.html, langa .rar-chip). NU face parte din
|
||||
swap-ul periodic al #status-bar (every 15s) -> fara flicker / pierdere focus.
|
||||
|
||||
Non-optimist (D2): la esec POST bifa revine + toast eroare (hx-on::response-error).
|
||||
Non-optimist: la esec POST bifa revine + toast eroare (hx-on::response-error).
|
||||
account_id vine din SESIUNE server-side (ruta /auto-send), niciodata din formular.
|
||||
|
||||
Raspunsul POST re-randeaza acest fragment (outerHTML pe #auto-send-toggle-wrap):
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{#
|
||||
_bulk_held_banner.html — banner bulk "Trimite toate (N)" (PRD 5.19 US-005).
|
||||
_bulk_held_banner.html — banner bulk "Trimite toate (N)".
|
||||
|
||||
N = randuri tinute ale contului (queued AND held=1). Randat:
|
||||
- initial in _coada.html (banner_oob nesetat -> fara OOB);
|
||||
- RE-RANDAT prin OOB (banner_oob=true) din _submissions.html la FIECARE reincarcare a
|
||||
listei, ca sa nu ramana stale dupa eliberari (fix /code-review #3).
|
||||
listei, ca sa nu ramana stale dupa eliberari.
|
||||
|
||||
Wrapper cu id STABIL #bulk-held-banner-wrap: OOB outerHTML il inlocuieste mereu (chiar si
|
||||
gol la N=0), ca id-ul sa ramana tinta pentru urmatorul OOB. Confirmare tipata prin modal
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
{% set _sec_id = chips_section_id or 'chips-section' %}
|
||||
{% set _chips = prestatii_chips or [] %}
|
||||
{% set _has_ops = _chips | selectattr('cod_op_service') | list | length > 0 %}
|
||||
{# US-009: chips_submission_id e setat din _detaliu_ctx cand chips sunt randate in modalul de detaliu.
|
||||
{# chips_submission_id e setat din _detaliu_ctx cand chips sunt randate in modalul de detaliu.
|
||||
Lipseste cand _chips_prestatii.html e rerandat via /form-chips (stateless, fara submission). #}
|
||||
{% set _sub_id = chips_submission_id if chips_submission_id is defined else none %}
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
×
|
||||
</button>
|
||||
</span>
|
||||
{# US-009: "salveaza ca regula op->cod" — apare doar cand submission_id e cunoscut
|
||||
{# "salveaza ca regula op->cod" — apare doar cand submission_id e cunoscut
|
||||
(in modalul de detaliu, nu la re-randarea stateless via /form-chips).
|
||||
Reuse EXACT save_mapping + reresolve_account via endpoint dedicat.
|
||||
hx-include="closest form" propaga csrf_token din form-ul parinte. #}
|
||||
@@ -117,9 +117,9 @@
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{# ===== US-005 (5.16): Chips extra + picker '+ Adauga alta operatie / cod RAR' in mod operatii ===== #}
|
||||
{# ===== Chips extra + picker '+ Adauga alta operatie / cod RAR' in mod operatii ===== #}
|
||||
{# Chips extra: cod_op_service gol, cod_prestatie setat — afisate flat cu × (reuse remove_flat).
|
||||
T-7 (5.16): containerul .chips se randeaza DOAR cand exista chips extra — altfel ramanea
|
||||
Containerul .chips se randeaza DOAR cand exista chips extra — altfel ramanea
|
||||
un chenar gol nefinisat sub randurile de operatie. #}
|
||||
{% set _extra_chips = _chips | rejectattr('cod_op_service') | selectattr('cod_prestatie') | list %}
|
||||
{% if _extra_chips %}
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
style="margin-top:22px; padding-top:18px; border-top:2px solid var(--line);"
|
||||
{% if oob %}hx-swap-oob="outerHTML"{% endif %}>
|
||||
<div class="card">
|
||||
{# US-002 (5.16): titlul de sectiune vizibil ("Trimiterile tale") a fost eliminat —
|
||||
lista incepe direct sub filtre. Heading pastrat sr-only pentru a11y (section
|
||||
{# Titlul de sectiune vizibil ("Trimiterile tale") a fost eliminat — lista incepe
|
||||
direct sub filtre. Heading pastrat sr-only pentru a11y (section
|
||||
aria-labelledby). Badge-ul de atentie + export CSV stau intr-un rand discret. #}
|
||||
<h2 id="trimiteri-heading" class="sr-only">Trimiterile tale</h2>
|
||||
|
||||
{# US-005 (PRD 5.19): bulk "Trimite toate (N)". Randat initial aici; re-randat prin OOB
|
||||
din _submissions.html la fiecare reincarcare a listei (fix staleness /code-review #3). #}
|
||||
{# Bulk "Trimite toate (N)". Randat initial aici; re-randat prin OOB
|
||||
din _submissions.html la fiecare reincarcare a listei (evita staleness). #}
|
||||
{% include '_bulk_held_banner.html' %}
|
||||
|
||||
{% if blocate_total %}
|
||||
@@ -44,8 +44,8 @@
|
||||
<input type="hidden" id="f-status" name="status" value="{{ status_filtru | default('', true) }}">
|
||||
{# Pagina curenta — actualizata prin OOB swap din _submissions.html; inclusa la reincarcari. #}
|
||||
<input type="hidden" id="f-page" name="page" value="1">
|
||||
{# US-007 (5.19): filtrul "doar tinute" — persistat prin OOB din _submissions.html, ca sa
|
||||
nu se piarda la reincarcare (trimiteriChanged) sau paginare (fix /code-review #2). #}
|
||||
{# Filtrul "doar tinute" — persistat prin OOB din _submissions.html, ca sa
|
||||
nu se piarda la reincarcare (trimiteriChanged) sau paginare. #}
|
||||
<input type="hidden" id="f-held" name="held" value="{{ f_held | default('') }}">
|
||||
|
||||
{# === STANGA: Quick-pills de data (preset interval) + buton Custom ===
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{# _editare_preview_modal.html — fragment de editare rand preview in modalul global.
|
||||
US-006 (PRD 5.12): swap-uit in #detaliu-modal-body de butonul Editeaza din preview.
|
||||
US-007 (PRD 5.12): butonul 'Confirma valorile' apare DOAR pe randurile needs_review
|
||||
(T2): trimite CSRF POST la /confirma-review, inchide modalul via HX-Trigger-After-Settle.
|
||||
Swap-uit in #detaliu-modal-body de butonul Editeaza din preview.
|
||||
Butonul 'Confirma valorile' apare DOAR pe randurile needs_review si trimite CSRF
|
||||
POST la /confirma-review, inchide modalul via HX-Trigger-After-Settle.
|
||||
|
||||
Necesita din context:
|
||||
import_id — id batch import
|
||||
@@ -52,7 +52,7 @@
|
||||
</form>
|
||||
|
||||
{% if is_needs_review %}
|
||||
{# T2 (US-007): Butonul 'Confirma valorile' apare DOAR pe randurile needs_review.
|
||||
{# Butonul 'Confirma valorile' apare DOAR pe randurile needs_review.
|
||||
POST separat (form propriu) la /confirma-review cu CSRF. Raspunsul inchide
|
||||
modalul via HX-Trigger-After-Settle: inchideModal + swap OOB randul si countorii. #}
|
||||
<form hx-post="/_import/{{ import_id }}/rand/{{ row_index }}/confirma-review"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{# _form_editare.html — partial partajat slim: campurile vehicul/data/odo + obs + chips prestatii.
|
||||
US-007 (PRD 5.15): redesign slim cu VIN unic, Observatii textarea, chips prestatii (E4),
|
||||
si reveal dinamic odometru initial cand chips contin R-ODO/I-ODO (D10c, E6 server-driven).
|
||||
Redesign slim cu VIN unic, Observatii textarea, chips prestatii, si reveal dinamic
|
||||
odometru initial cand chips contin R-ODO/I-ODO (server-driven).
|
||||
|
||||
Inclus cu {% include "_form_editare.html" %} INSIDE un <form> element al
|
||||
template-ului parinte. Acel parinte pune form-ul, CSRF-ul si orice campuri
|
||||
@@ -36,7 +36,7 @@
|
||||
err_map=err_map, fix_map=fix_map, vin_context=vin_context) }}
|
||||
</div>
|
||||
|
||||
{# === 3. Observatii (obs) — textarea liber, US-005 === #}
|
||||
{# === 3. Observatii (obs) — textarea liber === #}
|
||||
<div class="camp-slim">
|
||||
<label for="c-obs">Observatii (operatiile efectuate)</label>
|
||||
<textarea id="c-obs" name="obs" rows="2"
|
||||
@@ -44,7 +44,7 @@
|
||||
placeholder="ex: Revizie; schimbare placute frana">{{ obs_val or '' }}</textarea>
|
||||
</div>
|
||||
|
||||
{# === 4. Prestatii chips (E4 server-driven, US-007) === #}
|
||||
{# === 4. Prestatii chips (server-driven) === #}
|
||||
{% set form_chips_url = form_chips_url or '/form-chips' %}
|
||||
{% set chips_section_id = 'chips-section' %}
|
||||
{% include "_chips_prestatii.html" %}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
{% else %}
|
||||
<span class="muted" style="font-size:12px;">doar evenimentele contului tau</span>
|
||||
{% endif %}
|
||||
{# Badge mediu RAR activ (US-010 PRD 5.20) — mediul implicit al contului #}
|
||||
{# Badge mediu RAR activ — mediul implicit al contului #}
|
||||
{% if env_default | default('') %}
|
||||
{% set _eb = eticheta_env(env_default) %}
|
||||
<span class="{{ _eb[1] }}" style="margin-left:auto;" title="Mediu RAR activ">{{ _eb[0] }}</span>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{# Macro-uri partajate intre template-urile de import si mapari. #}
|
||||
|
||||
{# US-002 (PRD 5.11): autosend_toggle neutralizat — auto_send nu mai tine randuri (US-001).
|
||||
{# autosend_toggle neutralizat — auto_send nu mai tine randuri.
|
||||
Simbolul pastrat (apelat in _mapari.html, _preview_import.html, _trimitere_detaliu.html)
|
||||
dar intoarce string gol. Coloanele DB raman (default 1, ne-citite pentru hold). #}
|
||||
{% macro autosend_toggle(form_id='', checked=True, label='') -%}{%- endmacro %}
|
||||
|
||||
{# US-005 (PRD 5.12): macro `camp` partajat — extras din _trimitere_detaliu.html si
|
||||
_preview_rand.html. Suporta tip='date' (calendar nativ, D#10/R3) si tip='text' (default).
|
||||
{# macro `camp` partajat — extras din _trimitere_detaliu.html si
|
||||
_preview_rand.html. Suporta tip='date' (calendar nativ) si tip='text' (default).
|
||||
|
||||
Parametri:
|
||||
nome — name="" al input-ului (si cheie in err_map/fix_map)
|
||||
@@ -19,14 +19,14 @@
|
||||
id_prefix — prefix pentru id="" al input-ului (default 'c'; preview poate folosi 'e-N')
|
||||
#}
|
||||
{% macro camp(nome, eticheta, valoare, tip='text', err_map={}, fix_map={}, vin_context='', id_prefix='c', slim=False, mono=False) %}
|
||||
{# slim=False: randare clasica (neschimbata). slim=True: varianta compacta (.camp-slim) din US-002 PRD 5.15:
|
||||
{# slim=False: randare clasica (neschimbata). slim=True: varianta compacta (.camp-slim):
|
||||
label 11px muted deasupra, input ~30px, fundal --card2.
|
||||
mono=True (valid numai cu slim=True): adauga clasa 'camp-mono' pe input pentru campuri
|
||||
VIN/odometru/nr (IBM Plex Mono, prin .camp-slim .camp-mono din base.html). #}
|
||||
<div {% if slim %}class="camp-slim"{% else %}style="margin-bottom:10px;"{% endif %}>
|
||||
<label for="{{ id_prefix }}-{{ nome }}"{% if not slim %} class="muted" style="font-size:12px; display:block;"{% endif %}>{{ eticheta }}</label>
|
||||
{% if tip == 'date' %}
|
||||
{# D#10/R3: degradare grijulie pentru valori ne-YYYY-MM-DD.
|
||||
{# Degradare grijulie pentru valori ne-YYYY-MM-DD.
|
||||
Daca valoarea nu e in formatul corect, inputul ramane gol + hint + hidden cu valoarea bruta
|
||||
(ca sa nu se piarda tacut la submit). #}
|
||||
{%- set _dp_ok = (valoare and valoare|length == 10 and valoare[4:5] == '-' and valoare[7:8] == '-') -%}
|
||||
@@ -57,7 +57,7 @@
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
{# PRD 5.13 — sistem butoane de actiune responsive.
|
||||
{# Sistem butoane de actiune responsive.
|
||||
CSS-ul aferent (.act, .act-tx, .act-ic, .act-save, .act-del, .act-group)
|
||||
este definit in base.html.
|
||||
Desktop: se afiseaza textul (.act-tx); mobil: se afiseaza iconita (.act-ic). #}
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<div class="muted">{{ e.denumire or '(fara denumire)' }}</div>
|
||||
</td>
|
||||
<td class="muted" style="font-size:12px;" data-eticheta="Sugestii">
|
||||
{# 5.18 US-007: badge sursa pe sugestia sistemului — confirmat (GOLD) / similar
|
||||
{# Badge sursa pe sugestia sistemului — confirmat (GOLD) / similar
|
||||
(SILVER+embedding k-NN) / non-operatie (pre-filtru NUL). Suggestion-only. #}
|
||||
{% if e.sugestie_principala %}
|
||||
{% if e.sugestie_principala.sursa == 'gold_partajat' %}
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{# Tabel mapare: coloana din fisier | exemplu | camp RAR (mockup 5.16 / US-013) #}
|
||||
{# Tabel mapare: coloana din fisier | exemplu | camp RAR #}
|
||||
<div class="tablewrap" style="margin-bottom:16px;">
|
||||
<table style="border-collapse:collapse; width:100%;">
|
||||
<thead>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{#
|
||||
_modal_confirma_trimitere.html — modal REAL de confirmare tipata (PRD 5.19 D4/F4/F5).
|
||||
_modal_confirma_trimitere.html — modal REAL de confirmare tipata.
|
||||
|
||||
`hx-confirm` nativ (doar OK/Cancel) NU e suficient pentru o actiune ireversibila care
|
||||
trimite N prezentari catre RAR. Acest modal arata numarul + mediul tinta (Testare /
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
Preview —
|
||||
<span class="muted" style="font-weight:400;">{{ filename or ("import #" ~ import_id) }}</span>
|
||||
</h2>
|
||||
{# Badge mediu RAR (US-009): vizibil intotdeauna in preview (claritate tinta) #}
|
||||
{# Badge mediu RAR: vizibil intotdeauna in preview (claritate tinta) #}
|
||||
{% if rar_env %}
|
||||
<span class="pill" style="font-size:var(--fs-xs);
|
||||
{% if rar_env == 'prod' %}background:color-mix(in srgb,#B4452F 15%,var(--card)); border-color:#B4452F; color:#B4452F; font-weight:700;
|
||||
@@ -71,7 +71,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Panou inline: operatii fara cod RAR, mapabile in flux (fara re-upload).
|
||||
US-004: un singur <form> cu un select per operatie + un singur buton Salveaza. -->
|
||||
Un singur <form> cu un select per operatie + un singur buton Salveaza. -->
|
||||
{% if unmapped_ops %}
|
||||
<div class="card" style="border-color:var(--err); background:color-mix(in srgb, var(--err) 12%, var(--card)); margin-bottom:14px;">
|
||||
<h3 style="font-size:14px; margin:0 0 6px;">Operatii de mapat la cod RAR</h3>
|
||||
@@ -98,7 +98,7 @@
|
||||
{% if e.suggestions or e.sugestie_principala or (e.surse_sugestie and e.surse_sugestie.nul) %}
|
||||
<div class="muted" style="font-size:12px; margin-top:4px;">
|
||||
sugestii:
|
||||
{# 5.18 US-007: badge sursa pe sugestia sistemului — confirmat (GOLD) / similar
|
||||
{# Badge sursa pe sugestia sistemului — confirmat (GOLD) / similar
|
||||
(SILVER+embedding k-NN) / non-operatie (pre-filtru NUL). Suggestion-only. #}
|
||||
{% if e.sugestie_principala %}
|
||||
{% if e.sugestie_principala.sursa == 'gold_partajat' %}
|
||||
@@ -134,7 +134,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- Banner discoverability (T1, US-007): vizibil cand exista randuri needs_review.
|
||||
<!-- Banner discoverability: vizibil cand exista randuri needs_review.
|
||||
Explica operatorului ca randurile cu 'Verifica valori' nu pleaca la RAR
|
||||
pana le deschide in modal si apasa 'Confirma valorile'. Dispare via OOB
|
||||
cand summary.needs_review == 0. -->
|
||||
@@ -213,7 +213,7 @@
|
||||
hx-target="#import-section"
|
||||
hx-swap="outerHTML">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token or '' }}">
|
||||
{# Mediu RAR ales la upload — propagar la commit (US-009) #}
|
||||
{# Mediu RAR ales la upload — propagar la commit #}
|
||||
<input type="hidden" name="rar_env" value="{{ rar_env or '' }}">
|
||||
<div class="sticky-bar">
|
||||
<div style="flex:1; min-width:280px;">
|
||||
@@ -285,7 +285,7 @@ din <span id="n-hint-ok">{{ summary.get('ok', 0) }}</span> gata de trimis
|
||||
}
|
||||
|
||||
/* Actualizeaza N dupa editare/confirmare rand (OOB).
|
||||
US-007: reviewed_rows (checkboxe) eliminate; N = randurile ok din DB,
|
||||
reviewed_rows (checkboxe) eliminate; N = randurile ok din DB,
|
||||
actualizate via OOB (#preview-ok-count[data-ok]) dupa /confirma-review sau /editeaza. */
|
||||
function updateN() {
|
||||
var total = getOk();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{#
|
||||
_preview_rand.html — un singur rand de preview import.
|
||||
US-006 (PRD 5.12): editarea inline (tr.preview-edit + mutual-exclusion script)
|
||||
a fost eliminata. Butonul Editeaza deschide MODALUL global (#detaliu-modal-body).
|
||||
Editarea inline (tr.preview-edit + mutual-exclusion script) a fost eliminata.
|
||||
Butonul Editeaza deschide MODALUL global (#detaliu-modal-body).
|
||||
|
||||
Parametri:
|
||||
editing — ELIMINAT (ignorat, pastrat pentru compatibilitate apeluri vechi)
|
||||
@@ -39,7 +39,7 @@
|
||||
<span class="pill {{ row.stare_css }}" style="display:inline-flex; align-items:center; gap:5px;"
|
||||
{% if _nota %}title="{{ _nota }}"{% endif %}>
|
||||
<span aria-hidden="true" style="display:inline-block; width:7px; height:7px; border-radius:99px; background:currentColor; flex-shrink:0;"></span>{{ row.stare_eticheta }}</span>
|
||||
{# Badge mediu RAR (US-010 PRD 5.20) — rar_env disponibil din contextul batch-ului. #}
|
||||
{# Badge mediu RAR — rar_env disponibil din contextul batch-ului. #}
|
||||
{% if rar_env | default('') %}
|
||||
{% set _eb = eticheta_env(rar_env) %}
|
||||
<div style="margin-top:3px;"><span class="{{ _eb[1] }}">{{ _eb[0] }}</span></div>
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# === US-007 (PRD 5.19): banner coada tinuta imbatranita — mitigare OBLIGATORIE pt. default OFF.
|
||||
{# Banner coada tinuta imbatranita — mitigare pt. default OFF.
|
||||
Cand exista randuri `queued AND held=1` mai vechi de held_aged_days, semnalul de conformitate
|
||||
L.142 (declarare obligatorie). Derivat (zero stare noua), varsta pe created_at.
|
||||
Prioritate bannere (D7 — un-singur-banner "notice", ca sa nu impinga contoarele sub fold pe
|
||||
Prioritate bannere (un-singur-banner "notice", ca sa nu impinga contoarele sub fold pe
|
||||
mobil): cont inactiv (sus) + strip RAR jos raman separate; intre notice-uri, held-aged >
|
||||
trial (risc legal > notita trial) -> trial e suprimat cand held-aged e activ. #}
|
||||
{% set _held_aged_activ = (held_aged_count|default(0) > 0) and account_active %}
|
||||
@@ -40,7 +40,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# US-006 (5.17) — Banner one-time trial->Gratuit (T-DES-1): afisat la prima incarcare
|
||||
{# Banner one-time trial->Gratuit: afisat la prima incarcare
|
||||
dupa expirarea trial-ului. Discret, non-blocant; dismissibil via sessionStorage.
|
||||
Nu acopera stripul de sanatate (apare inainte de health strip, la acelasi nivel). #}
|
||||
{% if trial_expirat_recent|default(false) and not _held_aged_activ %}
|
||||
@@ -60,7 +60,7 @@
|
||||
<script>(function(){ if(sessionStorage.getItem('tfx')){ var el=document.getElementById('banner-trial-expirat'); if(el) el.style.display='none'; } })();</script>
|
||||
{% endif %}
|
||||
|
||||
{# === US-003 (PRD 5.16): Banda de stare RAR — NUMAI cand BLOCAT (rosu, lat de 100%).
|
||||
{# === Banda de stare RAR — NUMAI cand BLOCAT (rosu, lat de 100%).
|
||||
OK = dot verde in antet (base.html); banda nu mai apare cand totul e ok.
|
||||
Elementul id="strip-sanatate" ramane in DOM mereu, dar goleste continutul cand OK,
|
||||
astfel "hidden" + fara continut eroare in sursa = nu pica testele de prezenta id-ului.
|
||||
@@ -84,7 +84,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# === US-002 (PRD 5.16): 5 carduri-contor separate (desktop) + bara compacta (mobil <=560px).
|
||||
{# === 5 carduri-contor separate (desktop) + bara compacta (mobil <=560px).
|
||||
Total / Luna asta / Azi / In coada / De corectat.
|
||||
#}
|
||||
{# Desktop: 5 carduri side-by-side. display:flex + layout stau in CSS (.contoare-desktop in
|
||||
@@ -109,7 +109,7 @@
|
||||
<div class="contor-label">Azi</div>
|
||||
</div>
|
||||
|
||||
{# In coada — contorul "In asteptare (manual)" se pliaza aici (US-006/D6): nu adaugam a 6-a
|
||||
{# In coada — contorul "In asteptare (manual)" se pliaza aici: nu adaugam a 6-a
|
||||
celula, ci o sub-linie amber cand exista randuri tinute (queued AND held=1). #}
|
||||
<div class="contor-card" style="flex:1; min-width:80px;">
|
||||
<div class="contor-cifra s-queued">{{ counts_queued }}</div>
|
||||
@@ -156,11 +156,11 @@
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{# === US-011 (5.20): Indicator mediu RAR activ per cont.
|
||||
{# === 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).
|
||||
US-010: culori prin eticheta_env/clase .env-badge-* (consistenta cu badge-urile din liste).
|
||||
Culori prin eticheta_env/clase .env-badge-* (consistenta cu badge-urile din liste).
|
||||
#}
|
||||
{% set _medii = medii_disponibile | default([]) %}
|
||||
{% set _env = env_default | default('prod') %}
|
||||
@@ -194,7 +194,7 @@
|
||||
{% endif %}
|
||||
|
||||
{# === Navigatie rapida: Trimiteri + Mapari cu badge needs_mapping ===
|
||||
Pastrata exact ca inainte (US-005): tab_activ determina marcajul activ.
|
||||
Pastrata exact ca inainte: tab_activ determina marcajul activ.
|
||||
#}
|
||||
{% set _tab = tab_activ | default('acasa') %}
|
||||
<nav class="status-nav" aria-label="Navigatie rapida"
|
||||
@@ -207,7 +207,7 @@
|
||||
class="status-nav-link{% if _tab == 'mapari' %} status-nav-activ{% endif %}">Mapari{% if mapari_badge %}<span class="tab-badge" aria-hidden="true" style="display:inline-flex; align-items:center; justify-content:center; min-width:16px; height:16px; margin-left:4px; padding:0 4px; border-radius:99px; background:var(--err); color:#fff; font-size:11px; font-weight:700;">{{ mapari_badge }}</span>{% endif %}</a>
|
||||
</nav>
|
||||
|
||||
{# US-006 (5.17) + T-6 (5.16): linia de plan in CORP apare DOAR in starea de avertizare
|
||||
{# Linia de plan in CORP apare DOAR in starea de avertizare
|
||||
(>=80% -> --warn; limita atinsa -> --err). Consumul normal (N/60) traieste in badge-ul
|
||||
din antet + linia din meniul burger, nu ca rand permanent in corp (densitate redusa).
|
||||
Ierarhie: nu concureaza cu stripul de sanatate (zero-silent-failures pastrat). #}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{#
|
||||
_stepper.html — Antet wizard import COMPACT (PUR vizual). PRD 5.13.
|
||||
_stepper.html — Antet wizard import COMPACT (PUR vizual).
|
||||
Parametru: `pas` (integer 1-4). Clasele .stepper-* sunt definite in base.html.
|
||||
>=1024px: bara slim orizontala (.stepper-track). <1024px: forma colapsata
|
||||
"Pasul N din 4 - Titlu" + bara de progres (.stepper-collapsed).
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<input type="hidden" id="f-page" name="page" value="{{ page | default(1) }}" hx-swap-oob="true">
|
||||
|
||||
{# OOB: sincronizeaza filtrul "doar tinute" (#f-held) cu starea randata acum, ca reincarcarile
|
||||
(trimiteriChanged / paginare) sa-l pastreze in loc sa revina la lista completa (/code-review #2). #}
|
||||
(trimiteriChanged / paginare) sa-l pastreze in loc sa revina la lista completa. #}
|
||||
<input type="hidden" id="f-held" name="held" value="{{ f_held | default('') }}" hx-swap-oob="true">
|
||||
|
||||
{# OOB: banner bulk "Trimite toate (N)" re-randat la fiecare reincarcare a listei (fix staleness). #}
|
||||
@@ -20,7 +20,7 @@
|
||||
<span id="trimiteri-versiune" data-v="{{ versiune_trimiteri | default('') }}" hidden></span>
|
||||
|
||||
{% if bulk_message %}
|
||||
{# Sumar actiune bulk (US-010 PRD 5.15): afisat dupa bulk-fix, disparut la urmatoarea reincarcare. #}
|
||||
{# Sumar actiune bulk: afisat dupa bulk-fix, disparut la urmatoarea reincarcare. #}
|
||||
<div class="bulk-message" role="status" aria-live="polite"
|
||||
style="font-size:13px; color:var(--ink); background:var(--card2);
|
||||
border:1px solid var(--line); border-radius:6px;
|
||||
@@ -29,8 +29,8 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# US-007 (5.19): chip filtru activ "doar tinute" cu buton de golire (fix /code-review #2 —
|
||||
filtrul held e sticky prin OOB, deci ii dam un off-switch explicit). #}
|
||||
{# Chip filtru activ "doar tinute" cu buton de golire — filtrul held e sticky
|
||||
prin OOB, deci ii dam un off-switch explicit. #}
|
||||
{% if f_held %}
|
||||
<div style="display:flex; align-items:center; gap:8px; margin-bottom:8px; font-size:var(--fs-sm);">
|
||||
<span style="display:inline-flex; align-items:center; gap:6px; padding:2px 10px; border-radius:99px;
|
||||
@@ -47,7 +47,7 @@
|
||||
{% endif %}
|
||||
|
||||
{% if rows %}
|
||||
{# Form bulk cu DOUA actiuni: (1) aplica cod RAR la selectate (bulk-fix, US-010),
|
||||
{# Form bulk cu DOUA actiuni: (1) aplica cod RAR la selectate (bulk-fix),
|
||||
(2) sterge selectate (sterge-bulk). Selectia opereaza DOAR pe randuri blocate
|
||||
(gestionabil); sent/sending/queued nu au checkbox (read-only).
|
||||
Butonul "Aplica cod" foloseste hx-post propriu (override form action).
|
||||
@@ -62,7 +62,7 @@
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<div style="display:flex; justify-content:flex-end; align-items:center;
|
||||
gap:6px; margin-bottom:8px; flex-wrap:wrap;">
|
||||
{# Bulk-fix: input cod + buton aplica (US-010 PRD 5.15) #}
|
||||
{# Bulk-fix: input cod + buton aplica #}
|
||||
<input type="text" name="cod_prestatie" id="bulk-fix-cod"
|
||||
placeholder="Cod RAR (ex: OE-1)"
|
||||
autocomplete="off" autocapitalize="characters"
|
||||
@@ -89,7 +89,7 @@
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{# Lista slim trimiteri (US-004, PRD 5.15).
|
||||
{# Lista slim trimiteri.
|
||||
Inlocuieste tabelul cu randuri compacte: VIN mono + operatie·ora + pill.
|
||||
Nr. inmatriculare, data prestatie si nr. prezentare RAR raman accesibile
|
||||
pe linia meta discreta (linia 3) si in modalul de detaliu. #}
|
||||
@@ -160,14 +160,14 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{# Zona dreapta: pill stare + badge mediu RAR (US-010 PRD 5.20) + buton Trimite (US-005) #}
|
||||
{# Zona dreapta: pill stare + badge mediu RAR + buton Trimite #}
|
||||
<div style="flex:0 0 auto; display:flex; flex-direction:column; align-items:flex-end; gap:3px; white-space:nowrap;">
|
||||
<span class="pill {{ r.stare_css }}" title="{{ r.stare_text }}">{{ r.stare_scurt }}</span>
|
||||
{% if r.rar_env %}
|
||||
{% set _eb = eticheta_env(r.rar_env) %}
|
||||
<span class="{{ _eb[1] }}">{{ _eb[0] }}</span>
|
||||
{% endif %}
|
||||
{# US-005 (PRD 5.19 / D6): buton "Trimite" DOAR pe randurile tinute (queued AND held=1).
|
||||
{# Buton "Trimite" DOAR pe randurile tinute (queued AND held=1).
|
||||
Afordanta dedicata cu stopPropagation (randul e role=button) — NU declanseaza modalul
|
||||
de detaliu. Confirmare 1-linie prin hx-confirm (per rand); ireversibilitate in microcopy. #}
|
||||
{% if r.tinut %}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
{% set cod_afis = prez.cod_rar if (prez.cod_rar and prez.cod_rar != '—') else 'nemapat' %}
|
||||
<div class="card" id="detaliu-card-{{ id }}" style="border:none; padding:0; margin:0;">
|
||||
|
||||
{# === Header — #id + pill stare + badge mediu RAR (US-010 PRD 5.20) + motiv === #}
|
||||
{# === Header — #id + pill stare + badge mediu RAR + motiv === #}
|
||||
<div style="display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 8px;">
|
||||
<h2 id="detaliu-modal-titlu" style="font-size:15px; margin:0;">Detaliu trimitere #{{ id }}</h2>
|
||||
<span class="pill {{ stare_css }}">{{ stare_text }}</span>
|
||||
@@ -110,14 +110,13 @@
|
||||
hx-disabled-elt="find button">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
|
||||
{# Cleanup B (US-009 PRD 5.15): vechiul <select name="cod_prestatie"> eliminat.
|
||||
Chips din _form_editare.html (via _chips_prestatii.html) il inlocuiesc complet:
|
||||
emit hidden inputs name="cod_prestatie" + picker per-operatie (E4, US-007).
|
||||
{# Vechiul <select name="cod_prestatie"> eliminat. Chips din _form_editare.html
|
||||
(via _chips_prestatii.html) il inlocuiesc complet: emit hidden inputs
|
||||
name="cod_prestatie" + picker per-operatie.
|
||||
post_corectie_trimitere foloseste form.getlist("cod_prestatie") → compatibil. #}
|
||||
|
||||
{# Operatie service (cod intern + denumire venita prin API/import), distinct de
|
||||
operatia RAR mapata. op_service_cod="" cand lipseste → randul absent.
|
||||
RAMANE in _trimitere_detaliu.html (D#5). #}
|
||||
operatia RAR mapata. op_service_cod="" cand lipseste → randul absent. #}
|
||||
{% if prez.op_service_cod %}
|
||||
<div style="margin:0 0 12px;">
|
||||
<div class="muted" style="font-size:12px;">Operatie service</div>
|
||||
@@ -125,7 +124,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# === Campurile vehicul/data/odo + erori/fix + buton — partial DRY (US-005). === #}
|
||||
{# === Campurile vehicul/data/odo + erori/fix + buton — partial DRY. === #}
|
||||
{% include "_form_editare.html" %}
|
||||
</form>
|
||||
{% else %}
|
||||
@@ -150,7 +149,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# === Rand tinut manual (queued AND held=1) — afordanta de eliberare (US-005/US-010, 5.19).
|
||||
{# === Rand tinut manual (queued AND held=1) — afordanta de eliberare.
|
||||
Buton dedicat „Trimite acum": elibereaza randul (held 1->0); worker-ul il preia la
|
||||
urmatorul poll. Reincarca lista + inchide modalul. Confirmare 1-linie (ireversibil). === #}
|
||||
{% if tinut %}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<meta name="description" content="Încarci fișierul tău cu operațiile service-ului, completezi o dată codurile RAR și le salvezi. ROMFAST trimite prestațiile la RAR AUTOPASS în locul tău, fără tastat manual. Conform Legii 142/2023.">
|
||||
<style>
|
||||
|
||||
/* US-001/US-008 (PRD 5.16): IBM Plex eliminat complet — stive font sistem standard web.
|
||||
/* IBM Plex eliminat complet — stive font sistem standard web.
|
||||
Tokenurile --font-ui / --font-mono definite in :root (sursa unica de adevar). */
|
||||
:root{--font-ui:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--font-mono:ui-monospace,"SF Mono","Cascadia Code","Segoe UI Mono","Roboto Mono",Menlo,Consolas,monospace;}
|
||||
*{box-sizing:border-box;}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{% block title %}Autentificare — ROA AUTOPASS{% endblock %}
|
||||
{% block content %}
|
||||
{# /login — card de autentificare branduit, o singura coloana (simplificat din layout-ul
|
||||
2-coloane US-010 PRD 5.16). Formular: CSRF, POST /login, link signup. #}
|
||||
2-coloane). Formular: CSRF, POST /login, link signup. #}
|
||||
<div class="login-2col" style="max-width:860px; margin:32px auto;">
|
||||
{# Antet minimal deja randat in base.html (fara RAR dot, fara burger, fara account_name) #}
|
||||
<div class="login-shell">
|
||||
|
||||
Reference in New Issue
Block a user