/
view_parent_user_accounts.sql
289 lines (239 loc) · 10.3 KB
/
view_parent_user_accounts.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
CREATE OR REPLACE VIEW DB2INST1.VIEW_PARENT_USER_ACCOUNTS (
CARER_ID,
CARER_NUMBER,
CONTACT_ID,
STATUS,
USERNAME,
FIRSTNAME,
SURNAME,
FULLNAME,
EMAIL_ADDRESS,
MOBILE_PHONE,
TYPE,
UNIQUE
) AS
WITH all_students AS (
SELECT student_id, student_status_id
FROM TABLE(EDUMATE.getAllStudentStatus(current date))
-- Limit to students with the status of:
-- - Alumni (2)
-- - Past Enrolment (3)
-- - Returning Enrolment (4)
-- - Current Enrolment (5)
WHERE
student_status_id IN (2, 3, 4, 5)
AND
start_date >= DATE('2011-01-01')
AND
end_date >= DATE('2012-01-01')
),
current_staff AS (
SELECT contact_id FROM group_membership
WHERE
groups_id = 386
AND
(DATE(current date) BETWEEN effective_start AND effective_end
OR
(effective_end IS null AND effective_start <= DATE(current date)))
),
student_mail_carers AS (
SELECT
view_student_mail_carers.student_id,
all_students.student_status_id,
view_student_mail_carers.carer1_contact_id,
carer1_relationship.call_order AS "CARER1_CALL_ORDER",
view_student_mail_carers.carer2_contact_id,
carer2_relationship.call_order AS "CARER2_CALL_ORDER",
view_student_mail_carers.carer3_contact_id,
carer3_relationship.call_order AS "CARER3_CALL_ORDER",
view_student_mail_carers.carer4_contact_id,
carer4_relationship.call_order AS "CARER4_CALL_ORDER",
'mail' AS "CARER_TYPE"
FROM view_student_mail_carers
INNER JOIN student ON student.student_id = view_student_mail_carers.student_id
LEFT JOIN all_students ON all_students.student_id = view_student_mail_carers.student_id
LEFT JOIN relationship carer1_relationship ON carer1_relationship.contact_id2 = view_student_mail_carers.carer1_contact_id AND carer1_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer2_relationship ON carer2_relationship.contact_id2 = view_student_mail_carers.carer2_contact_id AND carer2_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer3_relationship ON carer3_relationship.contact_id2 = view_student_mail_carers.carer3_contact_id AND carer3_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer4_relationship ON carer4_relationship.contact_id2 = view_student_mail_carers.carer4_contact_id AND carer4_relationship.contact_id1 = student.contact_id
WHERE view_student_mail_carers.student_id IN (SELECT student_id FROM all_students)
),
student_other_carers AS (
SELECT
view_student_other_carers.student_id,
all_students.student_status_id,
view_student_other_carers.carer1_contact_id,
carer1_relationship.call_order AS "CARER1_CALL_ORDER",
view_student_other_carers.carer2_contact_id,
carer2_relationship.call_order AS "CARER2_CALL_ORDER",
view_student_other_carers.carer3_contact_id,
carer3_relationship.call_order AS "CARER3_CALL_ORDER",
view_student_other_carers.carer4_contact_id,
carer4_relationship.call_order AS "CARER4_CALL_ORDER",
'other' AS "CARER_TYPE"
FROM view_student_other_carers
INNER JOIN student ON student.student_id = view_student_other_carers.student_id
LEFT JOIN all_students ON all_students.student_id = view_student_other_carers.student_id
LEFT JOIN relationship carer1_relationship ON carer1_relationship.contact_id2 = view_student_other_carers.carer1_contact_id AND carer1_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer2_relationship ON carer2_relationship.contact_id2 = view_student_other_carers.carer2_contact_id AND carer2_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer3_relationship ON carer3_relationship.contact_id2 = view_student_other_carers.carer3_contact_id AND carer3_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer4_relationship ON carer4_relationship.contact_id2 = view_student_other_carers.carer4_contact_id AND carer4_relationship.contact_id1 = student.contact_id
WHERE view_student_other_carers.student_id IN (SELECT student_id FROM all_students)
),
student_report_carers AS (
SELECT
view_student_report_carers.student_id,
all_students.student_status_id,
view_student_report_carers.carer1_contact_id,
carer1_relationship.call_order AS "CARER1_CALL_ORDER",
view_student_report_carers.carer2_contact_id,
carer2_relationship.call_order AS "CARER2_CALL_ORDER",
view_student_report_carers.carer3_contact_id,
carer3_relationship.call_order AS "CARER3_CALL_ORDER",
view_student_report_carers.carer4_contact_id,
carer4_relationship.call_order AS "CARER4_CALL_ORDER",
'report' AS "CARER_TYPE"
FROM view_student_report_carers
INNER JOIN student ON student.student_id = view_student_report_carers.student_id
LEFT JOIN all_students ON all_students.student_id = view_student_report_carers.student_id
LEFT JOIN relationship carer1_relationship ON carer1_relationship.contact_id2 = view_student_report_carers.carer1_contact_id AND carer1_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer2_relationship ON carer2_relationship.contact_id2 = view_student_report_carers.carer2_contact_id AND carer2_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer3_relationship ON carer3_relationship.contact_id2 = view_student_report_carers.carer3_contact_id AND carer3_relationship.contact_id1 = student.contact_id
LEFT JOIN relationship carer4_relationship ON carer4_relationship.contact_id2 = view_student_report_carers.carer4_contact_id AND carer4_relationship.contact_id1 = student.contact_id
WHERE view_student_report_carers.student_id IN (SELECT student_id FROM all_students)
),
student_all_carers AS (
SELECT * FROM student_mail_carers
UNION ALL
SELECT * FROM student_other_carers
UNION ALL
SELECT * FROM student_report_carers
),
carer_one AS (
SELECT student_id, student_status_id, carer1_contact_id AS "CARER_CONTACT_ID", carer_type, carer1_call_order
FROM student_all_carers
WHERE carer1_contact_id IS NOT null AND (carer1_call_order != 7 OR carer1_call_order IS null)
),
carer_two AS (
SELECT student_id, student_status_id, carer2_contact_id AS "CARER_CONTACT_ID", carer_type, carer2_call_order
FROM student_all_carers
WHERE carer2_contact_id IS NOT null AND (carer2_call_order != 7 OR carer2_call_order IS null)
),
carer_three AS (
SELECT student_id, student_status_id, carer3_contact_id AS "CARER_CONTACT_ID", carer_type, carer3_call_order
FROM student_all_carers
WHERE carer3_contact_id IS NOT null AND (carer3_call_order != 7 OR carer3_call_order IS null)
),
carer_four AS (
SELECT student_id, student_status_id, carer4_contact_id AS "CARER_CONTACT_ID", carer_type, carer4_call_order
FROM student_all_carers
WHERE carer4_contact_id IS NOT null AND (carer4_call_order != 7 OR carer4_call_order IS null)
),
combined_carers AS (
SELECT * FROM carer_one
UNION ALL
SELECT * FROM carer_two
UNION ALL
SELECT * FROM carer_three
UNION ALL
SELECT * FROM carer_four
),
active_carers AS (
SELECT DISTINCT
carer_contact_id,
'active' AS "STATUS"
FROM combined_carers
WHERE student_status_id = 5 AND carer_type = 'report'
),
past_carers AS (
SELECT DISTINCT
carer_contact_id,
'past' AS "STATUS"
FROM combined_carers
WHERE
student_status_id != 5
AND
carer_type = 'report'
AND
carer_contact_id NOT IN (SELECT carer_contact_id FROM active_carers)
),
deleted_carers AS (
SELECT
carer_contact_id,
'deleted' AS "STATUS"
FROM combined_carers
WHERE carer_type != 'report' AND carer_contact_id NOT IN (SELECT carer_contact_id FROM active_carers) AND carer_contact_id NOT IN (SELECT carer_contact_id FROM past_carers)
),
active_past_deleted_carers AS (
SELECT * FROM active_carers
UNION ALL
SELECT * FROM past_carers
UNION ALL
SELECT * FROM deleted_carers
),
all_carers AS (
SELECT DISTINCT * FROM active_past_deleted_carers
),
all_carers_with_names AS (
SELECT
all_carers.carer_contact_id,
(LOWER(REPLACE(REPLACE(contact.firstname, ' ', ''), '-', '')) || '.' || LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(contact.surname, ''', ''), ' ', ''), '(', ''), ')', ''), '-', ''))) AS "NAME"
FROM all_carers
INNER JOIN contact ON contact.contact_id = all_carers.carer_contact_id
),
character_limit AS (
SELECT
all_carers_with_names.carer_contact_id,
(CASE WHEN LENGTH(name) > 18 THEN LEFT(name, 18) ELSE name END) AS "USERNAME"
FROM all_carers_with_names
),
all_carers_unique_flag AS (
SELECT
all_carers.carer_contact_id,
character_limit.username,
ROW_NUMBER() OVER (PARTITION BY username ORDER BY all_carers.carer_contact_id ASC) AS "UNIQUE",
all_carers.status
FROM all_carers
INNER JOIN contact ON contact.contact_id = all_carers.carer_contact_id
INNER JOIN character_limit ON character_limit.carer_contact_id = all_carers.carer_contact_id
),
all_carers_usernames AS (
SELECT
all_carers_unique_flag.carer_contact_id,
all_carers_unique_flag.username || (CASE WHEN unique = 1 THEN '' ELSE CAST((unique - 1) AS CHAR) END) AS "USERNAME",
all_carers_unique_flag.unique,
all_carers_unique_flag.status,
(CASE WHEN current_staff.contact_id IS NOT null THEN 'staff' ELSE 'carer' END) AS "TYPE"
FROM all_carers_unique_flag
LEFT JOIN current_staff ON current_staff.contact_id = all_carers_unique_flag.carer_contact_id
LEFT JOIN sys_user ON sys_user.contact_id = current_staff.contact_id
),
combined AS (
SELECT
carer.carer_id,
carer.carer_number,
all_carers.carer_contact_id AS "CONTACT_ID",
all_carers_usernames.status,
all_carers_usernames.username,
COALESCE(contact.preferred_name, contact.firstname) AS "FIRSTNAME",
contact.surname,
COALESCE(contact.preferred_name, contact.firstname) || ' ' || contact.surname AS "FULLNAME",
contact.email_address,
contact.mobile_phone,
all_carers_usernames.type,
all_carers_usernames.unique
FROM all_carers
INNER JOIN carer ON carer.contact_id = all_carers.carer_contact_id
INNER JOIN contact ON contact.contact_id = all_carers.carer_contact_id
LEFT JOIN all_carers_usernames ON all_carers_usernames.carer_contact_id = all_carers.carer_contact_id
)
SELECT * FROM (
SELECT *
FROM combined
ORDER BY (CASE
WHEN status = 'active' THEN 1
WHEN status = 'past' THEN 2
WHEN status = 'deleted' THEN 3
ELSE 999
END) ASC, LOWER(surname), LOWER(firstname)
)