exec("CREATE TABLE IF NOT EXISTS citas ( id INT AUTO_INCREMENT PRIMARY KEY, start_event DATETIME NOT NULL, end_event DATETIME NOT NULL, id_departamento INT NOT NULL, lugar VARCHAR(255), usuarios TEXT, estado VARCHAR(50) DEFAULT 'Pendiente', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_departamento) REFERENCES departamentos(id) ON DELETE CASCADE )"); // Add 'title' column if it doesn't exist $stmt = $pdo->query("SHOW COLUMNS FROM citas LIKE 'title'"); if ($stmt->rowCount() == 0) { $pdo->exec("ALTER TABLE citas ADD COLUMN title VARCHAR(255) NOT NULL AFTER id;"); } // Add 'id_conductor' column if it doesn't exist $stmt = $pdo->query("SHOW COLUMNS FROM citas LIKE 'id_conductor'"); if ($stmt->rowCount() == 0) { $pdo->exec("ALTER TABLE citas ADD COLUMN id_conductor INT NULL AFTER id_departamento, ADD FOREIGN KEY (id_conductor) REFERENCES taxis(id) ON DELETE SET NULL;"); } // Fetch departments and conductors $departamentos = $pdo->query("SELECT id, nombre FROM departamentos ORDER BY nombre")->fetchAll(PDO::FETCH_ASSOC); $conductores = $pdo->query("SELECT id, matricula FROM taxis ORDER BY matricula")->fetchAll(PDO::FETCH_ASSOC); // Get selected filters $selected_depto_id = $_GET['id_departamento'] ?? null; $selected_conductor_id = $_GET['id_conductor'] ?? null; // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_cita'])) { $title = $_POST['title']; $fecha = $_POST['fecha']; $hora_inicio = $_POST['hora_inicio']; $hora_fin = $_POST['hora_fin']; $id_departamento = $_POST['id_departamento']; $id_conductor = $_POST['id_conductor'] ?: null; $lugar = trim($_POST['lugar']); $usuarios = trim($_POST['usuarios']); $estado = $_POST['estado']; if (!empty($title) && !empty($fecha) && !empty($hora_inicio) && !empty($hora_fin) && !empty($id_departamento)) { $start_event = $fecha . ' ' . $hora_inicio; $end_event = $fecha . ' ' . $hora_fin; $stmt = $pdo->prepare("INSERT INTO citas (title, start_event, end_event, id_departamento, id_conductor, lugar, usuarios, estado) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$title, $start_event, $end_event, $id_departamento, $id_conductor, $lugar, $usuarios, $estado]); $message = '
Cita añadida con éxito.
'; } else { $message = '
Título, fecha, horas y departamento son obligatorios.
'; } } // Fetch citas for the calendar and list $events = []; $citas_list = []; $sql = "SELECT c.id, c.title, c.start_event as start, c.end_event as end, c.estado, c.lugar, c.usuarios, c.created_at, t.matricula as conductor_nombre FROM citas c LEFT JOIN taxis t ON c.id_conductor = t.id WHERE 1=1"; $params = []; if ($selected_depto_id) { $sql .= " AND c.id_departamento = ?"; $params[] = $selected_depto_id; } if ($selected_conductor_id) { $sql .= " AND c.id_conductor = ?"; $params[] = $selected_conductor_id; } $sql .= " ORDER BY c.start_event DESC"; $stmt = $pdo->prepare($sql); $stmt->execute($params); $citas_list = $stmt->fetchAll(PDO::FETCH_ASSOC); // Format for FullCalendar foreach($citas_list as $cita) { $events[] = [ 'title' => $cita['title'], 'start' => $cita['start'], 'end' => $cita['end'], 'extendedProps' => [ 'estado' => $cita['estado'], 'conductor' => $cita['conductor_nombre'] ?? 'N/A' ] ]; } } catch (PDOException $e) { $message = "Error de base de datos: " . $e->getMessage(); $message_type = 'danger'; } ?>

Calendario de Citas

Filtros
Listado de Citas
TítuloConductorInicioFinEstadoLugarUsuarios
No hay citas para los filtros seleccionados.
Por favor, seleccione un departamento o conductor para ver el calendario y las citas.
Añadir Nueva Cita