In a middle-layer method for returning holdable formats on a metarecord,
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Mon, 8 Aug 2011 17:22:05 +0000 (13:22 -0400)
committerMike Rylander <mrylander@gmail.com>
Mon, 8 Aug 2011 17:30:48 +0000 (13:30 -0400)
Do a better test of copy holdability than we were doing previously.
We can't do a perfect test: we don't really know what patron we're doing
this for, and even if we did, from here it's nontrivial to figure out
whether we're doing indb holds or script-based, much less run the tests.

Still, we can test whether a copy's in a holdable status, a holdable
location, and is itself not explicitly marked unholdable.

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/OpenILS/Application/Search/Biblio.pm

index e12ccb1..05c5d4d 100644 (file)
@@ -2416,6 +2416,40 @@ sub rec_to_mr_rec_descriptors {
 
        my $desc = $e->search_metabib_record_descriptor($search);
 
+       my $query = {
+               distinct => 1,
+               select   => { 'bre' => ['id'] },
+               from     => {
+                       'bre' => {
+                               'acn' => {
+                                       'join' => {
+                                               'acp' => {"join" => {"acpl" => {}, "ccs" => {}}}
+                                         }
+                                 }
+                        }
+               },
+               where => {
+                       '+bre' => { id => \@recs },
+                       '+acp' => {
+                               holdable => 't',
+                               deleted  => 'f'
+                       },
+                       "+ccs" => { holdable => 't' },
+                       "+acpl" => { holdable => 't' }
+               }
+       };
+
+       my $good_records = $e->json_query($query) or return $e->die_event;
+
+       my @keep;
+       for my $d (@$desc) {
+               if ( grep { $d->record == $_->{id} } @$good_records ) {
+                       push @keep, $d;
+               }
+       }
+
+       $desc = \@keep;
+
        return { metarecord => $mrec, descriptors => $desc };
 }