feat(web): UI compact Trimiteri + bara bulk contextuala + fix buton "+" editor (PRD 5.22)
Trimiteri desktop = tabel grid cu header, un rand per trimitere: status = bulina cu tooltip, mediu = litera T/P, multi-cod = primul cod + badge +N, sub-linie de eroare cu textul brut RAR doar pe error/needs_data. Mobil: 2 linii prin grid-areas, fara header. Actiunile bulk apar doar la selectie (bara contextuala cu contor + texte explicite). Mapari: exemplu concret in loc de descriere la Reguli automate. Fix buton "+" chips (nu facea nimic, fara eroare): hx-disabled-elt="find button" mostenit de la form-ul parinte crapa htmx inainte de request -> hx-disabled-elt="this" explicit pe butoanele chips; separat, no-op-urile silentioase din post_form_chips au acum mesaje (cod invalid/duplicat) si confirmare cu chip evidentiat la succes. Suita: 1622 passed. Verify E2E in browser (desktop 1280 + mobil 390). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -59,6 +59,19 @@ def _vin_scurt(vin: str) -> str:
|
||||
return "…" + vin[-6:]
|
||||
|
||||
|
||||
def _coduri_rar(prestatii: Any) -> list[str]:
|
||||
"""Codurile RAR (cod_prestatie) din toate prestatiile: ordonate, dedup."""
|
||||
coduri: list[str] = []
|
||||
if isinstance(prestatii, list):
|
||||
for item in prestatii:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
cod = _clean_cod_rar(item.get("cod_prestatie"))
|
||||
if cod and cod not in coduri:
|
||||
coduri.append(cod)
|
||||
return coduri
|
||||
|
||||
|
||||
def _prima_prestatie(prestatii: Any) -> dict[str, Any]:
|
||||
"""Primul item de prestatie ca dict, defensiv (lista goala/non-dict -> {})."""
|
||||
if isinstance(prestatii, list):
|
||||
@@ -83,10 +96,11 @@ def _payload_dict(payload: str | dict | None) -> dict[str, Any]:
|
||||
return {}
|
||||
|
||||
|
||||
def prezentare_din_payload(payload: str | dict | None) -> dict[str, str]:
|
||||
def prezentare_din_payload(payload: str | dict | None) -> dict[str, Any]:
|
||||
"""Campuri afisabile dintr-un payload de submission.
|
||||
|
||||
Intoarce un dict cu chei stabile (toate string-uri, EMPTY cand lipsesc):
|
||||
Intoarce un dict cu chei stabile (string-uri, EMPTY cand lipsesc; exceptie
|
||||
`coduri_rar` = list[str]):
|
||||
vehicul_nr, vin, vin_scurt, operatie, data_prestatie, odometru, cod.
|
||||
|
||||
`operatie` = denumire prestatiei daca exista, altfel codul; `cod` = codul RAR
|
||||
@@ -138,6 +152,9 @@ def prezentare_din_payload(payload: str | dict | None) -> dict[str, str]:
|
||||
"odometru": odo or EMPTY,
|
||||
"cod": cod or EMPTY,
|
||||
"cod_rar": cod_rar or EMPTY,
|
||||
# Lista ordonata, fara duplicate, a codurilor RAR din TOATE prestatiile
|
||||
# (goala cand nimic nu e mapat). Randul compact afiseaza primul + "+N".
|
||||
"coduri_rar": _coduri_rar(data.get("prestatii")),
|
||||
# Chei cu conventie goala "" (nu EMPTY) — vezi comentariu de mai sus
|
||||
"op_service_cod": op_service_cod,
|
||||
"op_service_denumire": op_service_denumire,
|
||||
|
||||
Reference in New Issue
Block a user