USP_DATALIST_REVENUEHISTORY

Displays historic audit information for a revenue item.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@USERID uniqueidentifier IN User
@ACTIONTYPECODE tinyint IN Action
@SHOWCODE smallint IN Show
@STARTDATE datetime IN Start date
@ENDDATE datetime IN End date
@RECORDTYPECODE tinyint IN Field type

Definition

Copy


            CREATE procedure [dbo].[USP_DATALIST_REVENUEHISTORY]
            (
                @REVENUEID uniqueidentifier,
                @USERID uniqueidentifier = null,
                @ACTIONTYPECODE tinyint = 0,
                @SHOWCODE smallint = 1,
                @STARTDATE datetime = null,
                @ENDDATE datetime = null,
                @RECORDTYPECODE tinyint = 0
            )
            as
            set nocount on;

            declare @CURRENTDATE datetime;
            set @CURRENTDATE = getdate();

            if @SHOWCODE in (1,2,3,4,5,6) begin
                set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE);

                if @SHOWCODE = 1 --Last 30 days

                    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-29,@CURRENTDATE));
                else if @SHOWCODE = 2 --Last 60 days

                    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-59,@CURRENTDATE));
                else if @SHOWCODE = 3 --Last 90 days

                    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-89,@CURRENTDATE));
                else if @SHOWCODE = 4 --Last 6 months

                    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(month,-6,@CURRENTDATE)));
                else if @SHOWCODE = 5 --Last year

                    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(year,-1,@CURRENTDATE)));
                else if @SHOWCODE = 6 --Last 5 years

                    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(year,-5,@CURRENTDATE)));
            end
            else if @SHOWCODE = 0 begin
                set @STARTDATE = null;
                set @ENDDATE = null;
            end
            else if @SHOWCODE = 99 begin
                set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
                set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
            end

            declare @USERNAME nvarchar(128);

            declare @REVENUEDATEADDED datetime;
            select
                @REVENUEDATEADDED = DATEADDED
            from dbo.CONSTITUENT
            where ID = @REVENUEID;

            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)
            )

            --Transaction information 

            if @RECORDTYPECODE = 0 or @RECORDTYPECODE = 1
            begin

                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('FINANCIALTRANSACTION', 'ID', @REVENUEID, 0, null)
                        where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                            and (@STARTDATE is null or AUDITDATE >= @STARTDATE)
                            and (@ENDDATE is null or AUDITDATE <= @ENDDATE);

                    insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)    
                    select
                        @REVENUEID as [RECORDID],
                        [CHANGES].DATECHANGED,
                        'Update' as [ACTION],
                        case [DETAIL].FIELD 
                            when 'BASEAMOUNT' then 'AMOUNT'
                            when 'ORGAMOUNT' then 'ORGANIZATIONAMOUNT'
                            when 'POSTSTATUSCODE' then case when [DETAIL].NEW = 'Posted' 
                                then 'Posted' 
                                else 'DONOTPOST' end
                            else [DETAIL].FIELD end [FIELD], 
                        case [DETAIL].FIELD
                            when 'POSTSTATUSCODE'
                                then case [DETAIL].NEW
                                    when 'Do not post' then '0'
                                    when 'Not posted' then '1'
                                    else [DETAIL].OLD 
                                end
                            else [DETAIL].OLD
                            end [OLD],
                        case [DETAIL].FIELD
                            when 'POSTSTATUSCODE'
                                then case [DETAIL].NEW
                                    when 'Do not post' then '1'
                                    when 'Not posted' then '0'
                                    else [DETAIL].NEW end
                                else [DETAIL].NEW
                            end [NEW],
                        [CHANGES].CHANGEDBYUSER,
                        '' as [PROCESS],
                        [CHANGES].CHANGEDBYAPP,
                        0 as [SEQUENCE]                    
                    from dbo.UFN_AUDIT_GETRECENTCHANGES_FORTABLE('FINANCIALTRANSACTION', 500, @STARTDATE, @ENDDATE, 0, 1, 0, null, null, @REVENUEID) as [CHANGES]
                    cross apply dbo.UFN_AUDIT_GETDETAIL('FINANCIALTRANSACTIONAUDIT', [CHANGES].AUDITKEY, @REVENUEID) 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)

                    union all

                    select
                        @REVENUEID 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('REVENUE_EXT', 500, @STARTDATE, @ENDDATE, 0, 1, 0, null, null, @REVENUEID) as [CHANGES]
                    cross apply dbo.UFN_AUDIT_GETDETAIL('REVENUE_EXTAUDIT', [CHANGES].AUDITKEY, @REVENUEID) 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)

                    union all

                    select
                        @REVENUEID 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('PLEDGEORIGINALAMOUNT', 500, @STARTDATE, @ENDDATE, 0, 1, 0, null, null, @REVENUEID) as [CHANGES]
                    cross apply dbo.UFN_AUDIT_GETDETAIL_BYFIELDLIST('PLEDGEORIGINALAMOUNTAUDIT', [CHANGES].AUDITKEY, @REVENUEID, 'ORIGINALAMOUNT' ) as [DETAIL]
                    where     (@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)
                    union all
                    select
                        @REVENUEID 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('PAYMENTORIGINALAMOUNT', 500, @STARTDATE, @ENDDATE, 0, 1, 0, null, null, @REVENUEID) as [CHANGES]
                    cross apply dbo.UFN_AUDIT_GETDETAIL_BYFIELDLIST('PAYMENTORIGINALAMOUNTAUDIT', [CHANGES].AUDITKEY, @REVENUEID, 'ORIGINALAMOUNT' ) as [DETAIL]                    
                    where     (@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)

                    union all

                    select          
                    RECORDID,
                    case when ACTION = 'Insert' then DATEADDED when ACTION = 'Update' then DATECHANGED else AUDITDATE end as [AUDITDATE],
                    ACTION,
                    FIELD,
                    OLD,
                    NEW,
                    CHANGEDBYUSER,
                    PROCESS,
                    CHANGEDBYAPP,         
                    0 as [SEQUENCE]
                    from dbo.UFN_AUDIT_GETDETAILFORCHILDTABLE_BYFIELDLIST_WITHDATERANGE('RECEIPTDATE','REVENUERECEIPT','REVENUEID',@REVENUEID,null,'','', @STARTDATE, @ENDDATE)    
                    where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                        and (@STARTDATE is null or AUDITDATE >= @STARTDATE)
                        and (@ENDDATE is null or AUDITDATE <= @ENDDATE)

                    ;

            end


            --Payment method information 

            if @RECORDTYPECODE = 0 or @RECORDTYPECODE = 2
            begin
                insert into @TEMP(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
                    select 
                        RECORDID, 
                        AUDITDATE,
                        ACTION,
                        FIELD,
                        OLD,
                        NEW,
                        CHANGEDBYUSER,
                        PROCESS,
                        CHANGEDBYAPP,
                        SEQUENCE --Since each payment method gets its own sequence, the sequence for payment methods are included in the results from the function                    

                    from dbo.UFN_REVENUEHISTORY_PAYMENTMETHOD_AUDIT2(@REVENUEID, @REVENUEDATEADDED, @ACTIONTYPECODE, @STARTDATE, @ENDDATE)
                    where (@USERID is null or CHANGEDBYUSER = @USERNAME)
                        and (@STARTDATE is null or AUDITDATE >= @STARTDATE)
                        and (@ENDDATE is null or AUDITDATE <= @ENDDATE)
                end


                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_REVENUEHISTORY_REVENUECHILDTABLES_AUDIT2(@REVENUEID, @REVENUEDATEADDED, @ACTIONTYPECODE, @RECORDTYPECODE, @STARTDATE, @ENDDATE)
                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,
                    OLD as ValueBefore, 
                    NEW as ValueAfter, 
                    CHANGEDBYUSER, 
                    PROCESS, 
                    CHANGEDBYAPP, 
                    SEQUENCE,
                    case when ACTION = 'Insert' then 0 when ACTION = 'Update' then 1 else 2 end as [ACTIONSORT]
                from
                    @TEMP

                order by
                    [ACTIONSORT] asc, AUDITDATE, SEQUENCE asc, RECORDID, FIELD;