-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCreate view uvCourierContactInfoGrouped
257 lines (213 loc) · 10.6 KB
/
Create view uvCourierContactInfoGrouped
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
CREATE VIEW [woodcroft].[uvCourierContactInfoGrouped] AS
WITH BaseContactInfo AS (
SELECT DISTINCT
/* =================== HOUSEHOLDER INFO =================== */
COM.ID AS PrimaryID,
COM.MailSalutationJoint,
COM.MailSalutationPrimary,
COM.Title AS PrimaryTitle,
COM.Preferred AS PrimaryPreferred,
COM.Surname AS PrimarySurname,
COM.Gender AS PrimaryGender,
CASE WHEN COM.DefaultEmailCode = 'B' AND COM.OccupEmail <> '' AND COM.Email <> ''
-- only insert semicolon if both email addresses exist
THEN COM.OccupEmail + ';' + COM.Email
WHEN COM.DefaultEmailCode = 'B'
THEN COM.OccupEmail + COM.Email
WHEN COM.DefaultEmailCode = 'O'
THEN COM.OccupEmail
ELSE
COM.Email
END as PrimaryDefaultEmail,
NULLIF(COM.SpouseID, 0) AS SpouseID,
COM_SPOUSE.Title AS SpouseTitle,
COM_SPOUSE.Preferred AS SpousePreferred,
COM_SPOUSE.Surname AS SpouseSurname,
COM_SPOUSE.Gender AS SpouseGender,
CASE WHEN COM_SPOUSE.DefaultEmailCode = 'B' AND COM_SPOUSE.OccupEmail <> '' AND COM_SPOUSE.Email <> ''
-- only insert semicolon if both email addresses exist
THEN COM_SPOUSE.OccupEmail + ';' + COM_SPOUSE.Email
WHEN COM_SPOUSE.DefaultEmailCode = 'B'
THEN COM_SPOUSE.OccupEmail + COM_SPOUSE.Email
WHEN COM_SPOUSE.DefaultEmailCode = 'O'
THEN COM_SPOUSE.OccupEmail
ELSE
COM_SPOUSE.Email
END as SpouseDefaultEmail,
ADDR.AddressID,
-- [2021.02.04] User requested address info in separate columns.
--CASE
-- WHEN RTRIM(LTRIM(ADDR.AddressComma)) IN ('', 'Silent Address', 'SA')
-- THEN '* Address Unknown *'
-- ELSE
-- RTRIM(LTRIM(ADDR.AddressComma))
--END AS Address,
ADDR.Address1,
ADDR.Address2,
ADDR.Address3,
LTRIM(RTRIM(ADDR.Suburb + ' ' + ADDR.State + ' ' + ADDR.PostCode)) as SuburbStatePostCode,
CASE WHEN ADDR.AddressComma IN ('', '* Address Unknown *') THEN 'Unknown'
WHEN ADDR.CountryCode = '' THEN 'Australia'
ELSE luCTRY.Description
END AS AddrCountry,
/* =================== CONSTITUENCIES =================== */
CASE WHEN PRM_CUR_PRNT.ConstitCode IS NOT NULL THEN 1
ELSE 0
END AS PrimaryIsCurrentParent,
CASE WHEN SPO_CUR_PRNT.ConstitCode IS NOT NULL THEN 1
ELSE 0
END AS SpouseIsCurrentParent,
CASE WHEN PRM_OLD_SCHLR.ConstitCode IS NOT NULL THEN 1
ELSE 0
END AS PrimaryIsOldScholar,
CASE WHEN SPO_OLD_SCHLR.ConstitCode IS NOT NULL THEN 1
ELSE 0
END AS SpouseIsOldScholar,
CASE WHEN PRM_FUT_PRNT.ConstitCode IS NOT NULL THEN 1
ELSE 0
END AS PrimaryIsFutureParent,
CASE WHEN SPO_FUT_PRNT.ConstitCode IS NOT NULL THEN 1
ELSE 0
END AS SpouseIsFutureParent,
/* =================== OLD SCHOLAR INFO =================== */
PRM_PAST_STD.EntryYearLevel AS PrimaryOSEntryYearLevel,
CAST(PRM_PAST_STD.EntryDate AS DATE) AS PrimaryOSEntryDate,
SPO_PAST_STD.EntryYearLevel AS SpouseOSEntryYearLevel,
CAST(SPO_PAST_STD.EntryDate AS DATE) AS SpouseOSEntryDate,
PRM_PAST_STD.LastYearLevel AS PrimaryOSLastYearLevel,
CAST(PRM_PAST_STD.LeftDate AS DATE) AS PrimaryOSLeftDate,
SPO_PAST_STD.LastYearLevel AS SpouseOSLastYearLevel,
CAST(SPO_PAST_STD.LeftDate AS DATE) AS SpouseOSLeftDate,
PRM_PAST_STD.PeerYear AS PrimaryPeerYear,
SPO_PAST_STD.PeerYear AS SpousePeerYear,
/* =================== CURRENT & FUTURE STUDENT INFO =================== */
STUFF((
SELECT ',' + CAST(SC.ID as VARCHAR(10))
from dbo.StudentContacts AS SC
LEFT JOIN dbo.Students as STD
on SC.ID = STD.ID
where SC.ContactType <> 'SCT'
AND SC.LinkedID IN (COM.ID, COM_SPOUSE.ID)
for xml path('')),
1, 1, '') as CurrentStudentsIDs,
CASE WHEN EXISTS(
/* Is there a member of FutureStudents (Enrolled) who has a contact
which is either the primary or spouse for this record? */
select FSC.ID
FROM FutureStudentContacts as FSC
LEFT JOIN FutureStudents as FS
on FSC.ID = FS.ID
where FS.Status = 'ENR'
and FSC.ContactType <> 'SCT'
AND FSC.LinkedID IN (COM.ID, COM_SPOUSE.ID)
) THEN 1
ELSE 0
END AS FutureStudentsEnrolled,
CASE
WHEN EXISTS(
/* Is there a member of FutureStudents (Registered) who has a contact
which is either the primary or spouse for this record? */
select FSC.ID
FROM FutureStudentContacts as FSC
LEFT JOIN FutureStudents as FS
on FSC.ID = FS.ID
where FS.Status = 'REG'
and FSC.ContactType <> 'SCT'
AND FSC.LinkedID IN (COM.ID, COM_SPOUSE.ID)) THEN 1
ELSE 0
END AS FutureStudentsRegistered,
STUFF((
SELECT ',' + CAST(FSC.ID as VARCHAR(10))
from dbo.FutureStudentContacts AS FSC
LEFT JOIN FutureStudents as FS
on FSC.ID = FS.ID
where FS.Status = 'ENR'
AND FSC.ContactType <> 'SCT'
AND FSC.LinkedID IN (COM.ID, COM_SPOUSE.ID)
for xml path('')),
1, 1, '') as FutureStudentsEnrolledIDs,
STUFF((
SELECT ',' + CAST(FSC.ID as VARCHAR(10))
from dbo.FutureStudentContacts AS FSC
LEFT JOIN FutureStudents as FS
on FSC.ID = FS.ID
where FS.Status = 'REG'
AND FSC.ContactType <> 'SCT'
AND FSC.LinkedID IN (COM.ID, COM_SPOUSE.ID)
for xml path('')),
1, 1, '') as FutureStudentsRegisteredIDs
FROM
/* ================================ FAMILY DETAILS ================================ */
/* COM = Primary household contact, usually the father. */
Community as COM
LEFT JOIN Community as COM_SPOUSE
ON COM.SpouseID = COM_SPOUSE.ID
/* Spouse ID flag is set where the record is a spouse to a primary householder. */
AND COM_SPOUSE.SpouseFlag = 1
LEFT JOIN Addresses as ADDR
on COM.AddressID = ADDR.AddressID
/* ================================ CONSTITUENCIES ================================ */
LEFT JOIN Constituencies as PRM_CUR_PRNT
on COM.ID = PRM_CUR_PRNT.ID
and PRM_CUR_PRNT.ConstitCode in ('@PC', 'PC')
LEFT JOIN Constituencies as SPO_CUR_PRNT
ON COM_SPOUSE.ID = SPO_CUR_PRNT.ID
and SPO_CUR_PRNT.ConstitCode in ('@PC', 'PC')
LEFT JOIN Constituencies as PRM_OLD_SCHLR
on COM.ID = PRM_OLD_SCHLR.ID
and PRM_OLD_SCHLR.ConstitCode = 'OS'
LEFT JOIN Constituencies as SPO_OLD_SCHLR
on COM_SPOUSE.ID = SPO_OLD_SCHLR.ID
and SPO_OLD_SCHLR.ConstitCode = 'OS'
LEFT JOIN Constituencies as PRM_FUT_PRNT
on COM.ID = PRM_FUT_PRNT.ID
and PRM_FUT_PRNT.ConstitCode = '@PF'
LEFT JOIN Constituencies as SPO_FUT_PRNT
on COM_SPOUSE.ID = SPO_FUT_PRNT.ID
and SPO_FUT_PRNT.ConstitCode = '@PF'
/* ================================ OLD SCHOLARS INFO ================================ */
LEFT JOIN dbo.PastStudents as PRM_PAST_STD
ON COM.ID = PRM_PAST_STD.ID
LEFT JOIN dbo.PastStudents as SPO_PAST_STD
ON COM_SPOUSE.ID = SPO_PAST_STD.ID
/* ================================ LOOKUPS ================================ */
LEFT JOIN dbo.luCountry as luCTRY
ON ADDR.CountryCode = luCTRY.Code
/* ========================================================================= */
WHERE COM.ID > 0
/* Primary householders have spouse flag not set. */
AND COM.SpouseFlag <> 1
AND ADDR.AddressComma not in ('* Deceased *', '* Address Unknown *',
'', 'Silent Address', 'SA')
),
GroupedContactInfo AS (
SELECT
*,
CASE
/* Current Parent & Old Scholar. */
WHEN (PrimaryIsCurrentParent = 1 AND PrimaryIsOldScholar = 1 AND PrimaryOSLastYearLevel >= 9)
OR (SpouseIsOldScholar = 1 AND SpouseIsCurrentParent = 1 AND SpouseOSLastYearLevel >= 9)
THEN 'CPOS'
/* Current Parent. */
WHEN (PrimaryIsCurrentParent = 1 OR SpouseIsCurrentParent = 1)
THEN 'CP'
/* Future Parent Old Scholar. */
WHEN (PrimaryIsFutureParent = 1 AND PrimaryIsOldScholar = 1 AND PrimaryOSLastYearLevel >= 9)
OR (SpouseIsOldScholar = 1 AND SpouseIsFutureParent = 1 AND SpouseOSLastYearLevel >= 9)
THEN 'FPOS'
/* Future Parent with student(s) enrolled. */
WHEN FutureStudentsEnrolled = 1
THEN 'FPENR'
/* Future Parent with student(s) registered. */
WHEN FutureStudentsRegistered = 1
THEN 'FPREG'
/* Old Scholar. */
WHEN (PrimaryIsOldScholar = 1 AND PrimaryOSLastYearLevel >= 9)
OR (SpouseIsOldScholar = 1 AND SpouseOSLastYearLevel >= 9)
THEN 'OS'
END AS GroupCode
FROM BaseContactInfo WITH (NOLOCK))
SELECT *
FROM GroupedContactInfo WITH (NOLOCK)
WHERE GroupCode is not NULL
GO