USP_DATALIST_CONSTITUENTGROUP_REVENUEHISTORY

This list returns a filtered list of revenue transactions associated with a constituent group and its members.

Parameters

Parameter Parameter Type Mode Description
@GROUPID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@REVENUETYPEOPTIONCODE smallint IN Revenue type
@DATERANGECODE smallint IN Date range
@ISGROUP bit IN
@PRESERVERELATIONSHIPS bit IN Preserve revenue relationships
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SITEFILTERMODE tinyint IN Sites
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN Input parameter indicating the ID of the feature to use for site security checking.
@SECURITYFEATURETYPE tinyint IN Input parameter indicating the type of the feature to use for site security checking.

Definition

Copy


CREATE procedure dbo.USP_DATALIST_CONSTITUENTGROUP_REVENUEHISTORY
(
    @GROUPID uniqueidentifier,    
    @REVENUETYPEOPTIONCODE smallint = 0,
    @DATERANGECODE smallint = 2,
    @ISGROUP bit = 1,
    @PRESERVERELATIONSHIPS bit = 1,
    @CURRENTAPPUSERID uniqueidentifier = null,
    @SITEFILTERMODE tinyint = 0,
    @SITESSELECTED xml = null,
    @SECURITYFEATUREID uniqueidentifier = null,
    @SECURITYFEATURETYPE tinyint = null
)
as
    set nocount on;

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());

    declare @STARTDATE datetime;
    declare @ENDDATE datetime;

    if @DATERANGECODE = 1 --Last 30 Days

        set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-29,@CURRENTDATE));
    else if @DATERANGECODE = 2 --Last 90 Days

        set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-89,@CURRENTDATE));
    else if @DATERANGECODE = 3 --Last Year

        set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(year,-1,@CURRENTDATE)));
    else
        set @STARTDATE = @CURRENTDATE;            

    set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE);

    -- households always include member giving, other types get looked up

    declare @GROUPINCLUDESMEMBERREVENUE bit;
    declare @ISHOUSEHOLD bit;

    select 
    @GROUPINCLUDESMEMBERREVENUE = 
      case
        when GD.GROUPTYPECODE = 0 then 1
        when GD.GROUPTYPECODE = 1 then GT.INCLUDEMEMBERGIVING
      end,
    @ISHOUSEHOLD = 
      case
        when GD.GROUPTYPECODE = 0 then 1
        when GD.GROUPTYPECODE = 1 then 0
      end
    from dbo.GROUPDATA GD
    left join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID
    where GD.ID=@GROUPID;

    declare @REVTABLE table (ID uniqueidentifier);
    insert into @REVTABLE(ID)
        select
            REVENUE.ID
        from
            dbo.REVENUE
        where 
            REVENUE.CONSTITUENTID = @GROUPID
            and
            exists 
            (
                select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
                cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
                where RSSUB.REVENUEID = REVENUE.ID
                and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                and 
                (
                    @SITEFILTERMODE = 0
                    or 
                    exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
                )
            );

    if @GROUPINCLUDESMEMBERREVENUE = 1
        insert into @REVTABLE(ID)
            select
                REVENUE.ID
            from
                dbo.REVENUE
            inner join dbo.GROUPMEMBER GM 
                on REVENUE.CONSTITUENTID = GM.MEMBERID
            left join dbo.GROUPMEMBERDATERANGE GMDR 
                on GMDR.GROUPMEMBERID = GM.ID    
            where 
                GM.GROUPID = @GROUPID
                and
                ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= REVENUE.DATE)) or
                (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= REVENUE.DATE)) or
                (GMDR.DATEFROM <= REVENUE.DATE and GMDR.DATETO >= REVENUE.DATE)) and
                (@DATERANGECODE = 0 or (REVENUE.DATE >= @STARTDATE and REVENUE.DATE <= @ENDDATE))
                and
                exists 
                (
                    select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
                    cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
                    where RSSUB.REVENUEID = REVENUE.ID
                    and (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
                    and 
                    (
                        @SITEFILTERMODE = 0
                        or 
                        exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
                    )
                );


    --Final select

    select 
        ID,
        RECORDID,                
        DATEADDED,
        TYPECODE,
        PARENT,
        TYPE,                
        DATE,
        AMOUNT,
        GROSSAMOUNT,
        BALANCE,
        DESIGNATIONS,
        PAYMENTMETHOD,                
        CATEGORY,
        CONSTITUENT,
        row_number() over (order by [TYPE]) as SEQUENCE,
        MATCHINGGIFTCONSTITUENT,
        (
            select 
                dbo.UDA_BUILDLIST(distinct CAMPAIGN.NAME) 
            from 
                dbo.CAMPAIGN 
            inner join 
                dbo.REVENUESPLITCAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.ID
            inner join
                dbo.REVENUESPLIT on REVENUESPLITCAMPAIGN.REVENUESPLITID = REVENUESPLIT.ID
            where
                REVENUESPLIT.REVENUEID = REVENUEHISTORY.ID
        ) as CAMPAIGNS,
        SITES
    from
    (
        -- Donations, event registration payments, and membership payments

        select
            cast(RS.ID as nvarchar(36))  as ID,
            REVENUE.ID as RECORDID,
            ISVISIBLE = 
                Case
                    when REVENUE.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE = 0 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 1 then 1 else 0 end        -- Gifts

                    when REVENUE.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE = 1 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 5 then 1 else 0 end        -- Event registration fees

                    when REVENUE.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE = 5 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 7 then 1 else 0 end        -- Membership fees

                end,
            REVENUE.TRANSACTIONTYPECODE as TYPECODE,
            case 
                when RS.APPLICATIONCODE = 0 then RS.APPLICATION
                else RS.APPLICATION + ' Payment' 
            end as TYPE,
            dbo.UDA_BUILDLIST(distinct GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME) as CATEGORY,
            REVENUE.DATE,
            REVENUE.DATEADDED,
            RS.AMOUNT as AMOUNT,
            dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT(RS.ID, 1) as GROSSAMOUNT,
            null as BALANCE,
            dbo.UFN_DESIGNATION_GETNAME(RS.DESIGNATIONID) as DESIGNATIONS,
            RPM.PAYMENTMETHOD as PAYMENTMETHOD,
            C.NAME as CONSTITUENT,
            PARENT = null,
            MATCHINGGIFTCONSTITUENT = null,
            dbo.UFN_REVENUESPLIT_BUILDSITELIST(RS.ID) SITES
        from 
            @REVTABLE RT
            inner join REVENUE on RT.ID = REVENUE.ID
            inner join dbo.REVENUESPLIT RS on REVENUE.ID = RS.REVENUEID
            inner join dbo.CONSTITUENT C on REVENUE.CONSTITUENTID = C.ID
            inner join dbo.REVENUEPAYMENTMETHOD RPM on REVENUE.ID = RPM.REVENUEID
            -- Do not return Matching gift claims for Orgs in group matching gifts from individuals in group, nor the group itself

            -- Causes duplicate key exception when added to the grid

            left outer join dbo.REVENUEMATCHINGGIFT RMG on RMG.ID = REVENUE.ID
            left outer join dbo.REVENUE R2 on R2.ID = RMG.MGSOURCEREVENUEID
            left outer join dbo.GROUPMEMBER GM2 on R2.CONSTITUENTID = GM2.MEMBERID
            left join dbo.REVENUECATEGORY RC on RS.ID = RC.ID    
            left join dbo.GLREVENUECATEGORYMAPPING on RC.GLREVENUECATEGORYMAPPINGID = GLREVENUECATEGORYMAPPING.ID            
        where 
            (REVENUE.TRANSACTIONTYPECODE = 0 and RS.APPLICATIONCODE in (0,1,5)) and
            (@DATERANGECODE = 0 or (REVENUE.DATE >= @STARTDATE and REVENUE.DATE <= @ENDDATE))
        group by 
            REVENUE.ID, RS.ID, REVENUE.TRANSACTIONTYPECODE, RS.APPLICATIONCODE, REVENUE.TRANSACTIONTYPECODE, REVENUE.TRANSACTIONTYPE,
            REVENUE.DATE, REVENUE.DATEADDED, RS.AMOUNT, RPM.PAYMENTMETHOD, C.NAME, RS.APPLICATION, RS.DESIGNATIONID

        union all
        -- Collect Revenue History for Members                         

        --        Pledges, Recurring gifts, Event registration fees, Matching gift claims,

        --        Matching gift payments, Other revenue (2.0?), Membership fees (2.0?), Grant awards

        select
            cast(REVENUE.ID as nvarchar(36))  as ID,
            REVENUE.ID as RECORDID,
            ISVISIBLE = 
                Case
                    when REVENUE.TRANSACTIONTYPECODE = 1 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 2 then 1 else 0 end        -- Pledges

                    when REVENUE.TRANSACTIONTYPECODE = 2 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 3 then 1 else 0 end        -- Recurring gifts

                    when REVENUE.TRANSACTIONTYPECODE = 3 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 4 then 1 else 0 end        -- Matching gift claims

                    when REVENUE.TRANSACTIONTYPECODE = 4 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 8 then 1 else 0 end        -- Planned gifts

                end,
            REVENUE.TRANSACTIONTYPECODE as TYPECODE,
            REVENUE.TRANSACTIONTYPE as TYPE,
            dbo.UDA_BUILDLIST(distinct GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME) as CATEGORY,
            REVENUE.DATE,
            REVENUE.DATEADDED,
            REVENUE.AMOUNT as AMOUNT,
            case REVENUE.TRANSACTIONTYPECODE
                when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT(REVENUE.ID)
                when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT(REVENUE.ID, 1)
                else REVENUE.AMOUNT end as GROSSAMOUNT,
            case REVENUE.TRANSACTIONTYPECODE 
                when 1 then dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) 
                when 3 then dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) 
                else null 
            end as BALANCE,
            dbo.UFN_REVENUE_DESIGNATIONLIST(REVENUE.ID) as DESIGNATIONS,
            case REVENUE.TRANSACTIONTYPECODE 
                when 1 then null 
                when 3 then null 
                else RPM.PAYMENTMETHOD
            end as PAYMENTMETHOD,
            C.NAME as CONSTITUENT,
            PARENT = null,
            MATCHINGGIFTCONSTITUENT = null,
            dbo.UFN_REVENUESPLIT_BUILDSITELIST(RS.ID) SITES
        from @REVTABLE RT
        inner join REVENUE
            on RT.ID = REVENUE.ID
        inner join dbo.REVENUESPLIT RS
            on REVENUE.ID = RS.REVENUEID
        inner join dbo.CONSTITUENT C
            on REVENUE.CONSTITUENTID = C.ID
        inner join dbo.REVENUEPAYMENTMETHOD RPM
            on REVENUE.ID = RPM.REVENUEID
        -- Do not return Matching gift claims for Orgs in group matching gifts from individuals in group, nor the group itself

        -- Causes duplicate key exception when added to the grid

        left outer join dbo.REVENUEMATCHINGGIFT RMG
            on RMG.ID = REVENUE.ID
        left outer join dbo.REVENUE R2
            on R2.ID = RMG.MGSOURCEREVENUEID
        left outer join dbo.GROUPMEMBER GM2
            on R2.CONSTITUENTID = GM2.MEMBERID
        left join dbo.REVENUECATEGORY RC
            on RS.ID = RC.ID    
        left join dbo.GLREVENUECATEGORYMAPPING
            on RC.GLREVENUECATEGORYMAPPINGID = GLREVENUECATEGORYMAPPING.ID            
        where 
            (REVENUE.TRANSACTIONTYPECODE in (1,2,4) or 
            (REVENUE.TRANSACTIONTYPECODE = 3 and R2.CONSTITUENTID <> @GROUPID and (GM2.GROUPID is null or GM2.GROUPID <> @GROUPID))) 
            and
            (@DATERANGECODE = 0 or (REVENUE.DATE >= @STARTDATE and REVENUE.DATE <= @ENDDATE))            
        group by REVENUE.ID, REVENUE.TRANSACTIONTYPECODE, RS.APPLICATIONCODE, REVENUE.TRANSACTIONTYPECODE, REVENUE.TRANSACTIONTYPE,
            REVENUE.DATE, REVENUE.DATEADDED, RPM.PAYMENTMETHOD, C.NAME, REVENUE.AMOUNT, RS.ID

        union all

            -- Pledge payment, Recurring gift payment, Matching gift payment, Planned gift payment, Grant award payment

        select 
            ID =
                Case RS.APPLICATIONCODE
                    when 3 then cast(RS.ID as nvarchar(36)) + cast(RGA.SOURCEREVENUEID as nvarchar(36))
                    else cast(RS.ID as nvarchar(36))
                end,
            REVENUE.ID as RECORDID,
            ISVISIBLE = 
                Case RS.APPLICATIONCODE
                    when 2 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 2 then 1 else 0 end
                    when 3 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 3 then 1 else 0 end
                    when 6 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 8 then 1 else 0 end                        
                    when 7 then case @REVENUETYPEOPTIONCODE when 0 then 1 when 4 then 1 else 0 end

                    --Should I include a grant award option?

                    when 8 then case @REVENUETYPEOPTIONCODE when 0 then 1 else 0 end
                end,
            REVENUE.TRANSACTIONTYPECODE as TYPECODE,
            RS.APPLICATION + ' Payment' as TYPE,
            dbo.UDA_BUILDLIST(distinct GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME) as CATEGORY,
            REVENUE.DATE,
            REVENUE.DATEADDED,
            AMOUNT = 
                case RS.APPLICATIONCODE
                    when 3 then sum(RGA.AMOUNT)
                    else sum(ISP.AMOUNT)
                end,
            case RS.APPLICATIONCODE
                when 3 then sum((RGA.AMOUNT/RS.AMOUNT) * dbo.UFN_GIFTAIDREVENUESPLIT_GETSPLITTAXCLAIMAMOUNT(RS.ID, 1) + RGA.AMOUNT)
                else sum((ISP.AMOUNT/RS.AMOUNT) * dbo.UFN_GIFTAIDREVENUESPLIT_GETSPLITTAXCLAIMAMOUNT(RS.ID, 1) + ISP.AMOUNT) end
                    as GROSSAMOUNT,
            null as BALANCE,
            dbo.UFN_DESIGNATION_GETNAME(RS.DESIGNATIONID) as DESIGNATIONS,
            RPM.PAYMENTMETHOD,
            C.NAME as CONSTITUENT,
            PARENT = 
                case @PRESERVERELATIONSHIPS
                    when 1 then
                        case RS.APPLICATIONCODE
                            when 3 then cast(RGA.SOURCEREVENUEID as nvarchar(36))
                            else cast(ISP.PLEDGEID as nvarchar(36))
                        end
                    else null
                end,
            MATCHINGGIFTCONSTITUENT = null,
            dbo.UFN_REVENUESPLIT_BUILDSITELIST(RS.ID) SITES
        from 
            @REVTABLE RT
            inner join REVENUE on RT.ID = REVENUE.ID
            inner join dbo.REVENUESPLIT RS on REVENUE.ID = RS.REVENUEID
            inner join dbo.REVENUEPAYMENTMETHOD RPM on REVENUE.ID = RPM.REVENUEID
            left outer join dbo.INSTALLMENTSPLITPAYMENT ISP on ISP.PAYMENTID = RS.ID
            left outer join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.ID = ISP.INSTALLMENTSPLITID
            left outer join dbo.RECURRINGGIFTACTIVITY RGA on RGA.PAYMENTREVENUEID = RS.ID
            inner join dbo.CONSTITUENT C on REVENUE.CONSTITUENTID = C.ID
            left join dbo.REVENUECATEGORY RC on RS.ID = RC.ID    
            left join dbo.GLREVENUECATEGORYMAPPING on RC.GLREVENUECATEGORYMAPPINGID = GLREVENUECATEGORYMAPPING.ID
        where 
            REVENUE.TRANSACTIONTYPECODE = 0 and    
            RS.APPLICATIONCODE in (2,3,6,7,8) and -- Pledge payment, Recurring gift payment, Matching gift payment, Grant award payment

            (@DATERANGECODE = 0 or (REVENUE.DATE >= @STARTDATE and REVENUE.DATE <= @ENDDATE))
        group by 
            REVENUE.ID, RS.ID, REVENUE.TRANSACTIONTYPECODE, REVENUE.DATE, REVENUE.DATEADDED, REVENUE.AMOUNT, RS.APPLICATIONCODE, RS.APPLICATION, RS.DESIGNATIONID,
            RGA.SOURCEREVENUEID, ISP.PLEDGEID, RPM.PAYMENTMETHOD, REVENUE.TRANSACTIONTYPE, INSTALLMENTSPLIT.DESIGNATIONID,C.NAME


        union all

            -- Write offs

        select
            null as ID,
            null as RECORDID,
            ISVISIBLE = case @REVENUETYPEOPTIONCODE when 0 then 1 when 2 then 1 else 0 end,
            null as TRANSACTIONTYPECODE,
            case REVENUE.TRANSACTIONTYPECODE
                when 1 then 'Pledge write-off' 
                when 6 then 'Grant award write-off' 
            end as TYPE,
            null as CATEGORY,
            WO.DATE as DATE,
            WO.DATEADDED as DATEADDED,
            IWO.AMOUNT as AMOUNT,
            IWO.AMOUNT as GROSSAMOUNT,
            null as BALANCE,
            null as DESIGNATIONS,    
            null as PAYMENTMETHOD,
            C.NAME as CONSTITUENT,
            PARENT = 
                case @PRESERVERELATIONSHIPS
                    when 1 then cast(WO.REVENUEID as nvarchar(36))
                    else null
                end,
            MATCHINGGIFTCONSTITUENT = null,
            SITE.NAME SITES
        from 
            @REVTABLE RT
            inner join dbo.WRITEOFF WO on RT.ID = WO.REVENUEID
            inner join REVENUE on REVENUE.ID = WO.REVENUEID                
            inner join dbo.INSTALLMENTWRITEOFF IWO on IWO.WRITEOFFID = WO.ID                             
            inner join dbo.WRITEOFFSPLIT WOS on WOS.WRITEOFFID = WO.ID      
            inner join dbo.CONSTITUENT C on REVENUE.CONSTITUENTID = C.ID
            inner join dbo.REVENUE WOR on WO.REVENUEID = WOR.ID
            inner join dbo.DESIGNATION on DESIGNATION.ID = WOS.DESIGNATIONID
            inner join dbo.DESIGNATIONLEVEL on coalesce(DESIGNATION.DESIGNATIONLEVEL5ID,DESIGNATION.DESIGNATIONLEVEL4ID,DESIGNATION.DESIGNATIONLEVEL3ID,DESIGNATION.DESIGNATIONLEVEL2ID,DESIGNATION.DESIGNATIONLEVEL1ID) = DESIGNATIONLEVEL.ID
            left join dbo.SITE on SITE.ID = DESIGNATIONLEVEL.SITEID
        where
            (@DATERANGECODE = 0 or (WO.DATE >= @STARTDATE and WO.DATE <= @ENDDATE))

        union all

            -- Matching gift claims

        select distinct
            ID =    case 
                        when RS2.APPLICATIONCODE in (2,7) then cast(RS.ID as nvarchar(36)) + cast(ISP.ID as nvarchar(36))
                        when RS2.APPLICATIONCODE = 3 then cast(RS.ID as nvarchar(36)) + cast(R2.ID as nvarchar(36)) + cast(RGA.SOURCEREVENUEID as nvarchar(36))
                        else cast(RS.ID as nvarchar(36)) + cast(RMG.MGSOURCEREVENUEID as nvarchar(36))
                    end,
            REVENUE.ID as RECORDID,
            case @REVENUETYPEOPTIONCODE 
                when 0 then 1 
                when 1 then case when R2.TRANSACTIONTYPECODE = 0 and RS2.APPLICATIONCODE = 0 then 1 else 0 end
                when 2 then case when R2.TRANSACTIONTYPECODE = 0 and RS2.APPLICATIONCODE = 2 then 1 else 0 end
                when 3 then case when R2.TRANSACTIONTYPECODE = 0 and RS2.APPLICATIONCODE = 3 then 1 else 0 end
                when 4 then case when R2.TRANSACTIONTYPECODE = 0 and RS2.APPLICATIONCODE = 7 then 1 else 0 end
                when 5 then case when R2.TRANSACTIONTYPECODE = 0 and RS2.APPLICATIONCODE = 1 then 1 else 0 end
                when 7 then case when R2.TRANSACTIONTYPECODE = 0 and RS2.APPLICATIONCODE = 5 then 1 else 0 end
            end,
            REVENUE.TRANSACTIONTYPECODE as TYPECODE,
            REVENUE.TRANSACTIONTYPE + ' (' + C.NAME + ')' as TYPE,
            dbo.UDA_BUILDLIST(distinct GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME) as CATEGORY,
            REVENUE.DATE,
            REVENUE.DATEADDED,
            RS.AMOUNT,
            RS.AMOUNT as GROSSAMOUNT,
            dbo.UFN_PLEDGE_GETDESIGNATIONBALANCE(REVENUE.ID, RS.DESIGNATIONID) [BALANCE],
            dbo.UFN_DESIGNATION_GETNAME(RS.DESIGNATIONID) as DESIGNATIONS,
            RPM.PAYMENTMETHOD,
            C.NAME,
            PARENT = 
                case @PRESERVERELATIONSHIPS
                    when 1 then
                        case 
                            when RS2.APPLICATIONCODE in (2,7) then cast(ISP.ID as nvarchar(36))
                            when RS2.APPLICATIONCODE = 3 then cast(R2.ID as nvarchar(36)) + cast(RGA.SOURCEREVENUEID as nvarchar(36))
                            else cast(RMG.MGSOURCEREVENUEID as nvarchar(36))
                        end
                    else null
                end,
            MATCHINGGIFTCONSTITUENT = C.NAME,
            dbo.UFN_REVENUESPLIT_BUILDSITELIST(RS.ID) SITES
        from 
            @REVTABLE RT
            inner join REVENUE on RT.ID = REVENUE.ID
            inner join dbo.REVENUEMATCHINGGIFT RMG on RMG.ID = REVENUE.ID
            inner join dbo.REVENUE R2 on R2.ID = RMG.MGSOURCEREVENUEID
            inner join dbo.REVENUESPLIT RS on RS.REVENUEID = REVENUE.ID
            inner join dbo.REVENUESPLIT RS2 on RS2.REVENUEID = R2.ID
            left outer join dbo.REVENUEPAYMENTMETHOD RPM on RPM.REVENUEID = REVENUE.ID
            left outer join dbo.INSTALLMENTSPLITPAYMENT ISP on ISP.PAYMENTID = RS2.ID
            inner join dbo.CONSTITUENT C on C.ID = REVENUE.CONSTITUENTID
            inner join dbo.CONSTITUENT C2 on R2.CONSTITUENTID = C2.ID
            left outer join dbo.RECURRINGGIFTACTIVITY RGA on RGA.PAYMENTREVENUEID = RS2.ID            
            left join dbo.REVENUECATEGORY RC on RS.ID = RC.ID    
            left join dbo.GLREVENUECATEGORYMAPPING on RC.GLREVENUECATEGORYMAPPINGID = GLREVENUECATEGORYMAPPING.ID            
        where 
            REVENUE.TRANSACTIONTYPECODE = 3 and    -- Matching gift claims

            (@DATERANGECODE = 0 or (REVENUE.DATE >= @STARTDATE and REVENUE.DATE <= @ENDDATE))
        group by 
            REVENUE.ID, RS.ID, REVENUE.TRANSACTIONTYPECODE, RS.AMOUNT, REVENUE.TRANSACTIONTYPE, REVENUE.DATE, REVENUE.DATEADDED, RPM.PAYMENTMETHOD, RGA.SOURCEREVENUEID,
            R2.TRANSACTIONTYPECODE, C.NAME, RS2.APPLICATIONCODE, ISP.ID, RMG.MGSOURCEREVENUEID, R2.ID, RS.DESIGNATIONID

    ) as REVENUEHISTORY
    where ISVISIBLE = 1
    order by TYPE, DATE, DATEADDED;