branch waiting list with update

This commit is contained in:
2026-09-16 16:27:47 +02:00
parent 7fe956ba9e
commit 434eb8bc48
15 changed files with 687 additions and 22 deletions
+124
View File
@@ -75,6 +75,40 @@ $stmtPending->execute([
]);
$pendingRows = $stmtPending->fetchAll();
// Lezioni in lista d'attesa (waiting) dell'utente, nel mese visualizzato
$sqlWaiting = "SELECT bookingclass.*, service.servicename, service.colorclass, service.maxcapacity, serviceschedule.dateschedule
FROM bookingclass
LEFT JOIN service ON bookingclass.idservice = service.idservice
LEFT JOIN serviceschedule ON bookingclass.idserviceschedule = serviceschedule.idserviceschedule
WHERE bookingclass.iduser = :iduser
AND bookingclass.status = 'waiting'
AND serviceschedule.dateschedule BETWEEN :monthStart AND DATE_ADD(:monthEnd, INTERVAL 1 DAY)
ORDER BY serviceschedule.dateschedule";
$stmtWaiting = $pdo->prepare($sqlWaiting);
$stmtWaiting->execute([
':iduser' => $iduserlogin,
':monthStart' => $currentMonthStart,
':monthEnd' => $currentMonthEnd,
]);
$waitingRows = $stmtWaiting->fetchAll();
// Posizione in coda per ciascuna lezione waiting (1-based, ordine per created_at)
$waitingPositions = [];
foreach ($waitingRows as $wrow) {
$sqlPos = "SELECT COUNT(*) AS pos
FROM bookingclass
WHERE idserviceschedule = :sched
AND status = 'waiting'
AND created_at <= :mycreated";
$stmtPos = $pdo->prepare($sqlPos);
$stmtPos->execute([
':sched' => (int) $wrow['idserviceschedule'],
':mycreated' => $wrow['created_at'],
]);
$rowPos = $stmtPos->fetch();
$waitingPositions[(int) $wrow['idbookingclass']] = (int) ($rowPos['pos'] ?? 0);
}
/* -------------------------------------------------------------------------
* 3) Somma dei ticket acquistati dall'utente
* ---------------------------------------------------------------------- */
@@ -541,6 +575,27 @@ $italianMonths = [
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php } ?>
<?php if (isset($_GET['waiting'])) { ?>
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<i class="fas fa-hourglass-half me-2"></i>
La classe era piena: sei stata/o inserita/o in <strong>lista d'attesa</strong>. Se si libera un posto verrai avvisata/o.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php } ?>
<?php if (isset($_GET['leftwaiting'])) { ?>
<div class="alert alert-info alert-dismissible fade show" role="alert">
<i class="fas fa-check me-2"></i>
Sei uscita/o dalla lista d'attesa.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php } ?>
<?php if (isset($_GET['full'])) { ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="fas fa-ban me-2"></i>
La classe è al completo e la lista d'attesa non è attiva. Prova con un altro orario.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php } ?>
<?php if (isset($_GET['deleted'])) { ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<i class="mdi mdi-check-all me-2"></i>
@@ -636,6 +691,58 @@ $italianMonths = [
</div>
<?php endif; ?>
<?php if (!empty($waitingRows)) : ?>
<div class="row">
<div class="col-xl-12">
<div class="card">
<div class="card-body">
<h5 style="color:#8a6d00;margin-bottom:14px;">
<i class="fas fa-hourglass-half me-1"></i> In lista d'attesa
</h5>
<?php foreach ($waitingRows as $wrow) :
$wDateObj = new DateTime($wrow['dateschedule']);
$wDay = $wDateObj->format("d");
$wMonth = $italianMonths[$wDateObj->format("F")];
$wWhen = $wDateObj->format("d-m-Y H:i");
$wColor = $wrow['colorclass'] ?? '#1ebf73';
$wName = $wrow['servicename'] ?? '';
$wPos = $waitingPositions[(int) $wrow['idbookingclass']] ?? 0;
?>
<div class="custom-card pending-card">
<div class="custom-date-box" style="background:#9C9C9C;">
<div class="custom-day"><?php echo e($wDay); ?></div>
<div class="custom-month"><?php echo e($wMonth); ?></div>
</div>
<div class="custom-event-details" style="border-left-color:<?php echo e($wColor); ?>">
<h2 class="custom-heading">
<?php echo e($wName); ?>
<span style="display:inline-block;background:#eee;color:#555;font-size:11px;font-weight:700;padding:2px 9px;border-radius:20px;margin-left:6px;vertical-align:middle;">In coda</span>
</h2>
<p class="custom-paragraph">Quando: <?php echo e($wWhen); ?></p>
<p class="custom-paragraph">Luogo: via Valassina 62/B Seregno - Sala Contesto Yoga</p>
<?php if ($wPos > 0) : ?>
<p class="custom-paragraph" style="font-weight:700;color:#8a6d00;">
<i class="fas fa-list-ol me-1"></i> La tua posizione in coda: <?php echo e($wPos); ?>
</p>
<?php endif; ?>
<p class="custom-paragraph" style="font-size:13px;color:#9ca3af;">
Se si libera un posto verrai avvisata/o. Non serve fare nulla.
</p>
<div style="margin-top:8px;">
<button class="custom-action-button" style="background:#fbeef3;color:#d1698a;"
onclick="confirmLeaveWaiting(<?php echo (int) $wrow['idbookingclass']; ?>)">
<i class="fas fa-times-circle"></i> Esci dalla lista d'attesa
</button>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<?php endif; ?>
<div class="row">
<div class="col-xl-12">
<div class="card">
@@ -741,6 +848,23 @@ $italianMonths = [
const outlookCalendarLink = `webcal://outlook.live.com/calendar/0/deeplink/compose?path=/calendar/action/compose&subject=${encodeURIComponent(eventName)}&startdt=${encodeURIComponent(eventDate)}`;
window.open(outlookCalendarLink, '_blank');
}
function confirmLeaveWaiting(id) {
Swal.fire({
title: "Uscire dalla lista d'attesa?",
text: "Verrai rimossa/o dalla coda per questa lezione.",
icon: "warning",
showCancelButton: true,
confirmButtonColor: "#d1698a",
cancelButtonColor: "#3085d6",
confirmButtonText: "Sì, esci",
cancelButtonText: "Annulla"
}).then((result) => {
if (result.isConfirmed) {
window.location.href = "leavewaiting.php?id=" + id;
}
});
}
</script>
<script src="assets/libs/bootstrap/js/bootstrap.bundle.min.js"></script>