teacher
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
// ajax_client_bookings.php
|
||||
|
||||
// Non serve require_once se usi la stessa connessione del template principale
|
||||
// Ma per sicurezza includi headscript.php (che contiene già DBHandler)
|
||||
require_once('include/headscript.php'); // adatta il percorso se necessario
|
||||
|
||||
$dbHandler = DBHandlerSelect::getInstance();
|
||||
$pdo = $dbHandler->getConnection();
|
||||
|
||||
// Poi il resto del codice...
|
||||
$user_id = (int)($_POST['user_id'] ?? 0);
|
||||
$school_id = (int)($_POST['school_id'] ?? 0);
|
||||
|
||||
if ($user_id <= 0 || $school_id <= 0) {
|
||||
echo '<div class="alert alert-warning">Dati non validi.</div>';
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT
|
||||
cs.id AS session_id,
|
||||
cs.session_date,
|
||||
cs.start_time,
|
||||
cs.end_time,
|
||||
c.name AS class_name,
|
||||
ct.level,
|
||||
sb.status,
|
||||
sb.booked_at,
|
||||
o.id AS order_id,
|
||||
o.order_number,
|
||||
o.total_entries,
|
||||
o.available_entries
|
||||
FROM session_bookings sb
|
||||
INNER JOIN class_sessions cs
|
||||
ON sb.session_id = cs.id
|
||||
AND cs.school_id = ?
|
||||
INNER JOIN classes c
|
||||
ON cs.class_id = c.id
|
||||
AND c.school_id = ?
|
||||
INNER JOIN class_types ct
|
||||
ON cs.class_type_id = ct.id
|
||||
AND ct.school_id = ?
|
||||
LEFT JOIN orders o
|
||||
ON sb.order_id = o.id
|
||||
AND o.school_id = ?
|
||||
WHERE sb.user_id = ?
|
||||
ORDER BY cs.session_date DESC, cs.start_time DESC
|
||||
LIMIT 100
|
||||
");
|
||||
|
||||
$stmt->execute([
|
||||
$school_id,
|
||||
$school_id,
|
||||
$school_id,
|
||||
$school_id,
|
||||
$user_id
|
||||
]);
|
||||
$bookings = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if (empty($bookings)) {
|
||||
echo '<div class="alert alert-info">Nessuna prenotazione registrata per questo utente.</div>';
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-bordered">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Data</th>
|
||||
<th>Orario</th>
|
||||
<th>Classe</th>
|
||||
<th>Livello</th>
|
||||
<th>Stato</th>
|
||||
<th>Ordine</th>
|
||||
<th>Data prenotazione</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($bookings as $b):
|
||||
$statoClass = match ($b['status']) {
|
||||
'attended' => 'bg-success',
|
||||
'missed' => 'bg-danger',
|
||||
'booked' => (strtotime($b['session_date']) >= time()) ? 'bg-primary' : 'bg-secondary',
|
||||
'cancelled' => 'bg-dark',
|
||||
'rescheduled' => 'bg-info',
|
||||
default => 'bg-secondary'
|
||||
};
|
||||
$statoText = match ($b['status']) {
|
||||
'attended' => 'Frequentata',
|
||||
'missed' => 'Persa',
|
||||
'booked' => (strtotime($b['session_date']) >= time()) ? 'Prenotata' : 'Scaduta',
|
||||
'cancelled' => 'Cancellata',
|
||||
'rescheduled' => 'Riprog.',
|
||||
default => $b['status']
|
||||
};
|
||||
?>
|
||||
<tr>
|
||||
<td><?= date('d/m/Y', strtotime($b['session_date'])) ?></td>
|
||||
<td><?= substr($b['start_time'], 0, 5) ?> – <?= substr($b['end_time'], 0, 5) ?></td>
|
||||
<td><?= htmlspecialchars($b['class_name']) ?></td>
|
||||
<td><?= ucfirst($b['level'] ?? '—') ?></td>
|
||||
<td><span class="badge <?= $statoClass ?>"><?= $statoText ?></span></td>
|
||||
<td>
|
||||
<?php if ($b['order_id']): ?>
|
||||
#<?= $b['order_number'] ?><br>
|
||||
<small><?= $b['available_entries'] ?>/<?= $b['total_entries'] ?></small>
|
||||
<?php else: ?>
|
||||
—
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td><small><?= date('d/m/Y H:i', strtotime($b['booked_at'])) ?></small></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
Reference in New Issue
Block a user