LP#1284864 MR opac-visible constituent records
authorBill Erickson <berick@esilibrary.com>
Mon, 3 Mar 2014 16:52:57 +0000 (11:52 -0500)
committerMike Rylander <mrylander@gmail.com>
Mon, 10 Mar 2014 16:29:52 +0000 (12:29 -0400)
The number of constituent records for a metarecord during searching is
now consitently based on the presence of an opac visible copy and not a
holdable copy.  This affects the constituent record counts in MR results
lists and the records displayed in the constituent records list.  (Icons
were already checking visibility instead of holdability).

Holdable formats are still derived from records with holdable copies.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm

index ac3ade2..3bf2157 100644 (file)
@@ -2498,9 +2498,13 @@ sub MR_filter_records {
     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',
index 713c107..7cc2086 100644 (file)
@@ -1290,6 +1290,8 @@ sub MR_records_matching_format {
     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;
@@ -1303,10 +1305,22 @@ sub MR_records_matching_format {
 
     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 );
     }
 
index 955fce3..21d96e2 100644 (file)
@@ -301,10 +301,12 @@ sub recs_from_metarecord {
     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;