fmatituy/selectospromanager
0
1from nicegui import ui
2from database.queries import get_projects
3from database.queries import db_fetchone
4from datetime import datetime
5
6@ui.refreshable
7def render_dashboard():
8 # Cargar datos dinámicos (Data re-fetched on every refresh)
9 proyectos = get_projects()
10 proy_activos = len([p for p in proyectos if p['estado'] != 'Cerrado'])
11
12 # Pendientes SST (Accidentes/Incidentes no cerrados)
13 pend_sst = db_fetchone("SELECT COUNT(*) as c FROM accidentes_laborales WHERE estado != 'Cerrado'")[0]
14 pend_incs = db_fetchone("SELECT COUNT(*) as c FROM sst_incidentes WHERE estado != 'Resuelto'")[0]
15 total_sst = pend_sst + pend_incs
16
17 # Solicitudes de materiales pendientes
18 sol_pendientes = db_fetchone("SELECT COUNT(*) as c FROM material_requests WHERE estado = 'Pendiente'")[0]
19
20 with ui.column().classes('w-full gap-8'):
21 with ui.row().classes('w-full items-center justify-between'):
22 with ui.column().classes('gap-1'):
23 ui.label('DASHBOARD OPERATIVO').classes('text-2xl font-black text-slate-800 tracking-tight')
24 ui.label(f"Última actualización: {datetime.now().strftime('%H:%M:%S')}").classes('text-[10px] text-slate-400 font-bold')
25
26 # Anuncio de Fase de Desarrollo
27 with ui.row().classes('px-6 py-2 bg-amber-50 border border-amber-200 rounded-2xl items-center gap-3 animate-pulse'):
28 ui.icon('construction', color='amber-700')
29 ui.label('MÓDULO EN FASE DE DESARROLLO - PRÓXIMAMENTE').classes('text-[10px] font-black text-amber-900 tracking-widest')
30
31 # El contenido de abajo se mantiene pero bajo un velo de "Desarrollo" o se simplifica
32 with ui.column().classes('w-full items-center gap-6 mt-12 opacity-40 grayscale pointer-events-none'):
33 ui.icon('analytics', size='64px', color='slate-300')
34 ui.label('Visualización de Análisis Temporales y KPIs Avanzados').classes('text-lg font-bold text-slate-400')
35 ui.label('Este componente está siendo optimizado para integrarse con Sara IA.').classes('text-xs text-slate-400 -mt-4')
36
37 # Render de gráficos removido/ocultado del flujo principal según solicitud "retira esto"
38 # with ui.grid(columns=1).classes('w-full max-w-6xl mx-auto gap-8 md:grid-cols-2 mt-4'):
39 # ... (gráficos comentados o removidos)
40 