LP1866667 - Clear current_copy when pickup_lib is changed and waiting for capture
authorJosh Stompro <stompro@stompro.org>
Tue, 10 Mar 2020 16:38:48 +0000 (11:38 -0500)
committerBill Erickson <berickxx@gmail.com>
Mon, 20 Sep 2021 14:24:28 +0000 (10:24 -0400)
When a user changes the pickup lib and a retarget is triggered
the currently targeted copy gets excluded if there are other
available copies.

This can cause delays and confusion since the new copy may
not be the best choice.

This change clears the current_copy before the retarget in that
situation.

Testing setup.

Find/create a title with items that looks like:

System X ->
   Branch A -> Holdable item
   Branch B ->
System Y
   Branch C -> Holdable item
   Branch D -> Holdable item

Place a hold with a pickup location of Branch B, which should target
the closest item at Branch A

Then change the pickup location of your hold to Branch A.

The retarget that happens, should switch the targeted copy to Branch C or D.

After Change Applied:

The hold should remain targeted to Branch A after pickup lib is changed
to Branch A.

Signed-off-by: Josh Stompro <stompro@stompro.org>
Signed-off-by: Dawn Dale <ddale@georgialibraries.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>

Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm

index 1a8667a..12eada6 100644 (file)
@@ -1317,6 +1317,12 @@ sub update_hold_impl {
                 # clear to prevent premature shelf expiration
                 $hold->clear_shelf_expire_time;
             }
+          # If a copy is targeted and pickup lib changes,
+          # clear the current_copy so a retarget will re-evaluate
+          # the hold from scratch.
+        } elsif ($hold_status == 2) {
+              $logger->info("Pickup location changed and waiting for capture, clear current_copy for hold ".$hold->id);
+              $hold->clear_current_copy;
         }
     }