feat(5.19): auto-send toggle per cont + tinere manuala randuri (held)
Comutator accounts.auto_send_enabled per cont: Auto OFF (default) tine randurile
la ingestie (submissions.held=1), worker-ul (claim_one AND held=0) le sare pana la
eliberare umana (per rand/bulk/auto-release OFF->ON). Snapshot held prin chokepoint
unic held_for_account pe toate caile de ingestie (API, import, reresolve, reactivare).
- schema/migrare: coloana held + index partial idx_submissions_held; auto_send_enabled
- API: echo onest held+motiv (US-010), ruta /prezentari/{id}/trimite-acum
- web: toggle header, modal confirmare tipata, buton Trimite per rand + Trimite toate,
banner coada tinuta imbatranita (L.142), contor "In asteptare (manual)"
- worker: expire_held (US-008, inchide gaura retentie PII), metrics held gauges
- ops: tools/carantina_held + runbook rollback (R4)
Nota review (/code-review high): re-snapshot held lipseste pe caile repune/corectie
(requeue_submission, post_corectie, bulk-fix) — de aliniat separat cu create_prezentari.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,38 @@
|
||||
lista incepe direct sub filtre. Heading pastrat sr-only pentru a11y (section
|
||||
aria-labelledby). Badge-ul de atentie + export CSV stau intr-un rand discret. #}
|
||||
<h2 id="trimiteri-heading" class="sr-only">Trimiterile tale</h2>
|
||||
|
||||
{# US-005 (PRD 5.19): bulk "Trimite toate (N)" — N = randuri tinute (queued AND held=1).
|
||||
Ascuns cand N=0. Confirmare tipata prin modal (count + mediu RAR), NU hx-confirm. #}
|
||||
{% if held_manual_count|default(0) %}
|
||||
<div style="display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 10px;
|
||||
padding:8px 10px; border-left:3px solid var(--warn);
|
||||
background:color-mix(in srgb, var(--warn) 10%, var(--card)); border-radius:6px;">
|
||||
<span style="font-size:var(--fs-sm);">
|
||||
<strong>{{ held_manual_count }}</strong>
|
||||
{{ 'prezentare tinuta' if held_manual_count == 1 else 'prezentari tinute' }} manual.
|
||||
</span>
|
||||
<button type="button"
|
||||
onclick="var m=document.getElementById('modal-trimite-toate'); if(m){m.hidden=false;}"
|
||||
style="margin-left:auto; padding:4px 12px; font-size:13px; border-radius:6px;
|
||||
border:1px solid var(--accent); background:var(--accent); color:#fff;
|
||||
font-weight:600; cursor:pointer;">
|
||||
Trimite toate ({{ held_manual_count }})
|
||||
</button>
|
||||
</div>
|
||||
{% set cf_id = 'modal-trimite-toate' %}
|
||||
{% set cf_titlu = 'Trimiti toate prezentarile tinute?' %}
|
||||
{% set cf_count = held_manual_count %}
|
||||
{% set cf_env = env_bulk | default('prod') %}
|
||||
{% set cf_url = '/trimite-toate' %}
|
||||
{% set cf_vals = '{}' %}
|
||||
{% set cf_target = '#submissions-wrap' %}
|
||||
{% set cf_swap = 'innerHTML' %}
|
||||
{% set cf_confirm_label = 'Trimite toate (' ~ held_manual_count ~ ')' %}
|
||||
{% set cf_deschis = false %}
|
||||
{% include '_modal_confirma_trimitere.html' %}
|
||||
{% endif %}
|
||||
|
||||
{% if blocate_total %}
|
||||
<div style="display:flex; align-items:center; gap:6px; flex-wrap:wrap; margin:0 0 10px;">
|
||||
<span class="tab-badge" title="{{ blocate_total }} necesita atentie"
|
||||
|
||||
Reference in New Issue
Block a user