my $f = shift;
my $o = shift;
my $d = shift;
+ my $opac_visible = shift;
my $org_at_depth = defined($d) ? $U->org_unit_ancestor_at_depth($o, $d) : $o;
- return $U->storagereq('open-ils.storage.metarecord.filtered_records.atomic', $m, $f, $org_at_depth);
+ return $U->storagereq(
+ 'open-ils.storage.metarecord.filtered_records.atomic',
+ $m, $f, $org_at_depth, $opac_visible
+ );
}
__PACKAGE__->register_method(
method => 'MR_filter_records',
my $MR = shift;
my $filter = shift;
my $org = shift;
+ # include all visible copies, regardless of holdability
+ my $opac_visible = shift;
# find filters for MR holds
my $mr_filter;
my $records = [metabib::metarecord->retrieve($MR)->source_records];
- my $q = 'SELECT source FROM metabib.record_attr_vector_list WHERE source = ? AND vlist @@ ? AND asset.record_has_holdable_copy(?,?)';
+ my $vis_q = 'asset.record_has_holdable_copy(?,?)';
+ if ($opac_visible) {
+ $vis_q = <<' SQL';
+ EXISTS(
+ SELECT 1 FROM asset.opac_visible_copies
+ WHERE record = ? AND circ_lib IN (
+ SELECT id FROM actor.org_unit_descendants(?)
+ )
+ )
+ SQL
+ }
+
+ my $q = "SELECT source FROM metabib.record_attr_vector_list WHERE source = ? AND vlist @@ ? AND $vis_q";
my @args = ( $mr_filter, $org );
if (!$mr_filter) {
- $q = 'SELECT true WHERE asset.record_has_holdable_copy(?,?)';
+ $q = "SELECT true WHERE $vis_q";
@args = ( $org );
}
my ($self, $mr_id, $org, $depth, $filter) = @_;
$self->timelog("Getting metarecords to records");
+ # in the context of searching, we include all records which
+ # have an opac-visible copy.
my $bre_ids = $U->simplereq(
'open-ils.circ',
'open-ils.circ.holds.metarecord.filtered_records',
- $mr_id, $filter, $org, $depth);
+ $mr_id, $filter, $org, $depth, 1);
$self->timelog("Got metarecords to records");
return $bre_ids;