$editor->update_biblio_record_entry($rec) or return $editor->event;
+ my $holds = $editor->search_action_hold_request({
+ target => $rec->id,
+ hold_type => 'T',
+ cancel_time => undef,
+ fulfillment_time => undef
+ });
+
+ for my $hold (@$holds) {
+
+ $hold->cancel_time('now');
+ $hold->cancel_cause(1); # un-targeted expiration.
+ $editor->update_action_hold_request($hold) or return $editor->die_event;
+
+ my $maps = $editor->search_action_hold_copy_map({hold => $hold->id});
+ for(@$maps) {
+ $editor->delete_action_hold_copy_map($_)
+ or return $editor->die_event;
+ }
+
+ my $at_ses = OpenSRF::AppSession->create('open-ils.trigger');
+ $at_ses->request(
+ 'open-ils.trigger.event.autocreate',
+ 'hold_request.cancel.expire_no_target',
+ $hold, $hold->pickup_lib);
+ }
+
return undef;
}