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:
Claude Agent
2026-07-07 12:27:42 +00:00
parent 6674d0e3e1
commit 5a2c976d46
17 changed files with 912 additions and 169 deletions

View File

@@ -212,3 +212,23 @@ def test_fara_operatie_service_cand_lipseste():
d4 = prezentare_din_payload("nu-e-json")
assert d4["op_service_cod"] == ""
assert d4["op_service_denumire"] == ""
def test_coduri_rar_lista_ordonata_dedup():
from app.payload_view import prezentare_din_payload
p = prezentare_din_payload({
"vin": "WVWZZZ1JZXW000111",
"prestatii": [
{"cod_prestatie": "OE-1", "cod_op_service": "A"},
{"cod_prestatie": "oe-2", "cod_op_service": "B"},
{"cod_prestatie": "OE-1", "cod_op_service": "C"}, # duplicat
{"cod_op_service": "D"}, # nemapat, fara cod
],
})
assert p["coduri_rar"] == ["OE-1", "OE-2"]
def test_coduri_rar_gol_fara_prestatii():
from app.payload_view import prezentare_din_payload
assert prezentare_din_payload({"vin": "X"})["coduri_rar"] == []
assert prezentare_din_payload(None)["coduri_rar"] == []