diff --git a/public/adminpanel.php b/public/adminpanel.php index 648e082..be1e437 100644 --- a/public/adminpanel.php +++ b/public/adminpanel.php @@ -472,6 +472,7 @@ $italianMonths = [ '2' => ['success', 'Lezione ripristinata con successo.'], '3' => ['success', 'Lezione riprogrammata con successo.'], '4' => ['success', 'Classe eliminata con successo.'], + '5' => ['success', 'Prenotazione confermata con successo.'], ]; $m = $msgMap[$_GET['success']] ?? null; if ($m) : ?> @@ -518,7 +519,7 @@ $italianMonths = [ $isFull = $maxcap > 0 && $countPersons >= $maxcap; $colorclass = $sch['colorclass'] ?: '#e6f3ff'; ?> -
+
@@ -691,6 +692,31 @@ $italianMonths = [ } $(document).ready(function() { + // Scroll automatico alla classe di oggi o alla prima futura + (function scrollToToday() { + var cards = document.querySelectorAll('.class-card[data-date]'); + if (!cards.length) return; + var today = new Date(); + today.setHours(0, 0, 0, 0); + var target = null; + for (var i = 0; i < cards.length; i++) { + var d = new Date(cards[i].getAttribute('data-date') + 'T00:00:00'); + if (d >= today) { + target = cards[i]; + break; + } + target = cards[i]; // se tutte passate, resta sull'ultima + } + if (target) { + setTimeout(function() { + target.scrollIntoView({ + behavior: 'smooth', + block: 'start' + }); + }, 200); + } + })(); + $(document).on('click', '.mini-btn.lost', function() { var id = $(this).data('idbookingclass'); Swal.fire({ @@ -708,7 +734,7 @@ $italianMonths = [ } }); }); - $(document).on('click', '.mini-btn.restore', function() { + $(document).on('click', '.mini-btn.restore:not(.confirm-pending)', function() { var id = $(this).data('idbookingclass'); Swal.fire({ title: 'Ripristinare questa lezione?', @@ -725,6 +751,25 @@ $italianMonths = [ } }); }); + + $(document).on('click', '.confirm-pending', function() { + var id = $(this).data('idbookingclass'); + Swal.fire({ + title: 'Confermare la prenotazione?', + text: 'La lezione passerà da "in attesa" a confermata.', + icon: 'question', + showCancelButton: true, + confirmButtonText: 'Sì, conferma', + cancelButtonText: 'Annulla' + }) + .then((r) => { + if (r.isConfirmed) { + $.post('conferma_pending.php', { + idbookingclass: id + }).done(() => window.location.href = 'adminpanel.php?success=5').fail(() => Swal.fire('Errore durante la conferma', '', 'error')); + } + }); + }); $(document).on('click', '.mini-btn.reprogram', function() { var idbookingclass = $(this).data('idbookingclass'); $.ajax({ diff --git a/public/conferma_pending.php b/public/conferma_pending.php new file mode 100644 index 0000000..95cc29e --- /dev/null +++ b/public/conferma_pending.php @@ -0,0 +1,38 @@ + booked. + */ +$pdo = DBHandlerSelect::getInstance()->getConnection(); + +function jsonOut(array $payload): void +{ + if (ob_get_length() !== false) { + ob_end_clean(); + } + header('Content-Type: application/json; charset=utf-8'); + echo json_encode($payload, JSON_UNESCAPED_UNICODE); + exit; +} + +$idbookingclass = isset($_POST['idbookingclass']) ? (int) $_POST['idbookingclass'] : 0; + +if ($idbookingclass <= 0) { + jsonOut(['success' => false, 'error' => 'ID prenotazione non valido.']); +} + +try { + // Conferma solo se effettivamente in pending (evita conferme accidentali) + $stmt = $pdo->prepare( + "UPDATE bookingclass SET status = 'booked' + WHERE idbookingclass = :id AND status = 'pending'" + ); + $stmt->execute([':id' => $idbookingclass]); + jsonOut(['success' => true]); +} catch (Throwable $ex) { + error_log('conferma_pending error: ' . $ex->getMessage()); + jsonOut(['success' => false, 'error' => 'Errore durante la conferma.']); +}