- Agregada libreria Dompdf para generar PDFs - Creada clase PDFGenerator con metodos reutilizables - Pagina de exportacion para ayudantes (mis-turnos.pdf) - Pagina de exportacion para admin (reporte-admin.pdf) - Boton Exportar PDF en pagina de ayudantes y admin - Corregido bug en getAsignacionActual() para usar domingo como inicio de semana
276 lines
13 KiB
PHP
Executable File
276 lines
13 KiB
PHP
Executable File
<?php
|
|
require_once __DIR__ . '/../src/Auth.php';
|
|
require_once __DIR__ . '/../src/User.php';
|
|
require_once __DIR__ . '/../src/DiasHorarios.php';
|
|
require_once __DIR__ . '/../src/Asignacion.php';
|
|
require_once __DIR__ . '/../src/Database.php';
|
|
|
|
$auth = new Auth();
|
|
$auth->requireAuth();
|
|
|
|
if ($auth->isAdmin()) {
|
|
header('Location: /admin/index.php');
|
|
exit;
|
|
}
|
|
|
|
$user = $auth->getCurrentUser();
|
|
$horariosModel = new DiasHorarios();
|
|
$asignacionModel = new Asignacion();
|
|
$db = Database::getInstance()->getConnection();
|
|
|
|
$horarios = $horariosModel->getActivos();
|
|
$asignacionActual = $asignacionModel->getAsignacionActual();
|
|
|
|
$semanasFuturas = [];
|
|
|
|
$hoy = new DateTime();
|
|
$diaSemana = (int)$hoy->format('w');
|
|
$domingoEstaSemana = clone $hoy;
|
|
$domingoEstaSemana->modify('-' . $diaSemana . ' days');
|
|
|
|
for ($i = 0; $i <= 4; $i++) {
|
|
$semanaDomingo = clone $domingoEstaSemana;
|
|
$semanaDomingo->modify("+{$i} weeks");
|
|
|
|
$semanaInicio = $semanaDomingo->format('Y-m-d');
|
|
$asignacionesSemana = $asignacionModel->getTodasAsignacionesPorSemana($semanaInicio);
|
|
|
|
$semanasFuturas[] = [
|
|
'inicio' => $semanaInicio,
|
|
'fin' => date('Y-m-d', strtotime('+5 days', strtotime($semanaInicio))),
|
|
'asignaciones' => $asignacionesSemana,
|
|
'asignacion' => !empty($asignacionesSemana) ? $asignacionesSemana[0] : null
|
|
];
|
|
}
|
|
|
|
$miTurno = $asignacionActual && $asignacionActual['id'] == $user['id'];
|
|
|
|
$misAsignacionesFuturas = [];
|
|
foreach ($semanasFuturas as $semana) {
|
|
foreach ($semana['asignaciones'] as $asignacion) {
|
|
if ($asignacion['id'] == $user['id']) {
|
|
$misAsignacionesFuturas[] = [
|
|
'semana' => $semana,
|
|
'asignacion' => $asignacion
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
$userModel = new User();
|
|
$ayudantes = $userModel->getAyudantesActivos();
|
|
|
|
$domingo = new DateTime();
|
|
$domingo->modify('-' . (int)$domingo->format('w') . ' days');
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="es">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Mis Turnos - Contenedor Ibiza</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
</head>
|
|
<body>
|
|
<nav class="navbar navbar-dark bg-primary">
|
|
<div class="container">
|
|
<a class="navbar-brand" href="/ayudante.php">Contenedor Ibiza</a>
|
|
<span class="navbar-text me-3">
|
|
Hola, <?= htmlspecialchars($user['nombre']) ?>
|
|
</span>
|
|
<a href="/cambiar-password.php" class="btn btn-outline-light btn-sm me-3">Cambiar Contraseña</a>
|
|
<a href="/logout.php" class="btn btn-outline-light btn-sm">Cerrar Sesión</a>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="container mt-4">
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<h2 class="mb-0">Mis Turnos</h2>
|
|
<a href="/export-pdf.php" target="_blank" class="btn btn-danger btn-sm">
|
|
📄 Exportar PDF
|
|
</a>
|
|
</div>
|
|
|
|
<?php
|
|
$hoy = new DateTime();
|
|
$diaSemana = (int)$hoy->format('w');
|
|
$domingoActual = clone $hoy;
|
|
$domingoActual->modify('-' . $diaSemana . ' days');
|
|
|
|
$asignacionEstaSemana = $asignacionModel->getAsignacionPorSemana($domingoActual->format('Y-m-d'));
|
|
$tengoTurnoEstaSemana = $asignacionEstaSemana && $asignacionEstaSemana['id'] == $user['id'];
|
|
|
|
if ($tengoTurnoEstaSemana):
|
|
?>
|
|
<div class="alert alert-success mb-4">
|
|
<strong>Tienes turno esta semana!</strong><br>
|
|
Del <?= date('d/m/y', strtotime($asignacionEstaSemana['semana_inicio'])) ?>
|
|
al <?= date('d/m/y', strtotime($asignacionEstaSemana['semana_fin'])) ?>
|
|
</div>
|
|
<?php elseif ($asignacionEstaSemana): ?>
|
|
<div class="alert alert-secondary mb-4">
|
|
<strong>Turno esta semana:</strong> <?= htmlspecialchars($asignacionEstaSemana['nombre']) ?><br>
|
|
<?php if (!empty($misAsignacionesFuturas)): ?>
|
|
Tu proximo turno: <?= date('d/m/y', strtotime($misAsignacionesFuturas[0]['semana']['inicio'])) ?>
|
|
al <?= date('d/m/y', strtotime($misAsignacionesFuturas[0]['semana']['fin'])) ?>
|
|
<?php else: ?>
|
|
Tu proximo turno sera en las proximas semanas.
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php elseif (!empty($misAsignacionesFuturas)): ?>
|
|
<div class="alert alert-info mb-4">
|
|
<strong>Proximo turno:</strong><br>
|
|
Del <?= date('d/m/y', strtotime($misAsignacionesFuturas[0]['semana']['inicio'])) ?>
|
|
al <?= date('d/m/y', strtotime($misAsignacionesFuturas[0]['semana']['fin'])) ?>
|
|
</div>
|
|
<?php else: ?>
|
|
<div class="alert alert-warning mb-4">
|
|
No hay turnos asignados para las proximas semanas.
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="card shadow-sm">
|
|
<div class="card-header bg-warning text-dark">
|
|
<h5 class="mb-0">Horarios por Semana</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<?php
|
|
$diasNombres = [
|
|
'domingo' => 'Domingo',
|
|
'lunes' => 'Lunes',
|
|
'martes' => 'Martes',
|
|
'miercoles' => 'Miercoles',
|
|
'jueves' => 'Jueves',
|
|
'viernes' => 'Viernes',
|
|
'sabado' => 'Sabado'
|
|
];
|
|
$diasOrden = ['domingo', 'lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado'];
|
|
?>
|
|
<div class="table-responsive">
|
|
<table class="table table-bordered table-sm mb-0" style="min-width: 600px;">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th class="text-center" style="min-width: 120px;">Semana</th>
|
|
<?php foreach ($diasOrden as $dia): ?>
|
|
<th class="text-center"><?= $diasNombres[$dia] ?></th>
|
|
<?php endforeach; ?>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($semanasFuturas as $index => $semana): ?>
|
|
<?php
|
|
$esMiTurno = !empty($semana['asignaciones']) && in_array($user['id'], array_column($semana['asignaciones'], 'id'));
|
|
$rowClass = $esMiTurno ? 'table-success' : '';
|
|
?>
|
|
<tr class="<?= $rowClass ?>">
|
|
<td class="text-center align-middle">
|
|
<strong><?= date('d/m', strtotime($semana['inicio'])) ?></strong>
|
|
<?php if ($index === 0): ?>
|
|
<span class="badge bg-primary ms-1">Actual</span>
|
|
<?php endif; ?>
|
|
<?php if ($esMiTurno): ?>
|
|
<span class="badge bg-success ms-1">Tu turno</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<?php foreach ($diasOrden as $dia): ?>
|
|
<?php
|
|
$horarioDia = null;
|
|
foreach ($horarios as $h) {
|
|
if ($h['dia_semana'] === $dia) {
|
|
$horarioDia = $h;
|
|
break;
|
|
}
|
|
}
|
|
$esActivo = $horarioDia && $horarioDia['activo'];
|
|
$claseDia = '';
|
|
if ($esMiTurno && $esActivo) {
|
|
$claseDia = 'bg-success text-white';
|
|
} elseif (!$esActivo) {
|
|
$claseDia = 'text-muted';
|
|
}
|
|
?>
|
|
<td class="text-center <?= $claseDia ?>" style="min-width: 100px;">
|
|
<?php if ($esActivo): ?>
|
|
<small><?= date('H:i', strtotime($horarioDia['hora_apertura'])) ?></small><br>
|
|
<small><?= date('H:i', strtotime($horarioDia['hora_cierre'])) ?></small>
|
|
<?php else: ?>
|
|
<small class="text-muted">Cerrado</small>
|
|
<?php endif; ?>
|
|
</td>
|
|
<?php endforeach; ?>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="mt-2">
|
|
<small class="text-muted">
|
|
<span class="badge bg-success text-white">Verde</span> = Tu turno activo |
|
|
<span class="badge bg-secondary text-white">Gris</span> = Dia cerrado |
|
|
Horario: Apertura - Cierre
|
|
</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card mt-4 shadow-sm">
|
|
<div class="card-header bg-info text-white">
|
|
<h5 class="mb-0">Turnos de Ayudantes</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0">
|
|
<thead>
|
|
<tr>
|
|
<th>Ayudante</th>
|
|
<th class="text-center">Fecha 1</th>
|
|
<th class="text-center">Fecha 2</th>
|
|
<th class="text-center">Fecha 3</th>
|
|
<th class="text-center">Fecha 4</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($ayudantes as $ayudante): ?>
|
|
<?php
|
|
$stmt = $db->prepare("
|
|
SELECT semana_inicio, semana_fin
|
|
FROM asignaciones_turnos
|
|
WHERE user_id = ? AND semana_inicio >= CURDATE()
|
|
ORDER BY semana_inicio
|
|
LIMIT 4
|
|
");
|
|
$stmt->execute([$ayudante['id']]);
|
|
$turnos = $stmt->fetchAll();
|
|
?>
|
|
<tr class="<?= $ayudante['id'] == $user['id'] ? 'table-success' : '' ?>">
|
|
<td>
|
|
<?= htmlspecialchars($ayudante['nombre']) ?>
|
|
<?php if ($ayudante['id'] == $user['id']): ?>
|
|
<span class="badge bg-success ms-1">Tu</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<?php for ($i = 0; $i < 4; $i++): ?>
|
|
<td class="text-center">
|
|
<?php if (isset($turnos[$i])): ?>
|
|
<span class="badge bg-primary">
|
|
<?= date('d/m/Y', strtotime($turnos[$i]['semana_inicio'])) ?> -
|
|
<?= date('d/m/Y', strtotime($turnos[$i]['semana_fin'])) ?>
|
|
</span>
|
|
<?php else: ?>
|
|
<span class="text-muted">-</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<?php endfor; ?>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
</body>
|
|
</html>
|