159 lines
5.6 KiB
Markdown

# 🚩 SAEJB - Sistema de Gestión Militar
```
____ ___ _____ _____ ____
/ ___| / _ \| ____|/ _ \___ \
| | | | | | _| | | | |__) |
| |___ | |_| | |___| |_| / __/
\____| \___/|_____\___/_____|
Sistema SAEJB - Inventario, Armamento y Personal
```
Pequeña guía del proyecto y cómo ponerlo en marcha.
## Descripción
SAEJB es una aplicación Django diseñada para gestionar brigadas, batallones, personal, armas, municiones e inventario asociado. Incluye módulos para digitalización de documentos, abastecimiento y control de reparaciones/equipos.
## Stack tecnológico
- Backend: Python 3.x, Django 5.0
- Base de datos: MySQL (configurada en `sistema/settings.py`) y drivers `mysqlclient`/`PyMySQL` disponibles
- Frontend: plantillas Django + AdminLTE (`django-adminlte3`), SweetAlert2 (via `package.json`)
- Bibliotecas relevantes (extraídas de `requirements.txt`): Pillow, reportlab, wkhtmltopdf, xhtml2pdf, openpyxl, PyPDF
## Modelos de datos (resumen)
Los modelos principales se encuentran en `seajb/models.py`. Resumen de las entidades y campos clave:
- Brigada
- code (unique), nombreB, ubicacionB, comandante, telefono, correo, fecha
- Batallones
- nombreB, ubicacionB, comandante, telefono, correo, fecha, primero (FK -> Brigada)
- Armas
- categoria, tipoA, modeloA, calibreA, serialA, serialAG, fechaAG, opAM, cantidadA, cantidadC, ac (accesorios), armaS, calibreS, serialS, cantidadS, segundo (FK -> Batallones)
- Municiones
- tipoM, serialAG, fechaAG, cantidadM, lote, tercero (FK -> Batallones)
- Personas (personal)
- code (unique), categoria, grado, promocion, anio, unidad, datos (nombres), cedula, armaA, cargadores, municiones, serialA, serialAG, fechaAG, direccion, telefono, correo, img
- ArmasDePersonas
- armas, modelo, serial, serialag, fechag, cargadores, municiones, persona (FK -> Personas)
- BrigadaDigital / UnidadDigital
- tablas para digitalización de documentos con campos de nombre, descripción, imagen y relaciones
- Producto, Abastecimiento, ProductoAbastecimiento
- inventario de productos con códigos únicos, cantidad, precio y movimientos entre puntos de abastecimiento
- Cemanblin, Cemantar, Cemansac
- registros de reparaciones/equipos con código único, unidad, equipo, fechas y firmas
Para ver todos los campos y validaciones revisa `seajb/models.py`.
## Requisitos previos
- Python 3.10+ (compatible con Django 5)
- MySQL (o ajustar a Postgres si se prefiere)
- pip
- Node/npm si se van a gestionar dependencias frontend (opcional)
Dependencias del proyecto en `requirements.txt`.
## Uso del sistema (resumen)
1. Crear y activar un entorno virtual:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
2. Instalar dependencias:
pip install -r requirements.txt
3. Configurar la base de datos en `sistema/settings.py` (USER, PASSWORD, HOST, NAME)
4. Migraciones y usuario admin:
python manage.py migrate
python manage.py createsuperuser
5. Ejecutar servidor en desarrollo:
python manage.py runserver
6. Acceder a la administración: `http://127.0.0.1:8000/admin`
Nota: si usa imágenes, asegúrese de que `MEDIA_ROOT` está accesible y `MEDIA_URL` configurado (ya está en `sistema/settings.py`).
## Módulos del sistema
- Gestión de Brigadas y Batallones (`Brigada`, `Batallones`)
- Gestión de Armas y Municiones (`Armas`, `Municiones`)
- Gestión de Personal y sus armas (`Personas`, `ArmasDePersonas`)
- Inventario y abastecimiento (`Producto`, `Abastecimiento`, `ProductoAbastecimiento`)
- Digitalización de documentos (`BrigadaDigital`, `UnidadDigital`)
- Control de reparaciones/equipos (`Cemanblin`, `Cemantar`, `Cemansac`)
- Reportes/PDFs: `reportlab`, `wkhtmltopdf`, `xhtml2pdf`
## Seguridad
- Actualmente `DEBUG = True` y `ALLOWED_HOSTS = ['*']` en `sistema/settings.py`. Cambiar antes de producción.
- Mantener `SECRET_KEY` fuera del repositorio (usar variables de entorno o vault).
- Habilitar HTTPS en despliegue y configurar cabeceras de seguridad (HSTS, X-Frame-Options ya activado por middleware).
- Revisar control de acceso en vistas y usar permisos de Django para recursos sensibles.
- Asegurarse de la protección CSRF (Django la incluye por defecto) y de la correcta gestión de archivos subidos.
## Instalación y configuración detallada
1. Clonar el repositorio y situarse en la carpeta raíz (donde está `manage.py`).
2. Crear entorno virtual y activarlo (Windows PowerShell):
python -m venv .venv
.\\.venv\\Scripts\\Activate.ps1
3. Instalar dependencias:
pip install -r requirements.txt
4. Configurar base de datos en `sistema/settings.py` o preferiblemente usar variables de entorno:
DATABASES['default']['NAME'] = 'saejb'
DATABASES['default']['USER'] = '<tu_usuario>'
DATABASES['default']['PASSWORD'] = '<tu_password>'
DATABASES['default']['HOST'] = 'localhost'
5. Migrar y crear superusuario:
python manage.py migrate
python manage.py createsuperuser
6. Correr el servidor:
python manage.py runserver
## Posibles mejoras
- Externalizar secretos: usar `django-environ` o variables de entorno.
- Soporte para despliegue con Docker y docker-compose.
- Mejorar validaciones y pruebas unitarias (actualmente no hay tests visibles).
- Añadir API REST con Django REST Framework para integración móvil/externa.
- Soporte multi-usuario con roles más finos y logs de auditoría para cambios críticos.
- Implementar sistema de backups y rotación de logs para la base de datos.
---
Si quieres, puedo:
- Añadir un Dockerfile y docker-compose para desarrollo.
- Generar un archivo de configuración de entorno (.env) y adaptar `settings.py` para leerlo.
- Crear plantillas de despliegue (systemd, nginx + gunicorn).
Fin del README.