UFN_CONSTITUENT_GETADDRESSCHANGES
This function returns all changes for addresses.
Return
Return Type |
---|
table |
Definition
Copy
CREATE function dbo.UFN_CONSTITUENT_GETADDRESSCHANGES()
returns table
as
return
/* EDITTYPECODE
0 = Add
1 = Edit
2 = Delete
100 = Original Add (after edited)
*/
with [CURRENT] as
(
-- current row
select
ID,
replace(replace(DESCRIPTION, char(10), ' '), char(13), '') DISPLAY,
DATEADDED,
DATECHANGED,
null AUDITID
from dbo.ADDRESS
union all
-- terminal delete
select
AUDITRECORDID,
replace(replace(dbo.UFN_BUILDFULLADDRESS(null, ADDRESSBLOCK, CITY, STATEID, POSTCODE, COUNTRYID), char(10), ' '), char(13), ''),
DATEADDED,
null,
AUDITID
from dbo.ADDRESSAUDIT
where AUDITTYPECODE = 2
-- not re-added
and not exists(select 'x' from dbo.ADDRESS where ADDRESS.ID = ADDRESSAUDIT.AUDITRECORDID)
-- not deleted again after re-added
and not exists(select 'x' from dbo.ADDRESSAUDIT LATER where LATER.AUDITRECORDID = ADDRESSAUDIT.AUDITRECORDID and LATER.AUDITDATE > ADDRESSAUDIT.AUDITDATE)
)
select
ADDRESS.ID RECORDID,
cast(null as uniqueidentifier) as AUDITID,
cast(null as uniqueidentifier) as AUDITKEY,
ADDRESS.CONSTITUENTID,
0 EDITTYPECODE,
ADDRESS.ADDEDBYID CHANGEAGENTID,
ADDRESS.DATEADDED CHANGEDATE,
[CURRENT].DISPLAY,
1 LASTCHANGE,
1 ROWEXISTS,
case when [ROLLBACK].DATEADDED = [ROLLBACK].DATECHANGED then [ROLLBACK].DATEADDED else [ROLLBACK].AUDITDATE end ROLLBACKTODATE,
case when CONSTITUENTDATAREVIEWROLLBACK.ID is not null then CONSTITUENTDATAREVIEWROLLBACKREASON.CODE + ' - ' + CONSTITUENTDATAREVIEWROLLBACKREASON.DESCRIPTION end ROLLBACKREASON
from dbo.ADDRESS
inner join [CURRENT] on [CURRENT].ID = ADDRESS.ID
left join dbo.CONSTITUENTDATAREVIEWROLLBACK on CONSTITUENTDATAREVIEWROLLBACK.CONTEXTRECORDID = ADDRESS.ID and CONSTITUENTDATAREVIEWROLLBACK.ROLLBACKAUDITID is null
left join dbo.CONSTITUENTDATAREVIEWROLLBACKREASON on CONSTITUENTDATAREVIEWROLLBACKREASON.ID = CONSTITUENTDATAREVIEWROLLBACK.CONSTITUENTDATAREVIEWROLLBACKREASONID
left join dbo.ADDRESSAUDIT [ROLLBACK] on [ROLLBACK].AUDITID = CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID
where ADDRESS.DATEADDED = ADDRESS.DATECHANGED
union all
select
BEFORE.AUDITRECORDID RECORDID,
BEFORE.AUDITID,
BEFORE.AUDITKEY,
BEFORE.CONSTITUENTID,
1 EDITTYPECODE,
BEFORE.AUDITCHANGEAGENTID CHANGEAGENTID,
BEFORE.AUDITDATE CHANGEDATE,
[CURRENT].DISPLAY,
case when AFTER.DATECHANGED = [CURRENT].DATECHANGED then 1 else 0 end LASTCHANGE,
case when [CURRENT].DATECHANGED is not null then 1 else 0 end ROWEXISTS,
case when [ROLLBACK].DATEADDED = [ROLLBACK].DATECHANGED then [ROLLBACK].DATEADDED else [ROLLBACK].AUDITDATE end ROLLBACKTODATE,
case when CONSTITUENTDATAREVIEWROLLBACK.ID is not null then CONSTITUENTDATAREVIEWROLLBACKREASON.CODE + ' - ' + CONSTITUENTDATAREVIEWROLLBACKREASON.DESCRIPTION end ROLLBACKREASON
from dbo.ADDRESSAUDIT BEFORE
inner join [CURRENT] on [CURRENT].ID = BEFORE.AUDITRECORDID
inner join dbo.ADDRESSAUDIT AFTER on AFTER.AUDITKEY = BEFORE.AUDITKEY and AFTER.AUDITRECORDID = BEFORE.AUDITRECORDID and AFTER.AUDITTYPECODE = 1
left join dbo.CONSTITUENTDATAREVIEWROLLBACK on CONSTITUENTDATAREVIEWROLLBACK.ROLLBACKAUDITID = AFTER.AUDITID
left join dbo.CONSTITUENTDATAREVIEWROLLBACKREASON on CONSTITUENTDATAREVIEWROLLBACKREASON.ID = CONSTITUENTDATAREVIEWROLLBACK.CONSTITUENTDATAREVIEWROLLBACKREASONID
left join dbo.ADDRESSAUDIT [ROLLBACK] on [ROLLBACK].AUDITID = CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID
where BEFORE.AUDITTYPECODE = 0
union all
select
ADDRESSAUDIT.AUDITRECORDID RECORDID,
ADDRESSAUDIT.AUDITID,
ADDRESSAUDIT.AUDITKEY,
ADDRESSAUDIT.CONSTITUENTID,
2 EDITTYPECODE,
ADDRESSAUDIT.AUDITCHANGEAGENTID CHANGEAGENTID,
ADDRESSAUDIT.AUDITDATE CHANGEDATE,
[CURRENT].DISPLAY,
case when ADDRESSAUDIT.AUDITID = [CURRENT].AUDITID then 1 else 0 end LASTCHANGE,
case when [CURRENT].DATECHANGED is not null then 1 else 0 end ROWEXISTS,
null,
case when CONSTITUENTDATAREVIEWROLLBACK.ID is not null then CONSTITUENTDATAREVIEWROLLBACKREASON.CODE + ' - ' + CONSTITUENTDATAREVIEWROLLBACKREASON.DESCRIPTION end ROLLBACKREASON
from dbo.ADDRESSAUDIT
inner join [CURRENT] on [CURRENT].ID = ADDRESSAUDIT.AUDITRECORDID
left join dbo.CONSTITUENTDATAREVIEWROLLBACK on CONSTITUENTDATAREVIEWROLLBACK.ROLLBACKAUDITID = ADDRESSAUDIT.AUDITID and CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID is null
left join dbo.CONSTITUENTDATAREVIEWROLLBACKREASON on CONSTITUENTDATAREVIEWROLLBACKREASON.ID = CONSTITUENTDATAREVIEWROLLBACK.CONSTITUENTDATAREVIEWROLLBACKREASONID
where AUDITTYPECODE = 2
union all
select
ADDRESSAUDIT.AUDITRECORDID RECORDID,
ADDRESSAUDIT.AUDITID,
ADDRESSAUDIT.AUDITKEY,
ADDRESSAUDIT.CONSTITUENTID,
100 EDITTYPECODE,
ADDRESSAUDIT.ADDEDBYID CHANGEAGENTID,
ADDRESSAUDIT.DATEADDED CHANGEDATE,
[CURRENT].DISPLAY,
0 LASTCHANGE,
case when [CURRENT].DATECHANGED is not null then 1 else 0 end ROWEXISTS,
case when [ROLLBACK].DATEADDED = [ROLLBACK].DATECHANGED then [ROLLBACK].DATEADDED else [ROLLBACK].AUDITDATE end ROLLBACKTODATE,
case when isnull(CONSTITUENTDATAREVIEWROLLBACK.ID,[ROLLBACKAUDITIDNULL].ID) is not null then CONSTITUENTDATAREVIEWROLLBACKREASON.CODE + ' - ' + CONSTITUENTDATAREVIEWROLLBACKREASON.DESCRIPTION end ROLLBACKREASON
from dbo.ADDRESSAUDIT
inner join [CURRENT] on [CURRENT].ID = ADDRESSAUDIT.AUDITRECORDID
left join dbo.CONSTITUENTDATAREVIEWROLLBACK on CONSTITUENTDATAREVIEWROLLBACK.ROLLBACKAUDITID = ADDRESSAUDIT.AUDITID and CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID is not null
left join dbo.CONSTITUENTDATAREVIEWROLLBACK [ROLLBACKAUDITIDNULL] on [ROLLBACKAUDITIDNULL].CONTEXTRECORDID = ADDRESSAUDIT.AUDITRECORDID and [ROLLBACKAUDITIDNULL].ROLLBACKAUDITID is null and ADDRESSAUDIT.DATEADDED = [CURRENT].DATEADDED
left join dbo.CONSTITUENTDATAREVIEWROLLBACKREASON on CONSTITUENTDATAREVIEWROLLBACKREASON.ID = isnull(CONSTITUENTDATAREVIEWROLLBACK.CONSTITUENTDATAREVIEWROLLBACKREASONID,[ROLLBACKAUDITIDNULL].CONSTITUENTDATAREVIEWROLLBACKREASONID)
left join dbo.ADDRESSAUDIT [ROLLBACK] on [ROLLBACK].AUDITID = isnull(CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID,[ROLLBACKAUDITIDNULL].SOURCEAUDITID)
where ADDRESSAUDIT.DATEADDED = ADDRESSAUDIT.DATECHANGED