getConnection(); $stmt = $pdo->prepare("SELECT name, address_street, address_city, address_province FROM schools WHERE id = ?"); $stmt->execute([$school_id]); $school = $stmt->fetch(); // Recupera dettagli vecchia prenotazione $stmt = $pdo->prepare(" SELECT sb.id, sb.order_id, c.name AS class_name, ct.level, ct.class_id, cs.session_date, cs.start_time, cs.end_time FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE sb.id = ? AND sb.user_id = ? AND sb.status = 'booked' "); $stmt->execute([$booking_id, $iduserlogin]); $old_booking = $stmt->fetch(PDO::FETCH_ASSOC); if (!$old_booking) die("Prenotazione non trovata o non modificabile"); // Recupera impostazioni scuola (per auto-approved) $stmt = $pdo->prepare("SELECT rebooking_auto_approved FROM school_settings WHERE school_id = ?"); $stmt->execute([$school_id]); $settings = $stmt->fetch(PDO::FETCH_ASSOC); $auto_approved = $settings['rebooking_auto_approved'] ?? 1; // Lezioni future disponibili (tutte le scheduled future) $stmt = $pdo->prepare(" SELECT cs.id AS session_id, cs.session_date, cs.start_time, cs.end_time, cs.room_name, cs.max_capacity, c.name AS class_name, ct.level, (SELECT COUNT(*) FROM session_bookings WHERE session_id = cs.id AND status IN ('booked', 'pending')) AS booked_count, (SELECT COUNT(*) FROM session_bookings WHERE session_id = cs.id AND user_id = ? AND status IN ('booked', 'pending')) AS user_booked FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE cs.school_id = ? AND cs.status = 'scheduled' AND cs.session_date >= CURDATE() ORDER BY cs.session_date ASC, cs.start_time ASC "); $stmt->execute([$iduserlogin, $school_id]); $available_lessons = $stmt->fetchAll(PDO::FETCH_ASSOC); // Gestione POST: riprogrammazione $success = $error = ""; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['new_session_id'])) { $new_session_id = (int)$_POST['new_session_id']; try { $pdo->beginTransaction(); // Verifica disponibilità nuova sessione $stmt_check = $pdo->prepare(" SELECT max_capacity, (SELECT COUNT(*) FROM session_bookings WHERE session_id = ? AND status IN ('booked', 'pending')) AS booked_count FROM class_sessions WHERE id = ? AND status = 'scheduled' AND session_date >= CURDATE() "); $stmt_check->execute([$new_session_id, $new_session_id]); $new_session = $stmt_check->fetch(PDO::FETCH_ASSOC); if (!$new_session || $new_session['booked_count'] >= $new_session['max_capacity']) { throw new Exception("Lezione non disponibile o piena"); } // Crea nuova prenotazione $status_new = $auto_approved ? 'booked' : 'pending'; $stmt_new = $pdo->prepare(" INSERT INTO session_bookings (session_id, user_id, order_id, status, booked_at, created_at) VALUES (?, ?, ?, ?, NOW(), NOW()) "); $stmt_new->execute([$new_session_id, $iduserlogin, $old_booking['order_id'], $status_new]); // Marca vecchia come rescheduled $stmt_old = $pdo->prepare(" UPDATE session_bookings SET status = 'rescheduled', updated_at = NOW() WHERE id = ? "); $stmt_old->execute([$booking_id]); $pdo->commit(); // Redirect to my_lessons.php with a success flag/message $msg = $auto_approved ? "Riprogrammazione completata. Lezione confermata." : "Riprogrammazione inviata. In attesa di approvazione."; header("Location: my_lessons.php?rebook=1&msg=" . urlencode($msg)); exit; } catch (Exception $e) { $pdo->rollBack(); $error = "Errore durante la riprogrammazione: " . $e->getMessage(); } } function it_weekday($dateYmd) { $fmt = new IntlDateFormatter( 'it_IT', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Europe/Rome', IntlDateFormatter::GREGORIAN, 'EEEE' ); return ucfirst($fmt->format(strtotime($dateYmd))); } function it_day_month($dateYmd) { $fmt = new IntlDateFormatter( 'it_IT', IntlDateFormatter::NONE, IntlDateFormatter::NONE, 'Europe/Rome', IntlDateFormatter::GREGORIAN, 'd MMMM' ); return ucfirst($fmt->format(strtotime($dateYmd))); } ?> Riprogramma Lezione - YoGiBook

Riprogramma lezione

-

dalle alle

Nessuna lezione disponibile per la riprogrammazione
= $lesson['max_capacity']; $is_user_booked = $lesson['user_booked'] > 0; $card_class = $is_full ? 'full' : ($is_user_booked ? 'user-booked' : 'available'); ?>

-

-
-
Posti liberi:
Lezione piena
Già prenotata da te