{# OOB: actualizeaza inputul id="f-page" din #filtre-trimiteri. Reincarcarea (hx-include="#filtre-trimiteri") preia automat pagina curenta. Elementul OOB e extras din continutul normal de HTMX inainte de swap in #submissions-wrap. #} {# 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. #} {# OOB: banner bulk "Trimite toate (N)" re-randat la fiecare reincarcare a listei (fix staleness). #} {% with banner_oob = true %}{% include '_bulk_held_banner.html' %}{% endwith %} {# OOB: re-randeaza pill-urile de stare (in bara de filtre, in afara #submissions-wrap) cu contoarele si starea activa proaspete la fiecare reincarcare a tabelului. #} {% include '_pills.html' %} {# Versiunea datelor cu care s-a randat tabelul; pollerul "Date noi" o compara. #} {% if bulk_message %} {# Sumar actiune bulk: afisat dupa bulk-fix, disparut la urmatoarea reincarcare. #}
{{ bulk_message }}
{% endif %} {# 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 %}
Doar tinute manual
{% endif %} {% if rows %} {# 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). hx-disinherit="hx-confirm" pe form => butonul aplica-cod NU mosteneste confirmare. #}
{# Bara contextuala bulk (5.22): randata inactiva (ascunsa prin CSS), afisata de JS (base.html) cand >= 1 checkbox e bifat. Contoarele .bulk-n / .bulk-n-txt sunt actualizate client-side. Endpoint-urile si CSRF raman neschimbate; "Sterge" pastreaza hx-confirm-ul form-ului, "Aplica" e exclus (hx-disinherit). #}
Aplica codul RAR doar operatiilor fara cod din randurile selectate, apoi le repune in coada.
{# Tabel compact trimiteri (grid CSS, PRD 5.22). Desktop: un rand per trimitere sub un header de coloane; status = bulina cu tooltip, mediu = litera T/P, multi-cod = primul cod + badge +N. Mobil (max-width:767px): header ascuns, randul revine la 2 linii (placuta / cod·operatie·data) cu litera + bulina in dreapta. #}
{# Paginare numerotata. Afisata doar cand exista mai mult de o pagina. Fiecare link pastreaza filtrele curente (status, vehicul, data_de, data_pana). Pagina curenta: aria-current="page" (semantic). #} {% if total is defined %}
{% if total == 0 %} 0 trimiteri {% else %} {{ page_start }}–{{ page_end }} din {{ total }} {% endif %}
{% endif %} {% if pages is defined and pages > 1 %} {# Construim param-string pentru filtrele curente (fara page) — refolosit in fiecare link. Filtrul status vine din pill-uri (nu din form); il pastram in URL. #} {% set pq = "" %} {% if f_status %}{% set pq = pq + "&status=" + f_status %}{% endif %} {% if f_vehicul %}{% set pq = pq + "&vehicul=" + f_vehicul %}{% endif %} {% if f_data_de %}{% set pq = pq + "&data_de=" + f_data_de %}{% endif %} {% if f_data_pana %}{% set pq = pq + "&data_pana=" + f_data_pana %}{% endif %} {% if f_held %}{% set pq = pq + "&held=" + f_held %}{% endif %} {% endif %} {% elif filtru_activ %}
Nimic pe filtrul curent. sterge filtrele
{% else %}
Nicio trimitere inca — incepe cu un import sau trimite o prezentare prin API.
{% endif %}