diff --git a/public/situationusers.php b/public/situationusers.php
index 300c7e4..0be54c8 100644
--- a/public/situationusers.php
+++ b/public/situationusers.php
@@ -1,190 +1,953 @@
getConnection();
-// Imposta l'header per JSON
-header('Content-Type: application/json');
-ini_set('display_errors', '0'); // gli avvisi vanno nel log, non nella risposta
-
-// Funzione per generare il template HTML dell'email
-function generateEmailTemplate($message)
+function e($value): string
{
- return <<
+ return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8');
+}
+
+$serverCurrentDateTime = date('Y-m-d H:i:s');
+
+$sql = "
+SELECT
+ auth_users.id AS id_utente,
+ auth_users.first_name AS nome_utente,
+ auth_users.last_name AS cognome_utente,
+ auth_users.email AS email_utente,
+ COALESCE(orderbook_lessons.lezioni_acquistate, 0) AS lezioni_acquistate,
+ MAX(CASE WHEN active_orders.iduser IS NOT NULL THEN 1 ELSE 0 END) AS ha_ordine_attivo,
+ MAX(cert.ultima_scadenza) AS ultima_scadenza_cert,
+ MAX(CASE WHEN cert.ultima_scadenza IS NULL OR cert.ultima_scadenza < CURDATE() THEN 1 ELSE 0 END) AS certificato_scaduto,
+ COUNT(CASE WHEN bookingclass.bookingstart <= CURDATE() AND bookingclass.lostlesson = 'N' THEN 1 END) AS lezioni_praticate,
+ COUNT(CASE WHEN bookingclass.bookingstart > CURDATE() THEN 1 END) AS lezioni_programmate,
+ COUNT(CASE WHEN bookingclass.lostlesson = 'Y' THEN 1 END) AS lezioni_perse,
+ COALESCE(orderbook_lessons.lezioni_acquistate, 0)
+ - COUNT(CASE WHEN bookingclass.bookingstart > CURDATE() THEN 1 END)
+ - COUNT(CASE WHEN bookingclass.bookingstart <= CURDATE() AND bookingclass.lostlesson = 'N' THEN 1 END)
+ - COUNT(CASE WHEN bookingclass.lostlesson = 'Y' THEN 1 END) AS lezioni_da_programmare
+FROM auth_users
+LEFT JOIN (
+ SELECT iduser, SUM(quantityclass) AS lezioni_acquistate
+ FROM orderbook
+ GROUP BY iduser
+) AS orderbook_lessons ON auth_users.id = orderbook_lessons.iduser
+LEFT JOIN (
+ SELECT DISTINCT iduser
+ FROM orderbook
+ WHERE expireon >= CURDATE()
+) AS active_orders ON auth_users.id = active_orders.iduser
+LEFT JOIN (
+ SELECT iduser, MAX(expirydatedocument) AS ultima_scadenza
+ FROM certificateuserprofile
+ GROUP BY iduser
+) AS cert ON auth_users.id = cert.iduser
+LEFT JOIN bookingclass ON auth_users.id = bookingclass.iduser
+GROUP BY auth_users.id, auth_users.last_name
+ORDER BY auth_users.last_name";
+
+$users = $pdo->query($sql)->fetchAll();
+$activeUsersCount = count(array_filter($users, fn($u) => (int) $u['ha_ordine_attivo'] === 1));
+$expiredCertCount = count(array_filter($users, fn($u) => (int) $u['ha_ordine_attivo'] === 1 && (int) $u['certificato_scaduto'] === 1));
+?>
+
+