LP#904581: when calculating hold status, be more careful about fetching transits
authorGalen Charlton <gmc@esilibrary.com>
Thu, 5 Feb 2015 16:52:36 +0000 (16:52 +0000)
committerBen Shum <bshum@biblio.org>
Mon, 23 Feb 2015 22:05:50 +0000 (17:05 -0500)
This patch fixes a problem where if a hold meets the following
criteria, an "Invalid date format: at /usr/share/perl5/Error.pm"
error can be thrown when fetching its details:

- the hold has a captured item
- the captured item has status 8 (on hold shelf)
- there is another item that is currently in transit to fill the hold
- the pickup library (or one of its ancestors) has the
  circ.hold_shelf_status_delay library setting set.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Ben Shum <bshum@biblio.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm

index 1ec6066..a5f9e7e 100644 (file)
@@ -1283,7 +1283,11 @@ sub _hold_status {
         # the interval is greater than now, consider the hold to be in the virtual
         # "on its way to the holds shelf" status. Return 5.
 
-        my $transit    = $e->search_action_hold_transit_copy({hold => $hold->id})->[0];
+        my $transit    = $e->search_action_hold_transit_copy({
+                            hold           => $hold->id,
+                            target_copy    => $copy->id,
+                            dest_recv_time => {'!=' => undef},
+                         })->[0];
         my $start_time = ($transit) ? $transit->dest_recv_time : $hold->capture_time;
         $start_time    = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($start_time));
         my $end_time   = $start_time->add(seconds => OpenSRF::Utils::interval_to_seconds($hs_wait_interval));