8 stories TDD (echipa Sonnet, lead orchestreaza). US-001 scoate hold-ul auto_send din mapare (has_no_auto_send->False, simbol pastrat; cod rezolvat->queued). US-002 scoate bifa auto_send din UI. US-003 preview pas 3 in format .tabel-trimiteri (STARI_PREVIEW + nota_umana_preview, fara repr Python; view-model prez). US-004 filtre layout/stil ca referinta + buton Custom. US-005 navigatie Trimiteri/Mapari sub contoare pe toate paginile. US-006 import <details> nativ colapsabil. US-007 post-commit reveal (OOB _coada/_status + HX-Trigger). US-008 auto-refresh dupa actiuni (nudge eliminat). VERIFY context curat PASS (8/8). /code-review high: 3 buguri reparate (tab nav la self-refresh, pill Custom valori stale, nota_umana_preview precedenta needs_mapping). 934 passed, 1 skipped. Backend trimitere + schema NEATINSE. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
92 lines
5.2 KiB
HTML
92 lines
5.2 KiB
HTML
{#
|
|
_coada.html — sectiunea "Trimiterile tale" inclusa pe Acasa, sub zona de upload.
|
|
Filtre + tabel (_submissions.html); detaliul se deschide in modalul global (#modal-detaliu).
|
|
#}
|
|
<section id="trimiteri-section" aria-labelledby="trimiteri-heading"
|
|
style="margin-top:22px; padding-top:18px; border-top:2px solid var(--line);"
|
|
{% if oob %}hx-swap-oob="outerHTML"{% endif %}>
|
|
<div class="card">
|
|
<div style="display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 12px;">
|
|
<h2 id="trimiteri-heading" style="font-size:15px; margin:0;">
|
|
Trimiterile tale
|
|
{% if blocate_total %}
|
|
<span class="tab-badge" title="{{ blocate_total }} necesita atentie"
|
|
style="display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; margin-left:6px; padding:0 5px; border-radius:99px; background:var(--err); color:#fff; font-size:11px; font-weight:700;">{{ blocate_total }}</span>
|
|
{% endif %}
|
|
</h2>
|
|
<span style="margin-left:auto; display:flex; gap:8px; flex-wrap:wrap;">
|
|
<a class="cardlink" href="/v1/audit/export?status=sent" download>export CSV: trimise</a>
|
|
<a class="cardlink" href="/v1/audit/export?status=all" download>toate</a>
|
|
</span>
|
|
</div>
|
|
|
|
<!-- Bara de filtre: [quick-pills data STANGA] [cautare vehicul MIJLOC] [pills stare DREAPTA].
|
|
Pill-urile de stare scriu campul hidden status si re-trimit form-ul (filtreazaStare).
|
|
Quick-pills de data apeleaza setDataRange -> seteaza data_de/data_pana + re-submit. -->
|
|
<form id="filtre-trimiteri"
|
|
hx-get="/_fragments/submissions"
|
|
hx-target="#submissions-wrap"
|
|
hx-swap="innerHTML"
|
|
hx-trigger="submit, change, keyup delay:400ms from:input[name='vehicul']"
|
|
style="display:flex; gap:8px 12px; flex-wrap:wrap; align-items:center; margin-bottom:12px;">
|
|
<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">
|
|
|
|
{# === STANGA: Quick-pills de data (preset interval) + buton Custom ===
|
|
Azi / 7 zile / 30 zile → seteaza interval preset si submitr automat.
|
|
Custom → dezvaluie #custom-date-fields pentru introducere manuala (fara submit automat). #}
|
|
<div style="flex:0 0 auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap;">
|
|
<div class="pills-categorii" id="quick-date-pills">
|
|
<button type="button" class="pill-cat pill-data" data-range="azi"
|
|
aria-pressed="false"
|
|
onclick="setDataRange(this,'azi')">Azi</button>
|
|
<button type="button" class="pill-cat pill-data" data-range="7zile"
|
|
aria-pressed="false"
|
|
onclick="setDataRange(this,'7zile')">7 zile</button>
|
|
<button type="button" class="pill-cat pill-data" data-range="30zile"
|
|
aria-pressed="false"
|
|
onclick="setDataRange(this,'30zile')">30 zile</button>
|
|
<button type="button" class="pill-cat pill-data" data-range="custom"
|
|
aria-pressed="false"
|
|
onclick="setDataRange(this,'custom')">Custom</button>
|
|
</div>
|
|
{# Campuri de data pentru modul Custom: ascunse pana la click pe „Custom".
|
|
type="date" (nu hidden) permite interactiunea utilizatorului.
|
|
Campul change pe form re-incarca automat lista via hx-trigger="change". #}
|
|
<div id="custom-date-fields"
|
|
style="display:none; gap:4px; align-items:center; flex-wrap:wrap; font-size:13px;">
|
|
<label for="f-data-de" class="muted" style="font-size:12px; white-space:nowrap;">De:</label>
|
|
<input type="date" id="f-data-de" name="data_de" value=""
|
|
style="font-size:13px; max-width:140px;">
|
|
<label for="f-data-pana" class="muted" style="font-size:12px; white-space:nowrap;">Pana:</label>
|
|
<input type="date" id="f-data-pana" name="data_pana" value=""
|
|
style="font-size:13px; max-width:140px;">
|
|
</div>
|
|
</div>
|
|
|
|
{# === MIJLOC: cautare vehicul (nr/VIN) + buton Filtreaza === #}
|
|
<div style="display:flex; align-items:center; gap:8px; flex:1 1 auto; min-width:160px; flex-wrap:wrap;">
|
|
<input id="f-vehicul" type="text" name="vehicul" placeholder="Vehicul (nr/VIN)"
|
|
style="flex:1 1 auto; min-width:120px;">
|
|
<button type="submit" style="flex:0 0 auto;">Filtreaza</button>
|
|
</div>
|
|
|
|
{# === DREAPTA: pill-uri de stare cu contoare; re-randate via OOB la reincarcarea tabelului === #}
|
|
<span id="pills-categorii" class="pills-categorii" style="margin-left:auto; flex:0 0 auto;">
|
|
{% include '_pills.html' %}
|
|
</span>
|
|
</form>
|
|
|
|
<!-- Tabelul se reincarca la: incarcarea paginii, actiunile tale (trimiteriChanged)
|
|
si auto-refresh periodic din poller (date noi externe). -->
|
|
<div id="submissions-wrap"
|
|
hx-get="/_fragments/submissions"
|
|
hx-trigger="load, trimiteriChanged from:body, reincarcaTrimiteri"
|
|
hx-include="#filtre-trimiteri" hx-swap="innerHTML">
|
|
<div class="empty">se incarca…</div>
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|