Files
2026-07-27 16:49:12 +02:00

76 lines
2.2 KiB
PHP

<?php
/**
* orders.php
* --------------------------------------------------------------------------
* Elenca gli ordini/pacchetti dell'utente con il calcolo dei ticket residui.
* Logica di selectorder.php.
*
* Posizione: public/api/orders.php
* Metodo: GET
* Auth: Bearer token (Sanctum)
*
* Output: lista ordini con nticket, usati, residui, scadenza, se scaduto.
* Utile per la schermata "Programma lezioni" (scelta del pacchetto).
* --------------------------------------------------------------------------
*/
require_once __DIR__ . '/_bootstrap.php';
$userId = (int) $user->id;
// Tutti gli ordini dell'utente + nome servizio
$stmt = $db->prepare("
SELECT ob.idorderbook, ob.idservice, ob.nticket, ob.expireon,
s.servicename
FROM orderbook ob
LEFT JOIN service s ON ob.idservice = s.idservice
WHERE ob.iduser = :uid
ORDER BY ob.idorderbook DESC
");
$stmt->execute([':uid' => $userId]);
$rows = $stmt->fetchAll();
// Per ogni ordine, calcola i ticket usati (prenotazioni non cancellate)
$usedStmt = $db->prepare("
SELECT COUNT(*) AS n
FROM bookingclass
WHERE idorder = :oid AND iduser = :uid AND status != 'cancelled'
");
$today = date('Y-m-d');
$orders = [];
foreach ($rows as $r) {
$orderId = (int) $r['idorderbook'];
$nticket = (int) ($r['nticket'] ?? 0);
$expireon = $r['expireon'] ?? null;
$usedStmt->execute([':oid' => $orderId, ':uid' => $userId]);
$used = (int) ($usedStmt->fetch()['n'] ?? 0);
$residui = $nticket - $used;
if ($residui < 0) {
$residui = 0;
}
$isExpired = ($expireon !== null && $expireon < $today);
$orders[] = [
'order_id' => $orderId,
'service_id' => (int) $r['idservice'],
'service_name' => (string) ($r['servicename'] ?? ''),
'tickets' => $nticket,
'used' => $used,
'remaining' => $residui,
'expire_on' => $expireon,
'is_expired' => $isExpired,
// prenotabile se ha residui e non è scaduto
'bookable' => ($residui > 0 && !$isExpired),
];
}
echo json_encode([
'success' => true,
'orders' => $orders,
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);