Implementeaza PRD 3.6 (US-001..007), pe canalul de import + stratul web;
worker / masina stari / idempotenta / mapare raman neatinse.
- US-003/004: tab-ul "Trimiteri" eliminat; Trimiterile devin sectiune
permanenta sub upload pe Acasa ("Trimiterile tale"); upload comprimat la
bara slim (hero pastrat la first-run); ?tab=coada si /_fragments/coada
servesc Acasa (fara fragment orfan); poll gated pe visibilityState.
- US-001: coloana noua import_rows.override_json (nullable, Fernet, Approach B)
+ _migrate defensiv; ruta v1 + alias web .../rand/{i}/editeaza aplica patch
canonic ULTIMUL in _resolve_row_for_preview si commit_import (mutatie pura,
status rederivat, fara drift). Scoping JOIN -> 404, guard committed -> 409,
semantica empty=clear, decrypt fail -> no-op.
- US-002: buton "Editeaza" pe rand; swap pe <tr> + OOB contoare (nu pe sectiune);
form propriu (confirm dezactivat la editare); refoloseste grila responsiva +
error-map din _trimitere_detaliu.html; mutual-exclusion intre randuri.
- US-005/006: "De rezolvat", "Operatii salvate" si "Formate de coloane" ca
tabele (.tablewrap); H4: comutatorul reflecta auto_send STOCAT.
- US-007: bifa "auto-send" devine comutator etichetat pe COADA ("Pune automat
in coada" / "Tine pentru verificare"), scoped pe operatie; name="auto_send"
pastrat (semantica de prezenta -> bool corect cu ambele parsere, zero backend).
Fix-uri gasite la verificarea E2E in browser (htmx 1.9.12, JS — invizibile la
TestClient): useTemplateFragments=true (raspuns <tr>+OOB era parsat in context
de tabel -> swapError + contoare pierdute); re-activarea confirm-btn dupa salvare
deferita pe tick (evita editing=true tranzitoriu); n-hint actualizat de updateN.
Teste: 523 passed. E2E browser: Acasa unificata, upload slim, editare rand
(needs_data -> ok, swap pe rand, contoare OOB), Mapari tabelar + comutator.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
70 lines
3.5 KiB
HTML
70 lines
3.5 KiB
HTML
{#
|
|
_coada.html — repurposat in 3.6 (US-003).
|
|
Nu mai e un tab/panou separat: e sectiunea "Trimiterile tale" inclusa pe Acasa,
|
|
sub zona de upload. Pastreaza filtrele (US-009), tabelul (_submissions.html) si
|
|
panoul de detaliu (#trimitere-detaliu). Poll aliniat la 15s (anti dublu-poll, M5).
|
|
#}
|
|
<section id="trimiteri-section" aria-labelledby="trimiteri-heading"
|
|
style="margin-top:22px; padding-top:18px; border-top:2px solid var(--line);">
|
|
<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>
|
|
|
|
<!-- Filtre (US-009): reincarca tabelul; poll-ul re-trimite filtrul curent prin hx-include -->
|
|
<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:10px; flex-wrap:wrap; align-items:flex-end; margin-bottom:12px;">
|
|
<div>
|
|
<label for="f-status" class="muted" style="display:block; font-size:12px;">Stare</label>
|
|
<select id="f-status" name="status">
|
|
<option value="">toate</option>
|
|
<option value="queued">in asteptare</option>
|
|
<option value="sent">declarate la RAR</option>
|
|
<option value="needs_mapping">lipsa cod</option>
|
|
<option value="needs_data">date incomplete</option>
|
|
<option value="error">eroare</option>
|
|
<option value="sending">se trimite</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label for="f-vehicul" class="muted" style="display:block; font-size:12px;">Vehicul (nr/VIN)</label>
|
|
<input id="f-vehicul" type="text" name="vehicul" placeholder="ex. B123 sau VIN" style="max-width:180px;">
|
|
</div>
|
|
<div>
|
|
<label for="f-data-de" class="muted" style="display:block; font-size:12px;">Data de la</label>
|
|
<input id="f-data-de" type="date" name="data_de">
|
|
</div>
|
|
<div>
|
|
<label for="f-data-pana" class="muted" style="display:block; font-size:12px;">pana la</label>
|
|
<input id="f-data-pana" type="date" name="data_pana">
|
|
</div>
|
|
<button type="submit">Filtreaza</button>
|
|
</form>
|
|
|
|
<!-- Poll aliniat la 15s ca status-ul (M5: nu doua timere perpetue pe pagina mereu deschisa) -->
|
|
<div id="submissions-wrap"
|
|
hx-get="/_fragments/submissions" hx-trigger="load, every 15s"
|
|
hx-include="#filtre-trimiteri" hx-swap="innerHTML">
|
|
<div class="empty">se incarca…</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Panou dedicat pentru detaliul trimiterii (NU inline in tabel: poll-ul din tabel
|
|
ar sterge un expand inline). Gol pana la click pe un rand. -->
|
|
<div id="trimitere-detaliu"></div>
|
|
</section>
|