add browse entries deletion script
[contrib/pines.git] / sql / set_patrons_inactive.sql
1 -- a script to set users to inactive per PINES policy
2 -- designed to run nightly via cron
3
4 begin;
5 update actor.usr au
6 set
7         active = false,
8         alert_message = 'automatically set to inactive status via PINES policy ' || alert_message,
9         last_update_time = now()
10 -- no unfinished circulations and no circulations within the last 3 years
11 where not exists (
12         select 1
13                 from action.circulation ac
14                 where ac.usr = au.id
15                 and (
16                         xact_finish is null or (
17                                 now() - ac.xact_start < '3 years'::interval
18                         )
19                 )
20         )
21 -- no hold requests placed in the last 3 years
22 and not exists (
23         select 1
24                 from action.hold_request ahr
25                 where ahr.usr = au.id
26                 and (now() - request_time) < '3 years'::interval
27         )
28 -- no owed money in either direction and no payment within the last 3 years
29 and not exists (
30         select 1
31                 from money.materialized_billable_xact_summary mmbxs
32                 where mmbxs.usr = au.id
33                 and (
34                         balance_owed <> '0.00' or (now() - last_payment_ts) < '3 years'::interval)
35         )
36 -- no activity entries within the last 3 years
37 and not exists (
38         select 1
39                 from actor.usr_activity aua
40                 where aua.usr = au.id
41                 and (now() - event_time) < '3 years'::interval
42         )
43 -- we only care about active users
44 and au.active
45 -- we don't care about deleted users
46 and not au.deleted
47 -- don't include non-expired users that don't otherwise meet the "inactive" criteria
48 and expire_date < now()
49 -- we don't want users that have been created within the last 3 years
50 and (now() - au.create_date) > '3 years'
51 -- restrict to patron profiles ('Patrons' = 45)
52 and profile in (
53         select id
54                 from permission.grp_descendants(45)
55         )
56 ;
57 commit;
58