Skip to content

lmmasc/Logger-OA

Repository files navigation

Logger OA

PySide6 Python License: MIT Platform

Aplicación de escritorio multiplataforma para la gestión de concursos y operaciones de radioaficionados OA (Perú), con arquitectura desacoplada, interfaz moderna y soporte para importación de datos desde múltiples formatos y países.


Tabla de Contenidos


Características principales

  • Gestión de concursos y operaciones de radioaficionados OA.
  • Base de datos local SQLite, sin dependencias externas.
  • Importación automática de operadores desde listados oficiales en PDF (Perú, Uruguay), Excel (Argentina, Chile) o CSV.
  • Feedback visual en importación: diálogo de espera traducido y resumen detallado (total, nuevos, actualizados, deshabilitados, rehabilitados).
  • Manejo robusto de importaciones: los errores controlados de PDF, Excel o CSV se muestran con su mensaje real y no como confirmaciones ambiguas.
  • Interfaz gráfica moderna con PySide6 (Qt), temas claro/oscuro y cambio de idioma.
  • Verificación manual de actualizaciones desde Ayuda > Buscar actualizaciones, consultando el último release publicado en GitHub.
  • Diálogo Acerca de con enlace directo al repositorio oficial de GitHub.
  • Arquitectura desacoplada basada en Clean Architecture.
  • Scripts de build para Linux, Windows y macOS.
  • Workflows de GitHub Actions para releases automáticos en Linux, Windows x64, Windows 7 x86 legacy, macOS Intel y macOS Apple Silicon.
  • Internacionalización modular y extensible.
  • Pruebas unitarias y de integración con pytest.

Requisitos previos

  • Python >= 3.10
  • pip
  • Linux, Windows o macOS
  • Recomendado: entorno virtual (venv)

Nota sobre compatibilidad dual

Si vas a mantener una variante legacy para Windows 7 x86, usa un entorno virtual separado para cada stack.

  • Variante moderna: Python 3.10+ con PySide6.
  • Variante legacy Win7 x86: Python 3.8 x86 con PySide2.

No conviene mezclar ambos stacks en el mismo venv, porque las dependencias Qt y el tooling de empaquetado son incompatibles entre sí.

Requisitos adicionales para Windows 7 x86

La variante legacy requiere que el sistema operativo tenga instalados componentes de runtime que no vienen presentes en muchas instalaciones limpias de Windows 7.

  • Windows 7 SP1 x86.
  • Universal CRT para Windows 7: actualización KB2999226.
  • Microsoft Visual C++ Redistributable x86 para Visual Studio 2015 (VC++ 14.0).

Si al abrir el ejecutable aparece el error api-ms-win-crt-runtime-l1-1-0.dll, el problema no está en Logger OA sino en el sistema operativo: falta el Universal CRT. Instala primero KB2999226 y luego el redistribuible VC++ x86.

Dependencias principales

  • PySide6>=6.9.2
  • pdfplumber
  • reportlab
  • sqlite3 (incluida en Python)

Dependencias de desarrollo

  • pyinstaller (para generar ejecutables)

Instalación

  1. Clona el repositorio y accede a la carpeta del proyecto:
    git clone <URL_DEL_REPOSITORIO>

cd "Logger-OA"

2. Crea y activa el entorno virtual correspondiente. Si solo trabajas con la variante moderna, usa `.venv` en cualquier plataforma. Si además mantendrás Win7 x86, crea un segundo entorno dedicado para legacy.

