reprogrammed functionality
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user