die "No search arguments were passed to ".$self->api_name;
}
- my (@statuses,@types,@forms,@lang,@aud,@lit_form,@vformats,@bib_level);
+ my (@statuses,@locations,@types,@forms,@lang,@aud,@lit_form,@vformats,@bib_level);
if ($args{available}) {
@statuses = (0,7);
}
+ if (my $s = $args{locations}) {
+ $s = [$s] if (!ref($s));
+ @locations = @$s;
+ }
+
if (my $s = $args{statuses}) {
$s = [$s] if (!ref($s));
@statuses = @$s;
my $param_depth = $args{depth}; $param_depth = 'NULL' unless (defined($param_depth) and length($param_depth) > 0 );
my $param_searches = OpenSRF::Utils::JSON->perl2JSON( \%stored_proc_search_args ); $param_searches =~ s/\$//go; $param_searches = '$$'.$param_searches.'$$';
my $param_statuses = '$${' . join(',', map { s/\$//go; "\"$_\""} @statuses) . '}$$';
+ my $param_locations = '$${' . join(',', map { s/\$//go; "\"$_\""} @locations) . '}$$';
my $param_audience = '$${' . join(',', map { s/\$//go; "\"$_\"" } @aud) . '}$$';
my $param_language = '$${' . join(',', map { s/\$//go; "\"$_\""} @lang) . '}$$';
my $param_lit_form = '$${' . join(',', map { s/\$//go; "\"$_\"" } @lit_form) . '}$$';
$param_depth,
$param_searches,
$param_statuses,
+ $param_locations,
$param_audience,
$param_language,
$param_lit_form,
param_depth INT,
param_searches TEXT, -- JSON hash, to be turned into a resultset via search.parse_search_args
param_statuses INT[],
+ param_locations INT[],
param_audience TEXT[],
param_language TEXT[],
param_lit_form TEXT[],
END IF;
+ IF param_locations IS NOT NULL AND array_upper(param_locations, 1) > 0 THEN
+
+ PERFORM 1
+ FROM asset.call_number cn
+ JOIN asset.copy cp ON (cp.call_number = cn.id)
+ WHERE NOT cn.deleted
+ AND NOT cp.deleted
+ AND cp.location IN ( SELECT * FROM search.explode_array( param_locations ) )
+ AND cn.record IN ( SELECT * FROM search.explode_array( core_result.records ) )
+ AND cp.circ_lib IN ( SELECT * FROM search.explode_array( search_org_list ) )
+ LIMIT 1;
+
+ IF NOT FOUND THEN
+ -- RAISE NOTICE ' % were all copy_location-excluded ... ', core_result.records;
+ excluded_count := excluded_count + 1;
+ CONTINUE;
+ END IF;
+
+ END IF;
+
IF staff IS NULL OR NOT staff THEN
PERFORM 1