Skip to content

MyTurn reservation dashboard for camping gear pick-ups and drop-offs #2122

@phinze

Description

@phinze

Context

We use MyTurn for camping gear lending. MyTurn only surfaces pick-up appointments — there's no view showing expected drop-offs/returns. This means librarians have to manually track returns on a whiteboard. Without proactive tracking, returns get lost and items go overdue without anyone noticing until someone else needs them.

The goal: a dashboard in Circulate showing upcoming pick-ups AND drop-offs in chronological order, so librarians can see at a glance what's expected each day and follow up same-day when someone doesn't show.

Research

I poked around MyTurn's admin interface and confirmed we can pull reservation data out programmatically. The data we need is available: reservation ID, borrower info, start date, pickup time slot, loan length, status, items, and pickup location. From start date + length we can compute expected return dates (the missing piece MyTurn doesn't surface).

Last season had ~90 fulfilled camping gear reservations with overlapping multi-day loans — confirms the need for a tracking view.

What to build

A chronological dashboard showing a unified list of upcoming events:

  • Pick-ups: borrower name, date/time slot, items being checked out
  • Drop-offs: borrower name, expected return date, items to be returned

The main value is making it easy to spot no-shows same-day — "they had a drop-off today at 1pm and at 3pm they're nowhere to be found, let's call them now."

Technical details

MyTurn's public API is gated behind a "kiosk" feature we don't have enabled, but the admin web UI has JSON endpoints we can use:

  • Auth: POST /library/j_spring_security_check with username/password form login. Returns a session cookie + a grails_remember_me cookie (~30 day expiry). We'll need to handle re-auth when sessions expire.
  • Reservation list: POST /library/orgInventory/reservationReportData — returns JSON array of reservations with date range and status filters. Each record includes user info, start date, pickup time slot, length in days, status, and pickup location.
  • Reservation detail: GET /library/orgInventory/editReservation/{id} — returns JSON with explicit from/to dates and item-level detail (names, types, quantities).

To explore further

  • Create a dedicated MyTurn user for Circulate to use for data syncing
  • Sync strategy: real-time on page load vs. periodic background job
  • Where in Circulate's admin nav does this live
  • What item-level detail librarians need on the dashboard (full item list vs. item count)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

✅ Merged

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions