Storico delle cancellazioni, dalla più recente. Usa la ricerca per filtrare per nome, lezione o data.
| Allievo | Lezione | Data lezione | Cancellata il | Preavviso | Ordine | Conta come riprog. |
|---|---|---|---|---|---|---|
| Omaggio Limite superato: lezione persa Sì (/) No |
getConnection(); function e($value): string { return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8'); } // Preavviso leggibile: minuti, ore o giorni function formatPreavviso(?int $minutes): string { if ($minutes === null) return '-'; if ($minutes < 60) return $minutes . ' min'; if ($minutes < 48 * 60) return floor($minutes / 60) . ' ore'; return floor($minutes / 1440) . ' giorni'; } $sql = " SELECT c.idcancellation, c.iduser, c.idorder, c.is_gift, c.reprogrammed_incremented, c.cancelled_at, COALESCE(ss.dateschedule, c.bookingstart) AS lesson_date, TIMESTAMPDIFF(MINUTE, c.cancelled_at, COALESCE(ss.dateschedule, c.bookingstart)) AS preavviso_min, u.first_name, u.last_name, u.email, s.servicename, o.reprogrammed, o.maxreschedule FROM bookingclass_cancellations c LEFT JOIN auth_users u ON u.id = c.iduser LEFT JOIN service s ON s.idservice = c.idservice LEFT JOIN serviceschedule ss ON ss.idserviceschedule = c.idserviceschedule LEFT JOIN orderbook o ON o.idorderbook = c.idorder ORDER BY c.cancelled_at DESC"; $rows = $pdo->query($sql)->fetchAll(); // Contatori ultimi 7 / 30 giorni $limit7 = strtotime('-7 days'); $limit30 = strtotime('-30 days'); $count7 = 0; $count30 = 0; foreach ($rows as $r) { $t = strtotime($r['cancelled_at']); if ($t >= $limit7) $count7++; if ($t >= $limit30) $count30++; } ?>
Storico delle cancellazioni, dalla più recente. Usa la ricerca per filtrare per nome, lezione o data.
| Allievo | Lezione | Data lezione | Cancellata il | Preavviso | Ordine | Conta come riprog. |
|---|---|---|---|---|---|---|
| Omaggio Limite superato: lezione persa Sì (/) No |