Aplicación de escritorio hecha en Python + PyQt6 para que un supervisor asigne, por empleado, un único día remoto por semana. Incluye reglas de negocio, interfaz moderna con temas claro/oscuro, empaquetado con PyInstaller y un instalador de Windows (Inno Setup).
- Una asignación por semana por empleado (con control de duplicados).
- Días no permitidos: Lunes, Sábado y Domingo.
- Advertencia inteligente si intenta repetir el mismo día que la semana anterior, con opción de continuar.
- Calendario semanal con botones por día; se marca automáticamente el día registrado del empleado seleccionado.
- Lista de empleados con indicador visual de “registrado esta semana”.
- Temas claro/oscuro conmutables desde un switch (iconografía adaptativa).
- Persistencia local en SQLite (DB y logs en
%LOCALAPPDATA%/TrabajoRemoto).
- Windows 10/11.
- Python 3.11+ únicamente para desarrollo. Los usuarios finales instalan desde
.exe/Setup.
ui/interfaz PyQt6,main_window.py, QSS de temas e iconos SVG.services/reglas de negocio (AssignmentService).data/SQLite: conexión (db_utils), esquema (schema) y repositorios (user_repo,assignament_repo).models/modelos de dominio (User,Record).scripts/build con PyInstaller, script de Inno Setup.
python -m venv .venv
. .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python main.pyNotas:
- La app crea/valida las tablas al iniciar (primer frame) y centra la ventana.
- Los recursos (QSS e iconos) se cargan desde
ui/resourcesen desarrollo o desde el bundle en producción.
Usa salida --onedir para mejor tiempo de inicio.
pwsh -NoProfile -File scripts\build.ps1Salida: dist/TrabajoRemoto/TrabajoRemoto.exe.
Opcional: firma de código si defines variables de entorno antes del build:
$env:SIGN_PFX_PATH="C:\ruta\certificado.pfx"
$env:SIGN_PFX_PASS="<password>"
$env:SIGN_TIMESTAMP_URL="http://timestamp.digicert.com" # opcional
pwsh -NoProfile -File scripts\build.ps1Compila el script con Inno Setup Compiler (ISCC):
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "scripts\TrabajoRemoto.iss"Genera: dist/TrabajoRemoto-Setup.exe.
Características del instalador:
- Instala en
C:\Program Files\TrabajoRemoto(requiere admin). - Crea accesos directos (menú inicio y escritorio).
- Opción de firma del Setup si defines
SIGN_PFX_PATH/SIGN_PFX_PASSen el entorno (manejado en el.iss).
SmartScreen: sin un certificado de firma de código reconocido, Windows puede mostrar aviso. Usa “Más información” → “Ejecutar de todas formas”.
- Capa UI (PyQt6): vista reactiva con
QListWidget+ botones de semana. El switch de tema es unQWidgetcustom dibujado conQPaintery adaptado a DPI. - Servicios:
AssignmentServiceconcentra reglas (perímetro de semana, validaciones, repetición de día, cambios de registro) y orquesta repos. - Repositorios: SQL simple con
sqlite3,PRAGMA foreign_keys = ONy manejo de errores con excepciones de dominio. - Logging:
TimedRotatingFileHandler, captura de excepciones globales y nivel automático por entorno. - Rendimiento: carga diferida de datos (
QTimer.singleShot(0)),setUniformItemSizes(True)en la lista, y--onedirpara mejorar startup.
- Agrega empleados con “Nuevo”.
- Selecciona un empleado y elige un día permitido (Mar–Vie).
- Si coincide con el día de la semana anterior, verás una advertencia con opción de continuar.
- Puedes cambiar el día de la semana actual; la UI refleja el cambio y marca el botón correspondiente.
- Base de datos:
%LOCALAPPDATA%/TrabajoRemoto/trabajo_remoto.db. - Logs diarios:
%LOCALAPPDATA%/TrabajoRemoto/logs/app.log(rotación automática).
- “No se ve el icono”: coloca
ui/resources/app.icooapp.pngantes del build. - SmartScreen: sin firma, es normal el aviso. Con firma (.pfx) se reduce.
- Error de imports al ejecutar scripts fuera de raíz: ejecuta desde la raíz del proyecto o usa el
.exe/Setup.
MIT