Bug 30500: Allow patrons to change in transit holds pickup locations
authorTomas Cohen Arazi <tomascohen@theke.io>
Wed, 8 Jun 2022 20:26:43 +0000 (17:26 -0300)
committerTomas Cohen Arazi <tomascohen@theke.io>
Fri, 5 Aug 2022 14:54:54 +0000 (11:54 -0300)
This patch adds a way for patrons to change the pickup location for in
transit holds.

This is done in the OPAC on the holds table.

The feature is controlled by a new system preference:

* OPACInTransitHoldPickupLocationChange

To test:
1. Apply this patches
2. Run:
   $ updatedatabase
   $ restart_all
=> SUCCESS: system preference added
3. Have an in-transit hold for a known patron
4. Visit the holds table for the patron (OPAC)
=> SUCCESS: Hold in transit, cannot change pickup location
5. Enable the OPACInTransitHoldPickupLocationChange system preference
=> SUCCESS: Descriptive text makes sense and is idiomatic
6. Reload the OPAC page
=> SUCCESS: You can now choose a new pickup location
7. Choose one
=> SUCCESS: It works! Reloaded page pre-selects the new pickup location
8. Switch to the new pickup location library on the staff interface
9. Go to Circulation > Transfers to receive
=> SUCCESS: The hold is there!
10. Scan the hold
=> SUCCESS: Usual workflow follows
11. Sign off :-D

Sponsored-by: Montgomery County Public Libraries
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
koha-tmpl/opac-tmpl/bootstrap/en/includes/holds-table.inc
opac/opac-modrequest.pl

index 70b6901..5daded0 100644 (file)
                         [% UNLESS( singleBranchMode) %]
                             <td class="branch">
                                 <span class="tdlabel">Pick up location:</span>
-                                [% HOLD.branch.branchname | html %]
+                                [% IF Koha.Preference('OPACInTransitHoldPickupLocationChange') && HOLD.is_in_transit %]
+                                    <form class="form-inline" action="/cgi-bin/koha/opac-modrequest.pl" method="post">
+                                        <input type="hidden" name="reserve_id" value="[% HOLD.reserve_id | html %]" />
+                                        <select name="new_pickup_location" class="new_pickup_location" onchange="this.form.submit()">
+                                            [% PROCESS options_for_libraries libraries => Branches.pickup_locations({ search_params => { item => HOLD.itemnumber, patron => logged_in_user }, selected => HOLD.branchcode }) %]
+                                        </select>
+                                    </form>
+                                [% ELSE %]
+                                    [% HOLD.branch.branchname | html %]
+                                [% END %]
                             </td>
                         [% END %]
                         [% IF ( showpriority ) %]
index 5d83ea3..c12ac95 100755 (executable)
@@ -41,6 +41,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
 
 my $reserve_id = $query->param('reserve_id');
 my $cancellation_request = $query->param('cancellation_request');
+my $new_pickup_location  = $query->param('new_pickup_location');
 
 if ( $reserve_id && $borrowernumber ) {
 
@@ -61,6 +62,18 @@ if ( $reserve_id && $borrowernumber ) {
         $hold->cancel
           if $hold->is_cancelable_from_opac;
     }
+
+    if ( $new_pickup_location ) {
+
+        if ( C4::Context->preference('OPACInTransitHoldPickupLocationChange') ) {
+            $hold->set_pickup_location({ library_id => $new_pickup_location });
+        }
+        else {
+            # whatcha tryin to do?
+            print $query->redirect('/cgi-bin/koha/errors/403.pl');
+            exit;
+        }
+    }
 }
 
 print $query->redirect("/cgi-bin/koha/opac-user.pl#opac-user-holds");