conferma pending
This commit is contained in:
+47
-2
@@ -472,6 +472,7 @@ $italianMonths = [
|
|||||||
'2' => ['success', 'Lezione ripristinata con successo.'],
|
'2' => ['success', 'Lezione ripristinata con successo.'],
|
||||||
'3' => ['success', 'Lezione riprogrammata con successo.'],
|
'3' => ['success', 'Lezione riprogrammata con successo.'],
|
||||||
'4' => ['success', 'Classe eliminata con successo.'],
|
'4' => ['success', 'Classe eliminata con successo.'],
|
||||||
|
'5' => ['success', 'Prenotazione confermata con successo.'],
|
||||||
];
|
];
|
||||||
$m = $msgMap[$_GET['success']] ?? null;
|
$m = $msgMap[$_GET['success']] ?? null;
|
||||||
if ($m) : ?>
|
if ($m) : ?>
|
||||||
@@ -518,7 +519,7 @@ $italianMonths = [
|
|||||||
$isFull = $maxcap > 0 && $countPersons >= $maxcap;
|
$isFull = $maxcap > 0 && $countPersons >= $maxcap;
|
||||||
$colorclass = $sch['colorclass'] ?: '#e6f3ff';
|
$colorclass = $sch['colorclass'] ?: '#e6f3ff';
|
||||||
?>
|
?>
|
||||||
<div class="class-card">
|
<div class="class-card" data-date="<?php echo e($dateObj->format('Y-m-d')); ?>">
|
||||||
<div class="class-date">
|
<div class="class-date">
|
||||||
<div class="day"><?php echo e($dayNum); ?></div>
|
<div class="day"><?php echo e($dayNum); ?></div>
|
||||||
<div class="month"><?php echo e($monthIt); ?></div>
|
<div class="month"><?php echo e($monthIt); ?></div>
|
||||||
@@ -691,6 +692,31 @@ $italianMonths = [
|
|||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(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() {
|
$(document).on('click', '.mini-btn.lost', function() {
|
||||||
var id = $(this).data('idbookingclass');
|
var id = $(this).data('idbookingclass');
|
||||||
Swal.fire({
|
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');
|
var id = $(this).data('idbookingclass');
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Ripristinare questa lezione?',
|
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() {
|
$(document).on('click', '.mini-btn.reprogram', function() {
|
||||||
var idbookingclass = $(this).data('idbookingclass');
|
var idbookingclass = $(this).data('idbookingclass');
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
// Buffer per scartare eventuale HTML degli include: risposta JSON pulita
|
||||||
|
ob_start();
|
||||||
|
require_once('include/headscript.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Conferma una prenotazione in attesa: pending -> 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.']);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user