UFN_CONSTITUENT_GETPHONECHANGES
This function returns all changes for phones.
Return
Return Type |
---|
table |
Definition
Copy
CREATE function dbo.UFN_CONSTITUENT_GETPHONECHANGES()
returns table
as
return
/* EDITTYPECODE
0 = Add
1 = Edit
2 = Delete
100 = Original Add (after edited)
*/
with [CURRENT] as
(
-- current row
select
ID,
NUMBER DISPLAY,
DATEADDED,
DATECHANGED,
null AUDITID
from dbo.PHONE
union all
-- terminal delete
select
AUDITRECORDID,
NUMBER,
DATEADDED,
null,
AUDITID
from dbo.PHONEAUDIT
where AUDITTYPECODE = 2
-- not re-added
and not exists(select 'x' from dbo.PHONE where PHONE.ID = PHONEAUDIT.AUDITRECORDID)
-- not deleted again after re-added
and not exists(select 'x' from dbo.PHONEAUDIT LATER where LATER.AUDITRECORDID = PHONEAUDIT.AUDITRECORDID and LATER.AUDITDATE > PHONEAUDIT.AUDITDATE)
)
select
PHONE.ID RECORDID,
cast(null as uniqueidentifier) as AUDITID,
cast(null as uniqueidentifier) as AUDITKEY,
PHONE.CONSTITUENTID,
0 EDITTYPECODE,
PHONE.ADDEDBYID CHANGEAGENTID,
PHONE.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.PHONE
inner join [CURRENT] on [CURRENT].ID = PHONE.ID
left join dbo.CONSTITUENTDATAREVIEWROLLBACK on CONSTITUENTDATAREVIEWROLLBACK.CONTEXTRECORDID = PHONE.ID and CONSTITUENTDATAREVIEWROLLBACK.ROLLBACKAUDITID is null
left join dbo.CONSTITUENTDATAREVIEWROLLBACKREASON on CONSTITUENTDATAREVIEWROLLBACKREASON.ID = CONSTITUENTDATAREVIEWROLLBACK.CONSTITUENTDATAREVIEWROLLBACKREASONID
left join dbo.PHONEAUDIT [ROLLBACK] on [ROLLBACK].AUDITID = CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID
where PHONE.DATEADDED = PHONE.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.PHONEAUDIT BEFORE
inner join [CURRENT] on [CURRENT].ID = BEFORE.AUDITRECORDID
inner join dbo.PHONEAUDIT 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.PHONEAUDIT [ROLLBACK] on [ROLLBACK].AUDITID = CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID
where BEFORE.AUDITTYPECODE = 0
union all
select
PHONEAUDIT.AUDITRECORDID RECORDID,
PHONEAUDIT.AUDITID,
PHONEAUDIT.AUDITKEY,
PHONEAUDIT.CONSTITUENTID,
2 EDITTYPECODE,
PHONEAUDIT.AUDITCHANGEAGENTID CHANGEAGENTID,
PHONEAUDIT.AUDITDATE CHANGEDATE,
[CURRENT].DISPLAY,
case when PHONEAUDIT.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.PHONEAUDIT
inner join [CURRENT] on [CURRENT].ID = PHONEAUDIT.AUDITRECORDID
left join dbo.CONSTITUENTDATAREVIEWROLLBACK on CONSTITUENTDATAREVIEWROLLBACK.ROLLBACKAUDITID = PHONEAUDIT.AUDITID and CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID is null
left join dbo.CONSTITUENTDATAREVIEWROLLBACKREASON on CONSTITUENTDATAREVIEWROLLBACKREASON.ID = CONSTITUENTDATAREVIEWROLLBACK.CONSTITUENTDATAREVIEWROLLBACKREASONID
where AUDITTYPECODE = 2
union all
select
PHONEAUDIT.AUDITRECORDID RECORDID,
PHONEAUDIT.AUDITID,
PHONEAUDIT.AUDITKEY,
PHONEAUDIT.CONSTITUENTID,
100 EDITTYPECODE,
PHONEAUDIT.ADDEDBYID CHANGEAGENTID,
PHONEAUDIT.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.PHONEAUDIT
inner join [CURRENT] on [CURRENT].ID = PHONEAUDIT.AUDITRECORDID
left join dbo.CONSTITUENTDATAREVIEWROLLBACK on CONSTITUENTDATAREVIEWROLLBACK.ROLLBACKAUDITID = PHONEAUDIT.AUDITID and CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID is not null
left join dbo.CONSTITUENTDATAREVIEWROLLBACK [ROLLBACKAUDITIDNULL] on [ROLLBACKAUDITIDNULL].CONTEXTRECORDID = PHONEAUDIT.AUDITRECORDID and [ROLLBACKAUDITIDNULL].ROLLBACKAUDITID is null and PHONEAUDIT.DATEADDED = [CURRENT].DATEADDED
left join dbo.CONSTITUENTDATAREVIEWROLLBACKREASON on CONSTITUENTDATAREVIEWROLLBACKREASON.ID = isnull(CONSTITUENTDATAREVIEWROLLBACK.CONSTITUENTDATAREVIEWROLLBACKREASONID,[ROLLBACKAUDITIDNULL].CONSTITUENTDATAREVIEWROLLBACKREASONID)
left join dbo.PHONEAUDIT [ROLLBACK] on [ROLLBACK].AUDITID = isnull(CONSTITUENTDATAREVIEWROLLBACK.SOURCEAUDITID,[ROLLBACKAUDITIDNULL].SOURCEAUDITID)
where PHONEAUDIT.DATEADDED = PHONEAUDIT.DATECHANGED