]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0287.schema.action.usr_visible_holds-retention_start.sql
LP1779158 Vandelay workstation setting repairs/additions
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0287.schema.action.usr_visible_holds-retention_start.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0287'); --miker
4
5 INSERT INTO config.usr_setting_type (name,opac_visible,label,description,datatype)
6     VALUES ('history.hold.retention_start', FALSE, 'Historical Hold Retention Start Date', 'Historical Hold Retention Start Date', 'date');
7
8 CREATE OR REPLACE FUNCTION action.usr_visible_holds (usr_id INT) RETURNS SETOF action.hold_request AS $func$
9 DECLARE
10     h               action.hold_request%ROWTYPE;
11     view_age        INTERVAL;
12     view_count      INT;
13     usr_view_count  actor.usr_setting%ROWTYPE;
14     usr_view_age    actor.usr_setting%ROWTYPE;
15     usr_view_start  actor.usr_setting%ROWTYPE;
16 BEGIN
17     SELECT * INTO usr_view_count FROM actor.usr_setting WHERE usr = usr_id AND name = 'history.hold.retention_count';
18     SELECT * INTO usr_view_age FROM actor.usr_setting WHERE usr = usr_id AND name = 'history.hold.retention_age';
19     SELECT * INTO usr_view_start FROM actor.usr_setting WHERE usr = usr_id AND name = 'history.hold.retention_start';
20
21     FOR h IN
22         SELECT  *
23           FROM  action.hold_request
24           WHERE usr = usr_id
25                 AND fulfillment_time IS NULL
26                 AND cancel_time IS NULL
27           ORDER BY request_time DESC
28     LOOP
29         RETURN NEXT h;
30     END LOOP;
31
32     IF usr_view_start.value IS NULL THEN
33         RETURN;
34     END IF;
35
36     IF usr_view_age.value IS NOT NULL THEN
37         -- User opted in and supplied a retention age
38         IF oils_json_to_string(usr_view_age.value)::INTERVAL > AGE(NOW(), oils_json_to_string(usr_view_start.value)::TIMESTAMPTZ) THEN
39             view_age := AGE(NOW(), oils_json_to_string(usr_view_start.value)::TIMESTAMPTZ);
40         ELSE
41             view_age := oils_json_to_string(usr_view_age.value)::INTERVAL;
42         END IF;
43     ELSE
44         -- User opted in
45         view_age := AGE(NOW(), oils_json_to_string(usr_view_start.value)::TIMESTAMPTZ);
46     END IF;
47
48     IF usr_view_count.value IS NOT NULL THEN
49         view_count := oils_json_to_text(usr_view_count.value)::INT;
50     ELSE
51         view_count := 1000;
52     END IF;
53
54     -- show some fulfilled/canceled holds
55     FOR h IN
56         SELECT  *
57           FROM  action.hold_request
58           WHERE usr = usr_id
59                 AND ( fulfillment_time IS NOT NULL OR cancel_time IS NOT NULL )
60                 AND request_time > NOW() - view_age
61           ORDER BY request_time DESC
62           LIMIT view_count
63     LOOP
64         RETURN NEXT h;
65     END LOOP;
66
67     RETURN;
68 END;
69 $func$ LANGUAGE PLPGSQL;
70
71 COMMIT;
72