Make item_cancelled respect no_item_agency_holds
authorJeff Godin <jgodin@tadl.org>
Mon, 8 Sep 2014 20:13:24 +0000 (16:13 -0400)
committerJeff Godin <jgodin@tadl.org>
Mon, 8 Sep 2014 20:49:30 +0000 (16:49 -0400)
When enabled, the configuration option no_item_agency_holds prevents
holds from being created in Evergreen for requests where the
Evergreen system is acting as the item agency.

Libraries using this setting pull items based on paging slips
printed by the DCB client software, not Evergreen.

This change wraps the hold cancellation logic in item agency holds
within a conditional, similar to what is already done in
item_request. If we are configured to not create holds on item
agency requests, we have no need to attempt to cancel them or
attempt to change copy status.

Signed-off-by: Jeff Godin <jgodin@tadl.org>
iNCIPit.cgi

index ce63ce0..69c8e23 100644 (file)
@@ -514,19 +514,21 @@ sub item_cancelled {
         my $r = delete_copy($copy);
     } else {
         # we are the item agency
-        # remove hold!
-        my $r = cancel_hold($barcode);
-        # TODO: check for any errors or unexpected return values in $r
-        my $copy = copy_from_barcode($barcode);
-        fail( $copy->{textcode} . " $barcode" ) unless ( blessed $copy);
-        $r = update_copy( $copy, 7 ); # set to reshelving (for wiggle room)
-        # TODO: check for any errors or unexpected return values in $r
-        #
-        # XXX other options here could be:
-        # - Set to 'available' (it is probably still on the shelf, though it might be in the process of being retrieved)
-        # - Use checkin() here instead - This could trigger things we don't want to happen, though the 'noop' flag should catch at least some of that
-        #
-        # Also, presumably they cannot cancel once the item is in transit?  If they can, we'll need more logic to decide what to do here.
+        unless ( $conf->{behavior}->{no_item_agency_holds} =~ m/^y/i ) {
+            # remove hold!
+            my $r = cancel_hold($barcode);
+            # TODO: check for any errors or unexpected return values in $r
+            my $copy = copy_from_barcode($barcode);
+            fail( $copy->{textcode} . " $barcode" ) unless ( blessed $copy);
+            $r = update_copy( $copy, 7 ); # set to reshelving (for wiggle room)
+            # TODO: check for any errors or unexpected return values in $r
+            #
+            # XXX other options here could be:
+            # - Set to 'available' (it is probably still on the shelf, though it might be in the process of being retrieved)
+            # - Use checkin() here instead - This could trigger things we don't want to happen, though the 'noop' flag should catch at least some of that
+            #
+            # Also, presumably they cannot cancel once the item is in transit?  If they can, we'll need more logic to decide what to do here.
+        }
     }
 
     my $hd = <<ITEMREQUESTCANCELLED;