"""queries/pec.py — pec_comunicazioni""" from .db import query, count, e, dt, badge _PEC_JOIN = """ SELECT p.id, p.sessione_id, p.tipo_comunicazione, p.email_ats, p.stato_invio, p.data_invio_pec, p.created_at, p.note, s.articolo_cod, s.corso, s.azienda, sl.data AS data_sessione, sl.indirizzo, sl.docenti FROM pec_comunicazioni p JOIN sessione s ON s.id = p.sessione_id LEFT JOIN sessione_lezione sl ON sl.sessione_id = p.sessione_id """ def get_pec(db_path: str) -> list: return query(db_path, _PEC_JOIN + "ORDER BY p.created_at DESC LIMIT 200") def get_stats(db_path: str) -> dict: return { 'total_pec': count(db_path, "SELECT COUNT(*) as n FROM pec_comunicazioni"), 'pec_inviato': count(db_path, "SELECT COUNT(*) as n FROM pec_comunicazioni WHERE stato_invio='inviata'"), 'pec_errore': count(db_path, "SELECT COUNT(*) as n FROM pec_comunicazioni WHERE stato_invio='errore'"), 'pec_pending': count(db_path, "SELECT COUNT(*) as n FROM pec_comunicazioni WHERE stato_invio='pending'"), } def render_table(rows: list) -> str: if not rows: return '

Nessuna comunicazione PEC trovata.

' def _badge(stato): m = {'inviata': ('ok', 'Inviata'), 'pending': ('warn', 'Pending'), 'errore': ('err', 'Errore')} cls, lbl = m.get(stato, ('', '')) return badge(cls, lbl) if cls else e(stato) trs = ''.join( f'' f'{e(r.get("articolo_cod"))}' f'{e(r.get("sessione_id"))}' f'{dt(r.get("data_sessione"))}' f'{e(r.get("tipo_comunicazione"))}' f'{e(r.get("email_ats"))}' f'{dt(r.get("data_invio_pec"))}' f'{_badge(r.get("stato_invio"))}' f'{e(r.get("note"))}' f'' for r in rows ) return ( '' '' '' f'{trs}
CorsoSessioneData SessioneTipoEmail ATSData InvioStatoNote
' )