add shelving location filter support
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 18 Jul 2008 01:50:29 +0000 (01:50 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 18 Jul 2008 01:50:29 +0000 (01:50 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_2@10064 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/sql/Pg/300.schema.staged_search.sql

index 9aca3fb..09513c2 100644 (file)
@@ -69,6 +69,7 @@ CREATE OR REPLACE FUNCTION search.staged_fts (
     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[],
@@ -438,6 +439,26 @@ BEGIN
 
         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