USP_CONSTITUENT_GETHISTORY

Returns the data for the Constituent History List.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@USERID uniqueidentifier IN
@ACTIONTYPECODE tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@RECORDTYPECODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_CONSTITUENT_GETHISTORY
            (
                @CONSTITUENTID uniqueidentifier,
                @USERID uniqueidentifier,
                @ACTIONTYPECODE tinyint,
                @STARTDATE datetime,
                @ENDDATE datetime,
                @RECORDTYPECODE tinyint = 0
            ) as
                set nocount on;

                declare @USERNAME nvarchar(128);

                declare @CONSTITUENTDATEADDED datetime;
                select
                    @CONSTITUENTDATEADDED = DATEADDED
                from dbo.CONSTITUENT
                where ID = @CONSTITUENTID;

                if not @USERID is null
                    select 
                        @USERNAME = USERNAME 
                    from dbo.APPUSER 
                    where APPUSER.ID = @USERID;
                else
                    set @USERNAME = '';

                declare @TEMP table
                (
                    RECORDID uniqueidentifier,
                    AUDITDATE datetime,
                    CHANGEDBYUSER nvarchar(128),
                    PROCESS nvarchar(255),
                    FIELD nvarchar(128),
                    OLD nvarchar(4000),
                    NEW nvarchar(4000),
                    SEQUENCE int,
                    ACTION nvarchar(8),
                    CHANGEDBYAPP nvarchar(200)
                )


                --Constituent information 

                if @RECORDTYPECODE = 0 or @RECORDTYPECODE = 1
                begin
                    -- Get the insert into the constituent table

                    if @ACTIONTYPECODE = 0 or @ACTIONTYPECODE = 1
                        insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
                            select 
                                RECORDID,
                                DATEADDED,
                                'Insert' as [ACTION],
                                FIELD,
                                OLD,
                                NEW,
                                CHANGEDBYUSER,
                                PROCESS,
                                CHANGEDBYAPP,
                                -1 as [SEQUENCE]                    
                            from dbo.UFN_AUDIT_GETINSERTS_FORTABLE('CONSTITUENT', 'ID', @CONSTITUENTID, 0, null)
                            where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                                and (@STARTDATE is null or DATEADDED >= @STARTDATE)
                                and (@ENDDATE is null or DATEADDED <= @ENDDATE)

                    -- Get updates to the constituent table

                    insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
                        select
                            @CONSTITUENTID as [RECORDID],
                            [CHANGES].DATECHANGED,
                            'Update' as [ACTION],
                            [DETAIL].FIELD,
                            [DETAIL].OLD,
                            [DETAIL].NEW,
                            [CHANGES].CHANGEDBYUSER,
                            '' as [PROCESS],
                            [CHANGES].CHANGEDBYAPP,
                            0 as [SEQUENCE]
                        from dbo.UFN_AUDIT_GETRECENTCHANGES_FORTABLE('CONSTITUENT', 500, null, null, 0, 1, 0, null, null, @CONSTITUENTID) as [CHANGES]
                        cross apply dbo.UFN_AUDIT_GETDETAIL('CONSTITUENTAUDIT', [CHANGES].AUDITKEY, @CONSTITUENTID ) as [DETAIL]                    
                        where( [DETAIL].FIELD <> 'DATECHANGED' and [DETAIL].FIELD <> 'CHANGEDBYID' and [DETAIL].FIELD <> 'ADDEDBYID' and [DETAIL].FIELD <> 'DATEADDED')
                            and (@USERID is null or CHANGEDBYUSER = @USERNAME)
                            and (@ACTIONTYPECODE = 0 or @ACTIONTYPECODE = 2)
                            and (@STARTDATE is null or [CHANGES].DATECHANGED >= @STARTDATE)
                            and (@ENDDATE is null or [CHANGES].DATECHANGED <= @ENDDATE)
                end


                -- Get changes to organization information

                if @RECORDTYPECODE = 0 or @RECORDTYPECODE = 3
                    insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
                    select 
                        RECORDID,
                        AUDITDATE,
                        ACTION,
                        FIELD,
                        OLD,
                        NEW,
                        CHANGEDBYUSER,
                        PROCESS,
                        CHANGEDBYAPP,
                        10 as [SEQUENCE]                    
                    from dbo.UFN_CONSTITUENTHISTORY_ORGANIZATIONDATA_AUDIT(@CONSTITUENTID, @CONSTITUENTDATEADDED, @ACTIONTYPECODE
                    where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                        and (@STARTDATE is null or AUDITDATE >= @STARTDATE)
                        and (@ENDDATE is null or AUDITDATE <= @ENDDATE)

                -- Get changes to deceased information

                if @RECORDTYPECODE = 0 or @RECORDTYPECODE = 2
                    insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
                    select 
                        RECORDID,
                        AUDITDATE,
                        ACTION,
                        FIELD,
                        OLD,
                        NEW,
                        CHANGEDBYUSER,
                        PROCESS,
                        CHANGEDBYAPP,
                        20 as [SEQUENCE]                    
                    from dbo.UFN_CONSTITUENTHISTORY_DECEASEDCONSTITUENT_AUDIT(@CONSTITUENTID, @CONSTITUENTDATEADDED, @ACTIONTYPECODE
                    where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                        and (@STARTDATE is null or AUDITDATE >= @STARTDATE)
                        and (@ENDDATE is null or AUDITDATE <= @ENDDATE)

                -- Get changes to application user information

                if @RECORDTYPECODE = 0 or @RECORDTYPECODE = 4
                    insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
                    select 
                        RECORDID,
                        AUDITDATE,
                        ACTION,
                        FIELD,
                        OLD,
                        NEW,
                        CHANGEDBYUSER,
                        PROCESS,
                        CHANGEDBYAPP,
                        30 as [SEQUENCE]                    
                    from dbo.UFN_CONSTITUENTHISTORY_APPUSER_AUDIT(@CONSTITUENTID, @CONSTITUENTDATEADDED, @ACTIONTYPECODE
                    where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                        and (@STARTDATE is null or AUDITDATE >= @STARTDATE)
                        and (@ENDDATE is null or AUDITDATE <= @ENDDATE)

                -- Get changes to tables related to constituent

                insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
                    select
                        RECORDID,
                        AUDITDATE,
                        ACTION,
                        FIELD,
                        OLD,
                        NEW,
                        CHANGEDBYUSER,
                        PROCESS,
                        CHANGEDBYAPP,
                        SEQUENCE                    
                    from dbo.UFN_CONSTITUENTHISTORY_CONSTITUENTCHILDTABLES_RECORDTYPE_AUDIT(@CONSTITUENTID, @CONSTITUENTDATEADDED, @ACTIONTYPECODE, @RECORDTYPECODE)
                    where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                        and (@STARTDATE is null or AUDITDATE >= @STARTDATE)
                        and (@ENDDATE is null or AUDITDATE <= @ENDDATE);

                select 
                    RECORDID, 
                    AUDITDATE, 
                    case when ACTION = 'Insert' then 'Add' when ACTION = 'Update' then 'Edit' else ACTION end as [ACTION], 
                    FIELD, 
                    case when FIELD = 'SSN' then '***-**-****' else OLD end ValueBefore, 
                    case when FIELD = 'SSN' then '***-**-****' else NEW end ValueAfter, 
                    CHANGEDBYUSER, 
                    PROCESS, 
                    CHANGEDBYAPP, 
                    SEQUENCE,
                    case when ACTION = 'Delete' then 0 when ACTION = 'Update' then 1 else 2 end as [ACTIONSORT]
                from
                    @TEMP
                where
                    FIELD <> 'SSNINDEX'
                order by
                    AUDITDATE, [ACTIONSORT] asc, SEQUENCE asc, RECORDID, FIELD;