beginner
shop-rentals
bookings
detail-page

The Booking Detail Page

Full tour of the per-reservation page — schedule, financials, customer, vehicle, agreements, refunds, late fees, and admin notes

Levy Fleets TeamMay 7, 20267 min read

The booking detail page at /dashboard/shop-rentals/bookings/[id] is where every operator action lives once a reservation exists. This is a section-by-section walkthrough.

Top of the page shows:

  • ← Back to Bookings link
  • Booking number ("#12345")
  • Status badge (color-coded)
  • Created timestamp

Top-right action buttons (visibility depends on status):

  • Refund — only when remaining refundable balance > 0
  • Cancel Booking — only when status is pending, confirmed, or checked_in

Late return banner

If the late-fee cron has flagged this booking, an amber banner appears between the header and main content:

⚠ Late return
This rental is past the scheduled return time.
Computed late fee: $15.00
[Apply late fee]

Click Apply late fee to add the fee as an adjustment_cents and clear the late flag. See Late returns.

Main columns

The page is a 2/3 + 1/3 split.

Left column (2/3)

Schedule

  • Scheduled pickup and return times
  • Actual pickup / return (only if stamped)
  • Duration (days or hours)
  • Rate type (hourly / daily / weekly)

Financial summary

  • Base cost
  • Overage (if any — for distance-based pricing)
  • Promo / adjustments
  • Subtotal
  • Tax
  • Cancellation fee (if cancelled)
  • Total
  • Deposit (held, captured, or released)
  • Amount paid
  • Refunded
  • Balance due

This is the source of truth for accounting. If anything looks off, check the pricing_snapshot on the database row to verify what tier was applied.

Distance (e-bike / scooter only)

  • Total km traveled
  • Included km
  • Overage km
  • Overage cost

Customer card

  • Name, email, phone, customer number
  • Link to full customer profile

Vehicle / model card

  • Assigned vehicle (or model with "unassigned" indicator)
  • Link to vehicle detail page

Assignments section (model-bookings only)

If the booking was made at the model level (not vehicle-specific), this section shows:

  • List of currently assigned vehicles
  • Eligible-vehicles dropdown for adding more
  • UUID-paste fallback (rarely needed)
  • Release buttons per assignment
  • Unassigned count

Delivery section (delivery bookings only)

  • Address
  • Time slot
  • Delivery fee
  • Notes
  • Status (pending → confirmed → en_route → delivered)
  • State-machine action buttons (Confirm, Reject, Mark En Route, Mark Delivered)
  • Rejection dialog with required reason
  • Audit log (every status change)

Right column (1/3)

Counter actions

Quick links specific to this booking:

  • View customer profile
  • View assigned vehicle
  • Open the public manage-link (if one was issued)

Admin notes

Editable text field for operator-only notes. Customers don't see this. Click Edit to enter, Save to commit. Use for things like: "Customer asked for shorter saddle," "Damage on left grip noted at pickup, not chargeable."

Cancellation details (if cancelled)

  • Cancelled at, by whom
  • Reason
  • Cancellation fee captured

Payment Info (if Stripe IDs exist)

  • Deposit Intent ID (raw Stripe ID for support lookups)
  • Payment Intent ID

Agreements & Waivers

The waivers panel shows:

  • Pending waivers — with "Copy link" button
  • Signed waivers — with timestamp, typed name, optional PDF link
  • "Issue signing link" buttons for each active template

See Issuing a signing link for the full workflow.

Modals (overlays)

Refund Modal

Triggered by the Refund button.

  • Destination: Wallet / Card
  • Mode: Full / Partial
  • Amount field (only for partial)
  • Reason text area
  • Confirm + Go Back buttons

See Refunding reservations.

Cancel Dialog

Triggered by the Cancel Booking button.

  • Reason text area (optional)
  • Confirm Cancel + Go Back buttons

The cancel API auto-issues a wallet refund for paid - cancellation_fee if within the free-cancel window. See Cancellation handling.

Reject Delivery Dialog

Only visible on delivery bookings in pending status. Requires a reason (rejected deliveries are auditable).

Editing fields

Most fields are read-only on this page. Use the PATCH endpoint or specific sub-routes for changes:

ActionEndpoint
Change pickup/return timePATCH /api/reservations/[id] {pickup_at, return_at}
Reassign vehicleSame PATCH with vehicle_uuid
Adjust pricing manuallyPATCH /api/reservations/[id] {adjustment_cents, adjustment_reason}
Update admin notesThe Edit button on the page

What you can't see / do here

  • Print receipt — visit /api/reservations/[id]/receipt for the PDF
  • Charge a card — the existing capture-authorized cron handles this; manual capture is via the admin charge-card endpoint
  • Refund the cancellation fee — the refund flow doesn't yet have a "refund only the cancellation fee" mode; use partial refund matching the fee amount
  • Resend confirmation email — not yet exposed; planned feature

Common booking-detail workflows

Pickup-day prep

  1. Find the booking in today's manifest, click in
  2. Verify the assignment (specific vehicle picked)
  3. Check that any required waivers are signed
  4. If the customer has prepaid, balance_due should be $0
  5. Press Check in then Start rental when they arrive

Mid-rental change

  1. Open the booking
  2. Edit return_at (extend) or swap vehicles via assignment
  3. Save — the pricing snapshot is preserved unless the new total exceeds the original tier's max duration

Post-return follow-up

  1. Open the completed booking
  2. Confirm receipts and refunds match expectations
  3. If damage was logged, verify the service log entry
  4. Issue any post-hoc charge or refund as needed