Files
TDI-Dashboard/Tool/queries/email.py
T
2026-05-08 10:32:12 +02:00

56 lines
2.0 KiB
Python

"""queries/email.py — rpa_intra_email_queue (Intraz)"""
from .db import query, count, e, dt, badge
def get_email(db_path: str) -> list:
return query(db_path,
"SELECT id, iscrizione_id, recipient, subject, attachment_path, "
"inviata, inviata_at, errore, created_at "
"FROM rpa_intra_email_queue "
"ORDER BY created_at DESC LIMIT 200"
)
def get_stats(db_path: str) -> dict:
return {
'email_total': count(db_path, "SELECT COUNT(*) as n FROM rpa_intra_email_queue"),
'email_inviata': count(db_path, "SELECT COUNT(*) as n FROM rpa_intra_email_queue WHERE inviata=1"),
'email_errore': count(db_path, "SELECT COUNT(*) as n FROM rpa_intra_email_queue WHERE inviata=0 AND errore IS NOT NULL"),
'email_pending': count(db_path, "SELECT COUNT(*) as n FROM rpa_intra_email_queue WHERE inviata=0 AND errore IS NULL"),
}
def render_table(rows: list) -> str:
if not rows:
return '<p class="empty">Nessuna email trovata.</p>'
def _stato(inviata, errore):
if inviata: return 'inviata'
if errore: return 'errore'
return 'pending'
def _badge(inviata, errore):
if inviata: return badge('ok', 'Inviata')
if errore: return badge('err', 'Errore')
return badge('warn', 'Pending')
trs = ''.join(
f'<tr data-stato="{_stato(r.get("inviata"), r.get("errore"))}">'
f'<td>{e(r.get("iscrizione_id"))}</td>'
f'<td>{e(r.get("recipient"))}</td>'
f'<td>{e(r.get("subject"))}</td>'
f'<td>{e(r.get("attachment_path"))}</td>'
f'<td>{dt(r.get("inviata_at"))}</td>'
f'<td>{_badge(r.get("inviata"), r.get("errore"))}</td>'
f'<td class="nc">{e(r.get("errore"))}</td>'
f'</tr>'
for r in rows
)
return (
'<table><thead><tr>'
'<th>Iscrizione</th><th>Destinatario</th><th>Oggetto</th>'
'<th>Allegato</th><th>Inviata il</th><th>Stato</th><th>Errore</th>'
f'</tr></thead><tbody>{trs}</tbody></table>'
)