$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.");
+ _create_reset_reason_entry($e,$hold,OILS_HOLD_UNCANCELED);
$e->update_action_hold_request($hold) or return $e->die_event;
$e->commit;
$hold->cancel_time('now');
$hold->cancel_cause($cause);
$hold->cancel_note($note);
- my $note_body = "Hold Cancelation.";
- $note_body .= " Cancel Cause ID - $cause;";
- $note_body .= " Cancel Note - $note" unless $note eq "";
- _create_reset_hold_note($e,$hold,"Hold Reset due to Cancelation",$note_body);
+ my $note_body = "";
+ if($cause){
+ my $cancel_reason = "ID $cause";
+ my $cancel_cause = $e->retrieve_action_hold_request_cancel_cause($cause);
+ if($cancel_cause){
+ $cancel_reason = $cancel_cause->label;
+ }
+ $note_body .= "Cancel Cause: $cancel_reason";
+ }
+ else{
+ $note_body .= "Cancel reason unknown";
+ }
+ $note_body .= "," unless $note_body eq "" || $note eq "";
+ $note_body .= " Cancel Note: \"$note\"" unless $note eq "";
+ _create_reset_reason_entry($e,$hold,OILS_HOLD_CANCELED,$note_body);
$e->update_action_hold_request($hold)
or return $e->die_event;
my($self, $e, $hold, $values) = @_;
my $hold_status;
my $need_retarget = 0;
+ my $reset_reason = OILS_HOLD_UPDATED;
my $note_body = "";
unless($hold) {
if (defined $values->{$k} && defined $hold->$k() && $values->{$k} ne $hold->$k()) {
# Value changed? RETARGET!
$need_retarget = 1;
+ $reset_reason = OILS_HOLD_UPDATED;
$note_body .= "$k value changed."
} elsif (defined $hold->$k() != defined $values->{$k}) {
# Value being set or cleared? RETARGET!
$need_retarget = 1;
+ $reset_reason = OILS_HOLD_UPDATED;
$note_body .= "$k value cleared."
}
}
$hold->clear_current_copy;
}
}
-
+
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);
+ _create_reset_reason_entry($e,$hold,OILS_HOLD_FROZEN,$note_body) unless $U->is_true($orig_hold->frozen);
$hold->clear_current_copy;
$hold->clear_prev_check_time;
# Clear expire_time to prevent frozen holds from expiring.
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 "";
+ _create_reset_reason_entry($e,$hold,$reset_reason,$note_body) if $need_retarget;
$e->commit;
-
+
if(!$U->is_true($hold->frozen) && $U->is_true($orig_hold->frozen)) {
$logger->info("Running targeter on activated hold ".$hold->id);
+ $U->simplereq('open-ils.circ',
+ 'open-ils.circ.hold_reset_reason_entry.create',$e->authtoken,$hold->id,OILS_HOLD_UNFROZEN);
$U->simplereq('open-ils.hold-targeter',
'open-ils.hold-targeter.target', {hold => $hold->id});
}
# a change to mint-condition changes the set of potential copies, so retarget the hold;
if($U->is_true($hold->mint_condition) and !$U->is_true($orig_hold->mint_condition)) {
_reset_hold($self, $e->requestor, $hold)
- } elsif($need_retarget && !defined $hold->capture_time()) { # If needed, retarget the hold due to changes
+ } elsif($need_retarget && !defined $hold->capture_time()) { # If needed, retarget the hold due to changes
$U->simplereq('open-ils.hold-targeter',
'open-ils.hold-targeter.target', {hold => $hold->id});
}
+
+
return $hold->id;
}
} 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");
+ _create_reset_reason_entry($e,$hold,OILS_HOLD_UNFROZEN,"Running targeter on activated hold");
$U->simplereq('open-ils.hold-targeter',
'open-ils.hold-targeter.target', {hold => $hold->id});
}
}
__PACKAGE__->register_method(
- method => 'create_reset_hold_note',
- api_name => 'open-ils.circ.hold_reset_note.create'
+ method => 'create_reset_reason_entry',
+ api_name => 'open-ils.circ.hold_reset_reason_entry.create'
);
-sub create_reset_hold_note
+sub create_reset_reason_entry
{
- my($self, $conn, $holdid, $title, $note_body) = @_;
- my $e = new_editor(xact => 1);
- $logger->info("got editor");
- #return $e->die_event unless $e->checkauth;
- my ($hold, $evt) = $U->fetch_hold($holdid);
- $logger->info("fetched hold");
- return $evt if $evt;
- _create_reset_hold_note($e, $hold, $title, $note_body);
+ my($self, $conn, $auth, $hold, $reset_reason, $note) = @_;
+ my $e = new_editor(authtoken => $auth, xact => 1);
+ #checkauth to set the requestor (if available)
+ $e->checkauth;
+ my @holds;
+ if(ref $hold eq 'ARRAY'){
+ @holds = @{$hold};
+ }
+ else{
+ @holds = ($hold);
+ }
+ for my $holdid (@holds){
+ my ($hold, $evt) = $U->fetch_hold($holdid);
+ return $evt if $evt;
+ _create_reset_reason_entry($e, $hold, $reset_reason, $note);
+ }
$e->commit;
return 1;
}
-sub _create_reset_hold_note
+sub _create_reset_reason_entry
{
- my($e, $hold, $title, $note_body) = @_;
+ my($e, $hold, $reset_reason,$note) = @_;
my $ts = DateTime->now;
- my $note = Fieldmapper::action::hold_request_note->new;
- $logger->info("Creating hold note with title: " . $title . " and body: " . $note_body . " hold id: " . $hold->id);
- my $last_copy = $hold->current_copy || 0;
- my $reqr = $e->requestor;
- my $reqr_id = defined $reqr ? $reqr->id : 0;
- my $reqr_usrname = $reqr_id ? $reqr->usrname : "";
- $title.=" ".$ts->mdy." ".$ts->hms;
- my $json = "{";
- $json .= "\"Reset Reason\" : \"$note_body\",";
- $json .= "\"Timestamp\" : \"".$ts->mdy." ".$ts->hms."\",";
- $json .= "\"Previous Copy ID\" : \"$last_copy\"," unless $last_copy == 0;
- $json .= "\"Requestor ID\" : \"".$reqr_id."\",";
- $json .= "\"Requestor Usrname\" : \"".$reqr_usrname."\"";
- $json .= "}";
- $note->hold($hold);
- $note->staff(1);
- $note->pub(0);
- $note->title($title);
- $note->body($json);
- $e->create_action_hold_request_note($note) or return $e->die_event;
+ my $entry = Fieldmapper::action::hold_request_reset_reason_entry->new;
+ $logger->info("Creating reset reason entry for hold #" . $hold->id);
+ my $last_copy = $hold->current_copy;
+ $entry->hold($hold->id);
+ $entry->reset_reason($reset_reason);
+ $entry->reset_time('now');
+ $entry->requestor($e->requestor->id) if defined $e->requestor;
+ $entry->requestor_workstation($e->requestor->wsid) if defined $e->requestor;
+ $entry->previous_copy($last_copy);
+ $entry->note($note);
+ $e->create_action_hold_request_reset_reason_entry($entry) or return $e->die_event;
return 1;
}
my $e = new_editor(xact =>1, requestor => $reqr);
my $hid = $hold->id;
$logger->info("reseting hold ".$hid." requestor was ".$reqr->usrname." (ID ".$reqr->id.")");
-
- my $note_body = "Manually retargetted.";
-
+ my $note_body = "";
if( $hold->capture_time and $hold->current_copy ) {
my $copy = $e->retrieve_asset_copy($hold->current_copy)
}
}
- _create_reset_hold_note($e,$hold,"Hold Reset by Staff",$note_body);
+ _create_reset_reason_entry($e,$hold,OILS_HOLD_MANUAL_RESET,$note_body);
$hold->clear_capture_time;
$hold->clear_current_copy;
$hold->clear_shelf_time;
next if $old_hold->id eq $best_hold->id; # don't re-target the hold we want
$logger->info("circulator: clearing current_copy and prev_check_time on hold ".
$old_hold->id." after a better hold [".$best_hold->id."] was found");
- _create_reset_hold_note($editor,$old_hold,"Hold Reset due to Age","Old hold was reset. Last check time was ".$old_hold->prev_check_time.". a better hold [".$best_hold->id."] was found");
+ _create_reset_reason_entry($editor,$old_hold,OILS_HOLD_BETTER_HOLD,"Old hold was reset. Last check time was ".$old_hold->prev_check_time.". a better hold [".$best_hold->id."] was found");
$old_hold->clear_current_copy;
$old_hold->clear_prev_check_time;
$editor->update_action_hold_request($old_hold)