# 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)
+ _reset_hold($self, $e->requestor, $hold, OILS_HOLD_UPDATED, "Item quality was changed.");
} 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 $evt if $evt;
($reqr, $evt) = $U->checksesperm($auth, 'UPDATE_HOLD');
return $evt if $evt;
- $evt = _reset_hold($self, $reqr, $hold);
+ $evt = _reset_hold($self, $reqr, $hold, OILS_HOLD_MANUAL_RESET);
return $evt if $evt;
return 1;
}
sub _reset_hold {
- my ($self, $reqr, $hold) = @_;
+ my ($self, $reqr, $hold, $reset_reason, $reset_note) = @_;
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 = "";
- if( $hold->capture_time and $hold->current_copy ) {
-
+ $reset_reason = (defined $reset_reason) ? $reset_reason : OILS_HOLD_MANUAL_RESET;
+ $reset_note = (defined $reset_note) ? $reset_note : "";
+ if($hold->current_copy){
my $copy = $e->retrieve_asset_copy($hold->current_copy)
- or return $e->die_event;
-
- 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');
- $e->update_asset_copy($copy) or return $e->die_event;
-
- } elsif( $copy->status == OILS_COPY_STATUS_IN_TRANSIT ) {
-
- $logger->warn("! reseting hold [$hid] that is in transit");
- my $transid = $e->search_action_hold_transit_copy({hold=>$hold->id,cancel_time=>undef},{idlist=>1})->[0];
-
- if( $transid ) {
- my $trans = $e->retrieve_action_transit_copy($transid);
- if( $trans ) {
- $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;
+ or return $e->die_event;
+ if( $hold->capture_time) {
+ if( $copy->status == OILS_COPY_STATUS_ON_HOLDS_SHELF ) {
+ $logger->info("setting copy to status 'reshelving' on hold retarget");
+ $reset_note.=" set copy to status 'reshelving'.";
+ $copy->status(OILS_COPY_STATUS_RESHELVING);
+ $copy->editor($e->requestor->id);
+ $copy->edit_date('now');
+ $e->update_asset_copy($copy) or return $e->die_event;
+
+ } elsif( $copy->status == OILS_COPY_STATUS_IN_TRANSIT ) {
+
+ $logger->warn("! reseting hold [$hid] that is in transit");
+ my $transid = $e->search_action_hold_transit_copy({hold=>$hold->id,cancel_time=>undef},{idlist=>1})->[0];
+
+ if( $transid ) {
+ my $trans = $e->retrieve_action_transit_copy($transid);
+ if( $trans ) {
+ $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");
+ $reset_note.=" Transit abort completed with result $evt.";
+ unless ("$evt" eq 1) {
+ $e->rollback;
+ return $evt;
+ }
}
}
- }
+ }
}
- }
-
- _create_reset_reason_entry($e,$hold,OILS_HOLD_MANUAL_RESET,$note_body);
+ if( $copy->status == OILS_COPY_STATUS_MISSING ) {
+ $reset_note.=" Copy marked missing.";
+
+ } elsif( $copy->status == OILS_COPY_STATUS_DAMAGED ) {
+ $reset_note.=" Copy marked damaged.";
+
+ } elsif( $copy->status == OILS_COPY_STATUS_DISCARD ) {
+ $reset_note.=" Copy marked discarded.";
+ }
+ }
+
+ _create_reset_reason_entry($e,$hold,$reset_reason,$reset_note) if $reset_reason;
$hold->clear_capture_time;
$hold->clear_current_copy;
$hold->clear_shelf_time;
$e->commit;
- _reset_hold($self, $e->requestor, $_) for @$holds;
+ _reset_hold($self, $e->requestor, $_, OILS_HOLD_UPDATED, "title hold target change") for @$holds;
return 1;
}
$e->commit;
- _reset_hold($self, $e->requestor, $_) for @$holds;
+ _reset_hold($self, $e->requestor, $_, OILS_HOLD_UPDATED, "title hold target change") for @$holds;
return 1;
}