76 lines
2.2 KiB
PHP
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);
|