"""queries/documenti.py — sessione_documenti con join sessione""" from .db import query, e, dt _STATUS_BADGE = { 'trovato': 'trovato', 'caricato': 'caricato', 'errore': 'errore', 'warning': 'warning', } def get_documenti(db_path: str) -> list: sql = """ SELECT sd.sessione_id, s.corso, s.azienda, sd.subfolder, sd.doc_type, sd.doc_status, sd.filename, sd.note, sd.sp_web_url, sd.uploaded_at FROM sessione_documenti sd LEFT JOIN sessione s ON s.id = sd.sessione_id ORDER BY sd.sessione_id, sd.subfolder, sd.filename """ return query(db_path, sql) def get_stats(db_path: str) -> dict: rows = get_documenti(db_path) return { 'doc_trovato': sum(1 for r in rows if r['doc_status'] == 'trovato'), 'doc_caricato': sum(1 for r in rows if r['doc_status'] == 'caricato'), 'doc_errore': sum(1 for r in rows if r['doc_status'] == 'errore'), 'doc_sessioni': len({r['sessione_id'] for r in rows}), } def render_page(rows: list) -> str: if not rows: return '
Nessun documento registrato.
' # Group by sessione_id sessions: dict = {} order: list = [] for r in rows: sid = r['sessione_id'] if sid not in sessions: sessions[sid] = {'corso': r['corso'], 'azienda': r['azienda'], 'docs': []} order.append(sid) sessions[sid]['docs'].append(r) html_parts = [] for sid in order: s = sessions[sid] docs = s['docs'] n_trovato = sum(1 for d in docs if d['doc_status'] == 'trovato') n_caricato = sum(1 for d in docs if d['doc_status'] == 'caricato') n_errore = sum(1 for d in docs if d['doc_status'] == 'errore') n_warning = sum(1 for d in docs if d['doc_status'] == 'warning') counts_html = ( (f'{n_caricato} caricati' if n_caricato else '') + (f'{n_trovato} trovati' if n_trovato else '') + (f'{n_warning} warning' if n_warning else '') + (f'{n_errore} errori' if n_errore else '') ) tbody_rows = '' for d in docs: status = d['doc_status'] or '' badge_html = _STATUS_BADGE.get(status, f'{e(status)}') if d['sp_web_url']: sp_cell = f'🔗' else: sp_cell = '❌' tbody_rows += ( f'| File | Tipo | Cartella | ' 'Stato | SP | Note | Caricato | ' '
|---|