92 lines
2.9 KiB
Python
92 lines
2.9 KiB
Python
"""queries/email.py — rpa_intra_email_queue (Intraz)"""
|
|
|
|
from .db import query, count_q, e, dt, badge
|
|
|
|
|
|
def get_email(db_path: str) -> list:
|
|
return query(
|
|
db_path,
|
|
"SELECT id, iscrizione_id, to_recipients, cc_recipients, subject, attachment_path, "
|
|
"inviata, inviata_at, errore, created_at "
|
|
"FROM rpa_intra_email_queue "
|
|
"WHERE date(created_at) >= date('now', '-10 days') "
|
|
"ORDER BY created_at DESC LIMIT 200"
|
|
)
|
|
|
|
|
|
def get_stats(db_path: str, date_from: str = None, date_to: str = None) -> dict:
|
|
conds, params = [], []
|
|
if date_from:
|
|
conds.append("date(created_at) >= ?")
|
|
params.append(date_from)
|
|
if date_to:
|
|
conds.append("date(created_at) <= ?")
|
|
params.append(date_to)
|
|
where = (" WHERE " + " AND ".join(conds)) if conds else ""
|
|
and_pfx = (" AND" if conds else " WHERE")
|
|
t = tuple(params)
|
|
return {
|
|
'email_total': count_q(
|
|
db_path,
|
|
f"SELECT COUNT(*) as n FROM rpa_intra_email_queue{where}",
|
|
t
|
|
),
|
|
'email_inviata': count_q(
|
|
db_path,
|
|
f"SELECT COUNT(*) as n FROM rpa_intra_email_queue{where}{and_pfx} inviata=1",
|
|
t
|
|
),
|
|
'email_errore': count_q(
|
|
db_path,
|
|
f"SELECT COUNT(*) as n FROM rpa_intra_email_queue{where}{and_pfx}"
|
|
" inviata=0 AND errore IS NOT NULL",
|
|
t
|
|
),
|
|
'email_pending': count_q(
|
|
db_path,
|
|
f"SELECT COUNT(*) as n FROM rpa_intra_email_queue{where}{and_pfx}"
|
|
" inviata=0 AND errore IS NULL",
|
|
t
|
|
),
|
|
}
|
|
|
|
|
|
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' data-date="{str(r.get("inviata_at") or "")[:10]}">'
|
|
f'<td>{e(r.get("iscrizione_id"))}</td>'
|
|
f'<td>{e(r.get("to_recipients"))}</td>'
|
|
f'<td>{e(r.get("cc_recipients"))}</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>To</th><th>Cc</th><th>Oggetto</th>'
|
|
'<th>Allegato</th><th>Inviata il</th><th>Stato</th><th>Errore</th>'
|
|
f'</tr></thead><tbody>{trs}</tbody></table>'
|
|
)
|