Primer subida completa
This commit is contained in:
256
README.md
Executable file
256
README.md
Executable file
@@ -0,0 +1,256 @@
|
||||
# Sistema de Administración de Apertura y Cierre de Contenedor
|
||||
|
||||
## Descripción
|
||||
|
||||
Sistema web en PHP + MySQL para administrar la apertura y cierre de un contenedor de basura, asignando turnos semanales a personas con horarios configurables.
|
||||
|
||||
## Requisitos
|
||||
|
||||
- PHP 7.4 o superior
|
||||
- MySQL 5.7 o superior
|
||||
- Extensión PHP PDO MySQL
|
||||
- Composer (opcional)
|
||||
- Servidor web (Apache/Nginx/PHP built-in)
|
||||
|
||||
## Instalación
|
||||
|
||||
### 1. Clonar o copiar los archivos
|
||||
|
||||
Copiar todos los archivos del proyecto al directorio del servidor web.
|
||||
|
||||
### 2. Configurar variables de entorno
|
||||
|
||||
Copiar el archivo de ejemplo:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Editar el archivo `.env` con la configuración correcta:
|
||||
|
||||
```env
|
||||
DB_HOST=localhost
|
||||
DB_NAME=contenedor_ibiza
|
||||
DB_USER=root
|
||||
DB_PASS=tu_password
|
||||
|
||||
SITE_URL=http://localhost:8080
|
||||
|
||||
TELEGRAM_BOT_TOKEN=tu_token_de_telegram
|
||||
```
|
||||
|
||||
### 3. Crear la base de datos
|
||||
|
||||
Ejecutar el script SQL:
|
||||
|
||||
```bash
|
||||
mysql -u root -p < sql/schema.sql
|
||||
```
|
||||
|
||||
O importar el archivo `sql/schema.sql` desde phpMyAdmin o cualquier cliente MySQL.
|
||||
|
||||
### 4. Configurar el servidor web
|
||||
|
||||
#### Con PHP built-in (desarrollo):
|
||||
|
||||
```bash
|
||||
php -S localhost:8080 -t public
|
||||
```
|
||||
|
||||
#### Con Apache:
|
||||
|
||||
Configurar el document root hacia la carpeta `public/`.
|
||||
|
||||
#### Con Nginx:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
root /path/to/project/public;
|
||||
index index.php;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
include fastcgi_params;
|
||||
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Credenciales de acceso
|
||||
|
||||
- **Email:** admin@ibiza.com
|
||||
- **Contraseña:** admin123
|
||||
|
||||
## Estructura del Proyecto
|
||||
|
||||
```
|
||||
contenedor/
|
||||
├── .env.example # Variables de entorno
|
||||
├── config/
|
||||
│ └── config.php # Configuración general
|
||||
├── public/ # Archivos públicos
|
||||
│ ├── index.php # Redirección según rol
|
||||
│ ├── login.php # Página de login
|
||||
│ ├── logout.php # Cierre de sesión
|
||||
│ ├── ayudante.php # Panel del ayudante
|
||||
│ ├── admin/ # Panel de administración
|
||||
│ │ ├── index.php # Dashboard
|
||||
│ │ ├── usuarios.php # CRUD de usuarios
|
||||
│ │ ├── horarios.php # Configuración de horarios
|
||||
│ │ ├── asignaciones.php # Asignación de turnos con reordenamiento
|
||||
│ │ └── webhook.php # Configuración del webhook del bot
|
||||
│ └── partials/ # Compartials/
|
||||
│ └── navbar.php # Barra de navegación
|
||||
├── src/ # Código fuente
|
||||
│ ├── Database.php # Conexión a BD
|
||||
│ ├── Auth.php # Autenticación
|
||||
│ ├── User.php # Modelo de usuarios
|
||||
│ ├── DiasHorarios.php # Modelo de horarios
|
||||
│ └── Asignacion.php # Modelo de asignaciones y rotación automática
|
||||
├── bot/ # Bot de Telegram
|
||||
│ ├── TelegramBot.php # Clase del bot con teclado de menú
|
||||
│ ├── webhook.php # Webhook del bot
|
||||
│ └── setup_webhook.php # Script CLI para configurar webhook
|
||||
├── sql/
|
||||
│ └── schema.sql # Esquema de base de datos
|
||||
├── scripts/ # Scripts CLI
|
||||
│ └── rotar_automatico.php # Script de rotación automática
|
||||
└── assets/ # Recursos estáticos
|
||||
├── css/
|
||||
└── js/
|
||||
```
|
||||
|
||||
## Configuración del Bot de Telegram
|
||||
|
||||
### 1. Crear un bot
|
||||
|
||||
1. Talking to @BotFather on Telegram
|
||||
2. Send `/newbot` to create a new bot
|
||||
3. Follow the instructions to set a name and username
|
||||
4. Copy the API token
|
||||
|
||||
### 2. Configurar el webhook
|
||||
|
||||
El webhook puede configurarse de tres formas:
|
||||
|
||||
**Opción A: Desde el panel de administración**
|
||||
1. Ir a Administración > Webhook
|
||||
2. Ingresar la URL del bot
|
||||
3. Click en "Configurar Webhook"
|
||||
|
||||
**Opción B: Con script CLI**
|
||||
```bash
|
||||
php bot/setup_webhook.php
|
||||
```
|
||||
|
||||
**Opción C: Manualmente**
|
||||
```
|
||||
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://tu-dominio.com/bot/webhook.php
|
||||
```
|
||||
|
||||
### 3. Usar el bot
|
||||
|
||||
El bot tiene un teclado de menú con las siguientes opciones:
|
||||
|
||||
- **📅 Ver Turnos** - Muestra todos los turnos de la semana actual
|
||||
- **🔍 ¿Qué Semana Es?** - Indica la semana actual del ciclo de rotación
|
||||
- **📋 Ayuda** - Muestra los comandos disponibles
|
||||
|
||||
**Comandos disponibles:**
|
||||
- `/start` - Iniciar el bot
|
||||
- `/menu` - Mostrar el teclado de menú
|
||||
- `/turnos` - Ver turnos de la semana actual
|
||||
- `/semana` - Ver qué semana es del ciclo de rotación
|
||||
|
||||
## Configuración de Rotación Automática
|
||||
|
||||
Para configurar la rotación automática de turnos cada semana, agregar al crontab:
|
||||
|
||||
```bash
|
||||
# Rotar turnos cada domingo a las 00:00
|
||||
0 0 * * 0 /usr/bin/php /path/to/project/scripts/rotar_automatico.php >> /var/log/rotacion.log 2>&1
|
||||
```
|
||||
|
||||
O ejecutar manualmente:
|
||||
|
||||
```bash
|
||||
php scripts/rotar_automatico.php
|
||||
```
|
||||
|
||||
## Funcionalidades
|
||||
|
||||
### Administrador
|
||||
- Crear, editar y desactivar usuarios
|
||||
- Asignar turnos por semana con selector agrupado por mes
|
||||
- Visualizar asignaciones con contador "Semana X de 4"
|
||||
- **Reordenar rotación** - Arrastrar y soltar para cambiar el orden de la rotación
|
||||
- Recálculo automático de asignaciones futuras al reordenar
|
||||
- Configurar días activos de apertura
|
||||
- Configurar horarios de apertura y cierre por día
|
||||
- Visualizar todas las asignaciones
|
||||
- Rotar turnos manualmente
|
||||
- Configurar webhook del bot de Telegram
|
||||
|
||||
### Ayudante
|
||||
- Visualizar únicamente los días y horarios que le corresponden
|
||||
- Ver información de su turno actual
|
||||
- **Calendario de Turnos** - Tabla con todos los turnos de las próximas 5 semanas
|
||||
|
||||
### Bot de Telegram
|
||||
- **Teclado de menú** con botones interactivos
|
||||
- `/start` - Iniciar conversación con el bot
|
||||
- `/menu` - Mostrar teclado de opciones
|
||||
- `/turnos` - Ver todos los turnos de la semana actual
|
||||
- `/semana` - Ver qué semana es del ciclo de rotación (1-4)
|
||||
- Configuración de webhook desde el panel de administración
|
||||
|
||||
## Personalización
|
||||
|
||||
### Agregar más personas
|
||||
|
||||
1. Ir al panel de administración > Usuarios
|
||||
2. Click en "Nuevo Usuario"
|
||||
3. Completar los datos
|
||||
|
||||
### Modificar horarios
|
||||
|
||||
1. Ir al panel de administración > Horarios
|
||||
2. Modificar las horas de apertura y cierre
|
||||
3. Activar/desactivar días según necesidad
|
||||
|
||||
### Cambiar configuración de turnos
|
||||
|
||||
Los turnos pueden asignarse manualmente desde el panel de administración > Asignaciones.
|
||||
|
||||
## Seguridad
|
||||
|
||||
- Las contraseñas se almacenan usando `password_hash()` de PHP
|
||||
- Las sesiones son únicas por usuario
|
||||
- Los accesos están protegidos por autenticación
|
||||
- Las consultas usan prepared statements para prevenir SQL injection
|
||||
|
||||
## Solución de Problemas
|
||||
|
||||
### Error de conexión a la base de datos
|
||||
- Verificar las credenciales en el archivo `.env`
|
||||
- Asegurarse de que MySQL esté ejecutándose
|
||||
|
||||
### El bot de Telegram no responde
|
||||
- Verificar que el token sea correcto en `.env`
|
||||
- Confirmar que el webhook esté configurado correctamente
|
||||
- Usar el panel de administración > Webhook para verificar
|
||||
- Revisar los logs del servidor
|
||||
|
||||
### Error "Todos los campos son obligatorios" al guardar horarios
|
||||
- Verificar que las variables de horario coincidan con los nombres del formulario
|
||||
|
||||
### Error en rotación de turnos
|
||||
- Verificar que exista al menos un usuario activo
|
||||
- Verificar que la tabla `asignaciones_turnos` tenga registros previos
|
||||
- El ciclo de rotación inicia el domingo 28 de diciembre de 2024
|
||||
Reference in New Issue
Block a user