UFN_AUDIT_GETDETAILSFORREVENUEBENEFIT

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_AUDIT_GETDETAILSFORREVENUEBENEFIT(@REVENUEID uniqueidentifier)
returns table
as return

    select 
        V4.RECORDID
        ,V4.AUDITDATE
        ,CHANGEAGENT.USERNAME as CHANGEDBYUSER
        ,CHANGEAGENT.PROCESSDISPLAYNAME as PROCESS
        ,V4.FIELD
        ,V4.OLD
        ,V4.NEW
        ,40 as SEQUENCE
        ,V4.[ACTION]
        ,CHANGEAGENT.APPLICATIONNAME as CHANGEDBYAPP
    from
        (select 
            V3.RECORDID
            ,V3.AUDITDATE
            ,case V3.AUDITTYPECODE2 when 2 then 'Delete' when 0 then 'Update' else 'Insert' end as [ACTION]
            ,'Benefit for:' + case NUMS.NUM when 1 then 'QUANTITY' when 2 then 'UNITVALUE' when 3 then 'DETAILS' end as FIELD
            ,case NUMS.NUM
                when 1 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.QUANTITY1 = V3.QUANTITY2 then null else isnull(convert(varchar, V3.QUANTITY2),'n/a') end end
                when 2 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.UNITVALUE1 = V3.UNITVALUE2 then null else isnull(convert(varchar, V3.UNITVALUE2),'n/a') end end
                when 3 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.DETAILS1 = V3.DETAILS2 then null else isnull(V3.DETAILS2,'n/a') end end
            end as OLD
            ,case NUMS.NUM
                when 1 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.QUANTITY1 = V3.QUANTITY2 then null else isnull(convert(varchar, V3.QUANTITY1),'n/a') end end
                when 2 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.UNITVALUE1 = V3.UNITVALUE2 then null else isnull(convert(varchar, V3.UNITVALUE1),'n/a') end end
                when 3 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.DETAILS1 = V3.DETAILS2 then null else isnull(V3.DETAILS1,'n/a') end end
            end as NEW
            ,ChangeAgentID
        from
            (select 
                isnull(V1.AUDITRECORDID, V2.AUDITRECORDID) as RECORDID
                ,isnull(V1.AUDITCHANGEAGENTID,V2.AUDITCHANGEAGENTID) as CHANGEAGENTID
                ,isnull(V1.AUDITDATE, V2.AUDITDATE) as AUDITDATE
                ,V1.AUDITTYPECODE as AUDITTYPECODE1
                ,V2.AUDITTYPECODE as AUDITTYPECODE2
                ,V1.QUANTITY as QUANTITY1
                ,V2.QUANTITY as QUANTITY2
                ,V1.UNITVALUE as UNITVALUE1
                ,V2.UNITVALUE as UNITVALUE2
                ,V1.DETAILS as DETAILS1
                ,V2.DETAILS as DETAILS2
            from
                (select 
                    LIA.AUDITRECORDID
                    ,LIA.AUDITKEY
                    ,LIA.AUDITCHANGEAGENTID
                    ,LIA.DATECHANGED as AUDITDATE
                    ,LIA.AUDITTYPECODE
                    ,LIA.QUANTITY
                    ,LIA.UNITVALUE
                    ,isnull(Left(LIA.DESCRIPTION,255),'') as DETAILS
                from FINANCIALTRANSACTIONLINEITEMAUDIT LIA
                where LIA.AUDITTYPECODE = 1 and LIA.FINANCIALTRANSACTIONID = @REVENUEID
                    and LIA.TYPECODE = 3
                union all
                select 
                    LI.ID
                    ,'00000000-0000-0000-0000-000000000000' as AUDITKEY
                    ,LI.ADDEDBYID
                    ,LI.DATEADDED
                    ,-1 as AUDITTYPECODE
                    ,LI.QUANTITY
                    ,LI.UNITVALUE
                    ,isnull(Left(LI.DESCRIPTION,255),'') as DETAILS
                from FINANCIALTRANSACTIONLINEITEM LI
                inner join dbo.REVENUEBENEFIT_EXT RBE on LI.ID = RBE.ID
                where LI.FINANCIALTRANSACTIONID = @REVENUEID
                    and LI.REVERSEDLINEITEMID is null
                    and LI.ID not in (select LIA.AUDITRECORDID 
                        from dbo.FINANCIALTRANSACTIONLINEITEMAUDIT LIA 
                        where LIA.FINANCIALTRANSACTIONID = @REVENUEID and LIA.AUDITTYPECODE = 0 and LIA.TYPECODE = 3)
                union all
                select 
                    AUDITRECORDID
                    ,AUDITKEY
                    ,AUDITCHANGEAGENTID
                    ,AUDITDATE
                    ,AUDITTYPECODE
                    ,QUANTITY
                    ,UNITVALUE
                    ,DETAILS
                from (
                    select
                        LIA.AUDITRECORDID
                        ,'00000000-0000-0000-0000-000000000000' as AUDITKEY
                        ,LIA.AUDITCHANGEAGENTID
                        ,LIA.DATEADDED [AUDITDATE]
                        ,-1 as AUDITTYPECODE
                        ,LIA.QUANTITY
                        ,LIA.UNITVALUE
                        ,isnull(Left(LIA.DESCRIPTION,255),'') as DETAILS
                        ,ROW_NUMBER() over (partition by LIA.AUDITRECORDID order by LIA.AUDITDATE asc) SEQUENCE
                    from FINANCIALTRANSACTIONLINEITEMAUDIT LIA
                    where LIA.AUDITTYPECODE = 0 and LIA.FINANCIALTRANSACTIONID = @REVENUEID and LIA.TYPECODE = 3
                        and LIA.REVERSEDLINEITEMID is null) BEFOREUPDATES
                where BEFOREUPDATES.SEQUENCE = 1
                union all
                select
                    LIA.AUDITRECORDID
                    ,'00000000-0000-0000-0000-000000000000' as AUDITKEY
                    ,LIA.AUDITCHANGEAGENTID
                    ,LIA.DATEADDED [AUDITDATE]
                    ,LIA.AUDITTYPECODE
                    ,LIA.QUANTITY
                    ,LIA.UNITVALUE
                    ,isnull(Left(LIA.DESCRIPTION,255),'') as DETAILS
                from FINANCIALTRANSACTIONLINEITEMAUDIT LIA
                where LIA.FINANCIALTRANSACTIONID = @REVENUEID and LIA.AUDITTYPECODE = 2 and LIA.TYPECODE = 3 
                    and LIA.REVERSEDLINEITEMID is null
                    and LIA.AUDITRECORDID not in (
                        select LI.ID from dbo.FINANCIALTRANSACTIONLINEITEM LI inner join dbo.REVENUEBENEFIT_EXT RBE on RBE.ID = LI.ID where LI.FINANCIALTRANSACTIONID = @REVENUEID
                        union all
                        select AUDITRECORDID from FINANCIALTRANSACTIONLINEITEMAUDIT where FINANCIALTRANSACTIONLINEITEMAUDIT.AUDITTYPECODE != 2 and FINANCIALTRANSACTIONLINEITEMAUDIT.FINANCIALTRANSACTIONID = @REVENUEID and FINANCIALTRANSACTIONLINEITEMAUDIT.TYPECODE = 3)
            ) V1
            full outer join
                (select 
                    LIA.AUDITRECORDID
                    ,LIA.AUDITKEY
                    ,LIA.AUDITCHANGEAGENTID
                    ,LIA.AUDITDATE
                    ,LIA.AUDITTYPECODE
                    ,LIA.QUANTITY
                    ,LIA.UNITVALUE
                    ,isnull(Left(LIA.DESCRIPTION,255),'') as DETAILS
                from FINANCIALTRANSACTIONLINEITEMAUDIT LIA
                where LIA.AUDITTYPECODE in (0,2) and LIA.FINANCIALTRANSACTIONID = @REVENUEID and LIA.TYPECODE = 3
                    and LIA.REVERSEDLINEITEMID is null) V2 on V1.AUDITRECORDID = V2.AUDITRECORDID and V1.AUDITKEY = V2.AUDITKEY
            where 
                (V1.QUANTITY != V2.QUANTITY 
                    or (V1.QUANTITY is null and V2.QUANTITY is not null
                    or (V1.QUANTITY is not null and V2.QUANTITY is null)
                )
                or (V1.UNITVALUE != V2.UNITVALUE 
                    or (V1.UNITVALUE is null and V2.UNITVALUE is not null
                    or (V1.UNITVALUE is not null and V2.UNITVALUE is null)
                )
                or (V1.DETAILS != V2.DETAILS 
                    or (V1.DETAILS is null and V2.DETAILS is not null
                    or (V1.DETAILS is not null and V2.DETAILS is null)
                )
            ) V3
        cross join (
            select 1 as NUM union select 2 union select 3) as NUMS) V4
        inner join dbo.CHANGEAGENT on V4.CHANGEAGENTID = CHANGEAGENT.ID         
        where OLD is not null

        union all
        select 
        V4.RECORDID
        ,V4.AUDITDATE
        ,CHANGEAGENT.USERNAME as CHANGEDBYUSER
        ,CHANGEAGENT.PROCESSDISPLAYNAME as PROCESS
        ,V4.FIELD
        ,V4.OLD
        ,V4.NEW
        ,40 as SEQUENCE
        ,V4.[ACTION]
        ,CHANGEAGENT.APPLICATIONNAME as CHANGEDBYAPP
    from
        (select 
            V3.RECORDID
            ,V3.AUDITDATE
            ,case V3.AUDITTYPECODE2 when 2 then 'Delete' when 0 then 'Update' else 'Insert' end as [ACTION]
            ,'Benefit for:' + case NUMS.NUM when 1 then 'BENEFITID' when 2 then 'PERCENTAPPLICABLEAMOUNT' when 3 then 'VALUEPERCENT' end as FIELD
            ,case NUMS.NUM
                when 1 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.BENEFITID1 = V3.BENEFITID2 then null else isnull(V3.BENEFITNAME2,'n/a') end end
                when 2 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.PERCENTAPPLICABLEAMOUNT1 = V3.PERCENTAPPLICABLEAMOUNT2 then null else isnull(convert(varchar,V3.PERCENTAPPLICABLEAMOUNT2,1),'n/a') end end
                when 3 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.VALUEPERCENT1 = V3.VALUEPERCENT2 then null else isnull(convert(varchar, V3.VALUEPERCENT2, 1),'n/a') end end
            end as OLD
            ,case NUMS.NUM
                when 1 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.BENEFITID1 = V3.BENEFITID2 then null else isnull(V3.BENEFITNAME1,'n/a') end end
                when 2 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.PERCENTAPPLICABLEAMOUNT1 = V3.PERCENTAPPLICABLEAMOUNT2 then null else isnull(convert(varchar,V3.PERCENTAPPLICABLEAMOUNT1,1),'n/a') end end
                when 3 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.VALUEPERCENT1 = V3.VALUEPERCENT2 then null else isnull(convert(varchar, V3.VALUEPERCENT1, 1),'n/a') end end
            end as NEW
            ,ChangeAgentID
        from
            (select 
                isnull(V1.AUDITRECORDID, V2.AUDITRECORDID) as RECORDID
                ,isnull(V1.AUDITCHANGEAGENTID,V2.AUDITCHANGEAGENTID) as CHANGEAGENTID
                ,isnull(V1.AUDITDATE, V2.AUDITDATE) as AUDITDATE
                ,V1.AUDITTYPECODE as AUDITTYPECODE1
                ,V2.AUDITTYPECODE as AUDITTYPECODE2
                ,V1.BENEFITID as BENEFITID1
                ,V2.BENEFITID as BENEFITID2
                ,V1.PERCENTAPPLICABLEAMOUNT as PERCENTAPPLICABLEAMOUNT1
                ,V2.PERCENTAPPLICABLEAMOUNT as PERCENTAPPLICABLEAMOUNT2
                ,V1.VALUEPERCENT as VALUEPERCENT1
                ,V2.VALUEPERCENT as VALUEPERCENT2
                ,BENEFIT1.NAME as BENEFITNAME1
                ,BENEFIT2.NAME as BENEFITNAME2
            from
                (select 
                    RBA.AUDITRECORDID
                    ,RBA.AUDITKEY
                    ,RBA.AUDITCHANGEAGENTID
                    ,RBA.DATECHANGED as AUDITDATE
                    ,RBA.AUDITTYPECODE
                    ,RBA.BENEFITID
                    ,RBA.PERCENTAPPLICABLEAMOUNT
                    ,RBA.VALUEPERCENT
                from dbo.REVENUEBENEFIT_EXTAUDIT RBA
                inner join (select distinct T.ID from (
                    select LI.ID from dbo.FINANCIALTRANSACTIONLINEITEM LI where LI.FINANCIALTRANSACTIONID = @REVENUEID and LI.REVERSEDLINEITEMID is null
                    union all
                    select LIA.AUDITRECORDID [ID] from dbo.FINANCIALTRANSACTIONLINEITEMAUDIT LIA where LIA.FINANCIALTRANSACTIONID = @REVENUEID and LIA.REVERSEDLINEITEMID is null) T) LI on LI.ID = RBA.AUDITRECORDID
                where RBA.AUDITTYPECODE = 1
                union all
                select 
                    RBE.ID
                    ,'00000000-0000-0000-0000-000000000000' as AUDITKEY
                    ,RBE.ADDEDBYID
                    ,RBE.DATEADDED
                    ,-1 as AUDITTYPECODE
                    ,RBE.BENEFITID
                    ,RBE.PERCENTAPPLICABLEAMOUNT
                    ,RBE.VALUEPERCENT
                from FINANCIALTRANSACTIONLINEITEM LI
                inner join dbo.REVENUEBENEFIT_EXT RBE on LI.ID = RBE.ID
                where LI.FINANCIALTRANSACTIONID = @REVENUEID 
                    and LI.REVERSEDLINEITEMID is null
                    and LI.ID not in (select RBA.AUDITRECORDID 
                        from dbo.REVENUEBENEFIT_EXTAUDIT RBA where RBA.AUDITTYPECODE = 0)
                union all
                select 
                    AUDITRECORDID
                    ,AUDITKEY
                    ,AUDITCHANGEAGENTID
                    ,AUDITDATE
                    ,AUDITTYPECODE
                    ,BENEFITID
                    ,PERCENTAPPLICABLEAMOUNT
                    ,VALUEPERCENT
                from (
                    select
                        RBA.AUDITRECORDID
                        ,'00000000-0000-0000-0000-000000000000' as AUDITKEY
                        ,RBA.AUDITCHANGEAGENTID
                        ,RBA.DATEADDED [AUDITDATE]
                        ,-1 as AUDITTYPECODE
                        ,RBA.BENEFITID
                        ,RBA.PERCENTAPPLICABLEAMOUNT
                        ,RBA.VALUEPERCENT
                        ,ROW_NUMBER() over (partition by RBA.AUDITRECORDID order by RBA.AUDITDATE asc) SEQUENCE
                    from REVENUEBENEFIT_EXTAUDIT RBA
                    inner join (select distinct T.ID from (
                        select LI.ID from dbo.FINANCIALTRANSACTIONLINEITEM LI where LI.FINANCIALTRANSACTIONID = @REVENUEID and LI.REVERSEDLINEITEMID is null
                        union all
                        select LIA.AUDITRECORDID [ID] from dbo.FINANCIALTRANSACTIONLINEITEMAUDIT LIA where LIA.FINANCIALTRANSACTIONID = @REVENUEID and LIA.REVERSEDLINEITEMID is null) T) LI on LI.ID = RBA.AUDITRECORDID
                    where RBA.AUDITTYPECODE = 0) BEFOREUPDATES
                where BEFOREUPDATES.SEQUENCE = 1
                union all
                select
                    RBA.AUDITRECORDID
                    ,'00000000-0000-0000-0000-000000000000' as AUDITKEY
                    ,RBA.AUDITCHANGEAGENTID
                    ,RBA.DATEADDED [AUDITDATE]
                    ,RBA.AUDITTYPECODE
                    ,RBA.BENEFITID
                    ,RBA.PERCENTAPPLICABLEAMOUNT
                    ,RBA.VALUEPERCENT
                from REVENUEBENEFIT_EXTAUDIT RBA
                inner join dbo.FINANCIALTRANSACTIONLINEITEMAUDIT LIA on LIA.AUDITRECORDID = RBA.AUDITRECORDID
                where LIA.FINANCIALTRANSACTIONID = @REVENUEID and RBA.AUDITTYPECODE = 2 
                    and LIA.REVERSEDLINEITEMID is null
                    and RBA.AUDITRECORDID not in (
                        select AUDITRECORDID from REVENUEBENEFIT_EXTAUDIT where REVENUEBENEFIT_EXTAUDIT.AUDITTYPECODE != 2)
            ) V1
            full outer join
                (select 
                    RBA.AUDITRECORDID
                    ,RBA.AUDITKEY
                    ,RBA.AUDITCHANGEAGENTID
                    ,RBA.AUDITDATE
                    ,RBA.AUDITTYPECODE
                    ,RBA.BENEFITID
                    ,RBA.PERCENTAPPLICABLEAMOUNT
                    ,RBA.VALUEPERCENT
                from REVENUEBENEFIT_EXTAUDIT RBA
                inner join (select distinct T.ID from (
                    select LI.ID from dbo.FINANCIALTRANSACTIONLINEITEM LI where LI.FINANCIALTRANSACTIONID = @REVENUEID and LI.REVERSEDLINEITEMID is null
                    union all
                    select LIA.AUDITRECORDID [ID] from dbo.FINANCIALTRANSACTIONLINEITEMAUDIT LIA where LIA.FINANCIALTRANSACTIONID = @REVENUEID and LIA.REVERSEDLINEITEMID is null) T) LI on LI.ID = RBA.AUDITRECORDID
                where RBA.AUDITTYPECODE in (0,2)) V2 on V1.AUDITRECORDID = V2.AUDITRECORDID and V1.AUDITKEY = V2.AUDITKEY
            left join dbo.BENEFIT as BENEFIT1 on V1.BENEFITID = BENEFIT1.ID
            left join dbo.BENEFIT as BENEFIT2 on V2.BENEFITID = BENEFIT2.ID
            where 
                (V1.BENEFITID != V2.BENEFITID 
                    or (V1.BENEFITID is null and V2.BENEFITID is not null
                    or (V1.BENEFITID is not null and V2.BENEFITID is null)
                )
                or (V1.PERCENTAPPLICABLEAMOUNT != V2.PERCENTAPPLICABLEAMOUNT 
                    or (V1.PERCENTAPPLICABLEAMOUNT is null and V2.PERCENTAPPLICABLEAMOUNT is not null
                    or (V1.PERCENTAPPLICABLEAMOUNT is not null and V2.PERCENTAPPLICABLEAMOUNT is null)
                )
                or (V1.VALUEPERCENT != V2.VALUEPERCENT 
                    or (V1.VALUEPERCENT is null and V2.VALUEPERCENT is not null
                    or (V1.VALUEPERCENT is not null and V2.VALUEPERCENT is null)
                )
            ) V3
        cross join (
            select 1 as NUM union select 2 union select 3) as NUMS) V4
        inner join dbo.CHANGEAGENT on V4.CHANGEAGENTID = CHANGEAGENT.ID         
        where OLD is not null;