be smarter about holdings fleshing, particularly where only URIs are requested
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 5 Apr 2010 04:14:03 +0000 (04:14 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 5 Apr 2010 04:14:03 +0000 (04:14 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@16131 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/SuperCat.pm
Open-ILS/src/perlmods/OpenILS/WWW/SuperCat.pm

index 6a3e81a..213d510 100644 (file)
@@ -704,7 +704,7 @@ sub retrieve_uri {
        my $self = shift;
        my $client = shift;
        my $cpid = shift;
-       my $args = shift;
+       my $args = shift || {};
 
     return OpenILS::Application::SuperCat::unAPI
         ->new(OpenSRF::AppSession
@@ -747,7 +747,7 @@ sub retrieve_copy {
        my $self = shift;
        my $client = shift;
        my $cpid = shift;
-       my $args = shift;
+       my $args = shift || {};
 
     return OpenILS::Application::SuperCat::unAPI
         ->new(OpenSRF::AppSession
@@ -790,7 +790,7 @@ sub retrieve_callnumber {
        my $self = shift;
        my $client = shift;
        my $cnid = shift;
-       my $args = shift;
+       my $args = shift || {};
 
     return OpenILS::Application::SuperCat::unAPI
         ->new(OpenSRF::AppSession
@@ -932,7 +932,7 @@ sub new_record_holdings {
        my $client = shift;
        my $bib = shift;
        my $ou = shift;
-       my $hide_copies = shift;
+       my $flesh = shift;
        my $paging = shift;
 
     $paging = [-1,0] if (!$paging or !ref($paging) or @$paging == 0);
@@ -958,22 +958,38 @@ sub new_record_holdings {
 
        $logger->info("Searching for holdings at orgs [".join(',',@ou_ids)."], based on $ou");
 
+    my %subselect = ( '-or' => [
+        { owning_lib => \@ou_ids },
+        { '-exists'  =>
+            { from  => 'acp',
+              where => {
+                call_number => { '=' => {'+acn'=>'id'} },
+                deleted => 'f',
+                circ_lib => \@ou_ids
+              }
+            }
+        }
+    ]);
+
+    if ($flesh and $flesh eq 'uris') {
+        %subselect = (
+            owning_lib => \@ou_ids,
+            '-exists'  => {
+                from  => { auricnm => 'auri' },
+                where => {
+                    call_number => { '=' => {'+acn'=>'id'} },
+                    '+auri' => { active => 't' }
+                }
+            }
+        );
+    }
+
+
        my $cns = $_storage->request(
                "open-ils.cstore.direct.asset.call_number.search.atomic",
                { record  => $bib,
           deleted => 'f',
-          '-or'   => [
-            { owning_lib => \@ou_ids },
-            { '-exists'  =>
-                { from  => 'acp',
-                  where =>
-                    { call_number => { '=' => {'+acn'=>'id'} },
-                      deleted => 'f',
-                      circ_lib => \@ou_ids
-                  }
-                }
-            }
-          ]
+          %subselect
         },
                { flesh         => 5,
                  flesh_fields  => {
@@ -1003,7 +1019,7 @@ sub new_record_holdings {
         $client->respond(
             OpenILS::Application::SuperCat::unAPI::acn
                 ->new( $cn )
-                ->as_xml( {no_record => 1, no_copies => $hide_copies} )
+                ->as_xml( {no_record => 1, no_copies => ($flesh ? 0 : 1)} )
         );
        }
 
index 59e71a9..b2fc075 100644 (file)
@@ -547,17 +547,9 @@ sub unapi {
 
        my $method = "open-ils.supercat.$type.$base_format.$command";
        my @params = ($id);
+       push @params, $lib, $flesh_feed, $paging if ($base_format eq 'holdings_xml');
 
-       if ($base_format eq 'holdings_xml') {
-               push @params, $lib;
-               if ($format !~ /-full$/o) {
-                       push @params, 1;
-               } else {
-                       push @params, 0;
-        }
-       }
-
-       my $req = $supercat->request($method,@params,$paging);
+       my $req = $supercat->request($method,@params);
        my $data = $req->gather();
 
        if ($req->failed || !$data) {
@@ -1336,7 +1328,7 @@ sub create_record_feed {
 
                $xml = '';
                if ($lib && ($type eq 'marcxml' || $type eq 'atom') &&  $flesh) {
-                       my $r = $supercat->request( "open-ils.supercat.$search.holdings_xml.retrieve", $rec, $lib, ($flesh_feed eq "uris") ? 1 : 0, $paging );
+                       my $r = $supercat->request( "open-ils.supercat.$search.holdings_xml.retrieve", $rec, $lib, $flesh_feed, $paging );
                        while ( !$r->complete ) {
                                $xml .= join('', map {$_->content} $r->recv);
                        }