diff --git a/admin/index.php b/admin/index.php index 23a0a40..50ff63d 100644 --- a/admin/index.php +++ b/admin/index.php @@ -231,7 +231,8 @@ if ($isAjax) { $reason = substr($_POST['reason'] ?? '', 0, 200); if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) { db()->prepare("INSERT IGNORE INTO blocked_dates (block_date, reason) VALUES (?,?)")->execute([$date, $reason]); - echo json_encode(['ok'=>true]); + $newId = (int)db()->lastInsertId(); + echo json_encode(['ok'=>true, 'id'=>$newId, 'date'=>$date, 'reason'=>$reason]); } else { echo json_encode(['error'=>'Invalid date']); } exit; } @@ -318,10 +319,14 @@ button:hover{background:#ea580c} $bookings = db()->query("SELECT * FROM bookings ORDER BY rental_date ASC, created_at DESC")->fetchAll(); $blocked = db()->query("SELECT * FROM blocked_dates ORDER BY block_date ASC")->fetchAll(); $customers = db()->query(" - SELECT c.*, - (SELECT COUNT(*) FROM bookings WHERE email=c.email) AS booking_count + SELECT c.* FROM pcs_customers c ORDER BY c.created_at DESC ")->fetchAll(); +// Group bookings by customer email in PHP (avoids cross-table collation issues) +$bookingsByEmail = []; +foreach ($bookings as $_b) { + $bookingsByEmail[strtolower(trim($_b['email']))][] = $_b; +} $stats = db()->query(" SELECT @@ -463,6 +468,18 @@ textarea.notes-ta:focus{border-color:#f97316} .cust-badge{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.7rem;font-weight:700} .cust-active{background:#dcfce7;color:#15803d} .cust-inactive{background:#f3f4f6;color:#9ca3af} + +/* Customer expandable detail */ +.cust-detail-panel{display:grid;grid-template-columns:250px 1fr;border-top:2px solid #f97316} +@media(max-width:900px){.cust-detail-panel{grid-template-columns:1fr}} +.cdp-info{padding:1.5rem;border-right:1px solid #f3f4f6;background:#f9fafb} +.cdp-info h3,.cdp-bookings h3{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:#9ca3af;margin-bottom:1rem} +.cdp-bookings{padding:1.5rem;min-width:0} +.cust-booking-card{border:1px solid #e5e7eb;border-radius:8px;margin-bottom:1.25rem;overflow:hidden} +.cust-booking-card:last-child{margin-bottom:0} +.cbc-header{display:flex;align-items:center;gap:.65rem;padding:.7rem 1rem;background:#f9fafb;border-bottom:1px solid #f3f4f6;flex-wrap:wrap} +.cbc-flow{padding:.5rem 1rem;border-bottom:1px solid #f3f4f6} +.cbc-notes{padding:.75rem 1rem}
@@ -887,31 +904,241 @@ textarea.notes-ta:focus{border-color:#f97316}| Name | Phone | -DOB | Bookings | Status | Added | -+ | ||||
|---|---|---|---|---|---|---|---|---|---|---|
| + + | = htmlspecialchars($c['name']) ?> | -= htmlspecialchars($c['email']) ?> | += htmlspecialchars($c['email']) ?> | = htmlspecialchars($c['phone'] ?? '—') ?> | -= $c['dob'] ? date('M j, Y', strtotime($c['dob'])) : '—' ?> | -= (int)$c['booking_count'] ?> | += count($custBookings) ?> | = $c['is_active']?'Active':'Inactive' ?> | = date('M j, Y', strtotime($c['created_at'])) ?> | -- + | +