LP 1306666: Abort Transit Only Change Copy Status if In Transit
authorJason Stephenson <jstephenson@mvlcstaff.org>
Fri, 18 Mar 2016 20:38:33 +0000 (16:38 -0400)
committerMike Rylander <mrylander@gmail.com>
Wed, 24 Aug 2016 12:09:37 +0000 (08:09 -0400)
When aborting a transit, the copy status is presently changed, either
to the status stored in action.transit_copy or to Reshelving if the
transit was for a hold.  This causes problems with "hanging" transits
where something was not handled properly before.  We've had cases
where a transit sticks around on a copy that is later checked out, and
while that copy is checked out, the transit is aborted, thus setting
the copy status to Reshelving when it should be Checked Out.

The code change in this branch only changes the copy's status if it is
In Transit.  A copy in any other status has its status left untouched.

Signed-off-by: Jason Stephenson <jstephenson@mvlcstaff.org>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Transit.pm

index 2207438..73abe82 100644 (file)
@@ -239,20 +239,24 @@ sub __abort_transit {
         return $e->die_event unless $e->allowed('ABORT_REMOTE_TRANSIT', $e->requestor->ws_ou);
     }
 
-    # recover the copy status
-    $copy->status( $transit->copy_status );
-    $copy->editor( $e->requestor->id );
-    $copy->edit_date('now');
-
     my $holdtransit = $e->retrieve_action_hold_transit_copy($transit->id);
 
-    if( $holdtransit ) {
-        $logger->info("setting copy to reshelving on hold transit abort");
-        $copy->status( OILS_COPY_STATUS_RESHELVING );
+    return $e->die_event unless $e->delete_action_transit_copy($transit);
+
+    # Only change the copy status if the copy status is "In Transit."
+    if ($copy->status == OILS_COPY_STATUS_IN_TRANSIT) {
+        # recover the copy status
+        $copy->status( $transit->copy_status );
+        $copy->editor( $e->requestor->id );
+        $copy->edit_date('now');
+
+        if ( $holdtransit ) {
+            $logger->info("setting copy to reshelving on hold transit abort");
+            $copy->status( OILS_COPY_STATUS_RESHELVING );
+        }
+        return $e->die_event unless $e->update_asset_copy($copy);
     }
 
-    return $e->die_event unless $e->delete_action_transit_copy($transit);
-    return $e->die_event unless $e->update_asset_copy($copy);
 
     $e->commit unless $no_commit;