Okay, for these tests I have 6 users: staff1, user1, staff2, user2, staff3, and user3. The home_ou for staff1 and user1 is ARL-ATH. For staff2/user2, ARL-BOG. And for staff3/user3, ARL-BKM.
staff1@ARL-ATH places a hold for user1@ARL-ATH with a pickup lib of ARL-BKM. A copy at ARL-BKM gets targetted, but for the experiment, we magically transport it to ARL-ATH, where staff1 tries to check it in. The staff client says the item is in transit to ARL-BKM and should be routed there. This happens. Then staff3@ARL-BKM tries to check the copy in, but it blows up with an osrfMethodException, can't call method "id" on an undefined value at Transit.pm line 88. Out of curiosity, we tell staff3 what is happening and he tries the Hold Capture interface with that copy. No hold found event. He pulls up user1 and checks the hold display. The hold is still listed, and a capture time is given. Staff3 tries to check the copy out to user1, and we get a COPY_NOT_AVAILABLE event. The copy's status is still In Transit.
Now what should have happened?
staff1 (at the wrong library) checks in the targetted copy. If the status is Available (which it should be anyway, in order to have been targetted), then it should get captured for the hold and routed to ARL-BKM (and a hold-transit slip is printed).
staff3 will check it in and the staff client will get a SUCCESS event, but will notice the STATUS of On Holds Shelf and it would be nice for an advanced option to offer to re-print a hold slip.
staff1 places a hold on Water All Around for user1 with a pickup lib of ARL-ATH.
copy a1115b16 (in ARL-ATH) gets targetted
staff2 logs in and we assume that the copy somehow ends up in ARL-BOG
staff2 checks in the copy at ARL-BOG
Evergreen throws a CIRCULATION_NOT_FOUND event, and the staff client dialog says:
There is no circulation for this item, however, its circulating library is ARL-ATH. Transit this item? <Don't Transit> <Transit>
The staff client currently lacks a method to place the item in transit (and I was wrong about this, I did have open-ils.circ.copy_transit.create).
We magically send the copy to ARL-ATH.
staff1 checks it in, and Evergreen returns another CIRCULATION_NOT_FOUND event, and the staff client does not show a dialog in this case, and just appends an entry to the checkin listbox.
We tell staff1 what's going on, and he pulls up the Capture Holds interface and scans the copy.
Evergreen returns a ROUTE_ITEM event, and the staff client pretends to print a receipt slip that says:
ROUTE_ITEM Barcode: a1115b16 Title: Water all around Author: Pine, Tillie S. Route To: ARL-ATH Patron: user1 User, Joe
Now how should this scenario really have played out?
staff1 places hold for user1 with ARL-ATH pickup lib and the copy gets targetted.
staff2 checks in the copy for some odd reason, and Evergreen returns a ROUTE_ITEM event, and automatically creates a transit for that item.
No circ can be done with that copy until it comes back to ARL-ATH.
staff1 checks in the copy, and some special event gets returned. A hold slip is printed and the status of the item is On Holds Shelf.