log username of retargeter
authorLlewellyn Marshall <llewellyn.marshall@ncdcr.gov>
Wed, 18 Aug 2021 17:13:47 +0000 (13:13 -0400)
committerLlewellyn Marshall <llewellyn.marshall@ncdcr.gov>
Fri, 5 Nov 2021 14:18:57 +0000 (10:18 -0400)
add hold notes

better notes for hold update

(cherry picked from commit 5672d9d70fd7122073f7bbf6ba7415339cf42d10)

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

index 12eada6..2a9d37f 100644 (file)
@@ -1024,13 +1024,12 @@ sub uncancel_hold {
     $hold->clear_prev_check_time;
     $hold->clear_shelf_expire_time;
     $hold->clear_current_shelf_lib;
-
+    create_reset_hold_note($e,$hold,"Hold Reset due to Uncancelation","Hold was reset due to Uncancelation.");
     $e->update_action_hold_request($hold) or return $e->die_event;
     $e->commit;
-
+        
     $U->simplereq('open-ils.hold-targeter',
         'open-ils.hold-targeter.target', {hold => $hold_id});
-
     return 1;
 }
 
@@ -1106,6 +1105,7 @@ sub cancel_hold {
     $hold->cancel_time('now');
     $hold->cancel_cause($cause);
     $hold->cancel_note($note);
+    create_reset_hold_note($e,$hold,"Hold Reset due to Cancelation","Hold Reset due to Cancelation.");
     $e->update_action_hold_request($hold)
         or return $e->die_event;
 
@@ -1206,6 +1206,7 @@ sub update_hold_impl {
     my($self, $e, $hold, $values) = @_;
     my $hold_status;
     my $need_retarget = 0;
+    my $note_body = "";
 
     unless($hold) {
         $hold = $e->retrieve_action_hold_request($values->{id})
@@ -1217,9 +1218,11 @@ sub update_hold_impl {
                 if (defined $values->{$k} && defined $hold->$k() && $values->{$k} ne $hold->$k()) {
                     # Value changed? RETARGET!
                     $need_retarget = 1;
+                    $note_body .= "$k value changed."
                 } elsif (defined $hold->$k() != defined $values->{$k}) {
                     # Value being set or cleared? RETARGET!
                     $need_retarget = 1;
+                    $note_body .= "$k value cleared."
                 }
             }
             if (defined $values->{$k}) {
@@ -1328,6 +1331,8 @@ sub update_hold_impl {
 
     if($U->is_true($hold->frozen)) {
         $logger->info("clearing current_copy and check_time for frozen hold ".$hold->id);
+        $note_body .= "Hold was Frozen.";
+        $note_body .= " Previous target was copy ID ".$hold->current_copy."." if defined($hold->current_copy);
         $hold->clear_current_copy;
         $hold->clear_prev_check_time;
         # Clear expire_time to prevent frozen holds from expiring.
@@ -1346,9 +1351,11 @@ sub update_hold_impl {
     if(!$U->is_true($hold->frozen) && $U->is_true($orig_hold->frozen)) {
         $logger->info("Reset expire_time on activated hold ".$hold->id);
         $hold->expire_time(calculate_expire_time($hold->request_lib));
+        $note_body .= "Hold was Unfrozen.";
     }
 
     $e->update_action_hold_request($hold) or return $e->die_event;
+    create_reset_hold_note($e,$hold,"Hold Reset due to Update",$note_body) unless $note_body eq "";
     $e->commit;
 
     if(!$U->is_true($hold->frozen) && $U->is_true($orig_hold->frozen)) {
@@ -1364,7 +1371,7 @@ sub update_hold_impl {
         $U->simplereq('open-ils.hold-targeter', 
             'open-ils.hold-targeter.target', {hold => $hold->id});
     }
-
+    
     return $hold->id;
 }
 
@@ -1450,6 +1457,7 @@ sub update_hold_if_frozen {
     } else {
         if($U->is_true($orig_hold->frozen)) {
             $logger->info("Running targeter on activated hold ".$hold->id);
+            create_reset_hold_note($e,$hold,"Hold Reset by Unfreezing","Running targeter on activated hold");
             $U->simplereq('open-ils.hold-targeter', 
                 'open-ils.hold-targeter.target', {hold => $hold->id});
         }
@@ -2209,6 +2217,23 @@ sub reset_hold {
     return 1;
 }
 
+sub create_reset_hold_note
+{
+    my($e, $hold, $title, $note_body) = @_;
+    my $ts = DateTime->now;
+    my $note = Fieldmapper::action::hold_request_note->new;  
+    my $last_copy = $hold->current_copy || 0;
+    $title.=" ".$ts->mdy." ".$ts->hms;
+    $note_body .= " It was previously targeting copy ID $last_copy." unless $last_copy == 0;
+    $note->hold($hold);
+    $note->staff(1);
+    $note->pub(0);
+    $note->title($title);
+    $note->body($note_body);
+    $e->create_action_hold_request_note($note) or return $e->die_event;
+    return 1;
+}
+
 
 __PACKAGE__->register_method(
     method   => 'reset_hold_batch',
@@ -2239,11 +2264,11 @@ sub _reset_hold {
     my ($self, $reqr, $hold) = @_;
 
     my $e = new_editor(xact =>1, requestor => $reqr);
-
-    $logger->info("reseting hold ".$hold->id);
-
     my $hid = $hold->id;
-
+    $logger->info("reseting hold ".$hid." requestor was ".$reqr->usrname." (ID ".$reqr->id.")");
+    
+    my $note_body = "Hold was reset by ".$reqr->usrname." (ID ".$reqr->id.").";
+    
     if( $hold->capture_time and $hold->current_copy ) {
 
         my $copy = $e->retrieve_asset_copy($hold->current_copy)
@@ -2251,6 +2276,7 @@ sub _reset_hold {
 
         if( $copy->status == OILS_COPY_STATUS_ON_HOLDS_SHELF ) {
             $logger->info("setting copy to status 'reshelving' on hold retarget");
+            $note_body.=" set copy to status 'reshelving'.";
             $copy->status(OILS_COPY_STATUS_RESHELVING);
             $copy->editor($e->requestor->id);
             $copy->edit_date('now');
@@ -2267,6 +2293,7 @@ sub _reset_hold {
                     $logger->info("Aborting transit [$transid] on hold [$hid] reset...");
                     my $evt = OpenILS::Application::Circ::Transit::__abort_transit($e, $trans, $copy, 1, 1);
                     $logger->info("Transit abort completed with result $evt");
+                    $note_body.=" Transit abort completed with result $evt.";
                     unless ("$evt" eq 1) {
                         $e->rollback;
                         return $evt;
@@ -2276,6 +2303,7 @@ sub _reset_hold {
         }
     }
 
+    create_reset_hold_note($e,$hold,"Hold Reset by Staff",$note_body);
     $hold->clear_capture_time;
     $hold->clear_current_copy;
     $hold->clear_shelf_time;
@@ -2283,8 +2311,9 @@ sub _reset_hold {
     $hold->clear_current_shelf_lib;
 
     $e->update_action_hold_request($hold) or return $e->die_event;
+   
     $e->commit;
-
+    
     $U->simplereq('open-ils.hold-targeter', 
         'open-ils.hold-targeter.target', {hold => $hold->id});