fix: Corregir funcionalidad de reordenamiento y generación automática de turnos
- Añadir jQuery para resolver error 'jQuery is not defined' - Corregir variable $db indefinida en reordenamiento de rotación - Añadir método getDb() a clase Asignacion para acceso a base de datos - Implementar procesamiento correcto de acción 'rotacion_automatica' - Actualizar inputs ocultos al reordenar elementos visuales - Añadir redirección para recargar datos actualizados después de guardar orden - Mejorar manejo de mensajes de éxito/errores en generación automática
This commit is contained in:
@@ -19,6 +19,11 @@ $asignacionModel = new Asignacion();
|
||||
$message = '';
|
||||
$messageType = '';
|
||||
|
||||
if (isset($_GET['success']) && $_GET['success'] === 'orden_actualizado') {
|
||||
$message = 'Orden actualizado correctamente. Se recalcularon las asignaciones futuras.';
|
||||
$messageType = 'success';
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
if (!CSRF::isValidRequest()) {
|
||||
$message = 'Error de validación del formulario';
|
||||
@@ -47,6 +52,21 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$messageType = 'success';
|
||||
}
|
||||
}
|
||||
} elseif ($action === 'rotacion_automatica') {
|
||||
$resultado = $asignacionModel->asignarSemanasFuturasAutomaticas(12);
|
||||
|
||||
if ($resultado['success'] > 0) {
|
||||
$message = "Se generaron {$resultado['success']} semanas futuras correctamente";
|
||||
if (!empty($resultado['errors'])) {
|
||||
$message .= ". Errores: " . implode(', ', $resultado['errors']);
|
||||
$messageType = 'warning';
|
||||
} else {
|
||||
$messageType = 'success';
|
||||
}
|
||||
} else {
|
||||
$message = 'No se pudieron generar asignaciones: ' . implode(', ', $resultado['errors']);
|
||||
$messageType = 'danger';
|
||||
}
|
||||
} elseif ($action === 'asignar_masivo') {
|
||||
$userIds = $_POST['user_ids'] ?? [];
|
||||
$semanaInicio = $_POST['semana_inicio'] ?? '';
|
||||
@@ -370,17 +390,7 @@ No hay asignación para la semana <?= $posicionSinAsignar ?> de 4 (<?= date('d/m
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'rotacion_automatica'): ?>
|
||||
<?php
|
||||
$resultado = $asignacionModel->asignarSemanasFuturasAutomaticas(12);
|
||||
?>
|
||||
<div class="alert alert-<?= !empty($resultado['errors']) ? 'warning' : 'success' ?>">
|
||||
<strong>Resultado:</strong> Se asignaron <?= $resultado['success'] ?> semanas futuras
|
||||
<?php if (!empty($resultado['errores'])): ?>
|
||||
<br><small>Errores: <?= implode(', ', $resultado['errores']) ?></small>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<form method="POST" class="h-100 d-flex flex-column justify-content-center">
|
||||
@@ -451,7 +461,7 @@ No hay asignación para la semana <?= $posicionSinAsignar ?> de 4 (<?= date('d/m
|
||||
|
||||
if (!empty($nuevosOrdenes)) {
|
||||
foreach ($nuevosOrdenes as $index => $userId) {
|
||||
$stmt = $db->prepare("
|
||||
$stmt = $asignacionModel->getDb()->prepare("
|
||||
UPDATE rotacion_orden
|
||||
SET orden = ?
|
||||
WHERE user_id = ? AND activo = 1
|
||||
@@ -463,10 +473,9 @@ No hay asignación para la semana <?= $posicionSinAsignar ?> de 4 (<?= date('d/m
|
||||
$resultado = $asignacionModel->recalcularAsignaciones(20);
|
||||
|
||||
if ($resultado['success'] > 0) {
|
||||
echo '<div class="alert alert-success mt-3">';
|
||||
echo 'Orden actualizado correctamente. ';
|
||||
echo "Se recalcularon {$resultado['success']} semanas futuras.";
|
||||
echo '</div>';
|
||||
// Redireccionar para recargar los datos actualizados
|
||||
header("Location: " . $_SERVER['PHP_SELF'] . "?success=orden_actualizado");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -475,6 +484,7 @@ No hay asignación para la semana <?= $posicionSinAsignar ?> de 4 (<?= date('d/m
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script>
|
||||
@@ -491,6 +501,9 @@ No hay asignación para la semana <?= $posicionSinAsignar ?> de 4 (<?= date('d/m
|
||||
function actualizarNumeros() {
|
||||
$("#sortableList li").each(function(index) {
|
||||
$(this).find('.badge').text('☰ ' + (index + 1));
|
||||
// Actualizar el valor del input oculto con el nuevo orden
|
||||
var userId = $(this).data('id');
|
||||
$(this).find('input[type="hidden"]').attr('name', 'ordenes[' + index + ']').val(userId);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,10 @@ class Asignacion {
|
||||
public function __construct() {
|
||||
$this->db = Database::getInstance()->getConnection();
|
||||
}
|
||||
|
||||
public function getDb() {
|
||||
return $this->db;
|
||||
}
|
||||
|
||||
public function getAsignacionActual() {
|
||||
$hoy = new DateTime();
|
||||
|
||||
Reference in New Issue
Block a user