reprogrammed functionality

This commit is contained in:
2026-01-17 15:39:29 +01:00
parent f911b82716
commit e76fe4dfd6
7 changed files with 689 additions and 51 deletions
+69 -40
View File
@@ -157,18 +157,18 @@ $stmt = $pdo->prepare("
$stmt->execute([$iduserlogin, $school_id]);
$orders = $stmt->fetchAll();
// 1. Lezioni acquistate totali (somma total_entries da ordini completati)
$stmt_total_lessons = $pdo->prepare("
SELECT COALESCE(SUM(total_entries), 0) AS total_lessons
// Lezioni ACQUISTATE totali
$stmt_acquistate = $pdo->prepare("
SELECT COALESCE(SUM(total_entries), 0) AS acquistate
FROM orders
WHERE user_id = ? AND school_id = ? AND status = 'completed'
");
$stmt_total_lessons->execute([$iduserlogin, $school_id]);
$total_lessons = $stmt_total_lessons->fetchColumn() ?: 0;
$stmt_acquistate->execute([$iduserlogin, $school_id]);
$acquistate = (int) $stmt_acquistate->fetchColumn();
// 2. Lezioni da praticare (booked + data futura)
$stmt_to_practice = $pdo->prepare("
SELECT COUNT(sb.id) AS to_practice
// Da PRATICARE (booked future)
$stmt_da_praticare = $pdo->prepare("
SELECT COUNT(sb.id) AS da_praticare
FROM session_bookings sb
JOIN class_sessions cs ON sb.session_id = cs.id
WHERE sb.user_id = ?
@@ -176,12 +176,27 @@ $stmt_to_practice = $pdo->prepare("
AND sb.status = 'booked'
AND cs.session_date >= CURDATE()
");
$stmt_to_practice->execute([$iduserlogin, $school_id]);
$to_practice = $stmt_to_practice->fetchColumn() ?: 0;
$stmt_da_praticare->execute([$iduserlogin, $school_id]);
$da_praticare = (int) $stmt_da_praticare->fetchColumn();
// 3. Lezioni perse (missed + data passata)
$stmt_missed = $pdo->prepare("
SELECT COUNT(sb.id) AS missed
// PRATICATE (attended + booked passate)
$stmt_praticate = $pdo->prepare("
SELECT COUNT(sb.id) AS praticate
FROM session_bookings sb
JOIN class_sessions cs ON sb.session_id = cs.id
WHERE sb.user_id = ?
AND cs.school_id = ?
AND (
sb.status = 'attended'
OR (sb.status = 'booked' AND cs.session_date < CURDATE())
)
");
$stmt_praticate->execute([$iduserlogin, $school_id]);
$praticate = (int) $stmt_praticate->fetchColumn();
// PERSE (missed + data passata)
$stmt_perse = $pdo->prepare("
SELECT COUNT(sb.id) AS perse
FROM session_bookings sb
JOIN class_sessions cs ON sb.session_id = cs.id
WHERE sb.user_id = ?
@@ -189,8 +204,11 @@ $stmt_missed = $pdo->prepare("
AND sb.status = 'missed'
AND cs.session_date < CURDATE()
");
$stmt_missed->execute([$iduserlogin, $school_id]);
$missed = $stmt_missed->fetchColumn() ?: 0;
$stmt_perse->execute([$iduserlogin, $school_id]);
$perse = (int) $stmt_perse->fetchColumn();
// DA PROGRAMMARE (residuo = acquistate - perse - praticate - da_praticare)
$da_programmare = max(0, $acquistate - $perse - $praticate - $da_praticare);;
// === CONTROLLA CERTIFICATI VALIDI ===
$stmt_cert = $pdo->prepare("
@@ -325,43 +343,54 @@ $active_orders = count(array_filter($orders, fn($o) => $o['status'] === 'complet
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<!-- STATISTICHE PASTELLO - NUOVA VERSIONE -->
<div class="row g-4 mb-5">
<!-- Box 1: Lezioni acquistate totali -->
<div class="col-md-3">
<div class="card stat-card text-center h-100" style="background: linear-gradient(135deg, #d1fae5, #a7f3d0);">
<div class="card-body py-4">
<h3 class="fw-bold text-success mb-1"><?= number_format($total_lessons) ?></h3>
<p class="text-dark mb-0">Lezioni acquistate totali</p>
<!-- STATISTICHE - 5 BOX CHE OCCUPANO TUTTA LA RIGA SU DESKTOP -->
<div class="row g-3 mb-5">
<!-- 1. Lezioni acquistate -->
<div class="col-6 col-sm-4 col-md">
<div class="card stat-card text-center h-100 shadow-sm" style="background: linear-gradient(135deg, #d1fae5, #a7f3d0); border: none;">
<div class="card-body py-4 px-3">
<h4 class="fw-bold text-success mb-1"><?= number_format($acquistate) ?></h4>
<p class="text-dark mb-0 small">Acquistate</p>
</div>
</div>
</div>
<!-- Box 2: Lezioni da praticare -->
<div class="col-md-3">
<div class="card stat-card text-center h-100" style="background: linear-gradient(135deg, #dbeafe, #bfdbfe);">
<div class="card-body py-4">
<h3 class="fw-bold text-primary mb-1"><?= number_format($to_practice) ?></h3>
<p class="text-dark mb-0">Lezioni da praticare</p>
<!-- 2. Praticate -->
<div class="col-6 col-sm-4 col-md">
<div class="card stat-card text-center h-100 shadow-sm" style="background: linear-gradient(135deg, #e0f2fe, #bae6fd); border: none;">
<div class="card-body py-4 px-3">
<h4 class="fw-bold text-info mb-1"><?= number_format($praticate) ?></h4>
<p class="text-dark mb-0 small">Praticate</p>
</div>
</div>
</div>
<!-- Box 3: Lezioni perse -->
<div class="col-md-3">
<div class="card stat-card text-center h-100" style="background: linear-gradient(135deg, #fee2e2, #fecaca);">
<div class="card-body py-4">
<h3 class="fw-bold text-danger mb-1"><?= number_format($missed) ?></h3>
<p class="text-dark mb-0">Lezioni perse</p>
<!-- 3. Da praticare -->
<div class="col-6 col-sm-4 col-md">
<div class="card stat-card text-center h-100 shadow-sm" style="background: linear-gradient(135deg, #dbeafe, #bfdbfe); border: none;">
<div class="card-body py-4 px-3">
<h4 class="fw-bold text-primary mb-1"><?= number_format($da_praticare) ?></h4>
<p class="text-dark mb-0 small">Da praticare</p>
</div>
</div>
</div>
<!-- Box 4: Vuoto (pronto per futuro) -->
<div class="col-md-3">
<div class="card stat-card text-center h-100" style="background: linear-gradient(135deg, #fef3c7, #fde68a);">
<div class="card-body py-4 d-flex align-items-center justify-content-center">
<p class="text-muted mb-0 fst-italic">Prossimamente...</p>
<!-- 4. Perse -->
<div class="col-6 col-sm-4 col-md">
<div class="card stat-card text-center h-100 shadow-sm" style="background: linear-gradient(135deg, #fee2e2, #fecaca); border: none;">
<div class="card-body py-4 px-3">
<h4 class="fw-bold text-danger mb-1"><?= number_format($perse) ?></h4>
<p class="text-dark mb-0 small">Perse</p>
</div>
</div>
</div>
<!-- 5. Da programmare -->
<div class="col-6 col-sm-4 col-md">
<div class="card stat-card text-center h-100 shadow-sm" style="background: linear-gradient(135deg, #fef3c7, #fde68a); border: none;">
<div class="card-body py-4 px-3">
<h4 class="fw-bold text-warning mb-1"><?= number_format($da_programmare) ?></h4>
<p class="text-dark mb-0 small">Da programmare</p>
</div>
</div>
</div>