Reguli text per cont (operation_text_rules), resolve_prestatii cu param aditiv text_rules + precedenta stricta, threadat pe toate cele 6 callsite-uri + valid_codes + seam classify_prezentare. UI Mapari: sectiune reguli + preview pre-salvare + overlap + telemetrie text_rule_hit. UX tabel: cod_rar sub operatie, pill eticheta scurta, fara scroll orizontal (scopat .tabel-trimiteri + carduri <768px), detaliu inline expandabil (a11y + pauza poll). code-review: reparat regula auto_send=0 care trimitea automat la RAR in loc sa tina randul pentru review. 814 passed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
105 lines
4.2 KiB
HTML
105 lines
4.2 KiB
HTML
{% if rows %}
|
|
{# US-011: form de stergere bulk. Selectia opereaza DOAR pe randuri blocate
|
|
(gestionabil); sent/sending/queued nu au checkbox (read-only). #}
|
|
<form id="bulk-trimiteri"
|
|
hx-post="/trimiteri/sterge-bulk"
|
|
hx-target="#submissions-wrap"
|
|
hx-swap="innerHTML"
|
|
hx-confirm="Stergi definitiv trimiterile selectate?"
|
|
hx-disinherit="hx-confirm"
|
|
style="margin:0;">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<div style="display:flex; justify-content:flex-end; margin-bottom:8px;">
|
|
<button type="submit" id="bulk-sterge-btn"
|
|
style="background:var(--card); color:var(--err); border-color:var(--err); font-size:13px; padding:4px 10px;">
|
|
Sterge selectate
|
|
</button>
|
|
</div>
|
|
<div class="tablewrap tabel-trimiteri">
|
|
<table>
|
|
<thead><tr>
|
|
<th class="col-chk"><span class="muted" title="Selecteaza randuri blocate">✓</span></th>
|
|
<th class="col-id">#</th>
|
|
<th class="col-stare">Stare</th>
|
|
<th class="col-vehicul">Vehicul</th>
|
|
<th class="col-operatie">Operatie</th>
|
|
<th class="col-data">Data prestatie</th>
|
|
<th class="col-rar">Nr. prezentare RAR</th>
|
|
<th class="col-actualizat">Actualizat</th>
|
|
</tr></thead>
|
|
<tbody>
|
|
{% for r in rows %}
|
|
{# US-008: detaliul apare ca rand-sibling expandabil SUB acest rand (#detaliu-{id}),
|
|
nu in panoul global de la baza. Randul e clickabil/focusabil (toggle prin JS in
|
|
base.html: single-open + pauza poll). #}
|
|
<tr id="trimitere-row-{{ r.id }}"
|
|
class="trimitere-row"
|
|
data-detaliu-id="{{ r.id }}"
|
|
hx-get="/_fragments/trimitere/{{ r.id }}"
|
|
hx-target="#detaliu-{{ r.id }}"
|
|
hx-swap="innerHTML"
|
|
hx-indicator="#ind-{{ r.id }}"
|
|
role="button" tabindex="0" aria-expanded="false"
|
|
aria-controls="detaliu-{{ r.id }}"
|
|
style="cursor:pointer;"
|
|
title="Click pentru detaliul complet">
|
|
<td class="col-chk" onclick="event.stopPropagation();">
|
|
{% if r.gestionabil %}
|
|
<input type="checkbox" name="submission_id" value="{{ r.id }}"
|
|
aria-label="Selecteaza trimiterea #{{ r.id }} pentru stergere">
|
|
{% endif %}
|
|
</td>
|
|
<td class="col-id muted" data-eticheta="#">
|
|
<span class="chevron" aria-hidden="true">▸</span>{{ r.id }}</td>
|
|
<td class="col-stare" data-eticheta="Stare">
|
|
<span class="pill {{ r.stare_css }}" title="{{ r.stare_text }}">{{ r.stare_scurt }}</span>
|
|
</td>
|
|
<td class="col-vehicul" data-eticheta="Vehicul">
|
|
{{ r.prez.vehicul_nr }}
|
|
{% if r.prez.vin_scurt and r.prez.vin_scurt != '—' %}
|
|
<span class="muted" style="font-size:12px;">{{ r.prez.vin_scurt }}</span>
|
|
{% endif %}
|
|
</td>
|
|
<td class="col-operatie" data-eticheta="Operatie">
|
|
<div>{{ r.prez.operatie }}</div>
|
|
{% if r.prez.cod_rar and r.prez.cod_rar != '—' %}
|
|
<div class="muted cod-rar-sub">cod RAR: {{ r.prez.cod_rar }}</div>
|
|
{% else %}
|
|
<div class="muted cod-rar-sub">nemapat</div>
|
|
{% endif %}
|
|
</td>
|
|
<td class="col-data" data-eticheta="Data prestatie">{{ r.prez.data_prestatie }}</td>
|
|
<td class="col-rar" data-eticheta="Nr. prezentare RAR">{{ r.id_prezentare or '—' }}</td>
|
|
<td class="col-actualizat muted" data-eticheta="Actualizat">{{ r.updated_at }}</td>
|
|
</tr>
|
|
{# US-008: rand-sibling de detaliu, ascuns pana la deschidere. Placeholder „Se
|
|
incarca…" prin hx-indicator cat raspunde HTMX. #}
|
|
<tr class="detaliu-rand" hidden>
|
|
<td colspan="8">
|
|
<span id="ind-{{ r.id }}" class="htmx-indicator muted"
|
|
style="padding:8px 4px;">Se incarca…</span>
|
|
<div id="detaliu-{{ r.id }}"></div>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</form>
|
|
{% elif filtru_activ %}
|
|
<div class="empty">
|
|
Nimic pe filtrul curent.
|
|
<a href="#"
|
|
onclick="var f=document.getElementById('filtre-trimiteri'); if(f) f.reset(); return true;"
|
|
hx-get="/_fragments/submissions" hx-target="#submissions-wrap" hx-swap="innerHTML">
|
|
sterge filtrele
|
|
</a>
|
|
</div>
|
|
{% else %}
|
|
<div class="empty">
|
|
Nicio trimitere inca —
|
|
<a href="/?tab=acasa">incepe cu un import</a>
|
|
sau trimite o prezentare prin API.
|
|
</div>
|
|
{% endif %}
|