Initial commit: EFINTEL ERP Django Port
This commit is contained in:
@@ -0,0 +1,196 @@
|
||||
# EFINTEL | ERP Interno I+D+i — Sistema de Control de Gastos
|
||||
|
||||
**Sistema Django de Control Financiero, Operaciones, Talento y Proyectos**
|
||||
|
||||
Dashboard corporativo para la gestión financiera del Área de Investigación, Desarrollo e Innovación (I+D+i) de EFINTEL. Construido con Django 6.1, autenticación por roles, base de datos SQLite, y WebSockets en tiempo real.
|
||||
|
||||
---
|
||||
|
||||
## Requisitos del Sistema
|
||||
|
||||
| Componente | Versión | ¿Necesario? |
|
||||
|---|---|---|
|
||||
| **Python** | 3.10 o superior | ✅ Obligatorio |
|
||||
| **pip** | (viene con Python) | ✅ Obligatorio |
|
||||
| **macOS** | 12 Monterey o superior | 💡 Recomendado |
|
||||
| Node.js / npm | — | ❌ No necesario |
|
||||
| PostgreSQL | — | ❌ No necesario (usa SQLite) |
|
||||
| Redis | — | ❌ No necesario (usa InMemoryChannelLayer) |
|
||||
|
||||
### Instalación de Python en macOS (si no lo tienes)
|
||||
|
||||
```bash
|
||||
# 1. Instalar Homebrew (si no lo tienes)
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
|
||||
# Para Apple Silicon (M1/M2/M3/M4), agregar al PATH:
|
||||
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
|
||||
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||
|
||||
# 2. Instalar Python 3.12
|
||||
brew install python@3.12
|
||||
|
||||
# 3. Verificar
|
||||
python3 --version && pip3 --version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Arranque Rápido
|
||||
|
||||
### Opción A: Script automático (recomendado)
|
||||
|
||||
```bash
|
||||
# Solo la primera vez — dar permisos:
|
||||
chmod +x start.sh
|
||||
|
||||
# Iniciar el sistema:
|
||||
./start.sh
|
||||
```
|
||||
|
||||
El script automáticamente:
|
||||
1. ✅ Verifica Python 3
|
||||
2. ✅ Crea entorno virtual (`venv`) si no existe
|
||||
3. ✅ Instala las 29 dependencias (Django, Channels, Daphne, etc.)
|
||||
4. ✅ Ejecuta migraciones de base de datos
|
||||
5. ✅ Crea usuarios y roles (primera ejecución)
|
||||
6. ✅ Inicia el servidor Daphne en `http://localhost:8000`
|
||||
7. ✅ Abre el navegador automáticamente (macOS)
|
||||
|
||||
### Opción B: Manual
|
||||
|
||||
```bash
|
||||
# 1. Crear entorno virtual
|
||||
python3 -m venv venv
|
||||
|
||||
# 2. Activar
|
||||
source venv/bin/activate
|
||||
|
||||
# 3. Instalar dependencias
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 4. Migraciones
|
||||
python manage.py migrate
|
||||
|
||||
# 5. Crear usuarios (solo la primera vez)
|
||||
python setup_roles.py
|
||||
|
||||
# 6. Iniciar servidor
|
||||
python -m daphne -b 0.0.0.0 -p 8000 config.asgi:application
|
||||
```
|
||||
|
||||
Abrir en el navegador: **http://localhost:8000**
|
||||
|
||||
Para detener: **Ctrl + C**
|
||||
|
||||
---
|
||||
|
||||
## Cuentas de Usuario
|
||||
|
||||
| Usuario | Contraseña | Rol | Acceso |
|
||||
|---|---|---|---|
|
||||
| `admin` | `admin` | Administrador | ✅ Panel de Gestión + Admin Django |
|
||||
| `ginevra_ortega` | `ginevra123` | Administrador | ✅ Panel de Gestión + Admin Django |
|
||||
| `finanzas` | `finanzas123` | Administrador Finanzas | 💰 Liberación de pagos |
|
||||
| `miguel_contreras` | `miguel123` | Director de Proyecto | 📋 Gestión de proyectos |
|
||||
|
||||
### Acceso al panel Admin Django
|
||||
URL: **http://localhost:8000/admin/**
|
||||
Usuarios: `admin` o `ginevra_ortega`
|
||||
|
||||
---
|
||||
|
||||
## Estructura del Proyecto
|
||||
|
||||
```
|
||||
├── manage.py → CLI de Django
|
||||
├── requirements.txt → 29 dependencias Python
|
||||
├── setup_roles.py → Creación de usuarios y roles
|
||||
├── start.sh → Script de arranque automático
|
||||
├── db.sqlite3 → Base de datos SQLite (se genera automáticamente)
|
||||
├── .gitignore → Exclusiones para Git
|
||||
├── README.md → Este archivo
|
||||
│
|
||||
├── config/ → Configuración Django
|
||||
│ ├── settings.py → Settings (SQLite, Channels, ASGI)
|
||||
│ ├── urls.py → Rutas raíz
|
||||
│ ├── asgi.py → Config ASGI (Daphne + WebSockets)
|
||||
│ └── wsgi.py → Config WSGI (fallback)
|
||||
│
|
||||
├── expenses/ → App principal del ERP
|
||||
│ ├── models.py → 8 modelos de datos
|
||||
│ ├── views.py → 16 vistas (dashboard, CRUD, aprobación)
|
||||
│ ├── forms.py → 5 formularios
|
||||
│ ├── urls.py → 18 rutas
|
||||
│ ├── admin.py → Admin Django registrado
|
||||
│ ├── decorators.py → Decorator @role_required
|
||||
│ ├── signals.py → WebSocket signals
|
||||
│ ├── consumers.py → WebSocket consumer
|
||||
│ └── routing.py → WebSocket routing
|
||||
│
|
||||
├── templates/ → Templates HTML
|
||||
│ ├── base.html → Layout base con navegación
|
||||
│ ├── registration/
|
||||
│ │ └── login.html → Pantalla de login
|
||||
│ └── expenses/
|
||||
│ ├── dashboard.html → Resumen financiero
|
||||
│ ├── expense_list.html → Lista de gastos con filtros
|
||||
│ ├── expense_form.html → Formulario de gasto
|
||||
│ ├── project_list.html → Lista de proyectos
|
||||
│ ├── project_form.html → Formulario de proyecto
|
||||
│ ├── gestion.html → Panel de gestión (admin)
|
||||
│ ├── responsable_form.html→ Formulario de responsable
|
||||
│ └── settings_form.html → Config del sistema
|
||||
│
|
||||
├── static/ → Archivos estáticos
|
||||
│ ├── css/style.css → Estilos CSS corporativos EFINTEL
|
||||
│ ├── js/app.js → JavaScript del frontend
|
||||
│ └── img/
|
||||
│ ├── efintel_logo.png
|
||||
│ └── efintel_logo.svg
|
||||
│
|
||||
└── venv/ → Entorno virtual (generado, no se sube a Git)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Módulos del ERP
|
||||
|
||||
| Ruta | Módulo | Descripción |
|
||||
|---|---|---|
|
||||
| `/` | Dashboard | KPIs financieros, gastos del mes, presupuesto restante |
|
||||
| `/gastos/` | Operaciones y Gastos | Lista completa con filtros por proyecto y categoría |
|
||||
| `/gastos/nuevo/` | Registrar Gasto | Formulario multimoneda CLP/USD |
|
||||
| `/proyectos/` | Control de Proyectos | Proyectos con presupuesto y gastos acumulados |
|
||||
| `/gestion/` | Panel de Gestión | CRUD de proyectos, responsables y configuración (solo Admin) |
|
||||
| `/gastos/exportar/csv/` | Exportar CSV | Descarga matriz para Excel / Power BI |
|
||||
| `/admin/` | Admin Django | Panel administrativo completo |
|
||||
|
||||
### Flujo de Aprobación de Gastos (3 pasos)
|
||||
|
||||
1. **Paso 1 — Revisión Documental**: El gasto entra en estado "En Revisión"
|
||||
2. **Paso 2 — Elevar a Finanzas**: Un admin/director solicita el pago
|
||||
3. **Paso 3 — Liberar Pago**: Finanzas aprueba y ejecuta la transferencia
|
||||
|
||||
---
|
||||
|
||||
## Stack Tecnológico
|
||||
|
||||
| Componente | Tecnología |
|
||||
|---|---|
|
||||
| **Backend** | Django 6.1 |
|
||||
| **Servidor ASGI** | Daphne (para WebSockets) |
|
||||
| **WebSockets** | Django Channels |
|
||||
| **Base de datos** | SQLite3 |
|
||||
| **Frontend** | HTML + CSS + JS vanilla |
|
||||
| **Gráficos** | Chart.js (CDN) |
|
||||
| **Iconos** | Lucide Icons (CDN) |
|
||||
| **Fuentes** | Inter + JetBrains Mono (Google Fonts) |
|
||||
|
||||
---
|
||||
|
||||
## Equipo EFINTEL I+D+i
|
||||
|
||||
- **Miguel Angel Contreras Orozco** — Jefe de Área I+D+i
|
||||
- **Ginevra Ortega Acuña** — Encargada de Contratos y Auditoría Documental
|
||||
- **Samuel Abdias Contreras Orozco** — Encargado de Desarrollo Comercial
|
||||
Reference in New Issue
Block a user