getConnection(); if (!isset($iduserlogin)) { die("Errore: ID utente non definito."); } // Scuola corrente $stmt = $pdo->prepare(" SELECT id, name, email AS school_email FROM schools WHERE owner_id = ? "); $stmt->execute([$iduserlogin]); $school = $stmt->fetch(PDO::FETCH_ASSOC); if (!$school) { die("Nessuna scuola trovata per questo proprietario."); } $school_id = $school['id']; $school_name = $school['name']; $school_email = $school['school_email']; // ============================================= // INVIO EMAIL da modale if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'send_email_to_user') { $user_id = (int)($_POST['user_id'] ?? 0); $subject = trim($_POST['subject'] ?? ''); $message = trim($_POST['message'] ?? ''); if ($user_id <= 0 || empty($subject) || empty($message)) { $error = "Dati mancanti per l'invio email."; } else { // Recupera email utente $stmt = $pdo->prepare("SELECT email, first_name, last_name FROM auth_users WHERE id = ?"); $stmt->execute([$user_id]); $user = $stmt->fetch(PDO::FETCH_ASSOC); if (!$user) { $error = "Utente non trovato."; } else { $to = $user['email']; $body = "

Comunicazione da {$school_name}

Gentile {$user['first_name']} {$user['last_name']},

" . nl2br(htmlspecialchars($message)) . "

Questa è una comunicazione ufficiale da parte della scuola.
Per qualsiasi dubbio rispondi direttamente a questa email o contatta: {$school_email}


YogiBoook – piattaforma per scuole yoga "; $result = sendEmail($to, $subject, $body); if ($result['success']) { $success = "Email inviata con successo a {$user['first_name']} {$user['last_name']}"; } else { $error = "Errore nell'invio: " . $result['message']; } } } } // ============================================= // Lista clienti + statistiche aggregate $clients = $pdo->prepare(" SELECT au.id, au.first_name, au.last_name, au.email, COUNT(DISTINCT o.id) AS num_orders, COALESCE(SUM(o.total_entries), 0) AS total_entries, -- Praticate = prenotate nel passato (booked + data < oggi) (SELECT COUNT(*) FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id WHERE sb.user_id = au.id AND cs.school_id = ? AND sb.status = 'booked' AND cs.session_date < CURDATE() ) AS lezioni_praticate, -- Perse (missed + data passata) (SELECT COUNT(*) FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id WHERE sb.user_id = au.id AND cs.school_id = ? AND sb.status = 'missed' AND cs.session_date < CURDATE() ) AS lezioni_perse, -- Prenotate future (booked + data >= oggi) (SELECT COUNT(*) FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id WHERE sb.user_id = au.id AND cs.school_id = ? AND sb.status = 'booked' AND cs.session_date >= CURDATE() ) AS prenotazioni_future FROM auth_users au INNER JOIN user_schools us ON au.id = us.user_id LEFT JOIN orders o ON au.id = o.user_id AND o.school_id = ? WHERE us.school_id = ? AND us.status = 'active' GROUP BY au.id ORDER BY au.last_name, au.first_name "); $clients->execute([$school_id, $school_id, $school_id, $school_id, $school_id]); $client_list = $clients->fetchAll(PDO::FETCH_ASSOC); ?> Situazione Clienti - <?= htmlspecialchars($school_name) ?>

Situazione Clienti –

Cliente Ordini Entrate totali Praticate Perse Prenotate (future) Rimanenti Azioni

0 ? $rimanenti : '0' ?>
Nessun cliente associato trovato.