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);