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:
@@ -14,10 +14,36 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# === US-007 (PRD 5.19): banner coada tinuta imbatranita — mitigare OBLIGATORIE pt. default OFF.
|
||||
Cand exista randuri `queued AND held=1` mai vechi de held_aged_days, semnalul de conformitate
|
||||
L.142 (declarare obligatorie). Derivat (zero stare noua), varsta pe created_at.
|
||||
Prioritate bannere (D7 — un-singur-banner "notice", ca sa nu impinga contoarele sub fold pe
|
||||
mobil): cont inactiv (sus) + strip RAR jos raman separate; intre notice-uri, held-aged >
|
||||
trial (risc legal > notita trial) -> trial e suprimat cand held-aged e activ. #}
|
||||
{% set _held_aged_activ = (held_aged_count|default(0) > 0) and account_active %}
|
||||
{% if _held_aged_activ %}
|
||||
<div id="banner-held-aged" role="alert"
|
||||
style="margin-bottom:10px; padding:8px 12px; border-left:3px solid var(--warn);
|
||||
background:color-mix(in srgb, var(--warn) 12%, var(--card)); border-radius:6px;
|
||||
font-size:var(--fs-sm); display:flex; align-items:center; gap:8px; flex-wrap:wrap;">
|
||||
<span><strong>{{ held_aged_count }}</strong>
|
||||
{{ 'prezentare tinuta' if held_aged_count == 1 else 'prezentari tinute' }}
|
||||
de peste {{ held_aged_days }} zile — declarare obligatorie (L.142).</span>
|
||||
<button type="button"
|
||||
hx-get="/_fragments/submissions?held=1"
|
||||
hx-target="#submissions-wrap" hx-swap="innerHTML"
|
||||
style="margin-left:auto; padding:2px 10px; font-size:var(--fs-xs); border-radius:99px;
|
||||
border:1px solid var(--warn); background:transparent; color:var(--warn);
|
||||
cursor:pointer; font-weight:600;">
|
||||
Vezi tinute
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# US-006 (5.17) — Banner one-time trial->Gratuit (T-DES-1): afisat la prima incarcare
|
||||
dupa expirarea trial-ului. Discret, non-blocant; dismissibil via sessionStorage.
|
||||
Nu acopera stripul de sanatate (apare inainte de health strip, la acelasi nivel). #}
|
||||
{% if trial_expirat_recent|default(false) %}
|
||||
{% if trial_expirat_recent|default(false) and not _held_aged_activ %}
|
||||
<div id="banner-trial-expirat"
|
||||
role="status"
|
||||
style="margin-bottom:10px; padding:7px 12px;
|
||||
@@ -83,10 +109,17 @@
|
||||
<div class="contor-label">Azi</div>
|
||||
</div>
|
||||
|
||||
{# In coada #}
|
||||
{# In coada — contorul "In asteptare (manual)" se pliaza aici (US-006/D6): nu adaugam a 6-a
|
||||
celula, ci o sub-linie amber cand exista randuri tinute (queued AND held=1). #}
|
||||
<div class="contor-card" style="flex:1; min-width:80px;">
|
||||
<div class="contor-cifra s-queued">{{ counts_queued }}</div>
|
||||
<div class="contor-label">In coada</div>
|
||||
{% if held_manual_count|default(0) %}
|
||||
<div class="contor-sub" style="font-size:var(--fs-xs); color:var(--warn); font-weight:600; margin-top:2px;"
|
||||
title="Prezentari tinute manual — asteapta eliberarea ta">
|
||||
{{ held_manual_count }} manual
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{# De corectat (rosu daca >0, muted la 0; link catre lista) #}
|
||||
@@ -115,7 +148,7 @@
|
||||
</div>
|
||||
<div class="compact-item">
|
||||
<div class="compact-nr s-queued">{{ counts_queued }}</div>
|
||||
<div class="compact-lbl">Coada</div>
|
||||
<div class="compact-lbl">Coada{% if held_manual_count|default(0) %} <span style="color:var(--warn); font-weight:700;">·{{ held_manual_count }}m</span>{% endif %}</div>
|
||||
</div>
|
||||
<a class="compact-item" href="/" style="text-decoration:none; color:inherit;">
|
||||
<div class="compact-nr {{ 's-error' if blocate_total else 'muted' }}">{{ blocate_total }}</div>
|
||||
|
||||
Reference in New Issue
Block a user