Files
MarcosFlorSalcedo 8ec55e40fc 1ra Versión
2026-07-14 18:24:27 -03:00

619 lines
20 KiB
Markdown

# Sistema de Gestión - Complejo Cap1tan ⚽🎾
Sistema integral de gestión para un complejo deportivo que incluye reserva de canchas, gestión de cantina, inventario, proveedores y reportes.
## 📋 Índice
- [Descripción General](#descripción-general)
- [Características Principales](#características-principales)
- [Requisitos del Sistema](#requisitos-del-sistema)
- [Levantar el Proyecto](#levantar-el-proyecto)
- [Instalación](#instalación)
- [Configuración](#configuración)
- [Estructura del Proyecto](#estructura-del-proyecto)
- [Módulos Principales](#módulos-principales)
- [Base de Datos](#base-de-datos)
- [Roles y Permisos](#roles-y-permisos)
- [Uso del Sistema](#uso-del-sistema)
- [API Endpoints](#api-endpoints)
- [Tecnologías Utilizadas](#tecnologías-utilizadas)
## 📖 Descripción General
Sistema web desarrollado para la gestión integral del **Complejo Cap1tan**, permitiendo:
- Administración de usuarios con diferentes roles
- Reserva y gestión de canchas
- Control de inventario de la cantina
- Gestión de proveedores y órdenes de compra
- Reportes de ventas y ganancias
- Sistema de cupones de descuento
- Notificaciones vía WhatsApp
## ✨ Características Principales
### Gestión de Usuarios
- ✅ Sistema de autenticación seguro
- ✅ Tres roles: Administrador General, Administrador Cancha y Administrador Cantina
- ✅ Perfiles de usuarios con datos personales
- ✅ Edición rápida desde el modal de perfil del usuario conectado
- ✅ Gestión completa desde la interfaz administrativa
### Reservas de Canchas
- ✅ Reserva de turnos en canchas
- ✅ Visualización de disponibilidad
- ✅ Sistema de cupones para clientes frecuentes
- ✅ Registro de faltas y asistencias
- ✅ Descuentos automáticos por cupones
- ✅ Verificación del cliente por WhatsApp antes de confirmar la reserva
### Gestión de Cantina
- ✅ Catálogo de productos
- ✅ Control de stock
- ✅ Registro de ventas en tiempo real
- ✅ Alertas visuales de stock bajo
- ✅ Cálculo automático de ganancias
- ✅ Actualización dinámica del stock sin recargar completamente la página
### Gestión de Proveedores
- ✅ Registro de proveedores
- ✅ Órdenes de compra
- ✅ Aprobación de órdenes por el administrador
- ✅ Asociación de productos por proveedor
- ✅ Historial de compras
- ✅ Envío de órdenes por WhatsApp para comunicación rápida
### Reportes y Análisis
- ✅ Reporte de ventas
- ✅ Cálculo de ganancia neta
- ✅ Seguimiento de gastos
- ✅ Resumen por período
-**Generación de reportes por período: Diario, Semanal, Mensual y Anual**
-**Exportación de reportes a PDF y Excel con formato profesional**
- ✅ Correcciones y mejoras en la generación visual de reportes
## 💻 Requisitos del Sistema
### Software Necesario
- **PHP** >= 7.4
- **MySQL/MariaDB** >= 5.7
- **Apache** (incluido en XAMPP)
- **Python** 3.8+ (para envío de mensajes WhatsApp)
- **Navegador** moderno (Chrome, Firefox, Edge)
### Dependencias de Python
```bash
selenium
webdriver-manager
```
### Servidor Local
- **XAMPP** o equivalente (Apache + MySQL + PHP)
## ▶️ Levantar el Proyecto
Para usar el sistema localmente, basta con dejar el proyecto en la carpeta de XAMPP, iniciar Apache y MySQL, importar la base de datos y abrir la interfaz desde el navegador.
### Pasos
1. Ubica el proyecto en:
```bash
C:\xampp\htdocs\TP-Taller\ProyectoTaller
```
2. Inicia **Apache** y **MySQL** desde XAMPP.
3. Crea la base de datos `complejo_cap1tan` y carga los scripts SQL indicados en la sección de instalación.
4. Ajusta las credenciales en [php/conexion.php](php/conexion.php) si es necesario.
5. Abre la aplicación en:
```text
http://localhost/TP-Taller/ProyectoTaller/html/Login.html
```
### Uso inicial
Una vez abierta la aplicación, podés comenzar a gestionar reservas, ventas, productos, proveedores, órdenes y reportes desde el panel principal.
## 📦 Instalación
### 1. Requisitos Previos
Asegúrate de tener **XAMPP** instalado y ejecutando:
- Apache en puerto 80
- MySQL en puerto 3306
### 2. Clonar/Descargar Proyecto
```bash
# Ubicar el proyecto en la carpeta htdocs de XAMPP
c:\xampp\htdocs\TP-Taller\ProyectoTaller
```
### 3. Crear Base de Datos
```bash
# Acceder a phpMyAdmin
# http://localhost/phpmyadmin
# Crear base de datos: complejo_cap1tan
CREATE DATABASE complejo_cap1tan;
USE complejo_cap1tan;
```
### 4. Importar Tablas
1. En phpMyAdmin, selecciona la base de datos `complejo_cap1tan`
2. Ve a la pestaña **Importar**
3. Selecciona el archivo `sql/Tablas.sql`
4. Haz clic en **Ejecutar**
### 5. Importar Datos Iniciales (Opcional)
```bash
# Para cargar datos de prueba
sql/Insertar\ Datos.sql
```
### 6. Importar Triggers
```bash
# Para funcionalidades avanzadas
sql/Triggers.sql
```
## ⚙️ Configuración
### Conexión a Base de Datos
Editar archivo `php/conexion.php`:
```php
<?php
$host = 'localhost'; // Servidor MySQL
$user = 'root'; // Usuario MySQL
$password = 'admin'; // Contraseña MySQL
$db = 'complejo_cap1tan'; // Nombre de la base de datos
$conexion = new mysqli($host, $user, $password, $db);
if ($conexion->connect_error) {
die('Error de conexión: ' . $conexion->connect_error);
}
$conexion->set_charset('utf8');
?>
```
### Configuración de WhatsApp
Para habilitar notificaciones vía WhatsApp:
1. Instalar dependencias Python:
```bash
pip install selenium webdriver-manager
```
2. Descargar ChromeDriver compatible con tu versión de Chrome
3. Editar `python/Enviar_WSP.py` con rutas correctas
## 📁 Estructura del Proyecto
```
ProyectoTaller/
├── backups/ # Copias de seguridad
│ └── *.zip # Archivos de backup automático
├── css/ # Estilos CSS
│ ├── Cantina.css # Estilos del módulo de cantina
│ ├── Login.css # Estilos de login
│ └── Reserva_Clientes.css # Estilos de reservas
├── html/ # Archivos HTML
│ ├── Cantina.html # Página principal (cantina)
│ ├── Login.html # Página de inicio de sesión
│ └── Reserva_Clientes.html # Página de reservas
├── js/ # Archivos JavaScript
│ ├── Gestion_Canchas.js # Lógica de gestión de canchas
│ ├── Gestion_Usuarios.js # Lógica de gestión de usuarios
│ ├── Orden_Compra.js # Lógica de órdenes de compra
│ ├── Reservar_Turno.js # Lógica de reservas
│ ├── Resumen_Ventas.js # Lógica de resumen de ventas
│ ├── Tabla_Gastos.js # Lógica de tabla de gastos
│ ├── Tabla_Productos.js # Lógica de tabla de productos
│ ├── Tabla_Proveedor.js # Lógica de tabla de proveedores
│ ├── Tabla_Reservas.js # Lógica de tabla de reservas
│ └── Tabla_Ventas.js # Lógica de tabla de ventas
├── php/ # Archivos backend PHP
│ ├── conexion.php # Conexión a base de datos
│ ├── Login.php # Autenticación
│ ├── Logout.php # Cierre de sesión
│ ├── Session_Info.php # Información de sesión
│ │
│ ├── *Usuarios*
│ ├── Guardar_Usuario.php # Crear usuario
│ ├── Obtener_Usuarios.php # Listar usuarios
│ ├── Actualizar_Usuario.php # Editar usuario
│ ├── Eliminar_Usuario.php # Eliminar usuario
│ ├── Actualizar_Perfil.php # Actualizar perfil propio
│ │
│ ├── *Canchas*
│ ├── Obtener_Canchas.php # Listar todas las canchas
│ ├── Obtener_Canchas_Numeros.php # Obtener números de canchas
│ ├── Actualizar_Cancha.php # Actualizar datos de cancha
│ ├── Obtener_Disponibilidad_Cancha.php
│ ├── Obtener_Disponibilidad_Quincho.php
│ ├── Obtener_Horarios.php # Obtener horarios disponibles
│ ├── Actualizar_Horarios.php # Editar horarios
│ │
│ ├── *Reservas*
│ ├── Guardar_Reserva.php # Crear reserva
│ ├── Obtener_Reservas.php # Listar reservas
│ ├── Actualizar_Estado_Reserva.php # Cambiar estado de reserva
│ ├── Tabla_Reservas.js # Frontend de reservas
│ │
│ ├── *Productos (Cantina)*
│ ├── Agregar_Producto.php # Crear producto
│ ├── Obtener_Productos.php # Listar productos
│ ├── Editar_Producto.php # Actualizar producto
│ ├── Eliminar_Producto.php # Eliminar producto
│ ├── Buscar_Producto_Ventas.php
│ ├── Buscar_Producto_Orden.php
│ │
│ ├── *Ventas*
│ ├── Registrar_Venta.php # Registrar venta en cantina
│ ├── Obtener_Ventas.php # Obtener histórico de ventas
│ ├── Ganacia_Neta.php # Calcular ganancias
│ │
│ ├── *Proveedores*
│ ├── Guardar_Proveedor.php # Crear proveedor
│ ├── Obtener_Proveedores.php # Listar proveedores
│ ├── Editar_Proveedor.php # Actualizar proveedor
│ ├── Eliminar_Proveedor.php # Eliminar proveedor
│ ├── Buscar_Proveedor.php # Buscar proveedor
│ ├── Buscar_Proveedor_Editar.php
│ │
│ ├── *Órdenes de Compra*
│ ├── Registrar_Orden_Compra.php # Crear orden
│ ├── Obtener_Ordenes_Compra.php # Listar órdenes
│ ├── Actualizar_Orden_Compra.php # Cambiar estado de orden
│ ├── Obtener_Productos_Orden.php # Productos de una orden
│ ├── Agregar_Producto_Proveedor.php
│ ├── Eliminar_Producto_Proveedor.php
│ ├── Obtener_Productos_Proveedor.php
│ │
│ ├── *Gastos*
│ ├── Registrar_Gastos.php # Registrar gasto
│ ├── Obtener_Gastos.php # Listar gastos
│ ├── Editar_Gasto.php # Editar gasto
│ ├── Eliminar_Gasto.php # Eliminar gasto
│ │
│ ├── *Cupones*
│ ├── Obtener_Cupon.php # Obtener datos de cupón
│ │
│ ├── *Utilidades*
│ ├── Enviar_Codigo_WSP.php # Enviar código de verificación
│ ├── Obtener_Reporte.php # Generar reportes
│ ├── backup.php # Hacer backup de BD
│ ├── Test_Conexion.php # Prueba de conexión
├── python/ # Scripts Python
│ └── Enviar_WSP.py # Envío automático de mensajes WhatsApp
├── sql/ # Scripts SQL
│ ├── Tablas.sql # Estructura de base de datos
│ ├── Insertar\ Datos.sql # Datos iniciales de prueba
│ ├── Consultas.sql # Consultas útiles
│ └── Triggers.sql # Triggers de base de datos
└── README.md # Este archivo
```
## 🗄️ Módulos Principales
### 1. **Autenticación**
- `php/Login.php`: Valida credenciales de usuario
- `php/Logout.php`: Cierra sesión actual
- Sistema de sesiones con roles
### 2. **Gestión de Usuarios**
- Crear, editar, listar y eliminar usuarios
- Asignación de roles (Admin, Cancha, Cantina)
- Perfiles con datos personales
- Edición rápida del perfil desde el panel principal
### 3. **Gestión de Canchas**
- Gestión de canchas (CRUD)
- Gestión de horarios disponibles
- Seguimiento de disponibilidad
### 4. **Sistema de Reservas**
- Reserva de turnos en canchas
- Sistema de cupones para descuentos
- Registro de asistencia/faltas
- Cálculo automático de descuentos
- Confirmación con verificación por WhatsApp
### 5. **Cantina**
- Gestión de productos (CRUD)
- Control de inventario
- Registro de ventas
- Alertas de stock bajo
### 6. **Proveedores y Compras**
- Registro de proveedores
- Órdenes de compra con aprobación
- Asociación de productos por proveedor
- Envío de órdenes y seguimiento desde la interfaz
### 7. **Reportes**
- Resumen de ventas por período
- Cálculo de ganancias netas
- Tracking de gastos
- Exportación a PDF y Excel
- Visualización optimizada para reportes diarios, semanales, mensuales y anuales
### 8. **Seguridad y Operaciones Avanzadas**
- Verificación de clientes por WhatsApp
- Gestión del perfil del usuario autenticado
- Copias de seguridad automáticas de la base de datos
- Alertas de productos con stock bajo
- Mejoras en el flujo de validación y control de operaciones
## 📊 Base de Datos
### Tablas Principales
| Tabla | Descripción |
|-------|-----------|
| `usuarios` | Usuarios del sistema con roles |
| `clientes` | Clientes que reservan canchas |
| `canchas` | Canchas disponibles para reserva |
| `reservas` | Histórico de reservas |
| `productos` | Productos de la cantina |
| `ventas` | Registro de ventas |
| `ventas_productos` | Detalle de productos en cada venta |
| `proveedores` | Proveedores de productos |
| `ordenes_compra` | Órdenes de compra a proveedores |
| `ordenes_productos` | Detalle de productos en órdenes |
| `gastos` | Gastos operativos |
| `cupones` | Cupones de descuento |
| `alertas_stock` | Alertas de stock bajo |
### Roles de Base de Datos
- `Admin`: Acceso total a todo el sistema
- `Cancha`: Gestión de reservas y canchas
- `Cantina`: Gestión de productos y ventas
## 👥 Roles y Permisos
### Administrador
- ✅ Gestión completa de usuarios
- ✅ Gestión de canchas y horarios
- ✅ Acceso a reportes
- ✅ Gestión de proveedores
- ✅ Backup de base de datos
### Cancha
- ✅ Gestionar reservas
- ✅ Ver disponibilidad de canchas
- ✅ Consultar historial de reservas
- ❌ Gestión de usuarios
- ❌ Reportes financieros
### Cantina
- ✅ Gestionar productos
- ✅ Registrar ventas
- ✅ Ver resumen de ventas
- ✅ Gestionar proveedores
- ✅ Crear órdenes de compra
- ❌ Gestión de usuarios
- ❌ Gestión de reservas
## 🚀 Uso del Sistema
### 1. Acceso al Sistema
```
URL: http://localhost/TP-Taller/ProyectoTaller/html/Login.html
Usuario: admin
Contraseña: admin
```
### 2. Crear un Usuario
1. Inicia sesión como Admin
2. Ve a Gestión de Usuarios
3. Haz clic en "Nuevo Usuario"
4. Completa el formulario con:
- Usuario (nombre de login)
- Contraseña
- Nombre y Apellido
- DNI
- Email y Teléfono
- Rol
### 3. Registrar una Reserva
1. Ve a Reservas > Nueva Reserva
2. Selecciona la cancha
3. Elige la fecha y hora disponible
4. Si el cliente tiene cupón, selecciona el descuento
5. El sistema solicita verificación por WhatsApp del cliente
6. Completa la verificación e ingresa el código recibido
7. Confirma la reserva
### 4. Registrar una Venta
1. Ve a Cantina > Nueva Venta
2. Busca y agrega productos (el sistema alertará si el stock es bajo)
3. El sistema calcula automáticamente el total
4. Registra la venta
### 5. Crear Orden de Compra
1. Ve a Proveedores > Nueva Orden
2. Selecciona proveedor
3. Agrega productos
4. Envía para aprobación
5. (Opcional) Envía la orden por WhatsApp desde el sistema
6. Admin aprueba o rechaza la orden
### 6. Generar Reportes
1. Ve a Reportes > Generar Reportes
2. Selecciona el tipo de reporte:
- **Diario**: Control de operación y cierre de caja
- **Semanal**: Flujo de caja y rendimiento
- **Mensual**: Rentabilidad y estado de resultados
- **Anual**: Balance general y visión estratégica
3. Visualiza el reporte en pantalla
4. Exporta a **PDF** o **Excel** según necesites
## 🔌 API Endpoints
Todos los endpoints devuelven JSON y utilizan `GET` o `POST`.
### Usuarios
```
POST /php/Guardar_Usuario.php - Crear usuario
GET /php/Obtener_Usuarios.php - Listar usuarios
POST /php/Actualizar_Usuario.php - Editar usuario
POST /php/Eliminar_Usuario.php - Eliminar usuario
POST /php/Actualizar_Perfil.php - Actualizar perfil propio
GET /php/Session_Info.php - Obtener datos de sesión actual
```
### Autenticación
```
POST /php/Login.php - Iniciar sesión
GET /php/Logout.php - Cerrar sesión
```
### Canchas
```
GET /php/Obtener_Canchas.php - Listar canchas
GET /php/Obtener_Canchas_Numeros.php - Obtener números
POST /php/Actualizar_Cancha.php - Editar cancha
GET /php/Obtener_Disponibilidad_Cancha.php
GET /php/Obtener_Horarios.php - Listar horarios
POST /php/Actualizar_Horarios.php - Editar horarios
```
### Reservas
```
POST /php/Guardar_Reserva.php - Crear reserva
GET /php/Obtener_Reservas.php - Listar reservas
POST /php/Actualizar_Estado_Reserva.php - Cambiar estado
GET /php/Obtener_Cupon.php - Obtener estado del cupón
POST /php/Enviar_Codigo_WSP.php - Enviar código de verificación WhatsApp
```
### Productos
```
POST /php/Agregar_Producto.php - Crear producto
GET /php/Obtener_Productos.php - Listar productos
POST /php/Editar_Producto.php - Editar producto
POST /php/Eliminar_Producto.php - Eliminar producto
```
### Ventas
```
POST /php/Registrar_Venta.php - Registrar venta
GET /php/Obtener_Ventas.php - Listar ventas
GET /php/Ganacia_Neta.php - Calcular ganancias
```
### Proveedores
```
POST /php/Guardar_Proveedor.php - Crear proveedor
GET /php/Obtener_Proveedores.php - Listar proveedores
POST /php/Editar_Proveedor.php - Editar proveedor
POST /php/Eliminar_Proveedor.php - Eliminar proveedor
```
### Órdenes de Compra
```
POST /php/Registrar_Orden_Compra.php - Crear orden
GET /php/Obtener_Ordenes_Compra.php - Listar órdenes
POST /php/Actualizar_Orden_Compra.php - Cambiar estado (aprobar/rechazar)
GET /php/Obtener_Productos_Orden.php - Productos de orden
POST /php/Agregar_Producto_Proveedor.php - Asociar producto a proveedor
```
### Gastos
```
POST /php/Registrar_Gastos.php - Registrar gasto
GET /php/Obtener_Gastos.php - Listar gastos
POST /php/Editar_Gasto.php - Editar gasto
POST /php/Eliminar_Gasto.php - Eliminar gasto
```
### Reportes y Operaciones
```
GET /php/Obtener_Reporte.php - Generar reportes (diario, semanal, mensual, anual)
GET /php/Ganacia_Neta.php - Ganancias por período
POST /php/backup.php - Crear backup de base de datos
GET /php/Test_Conexion.php - Probar conexión a base de datos
```
## 🛠️ Tecnologías Utilizadas
### Backend
- **PHP 7.4+** - Lenguaje servidor
- **MySQL/MariaDB** - Base de datos relacional
- **MySQLi** - Conexión a base de datos
- **Prepared Statements** - Protección contra SQL injection
### Frontend
- **HTML5** - Estructura
- **CSS3** - Estilos
- **JavaScript (Vanilla)** - Interactividad
- **AJAX** - Comunicación asíncrona
### Utilidades
- **Python 3.8+** - Scripts de automatización
- **Selenium** - Automatización de WhatsApp Web
- **XAMPP** - Stack local (Apache, MySQL, PHP)
## 🔒 Seguridad
- Autenticación con sesiones
- Prepared Statements para prevenir SQL injection
- Validación de entrada en servidor
- Control de roles y permisos
## 📝 Mantenimiento
### Backup Automático
```bash
# Ejecutar backup manual
php/backup.php
```
Los backups se guardan en la carpeta `backups/` con timestamp.
### Prueba de Conexión
```bash
# Verificar conexión a base de datos
http://localhost/TP-Taller/ProyectoTaller/php/Test_Conexion.php
```
## 🐛 Troubleshooting
### Error: "Error de conexión"
- Verificar que MySQL esté corriendo
- Revisar credenciales en `php/conexion.php`
- Verificar que la base de datos existe
### Error: "Sesión expirada"
- El usuario fue desconectado por inactividad
- Volver a iniciar sesión
### Productos no se visualizan
- Verificar que hay productos en la base de datos
- Revisar permisos de usuario
- Inspeccionar la consola de navegador para errores
### WhatsApp no envía mensajes
- Verificar instalación de Python y Selenium
- Verificar ruta a ChromeDriver
- Revisar formato de número telefónico
## 📱 Integración WhatsApp
El sistema puede enviar notificaciones vía WhatsApp:
- Códigos de verificación
- Confirmaciones de reserva
- Recordatorios
**Nota:** Requiere ChromeDriver y sesión activa de WhatsApp Web.
## 📄 Licencia
Proyecto privado para uso interno del Complejo Cap1tan.
---
**Última actualización:** Julio 2026
**Versión:** 1.0