Skip to content

Commit 67983b8

Browse files
committed
Background check updates
1 parent 251219b commit 67983b8

3 files changed

Lines changed: 323 additions & 112 deletions

File tree

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
global model
2+
3+
mainQuery = model.SqlContent('BackgroundChecks-Status')
4+
5+
model.Title = "Background Check Notifications"
6+
7+
sql = """
8+
{0};
9+
10+
SELECT * FROM #status
11+
WHERE DaysToAction = 0 OR DaysToAction = 60 OR DaysToAction = 30;
12+
13+
""".format(mainQuery.replace("-- INTO", "INTO"))
14+
15+
16+
d60 = []
17+
d30 = []
18+
d0 = []
19+
20+
for row in model.SqlListDynamicData(sql):
21+
if row.DaysToAction == 0:
22+
d0.append(row.PeopleId)
23+
24+
elif row.DaysToAction == 30:
25+
d30.append(row.PeopleId)
26+
27+
elif row.DaysToAction == 60:
28+
d60.append(row.PeopleId)
29+
30+
31+
d60 = map(str, d60)
32+
d30 = map(str, d30)
33+
d0 = map(str, d0)
34+
35+
if len(d60) > 0:
36+
model.EmailContentWithSubject("PeopleIds = '{}'".format(','.join(d60)), 22029, "kbryant@tenth.org", "Karen Bryant", "Your Background Checks are Expiring Soon", "BackgroundCheck-60")
37+
38+
if len(d30) > 0:
39+
model.EmailContentWithSubject("PeopleIds = '{}'".format(','.join(d30)), 22029, "kbryant@tenth.org", "Karen Bryant", "Your Background Checks are Expiring Soon", "BackgroundCheck-30")
40+
41+
if len(d0) > 0:
42+
model.EmailContentWithSubject("PeopleIds = '{}'".format(','.join(d0)), 22029, "tgeiger@tenth.org", "Tim Geiger", "Your Background Checks are Invalid", "BackgroundCheck-0")
43+
44+
45+
sql = """
46+
{0};
47+
48+
SELECT *, IIF(DaysToAction < -9, 'Delinquent', IIF(DaysToAction < 2, 'Expired', 'Soon')) as st
49+
FROM #status s
50+
WHERE DaysToAction < 31
51+
ORDER BY St, LastName;
52+
53+
""".format(mainQuery.replace("-- INTO", "INTO"))
54+
55+
from pprint import pprint
56+
57+
Data.lDeli = []
58+
Data.lExpi = []
59+
Data.lSoon = []
60+
61+
for row in model.SqlListDynamicData(sql):
62+
if row.st == "Delinquent":
63+
Data.lDeli.append(row)
64+
elif row.st == "Expi":
65+
Data.lExpi.append(row)
66+
elif row.st == "Soon":
67+
Data.lSoon.append(row)
68+
69+
from datetime import datetime
70+
71+
if datetime.now().weekday() == 5:
72+
73+
t = '''
74+
<p>This is your weekly automated Background Check status update.</p>
75+
76+
<p>The following people have some component of their background checks expiring in 30 days or less:</p>
77+
<ul>
78+
{{#each lSoon}}
79+
<li>{{GoesBy}} {{LastName}} (expires in {{DaysToAction}} days, {{ActionRequired}})</li>
80+
{{else}}
81+
<p>(none)</p>
82+
{{/each}}
83+
</ul>
84+
85+
<p>The following people have had a component of their background checks expire within the last week(ish) <b>and have been notified that they may no longer serve</b>:</p>
86+
<ul>
87+
{{#each lExpi}}
88+
<li>{{GoesBy}} {{LastName}} (expired {{ActionRequired}})</li>
89+
{{else}}
90+
<p>(none)</p>
91+
{{/each}}
92+
</ul>
93+
94+
<p>The following people have invalid, incomplete, or longer-expired background checks:</p>
95+
<ul>
96+
{{#each lDeli}}
97+
<li>{{GoesBy}} {{LastName}}</li>
98+
{{else}}
99+
<p>(none)</p>
100+
{{/each}}
101+
</ul>
102+
'''
103+
104+
em = model.RenderTemplate(t)
105+
106+
model.Email("UserRole IN ( 30[BackgroundCheck], 83[BackgroundCheckRun], 87[BackgroundCheckLight] )", 22029, "dbhelp@tenth.org", "Tenth Church Administration", "Background Check Update", em)
Lines changed: 141 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,142 @@
1+
DECLARE @delinquentDate DATE;
2+
SET @delinquentDate = (SELECT CAST(GETDATE() - 10 AS DATE));
3+
4+
SELECT
5+
tp.PeopleId,
6+
COALESCE(p.Nickname, p.FirstName) as GoesBy,
7+
p.LastName,
8+
9+
CASE WHEN p.Age IS NOT NULL AND p.Age < 18 THEN DATEADD(year, 18, p.BDate) ELSE NULL END AS Minor,
10+
11+
DATEADD(year, 5, CAHC.ExpDate) as CAHC,
12+
DATEADD(year, 5, PATCH.ExpDate) as PATCH,
13+
DATEADD(year, 5, FBI.ExpDate) as FBI,
14+
DATEADD(year, 5, Aff.ExpDate) as Aff,
15+
DATEADD(year, 2, LastTraining.TrainingDate) as Training,
16+
AssignedTraining.TrainingAssignedDate as TrainAssign,
17+
IIF(t.Name = 'F51', 'Employee', '') as Employee,
18+
InProgress.InProgressSince as InProgressLastUpdate
19+
20+
INTO #t1
21+
22+
FROM People p
23+
LEFT JOIN TagPerson tp ON p.PeopleId = tp.PeopleId
24+
LEFT JOIN Tag t on tp.Id = t.Id
25+
26+
LEFT JOIN (
27+
SELECT PeopleId, max(Date) as ExpDate FROM (
28+
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
29+
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('CAHC'))) = CONCAT('CAHC', ' ')
30+
UNION
31+
SELECT PeopleId, DateValue as Date
32+
FROM PeopleExtra WHERE Field = 'Background Check: Latest CAHC'
33+
) CAHCa
34+
GROUP BY PeopleId
35+
) as CAHC ON p.PeopleId = CAHC.PeopleId
36+
37+
LEFT JOIN (
38+
SELECT PeopleId, max(Date) as ExpDate FROM (
39+
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
40+
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('PATCH'))) = CONCAT('PATCH', ' ')
41+
UNION
42+
SELECT PeopleId, DateValue as Date
43+
FROM PeopleExtra WHERE Field = 'Background Check: Latest PATCH'
44+
) PATCHa
45+
GROUP BY PeopleId
46+
) as PATCH ON p.PeopleId = PATCH.PeopleId
47+
48+
LEFT JOIN (
49+
SELECT PeopleId, max(Date) as ExpDate FROM (
50+
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
51+
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('FBI'))) = CONCAT('FBI', ' ')
52+
UNION
53+
SELECT PeopleId, DateValue as Date
54+
FROM PeopleExtra WHERE Field = 'Background Check: Latest FBI'
55+
) FBIa
56+
GROUP BY PeopleId
57+
) as FBI ON p.PeopleId = FBI.PeopleId
58+
59+
LEFT JOIN (
60+
SELECT PeopleId, max(Date) as ExpDate FROM (
61+
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
62+
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('Aff'))) = CONCAT('Aff', ' ')
63+
UNION
64+
SELECT PeopleId, DateValue as Date
65+
FROM PeopleExtra WHERE Field = 'ds-Resident Affidavit Date' OR Field = 'ds-FBI Waiver Affidavit Date'
66+
) Affa
67+
GROUP BY PeopleId
68+
) as Aff ON p.PeopleId = Aff.PeopleId
69+
70+
LEFT JOIN (
71+
SELECT PeopleId, CONVERT(date, MAX(Updated)) as InProgressSince
72+
FROM BackgroundChecks
73+
WHERE Updated > DATEADD(month, -3, GETDATE())
74+
AND ReportTypeID = 1
75+
AND ApprovalStatus = 'Pending'
76+
GROUP BY PeopleId
77+
) as InProgress ON p.PeopleId = InProgress.PeopleId
78+
79+
LEFT JOIN (
80+
SELECT PeopleId, CONVERT(date, MAX(Updated)) as TrainingDate
81+
FROM BackgroundChecks
82+
WHERE ReportTypeID = 3
83+
AND Score > 80
84+
GROUP BY PeopleId
85+
) as LastTraining ON p.PeopleId = LastTraining.PeopleId
86+
87+
LEFT JOIN (
88+
SELECT PeopleId, CONVERT(date, MAX(Updated)) as TrainingAssignedDate
89+
FROM BackgroundChecks
90+
WHERE ReportTypeID = 3
91+
GROUP BY PeopleId
92+
) as AssignedTraining ON p.PeopleId = AssignedTraining.PeopleId
93+
94+
WHERE t.Name = 'F50' OR t.Name = 'F51';
95+
96+
97+
-- get combined Aff/FBI expiration
98+
SELECT s.*,
99+
(SELECT MAX(expiration)
100+
FROM (VALUES
101+
(s.FBI),
102+
(CASE WHEN s.Employee <> 'Employee' THEN s.Aff ELSE NULL END)
103+
) AS ExpirationDates(expiration)
104+
) as ActionRequiredA
105+
INTO #t2
106+
FROM #t1 as s;
107+
108+
109+
-- get combined CAHC/PATCH/(FBI/Aff) Expiration and coalesce with delinquents
110+
SELECT s.*,
111+
(SELECT MIN(expiration)
112+
FROM (VALUES
113+
(COALESCE(s.CAHC, @delinquentDate)),
114+
(COALESCE(s.PATCH, @delinquentDate)),
115+
(COALESCE(s.ActionRequiredA, @delinquentDate))
116+
) AS ExpirationDates(expiration)
117+
) as ActionRequiredB
118+
INTO #t3
119+
FROM #t2 as s;
120+
121+
122+
-- combine existing expiration with Minor status
123+
SELECT s.*,
124+
(SELECT MAX(expiration)
125+
FROM (VALUES
126+
(s.Minor),
127+
(s.ActionRequiredB)
128+
) AS ExpirationDates(expiration)
129+
) as ActionRequired
130+
INTO #t4
131+
FROM #t3 as s;
132+
133+
134+
135+
ALTER TABLE #t4
136+
DROP COLUMN ActionRequiredA, ActionRequiredB;
137+
1138
SELECT s.*,
2-
IIF(s.Minor >= GETDATE() OR (
3-
s.CAHC >= GETDATE() AND
4-
s.PATCH >= GETDATE() AND (
5-
s.FBI > GETDATE() OR (
6-
s.Aff >= GETDATE() AND
7-
s.Employee <> 'Employee'
8-
)
9-
)
10-
), '', 'Invalid') as Status
11-
12-
FROM (
13-
SELECT
14-
tp.PeopleId,
15-
COALESCE(p.Nickname, p.FirstName) as GoesBy,
16-
p.LastName,
17-
18-
CASE WHEN p.Age IS NOT NULL AND p.Age < 18 THEN DATEADD(year, 18, p.BDate) ELSE NULL END AS Minor,
19-
20-
DATEADD(year, 5, CAHC.ExpDate) as CAHC,
21-
DATEADD(year, 5, PATCH.ExpDate) as PATCH,
22-
DATEADD(year, 5, FBI.ExpDate) as FBI,
23-
DATEADD(year, 5, Aff.ExpDate) as Aff,
24-
DATEADD(year, 2, LastTraining.TrainingDate) as Training,
25-
IIF(t.Name = 'F51', 'Employee', '') as Employee,
26-
InProgress.InProgressSince as InProgressLastUpdate
27-
28-
FROM People p
29-
LEFT JOIN TagPerson tp ON p.PeopleId = tp.PeopleId
30-
LEFT JOIN Tag t on tp.Id = t.Id
31-
32-
LEFT JOIN (
33-
SELECT PeopleId, max(Date) as ExpDate FROM (
34-
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
35-
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('CAHC'))) = CONCAT('CAHC', ' ')
36-
UNION
37-
SELECT PeopleId, DateValue as Date
38-
FROM PeopleExtra WHERE Field = 'Background Check: Latest CAHC'
39-
) CAHCa
40-
GROUP BY PeopleId
41-
) as CAHC ON p.PeopleId = CAHC.PeopleId
42-
43-
LEFT JOIN (
44-
SELECT PeopleId, max(Date) as ExpDate FROM (
45-
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
46-
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('PATCH'))) = CONCAT('PATCH', ' ')
47-
UNION
48-
SELECT PeopleId, DateValue as Date
49-
FROM PeopleExtra WHERE Field = 'Background Check: Latest PATCH'
50-
) PATCHa
51-
GROUP BY PeopleId
52-
) as PATCH ON p.PeopleId = PATCH.PeopleId
53-
54-
LEFT JOIN (
55-
SELECT PeopleId, max(Date) as ExpDate FROM (
56-
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
57-
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('FBI'))) = CONCAT('FBI', ' ')
58-
UNION
59-
SELECT PeopleId, DateValue as Date
60-
FROM PeopleExtra WHERE Field = 'Background Check: Latest FBI'
61-
) FBIa
62-
GROUP BY PeopleId
63-
) as FBI ON p.PeopleId = FBI.PeopleId
64-
65-
LEFT JOIN (
66-
SELECT PeopleId, max(Date) as ExpDate FROM (
67-
SELECT PeopleId, TRY_CAST(RIGHT(vfv1.Name,CHARINDEX(' ', (REVERSE(vfv1.Name))) - 1) as Date) as Date
68-
FROM VolunteerForm vfv1 WHERE UPPER(LEFT(vfv1.Name, LEN('Aff'))) = CONCAT('Aff', ' ')
69-
UNION
70-
SELECT PeopleId, DateValue as Date
71-
FROM PeopleExtra WHERE Field = 'ds-Resident Affidavit Date' OR Field = 'ds-FBI Waiver Affidavit Date'
72-
) Affa
73-
GROUP BY PeopleId
74-
) as Aff ON p.PeopleId = Aff.PeopleId
75-
76-
LEFT JOIN (
77-
SELECT PeopleId, CONVERT(date, MAX(Updated)) as InProgressSince
78-
FROM BackgroundChecks
79-
WHERE Updated > DATEADD(month, -3, GETDATE())
80-
AND ReportTypeID = 1
81-
AND ApprovalStatus = 'Pending'
82-
GROUP BY PeopleId
83-
) as InProgress ON p.PeopleId = InProgress.PeopleId
84-
85-
LEFT JOIN (
86-
SELECT PeopleId, CONVERT(date, MAX(Updated)) as TrainingDate
87-
FROM BackgroundChecks
88-
WHERE ReportTypeID = 3
89-
AND Score > 80
90-
GROUP BY PeopleId
91-
) as LastTraining ON p.PeopleId = LastTraining.PeopleId
92-
93-
WHERE t.Name = 'F50' OR t.Name = 'F51'
94-
95-
) s
139+
DATEDIFF(day, GetDate(), s.ActionRequired) as DaysToAction,
140+
IIF(s.ActionRequired > GETDATE(), '', 'Invalid') as Status
141+
-- INTO #status
142+
FROM #t4 as s

0 commit comments

Comments
 (0)