- Crear método getUsuariosGestion() que incluye ayudantes y coordinadores - Actualizar asignaciones_completo.php para mostrar coordinadores - Actualizar todas las páginas de gestión para usar nuevo método - Corregir que coordinadores aparezcan en asignaciones masivas - Mantener consistencia en todos los módulos de administración
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:
cp .env.example .env
Editar el archivo .env con la configuración correcta:
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:
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):
php -S localhost:8080 -t public
Con Apache:
Configurar el document root hacia la carpeta public/.
Con 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
- Talking to @BotFather on Telegram
- Send
/newbotto create a new bot - Follow the instructions to set a name and username
- Copy the API token
2. Configurar el webhook
El webhook puede configurarse de tres formas:
Opción A: Desde el panel de administración
- Ir a Administración > Webhook
- Ingresar la URL del bot
- Click en "Configurar Webhook"
Opción B: Con script CLI
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:
# 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:
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
- Ir al panel de administración > Usuarios
- Click en "Nuevo Usuario"
- Completar los datos
Modificar horarios
- Ir al panel de administración > Horarios
- Modificar las horas de apertura y cierre
- 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_turnostenga registros previos - El ciclo de rotación inicia el domingo 28 de diciembre de 2024