api pending
This commit is contained in:
@@ -200,16 +200,21 @@ try {
|
||||
// 2b) Anti-duplicato
|
||||
// ------------------------------------------------------------------
|
||||
$dup = $db->prepare(
|
||||
"SELECT COUNT(*) FROM bookingclass
|
||||
"SELECT status FROM bookingclass
|
||||
WHERE iduser = :uid
|
||||
AND idserviceschedule = :idschedule
|
||||
AND status != 'cancelled'"
|
||||
AND status != 'cancelled'
|
||||
LIMIT 1"
|
||||
);
|
||||
$dup->execute([':uid' => $userid, ':idschedule' => $idserviceschedule]);
|
||||
if ((int) $dup->fetchColumn() > 0) {
|
||||
$dupStatus = $dup->fetchColumn();
|
||||
if ($dupStatus !== false) {
|
||||
$db->rollBack();
|
||||
http_response_code(409);
|
||||
echo json_encode(['success' => false, 'message' => 'Questo utente è già prenotato in questa classe.']);
|
||||
$msg = ($dupStatus === 'pending')
|
||||
? 'Questo utente ha una prenotazione in attesa in questa classe: confermala o rimuovila dalla sezione "In attesa".'
|
||||
: 'Questo utente è già prenotato in questa classe.';
|
||||
echo json_encode(['success' => false, 'message' => $msg]);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,13 +63,14 @@ if (!empty($scheduleIds)) {
|
||||
$sqlBookings = "SELECT bookingclass.idbookingclass,
|
||||
bookingclass.idserviceschedule,
|
||||
bookingclass.lostlesson,
|
||||
bookingclass.status,
|
||||
auth_users.first_name,
|
||||
auth_users.last_name,
|
||||
auth_users.avatar
|
||||
FROM bookingclass
|
||||
LEFT JOIN auth_users ON bookingclass.iduser = auth_users.id
|
||||
WHERE bookingclass.idserviceschedule IN ($ph)
|
||||
AND bookingclass.status = 'booked'
|
||||
AND bookingclass.status IN ('booked', 'pending')
|
||||
ORDER BY auth_users.last_name, auth_users.first_name";
|
||||
$stmtB = $db->prepare($sqlBookings);
|
||||
$stmtB->execute(array_values($scheduleIds));
|
||||
@@ -85,6 +86,7 @@ if (!empty($scheduleIds)) {
|
||||
'last_name' => $last,
|
||||
'full_name' => trim($first . ' ' . $last),
|
||||
'is_lost' => ($b['lostlesson'] === 'Y'),
|
||||
'is_pending' => ($b['status'] === 'pending'),
|
||||
// avatar: solo il filename; l'app compone l'URL se serve
|
||||
'avatar' => $avatar !== '' ? $avatar : null,
|
||||
];
|
||||
@@ -96,7 +98,13 @@ $classes = [];
|
||||
foreach ($scheduleRows as $sch) {
|
||||
$sid = (int) $sch['idserviceschedule'];
|
||||
$participants = $bookingsBySchedule[$sid] ?? [];
|
||||
$count = count($participants); // tutti i booked, perse incluse
|
||||
// contatore: solo confermati (booked, perse incluse); i pending NON contano
|
||||
$count = 0;
|
||||
foreach ($participants as $pp) {
|
||||
if (empty($pp['is_pending'])) {
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
$maxcap = (int) $sch['maxcapacity'];
|
||||
|
||||
$classes[] = [
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* api_teacher_confirm_pending.php
|
||||
* --------------------------------------------------------------------------
|
||||
* Conferma una prenotazione in attesa: pending -> booked.
|
||||
* Solo staff (Admin=1 / teacher=3).
|
||||
*
|
||||
* Posizione: public/api/api_teacher_confirm_pending.php
|
||||
* Metodo: POST
|
||||
* Auth: Bearer token (Sanctum) via _bootstrap.php
|
||||
* Body: booking_id=<int>
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/_bootstrap.php';
|
||||
|
||||
// Gate staff
|
||||
$roleId = (int) $user->role_id;
|
||||
if (!in_array($roleId, [1, 3], true)) {
|
||||
http_response_code(403);
|
||||
echo json_encode(['success' => false, 'message' => 'Forbidden']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$bookingId = isset($_POST['booking_id']) ? (int) $_POST['booking_id'] : 0;
|
||||
|
||||
if ($bookingId <= 0) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['success' => false, 'message' => 'ID prenotazione non valido']);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
// Conferma solo se davvero in pending
|
||||
$stmt = $db->prepare(
|
||||
"UPDATE bookingclass SET status = 'booked'
|
||||
WHERE idbookingclass = :id AND status = 'pending'"
|
||||
);
|
||||
$stmt->execute([':id' => $bookingId]);
|
||||
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'booking_id' => $bookingId,
|
||||
'confirmed' => $stmt->rowCount(),
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
} catch (Throwable $ex) {
|
||||
error_log('api_teacher_confirm_pending error: ' . $ex->getMessage());
|
||||
http_response_code(500);
|
||||
echo json_encode(['success' => false, 'message' => 'Errore conferma']);
|
||||
}
|
||||
Reference in New Issue
Block a user