**Linux:**
```bash
python3 -m venv .venv
source .venv/bin/activate

macOS:

python3 -m venv .venv
source .venv/bin/activate

Windows (cmd):

python -m venv .venv
.venv\Scripts\activate

Windows (PowerShell):

python -m venv .venv
.venv\Scripts\Activate.ps1
  1. Instala las dependencias de la variante que vayas a usar:
    # Variante moderna para desarrollo y builds
    pip install -r requirements-dev-modern.txt
    Para la variante legacy de Windows 7 x86:
    C:\Python38-32\python.exe -m venv .venv-win7-x86
    .venv-win7-x86\Scripts\python.exe -m pip install -r requirements-dev-legacy.txt
  2. Ejecuta la aplicación:
    python src/main.py

Setup rápido en Windows

Variante moderna:

scripts\setup-windows-modern.bat

Variante legacy Win7 x86:

scripts\setup-windows-legacy.bat C:\Python38-32\python.exe

El segundo script requiere una instalación separada de Python 3.8 de 32 bits. El script valida ambos requisitos antes de crear .venv-win7-x86.


Uso

Ejecución desde consola

python src/main.py

Ejemplo de uso como módulo

from src.application.use_cases.update_operators_from_pdf import update_operators_from_pdf
resultado = update_operators_from_pdf('BaseDocs/396528-radioaficionados_autorizados_al_24sep2025.pdf')
print(resultado)

Acceso al Manual de Usuario

El manual de usuario completo está disponible desde la propia aplicación, en el menú Ayuda > Manual de uso.

Acceso al repositorio oficial

Desde Ayuda > Acerca de puedes abrir el enlace al repositorio oficial de Logger OA en GitHub.

Verificar si hay una versión nueva

Desde Ayuda > Buscar actualizaciones puedes consultar el último release publicado. Si hay una versión más nueva, la app ofrece abrir la página del release en el navegador para descargarla.

Ejemplo práctico: Importar operadores OA desde PDF

  1. Abre la aplicación.
  2. Ve al menú "Base de datos > Importar > Importar desde PDF" y selecciona el archivo oficial.
  3. Al finalizar, se muestra un resumen detallado (total, nuevos, actualizados, deshabilitados, rehabilitados).

Atajos de teclado relevantes

  • Enter en el campo de indicativo: intenta registrar el contacto directamente.
  • Ctrl+Enter en el campo de indicativo: envía el indicativo a la cola de espera.
  • En logs de concurso, Espacio en el campo de indicativo mueve el foco a intercambio recibido.
  • En logs de concurso, Enter en intercambio recibido intenta registrar el contacto si los datos son válidos.

Estructura del proyecto

El proyecto sigue los principios de Clean Architecture, separando responsabilidades en capas bien definidas:

src/
  main.py                  # Punto de entrada de la aplicación
  domain/                  # Entidades y lógica de negocio pura
    entities/              # Modelos de dominio (Operador, Concurso, Contacto, etc.)
    repositories/          # Interfaces de repositorios
    use_cases/             # Casos de uso del dominio
  application/             # Casos de uso y lógica de aplicación
    use_cases/             # Gestión, importación desde PDF, etc.
  infrastructure/          # Implementaciones técnicas
    db/                    # Acceso y gestión de base de datos SQLite
    pdf/                   # Extracción y procesamiento de PDF
    repositories/          # Repositorios concretos
  interface_adapters/      # Adaptadores de interfaz
    ui/                    # Interfaz gráfica (PySide6)
      views/               # Vistas principales (Welcome, LogOps, LogContest, DBTableWindow, etc.)
      dialogs/             # Diálogos y ventanas auxiliares (incl. feedback visual)
      themes/              # Temas visuales (claro/oscuro)
    controllers/           # Controladores de UI
  config/                  # Configuración, rutas y settings
  translation/             # Internacionalización y traducciones
  utils/                   # Utilidades puras
assets/                    # Recursos gráficos (iconos, GIFs, etc.)
BaseDocs/                  # Documentos oficiales OA (PDF)
scripts/                   # Scripts de build multiplataforma
  build-linux.sh           # Build para Linux
  build-mac.sh             # Build para macOS
  build-windows.bat        # Build para Windows
  build-windows-legacy.bat # Build para Windows 7 x86
tests/                     # Pruebas unitarias y de integración

Diagrama de Capas (Clean Architecture)

[ UI / Interface Adapters ] <--> [ Application ] <--> [ Domain ] <--> [ Infrastructure ]

Internacionalización y Traducciones

El sistema de traducciones es modular y extensible. Los archivos de traducción se encuentran en src/translation/<idioma>/ y están organizados por subdiccionarios en un archivo all_keys.py (ALL_KEYS_TRANSLATIONS UI_TRANSLATIONS MENUS_TRANSLATIONS TABLE_HEADERS_TRANSLATIONS), etc.).

Para agregar un nuevo idioma:

  1. Crea una carpeta en src/translation/ con el código del idioma (ej: fr/ para francés).
  2. Copia y adapta el archivo de traducción existente.
  3. El loader central (translations.py) combinará automáticamente los módulos.

Scripts de Build Multiplataforma

En la carpeta scripts/ hay scripts para generar ejecutables en Linux, macOS y Windows usando PyInstaller:

  • build-linux.sh
  • build-mac.sh
  • build-windows.bat
  • build-windows-legacy.bat

Ejecuta el script correspondiente para generar el ejecutable standalone.

Para Linux y macOS, el flujo moderno usa el entorno .venv y requirements-dev-modern.txt.

Ejemplos:

./scripts/build-linux.sh
./scripts/build-mac.sh

En Windows:

scripts\build-windows.bat
scripts\build-windows-legacy.bat

Para Windows hay dos rutas distintas:

  • build-windows.bat: build moderno con el entorno .venv.
  • build-windows-legacy.bat: build legacy Win7 x86 con el entorno .venv-win7-x86.

En la variante legacy Win7 x86 el resultado se genera como ejecutable onefile en dist\LoggerOA-win7.exe, construido con LoggerOA.win7-x86.spec y el entorno .venv-win7-x86.

En la variante moderna, build-windows.bat usa LoggerOA.spec como fuente de verdad del empaquetado y genera dist\LoggerOA.exe.

En Linux y macOS, los scripts generan src/version.py desde el tag o commit actual y empaquetan también la carpeta assets, incluyendo las fuentes RobotoMono-Regular.ttf y RobotoMono-Bold.ttf.


Automatización de Releases

El repositorio incluye workflows de GitHub Actions para generar builds de release automáticamente cuando se publica un tag con formato v* o cuando se lanzan manualmente vía workflow_dispatch.

Workflows disponibles:

  • Linux x64: .github/workflows/build-linux-release.yml
  • Windows moderno x64: .github/workflows/build-windows-release.yml
  • Windows legacy Win7 x86: .github/workflows/build-windows-legacy-release.yml
  • macOS Intel x64 y Apple Silicon ARM64: .github/workflows/build-macos-release.yml

Assets generados por tag:

  • LoggerOA-linux-x64.tar.gz
  • LoggerOA-windows-x64.zip
  • LoggerOA-windows-win7-x86.zip
  • LoggerOA-macos-intel-x64.zip
  • LoggerOA-macos-arm64.zip

Contenido principal por plataforma:

  • LoggerOA-windows-x64.zip contiene LoggerOA.exe.
  • LoggerOA-windows-win7-x86.zip contiene LoggerOA-win7.exe.
  • LoggerOA-macos-intel-x64.zip y LoggerOA-macos-arm64.zip contienen LoggerOA.app.
  • LoggerOA-linux-x64.tar.gz contiene el binario LoggerOA.

Importante:

  • Los nombres públicos de los artefactos son estables entre releases para que los enlaces latest/download/... no cambien en cada versión.
  • Los workflows deben existir ya en el commit al que apunta el tag.
  • Los builds de macOS no incluyen firma ni notarización de Apple.
  • La variante legacy sigue requiriendo Python 3.8 x86 y dependencias separadas.

Compatibilidad de logs:

  • Los logs SQLite creados por versiones antiguas siguen siendo abribles por las versiones actuales.
  • Si un log legacy contiene timestamps guardados como texto en formato YYYY-MM-DD_HH-MM-SS, la app los normaliza automáticamente al abrirlo y actualiza el archivo al formato versionado actual.

Formato de Logs

La especificación formal del formato actual de logs se encuentra en BaseDocs/log_file_format_v2.md.

Resumen:

  • Cada log se guarda como un archivo SQLite independiente.
  • El formato actual usa PRAGMA user_version = 2.
  • La migración desde variantes legacy ocurre automáticamente al abrir el archivo.

Testing

Las pruebas unitarias y de integración se encuentran en la carpeta tests/ y utilizan pytest.

Para ejecutar todas las pruebas:

pytest

Licencia y condiciones de uso

Este software se distribuye bajo la licencia MIT. Puedes copiarlo, modificarlo y crear tus propias versiones, siempre y cuando menciones a los desarrolladores originales en los créditos:

  • Miguel OA4BAU
  • Raquel OA4EHN

No se aceptan sugerencias ni mejoras en este repositorio oficial. Eres libre de crear y distribuir tus propias versiones, respetando la mención a los autores.

Disclaimer: Este software se proporciona "tal cual", sin garantías de ningún tipo, expresas o implícitas. Los autores no se hacen responsables por daños, pérdidas o cualquier consecuencia derivada del uso del software. Úsalo bajo tu propio riesgo.


Créditos / Autoría

Autores

  • Miguel OA4BAU
  • Raquel OA4EHN

Colaboradores

  • Moises OA4EFJ

About

Aplicación de escritorio multiplataforma para la gestión de concursos y operaciones de radioaficionados OA (Perú), con arquitectura desacoplada, interfaz moderna y soporte para importación de datos desde PDF.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages