Purge Circulations: Allow global age as forced min
authorThomas Berezansky <tsbere@mvlc.org>
Mon, 18 Jun 2012 17:29:58 +0000 (13:29 -0400)
committerDan Wells <dbw2@calvin.edu>
Fri, 7 Jun 2013 19:49:45 +0000 (15:49 -0400)
This allows a library to keep all circs in the last Y interval, regardless
of user settings that may otherwise cause an earlier purging.

Another global flag that defaults to off controls this behavior.

Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Jason Stephenson <jstephenson@mvlc.org>
Open-ILS/src/sql/Pg/090.schema.action.sql
Open-ILS/src/sql/Pg/950.data.seed-values.sql

index 60d0374..51530e7 100644 (file)
@@ -978,6 +978,7 @@ DECLARE
     usr_keep_start  actor.usr_setting%ROWTYPE;
     org_keep_age    INTERVAL;
     org_use_last    BOOL = false;
+    org_age_is_min  BOOL = false;
     org_keep_count  INT;
 
     keep_age        INTERVAL;
@@ -1002,6 +1003,7 @@ BEGIN
     END IF;
 
     SELECT enabled INTO org_use_last FROM config.global_flag WHERE name = 'history.circ.retention_uses_last_finished';
+    SELECT enabled INTO org_age_is_min FROM config.global_flag WHERE name = 'history.circ.retention_age_is_min';
 
     -- First, find copies with more than keep_count non-renewal circs
     FOR target_acp IN
@@ -1051,7 +1053,11 @@ BEGIN
             ELSIF usr_keep_start.value IS NOT NULL THEN
                 keep_age := AGE(NOW(), oils_json_to_text(usr_keep_start.value)::TIMESTAMPTZ);
             ELSE
-                keep_age := COALESCE( org_keep_age::INTERVAL, '2000 years'::INTERVAL );
+                keep_age := COALESCE( org_keep_age, '2000 years'::INTERVAL );
+            END IF;
+
+            IF org_age_is_min THEN
+                keep_age := GREATEST( keep_age, org_keep_age );
             END IF;
 
             CONTINUE WHEN AGE(NOW(), last_finished) < keep_age;
index 6fc8f20..9b63dfb 100644 (file)
@@ -9089,6 +9089,14 @@ INSERT INTO config.global_flag (name, label)
             'cgf',
             'label'
         )
+    ),(
+        'history.circ.retention_age_is_min',
+        oils_i18n_gettext(
+            'history.circ.retention_age_is_min',
+            'Historical Circulations are kept for global retention age at a minimum, regardless of user preferences.',
+            'cgf',
+            'label'
+        )
     );
 
 INSERT INTO config.usr_setting_type (name,opac_visible,label,description,datatype)