USP_DATALIST_CONSTITUENT_REVENUEHISTORY_2

This datalist returns a filtered list of revenue associated with a constituent.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@GROUPBY tinyint IN Group by
@TRANSACTIONTYPEOPTIONCODE smallint IN Type
@REVENUETYPEOPTIONCODE smallint IN Revenue type
@DATERANGECODE smallint IN Date range
@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.
@INCLUDEGROUPMEMBERREVENUE bit IN
@REVENUEFILTERID uniqueidentifier IN Revenue
@CURRENCYCODE tinyint IN Currency

Definition

Copy


CREATE procedure dbo.USP_DATALIST_CONSTITUENT_REVENUEHISTORY_2
(
    @CONSTITUENTID uniqueidentifier,
    @GROUPBY tinyint = 0,  -- 0=Commitment, 1=Transaction

    @TRANSACTIONTYPEOPTIONCODE smallint = -1,  -- -1=All, otherwise revenue.transactiontypecode

    @REVENUETYPEOPTIONCODE smallint = -1,  -- -1=All, otherwise revenuesplit.revenuetypecode

    @DATERANGECODE smallint = 4,
    @CURRENTAPPUSERID uniqueidentifier = null,
    @SITEFILTERMODE tinyint = 0,
    @SITESSELECTED xml = null,
    @SECURITYFEATUREID uniqueidentifier = null,
    @SECURITYFEATURETYPE tinyint = null,
    @INCLUDEGROUPMEMBERREVENUE bit = 0,
    @REVENUEFILTERID uniqueidentifier = null,
    @CURRENCYCODE tinyint = 2
)
as

    set nocount on;  

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

    declare @STARTDATE date;  
    declare @ENDDATE date;  

    declare @USERISADMIN bit;
    set @USERISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);

    --Gift Aid is for UK only

    declare @PRODUCTISUK bit = dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D')

  declare @MULTICURRENCYENABLED bit;
  set @MULTICURRENCYENABLED = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency'); 
  if @MULTICURRENCYENABLED = 0 
    set @CURRENCYCODE = 1

    /*  
        0 = All  
        1 = last 30 days  
        2 = this month  
        3 = last month  
        4 = last 90 days  
        5 = this quarter  
        6 = last quarter  
        7 = last 12 months  
        8 = this year  
        9 = last year  
    */  

    select 
        @STARTDATE = case @DATERANGECODE  
            when 1 then dateadd(day,-30,@CURRENTDATE)  
            when 2 then dateadd(month,datediff(month,0,@CURRENTDATE),0)  
            when 3 then dateadd(month,datediff(month,0,@CURRENTDATE)-1,0)  
            when 4 then dateadd(day,-90,@CURRENTDATE)  
            when 5 then dateadd(month,datediff(month,0,@CURRENTDATE)-((datepart(month,@CURRENTDATE)-1)%3),0)  
            when 6 then dateadd(month,datediff(month,0,@CURRENTDATE)-((datepart(month,@CURRENTDATE)-1)%3)-3,0)  
            when 7 then dateadd(month,-12,@CURRENTDATE)  
            when 8 then dateadd(year,datediff(year,0,@CURRENTDATE),0)  
            when 9 then dateadd(year,datediff(year,0,@CURRENTDATE)-1,0)  
        end,  
        @ENDDATE = case @DATERANGECODE  
            when 1 then @CURRENTDATE  
            when 2 then dateadd(month,datediff(month,0,@CURRENTDATE)+1,0)-1  
            when 3 then dateadd(month,datediff(month,0,@CURRENTDATE),0)-1  
            when 4 then @CURRENTDATE  
            when 5 then dateadd(month,datediff(month,0,@CURRENTDATE)-((datepart(month,@CURRENTDATE)-1)%3)+3,0)-1  
            when 6 then dateadd(month,datediff(month,0,@CURRENTDATE)-((datepart(month,@CURRENTDATE)-1)%3),0)-1  
            when 7 then @CURRENTDATE  
            when 8 then dateadd(year,datediff(year,0,@CURRENTDATE)+1,0)-1  
            when 9 then dateadd(year,datediff(year,0,@CURRENTDATE),0)-1  
        end;  

    declare @CURRENCYID uniqueidentifier
    if @CURRENCYCODE = 1
      set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()

    if @CURRENCYCODE = 3
    begin
      set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
      if @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
        set @CURRENCYCODE = 1
    end

    declare @REVENUETOINCLUDE table  
    (
        ID uniqueidentifier,  
        CONSTITUENTID uniqueidentifier,  
        AMOUNT money,  
        TRANSACTIONTYPE nvarchar(50),  
        TRANSACTIONTYPECODE tinyint,  
        DATE datetime,  
        DATEADDED datetime,  
        SPLITCOUNT integer,  
        CONSTITUENT nvarchar(200),
        TRANSACTIONCURRENCYID uniqueidentifier,
        BASECURRENCYID uniqueidentifier,
        TRANSACTIONAMOUNT money,
        ORGANIZATIONAMOUNT money
    );


    if object_id('tempdb..#TMP_DATA_REVENUEHISTORY_REVENUEIDS') is not null
        drop table #TMP_DATA_REVENUEHISTORY_REVENUEIDS;


    create table #TMP_DATA_REVENUEHISTORY_REVENUEIDS
    (  
        ID uniqueidentifier,
        CONSTITUENTID uniqueidentifier,
        DATEFROM datetime,
        DATETO datetime  
    );

    insert into #TMP_DATA_REVENUEHISTORY_REVENUEIDS  
    (
        ID,
        CONSTITUENTID,
        DATEFROM,
        DATETO
    )
    select
        [VALIDREVENUE].REVENUEID,
        CONSTITUENTSTOINCLUDE.CONSTITUENTID,
        CONSTITUENTSTOINCLUDE.DATEFROM,
        CONSTITUENTSTOINCLUDE.DATETO
    from
    (
        select  
            @CONSTITUENTID as CONSTITUENTID,
            null as DATEFROM,
            null as DATETO

        union all

        select
            GROUPMEMBER.MEMBERID as CONSTITUENTID,
            GROUPMEMBERDATERANGE.DATEFROM,
            GROUPMEMBERDATERANGE.DATETO
        from dbo.GROUPMEMBER
        left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
        where
            @INCLUDEGROUPMEMBERREVENUE = 1 and
            GROUPMEMBER.GROUPID = @CONSTITUENTID
    ) as CONSTITUENTSTOINCLUDE
    cross apply dbo.UFN_REVENUE_REVENUESVALIDFORFILTER(@REVENUEFILTERID, CONSTITUENTSTOINCLUDE.CONSTITUENTID, null, null) as [VALIDREVENUE]  

    -- Run the following query as dynamic SQL to avoid performance hits from site checks when we don't need them.

    declare @SQL nvarchar(max);

    set @SQL = N'
    select  
        REVENUE.ID,
        [VALIDREVENUE].CONSTITUENTID,
        REVENUE.AMOUNT,
        REVENUE.TRANSACTIONTYPE,
        REVENUE.TRANSACTIONTYPECODE,
        REVENUE.DATE,
        REVENUE.DATEADDED,
        (select count(*) from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = REVENUE.ID) SPLITCOUNT,  
        case when @INCLUDEGROUPMEMBERREVENUE = 1 then (select NAME from dbo.CONSTITUENT where ID = REVENUE.CONSTITUENTID) end CONSTITUENT,
        REVENUE.TRANSACTIONCURRENCYID,
        REVENUE.BASECURRENCYID,
        REVENUE.TRANSACTIONAMOUNT,
        REVENUE.ORGANIZATIONAMOUNT
    from dbo.REVENUE 
    inner join #TMP_DATA_REVENUEHISTORY_REVENUEIDS  as [VALIDREVENUE] on REVENUE.ID = [VALIDREVENUE].ID  
    where
        ([VALIDREVENUE].DATEFROM is null or REVENUE.DATE >= [VALIDREVENUE].DATEFROM) and
        ([VALIDREVENUE].DATETO is null or REVENUE.DATE <= [VALIDREVENUE].DATETO)'

    if @USERISADMIN <> 1 or @SITEFILTERMODE <> 0
    begin
        set @SQL = @SQL + N'
        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'
    end 

    if @USERISADMIN <> 1
    begin
        set @SQL = @SQL + N'
            and exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null))'
    end 

    if @SITEFILTERMODE <> 0
    begin
        set @SQL = @SQL + N'
            and exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)'
    end
    if @USERISADMIN <> 1 or @SITEFILTERMODE <> 0
    begin
        set @SQL = @SQL + N')'
    end 

    insert into @REVENUETOINCLUDE (ID, CONSTITUENTID, AMOUNT, TRANSACTIONTYPE, TRANSACTIONTYPECODE, DATE, DATEADDED, SPLITCOUNT, CONSTITUENT, TRANSACTIONCURRENCYID, BASECURRENCYID, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT)  
        exec sp_executesql @SQL, N'@INCLUDEGROUPMEMBERREVENUE bit, @CURRENTAPPUSERID uniqueidentifier, @SECURITYFEATUREID uniqueidentifier, @SECURITYFEATURETYPE tinyint, @SITEFILTERMODE tinyint, @SITESSELECTED xml',
        @INCLUDEGROUPMEMBERREVENUE=@INCLUDEGROUPMEMBERREVENUE, @CURRENTAPPUSERID=@CURRENTAPPUSERID, @SECURITYFEATUREID=@SECURITYFEATUREID, @SECURITYFEATURETYPE=@SECURITYFEATURETYPE, @SITEFILTERMODE=@SITEFILTERMODE, @SITESSELECTED=@SITESSELECTED


    select
        ID,
        PARENTID,
        RECORDID,
        TRANSACTIONTYPECODE,
        TYPE,
        REVENUETYPE,
        DATE,
        AMOUNT,
        GROSSAMOUNT,
        BALANCE,
        PASTDUE,
        PAYMENTMETHOD,
        DETAIL,
        CONSTITUENT,
        SITES,
        row_number() over (order by DATE desc, DATEADDED desc) as SEQUENCE,
        case charindex(' (',TYPE)
            when 0 then TYPE
            else substring(TYPE,1,charindex(' (',TYPE)-1)
        end GOTOTYPE,
        DATEADDED,
    DISPLAYCURRENCY
    from
    (
        -- transactions/commitments

        select
            cast(MYSITESREV_CTE.ID as nvarchar(36)) ID,
            null PARENTID,
            MYSITESREV_CTE.ID RECORDID,
            MYSITESREV_CTE.TRANSACTIONTYPECODE,
            -- In the transaction view, transactions w/ only one split will be displayed on a single line.

            -- In this case, show split information at this level as well.

            case
                when MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and MYSITESREV_CTE.SPLITCOUNT = 1 then
                    (
                        select 
                            case REVENUESPLIT.APPLICATIONCODE
                                when 0 then REVENUESPLIT.APPLICATION  -- Donation, not Donation payment

                                else REVENUESPLIT.APPLICATION + ' ' + lower(MYSITESREV_CTE.TRANSACTIONTYPE)
                            end
                        from dbo.REVENUESPLIT  
                        where REVENUEID = MYSITESREV_CTE.ID
                    )
                else MYSITESREV_CTE.TRANSACTIONTYPE
            end TYPE,
            case
                when MYSITESREV_CTE.SPLITCOUNT = 1 then
                    (
                        select REVENUESPLIT.TYPE from dbo.REVENUESPLIT 
                        where REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID
                    )
                when @GROUPBY = 0 then
                    isnull
                    (
                        (
                            select min(REVENUESPLIT.TYPE) from dbo.REVENUESPLIT 
                            where REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID 
                            group by REVENUESPLIT.REVENUEID 
                            having min(REVENUESPLIT.TYPECODE)=max(REVENUESPLIT.TYPECODE)
                        ),
                        '<Split>'
                    )  
            end REVENUETYPE,  
            MYSITESREV_CTE.DATE,  
            case @CURRENCYCODE
           when 0 then MYSITESREV_CTE.AMOUNT 
           when 1 then MYSITESREV_CTE.ORGANIZATIONAMOUNT 
           when 2 then MYSITESREV_CTE.TRANSACTIONAMOUNT
           when 3 then case @CURRENCYID
                       when MYSITESREV_CTE.TRANSACTIONCURRENCYID then MYSITESREV_CTE.TRANSACTIONAMOUNT
                       else dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                       end
           end  AMOUNT,
            case when @PRODUCTISUK = 1
                then case MYSITESREV_CTE.TRANSACTIONTYPECODE  
                    when 1 then case @CURRENCYCODE
                        when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(MYSITESREV_CTE.ID,0)
                        when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(MYSITESREV_CTE.ID,2)
                        when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(MYSITESREV_CTE.ID,1)
                        when 3 then case @CURRENCYID
                                    when MYSITESREV_CTE.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(MYSITESREV_CTE.ID,1)
                                    else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNTINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                                    end
                        end
                    else case @CURRENCYCODE
                        when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(MYSITESREV_CTE.ID, 1,0)
                        when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(MYSITESREV_CTE.ID, 1,2)
                        when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(MYSITESREV_CTE.ID, 1,1)
                        when 3 then case @CURRENCYID
                                    when MYSITESREV_CTE.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(MYSITESREV_CTE.ID,1,1)
                                    else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNTINCURRENCY(MYSITESREV_CTE.ID, 1,@CURRENCYID)
                                    end
                        end
                    end
                else case @CURRENCYCODE
                    when 0 then MYSITESREV_CTE.AMOUNT 
                    when 1 then MYSITESREV_CTE.ORGANIZATIONAMOUNT 
                    when 2 then MYSITESREV_CTE.TRANSACTIONAMOUNT
                    when 3 then case @CURRENCYID
                                when MYSITESREV_CTE.TRANSACTIONCURRENCYID then MYSITESREV_CTE.TRANSACTIONAMOUNT
                                else dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                                end
                    end
            end as GROSSAMOUNT,  
            case MYSITESREV_CTE.TRANSACTIONTYPECODE  
                when 1 then case @CURRENCYCODE
                         when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                         when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                         else dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                         end
                when 3 then case @CURRENCYCODE
                         when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                         when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                         else dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                         end
                when 4 then case @CURRENCYCODE
                         when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                         when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                         else dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                         end
                when 5 then
                (
                    select
                        ORDERBALANCE.BALANCE
                    from
                    (
                        select dbo.UFN_SALESORDER_GETAMOUNTDUE(SALESORDER.ID) as BALANCE
                        from dbo.SALESORDER
                        where SALESORDER.REVENUEID = MYSITESREV_CTE.ID
                    ) as ORDERBALANCE
                    where ORDERBALANCE.BALANCE <> 0.0
                )
                when 6 then case @CURRENCYCODE
                         when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                         when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                         else dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                         end
                when 8 then case @CURRENCYCODE
                         when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                         when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                         else dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                         end
                else null  
            end BALANCE,  
            case MYSITESREV_CTE.TRANSACTIONTYPECODE  
                when 1 then case @CURRENCYCODE
                    when 0 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                    when 2 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                    else dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                    end 
                when 2 then case @CURRENCYCODE
                    when 0 then dbo.UFN_RECURRINGGIFT_GETPASTDUEAMOUNTINCURRENCY_2(MYSITESREV_CTE.ID,@CURRENTDATE,MYSITESREV_CTE.BASECURRENCYID,0)
                    when 2 then dbo.UFN_RECURRINGGIFT_GETPASTDUEAMOUNTINCURRENCY_2(MYSITESREV_CTE.ID,@CURRENTDATE,MYSITESREV_CTE.TRANSACTIONCURRENCYID,0)
                    else dbo.UFN_RECURRINGGIFT_GETPASTDUEAMOUNTINCURRENCY_2(MYSITESREV_CTE.ID,@CURRENTDATE,@CURRENCYID,0)
                    end 
                when 3 then case @CURRENCYCODE
                    when 0 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                    when 2 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                    else dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                    end 
                when 6 then case @CURRENCYCODE
                    when 0 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                    when 2 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                    else dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                    end 
                when 8 then case @CURRENCYCODE
                    when 0 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.BASECURRENCYID)
                    when 2 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                    else dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(MYSITESREV_CTE.ID,@CURRENCYID)
                    end 
                else null
            end PASTDUE,
            (
                select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD 
                where 
                    REVENUEPAYMENTMETHOD.REVENUEID = MYSITESREV_CTE.ID and 
                    REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE <> 9
            ) PAYMENTMETHOD,
            case 
                when @GROUPBY = 0 or MYSITESREV_CTE.SPLITCOUNT = 1 then 
                    REVENUEHISTORYDETAIL.DETAIL
            end DETAIL,  
            MYSITESREV_CTE.CONSTITUENT,    
            SITELIST.SITES,  
            MYSITESREV_CTE.DATEADDED,
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
            end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        left join dbo.UFN_REVENUE_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUEHISTORYDETAIL on REVENUEHISTORYDETAIL.ID = MYSITESREV_CTE.ID
        left join dbo.UFN_REVENUE_BUILDSITELIST_BULK() as SITELIST on SITELIST.ID = MYSITESREV_CTE.ID
        where
            --Auction donations are queried below  

            MYSITESREV_CTE.TRANSACTIONTYPECODE <> 7 and 
            (
                @GROUPBY = 1 or  
                -- payments for the commitment view are queried below  

                MYSITESREV_CTE.TRANSACTIONTYPECODE <> 0
            ) and 
            (
                @DATERANGECODE = 0 or  
                MYSITESREV_CTE.DATE between @STARTDATE and @ENDDATE or  
                -- for commitment view, show commitment if a payment exists w/in the date range  

                (
                    @GROUPBY = 0 and  
                    (
                        exists
                        (
                            select top 1 'x' from dbo.INSTALLMENTSPLITPAYMENT  
                            inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID  
                            inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID  
                            where 
                                INSTALLMENTSPLITPAYMENT.PLEDGEID = MYSITESREV_CTE.ID and 
                                REVENUE.DATE between @STARTDATE and @ENDDATE
                        ) or
                        exists
                        (
                            select top 1 'x' from dbo.RECURRINGGIFTACTIVITY
                            inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = RECURRINGGIFTACTIVITY.PAYMENTREVENUEID  
                            inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID  
                            where 
                                RECURRINGGIFTACTIVITY.SOURCEREVENUEID = MYSITESREV_CTE.ID and 
                                REVENUE.DATE between @STARTDATE and @ENDDATE
                        )
                    )
                )
            ) and 
            (
                @REVENUETYPEOPTIONCODE = -1 or  
                exists
                (
                    select top 1 'x' from dbo.REVENUESPLIT 
                    where 
                        REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID and 
                        REVENUESPLIT.TYPECODE = @REVENUETYPEOPTIONCODE
                )
            ) and 
            (
                @TRANSACTIONTYPEOPTIONCODE = -1 or  
                MYSITESREV_CTE.TRANSACTIONTYPECODE = @TRANSACTIONTYPEOPTIONCODE
            )

        union all  

        ----------------------------------------

        -- transaction splits  

        ----------------------------------------


        select 
            cast(REVENUESPLIT.ID as nvarchar(36)),  
            case when @GROUPBY = 1 then MYSITESREV_CTE.ID end,  
            MYSITESREV_CTE.ID,  
            MYSITESREV_CTE.TRANSACTIONTYPECODE,  
            case REVENUESPLIT.APPLICATIONCODE  
                when 0 then REVENUESPLIT.APPLICATION  
                else REVENUESPLIT.APPLICATION + ' ' + lower(MYSITESREV_CTE.TRANSACTIONTYPE)  
            end,  
            REVENUESPLIT.TYPE,  
            case when @GROUPBY = 0 then MYSITESREV_CTE.DATE end,  
            case @CURRENCYCODE
           when 0 then REVENUESPLIT.AMOUNT
           when 1 then REVENUESPLIT.ORGANIZATIONAMOUNT
           when 2 then REVENUESPLIT.TRANSACTIONAMOUNT
           when 3 then case @CURRENCYID
                       when REVENUESPLIT.TRANSACTIONCURRENCYID then REVENUESPLIT.TRANSACTIONAMOUNT
                       else dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(REVENUESPLIT.ID,@CURRENCYID)
                       end
           end as AMOUNT,
            case when @PRODUCTISUK = 1
                then case @CURRENCYCODE
                   when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,0
                   when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,2
                   when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1
                   when 3 then case @CURRENCYID
                               when REVENUESPLIT.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1
                               else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(REVENUESPLIT.ID, 1,@CURRENCYID
                               end
                   end
                else case @CURRENCYCODE
                   when 0 then REVENUESPLIT.AMOUNT
                   when 1 then REVENUESPLIT.ORGANIZATIONAMOUNT
                   when 2 then REVENUESPLIT.TRANSACTIONAMOUNT
                   when 3 then case @CURRENCYID
                               when REVENUESPLIT.TRANSACTIONCURRENCYID then REVENUESPLIT.TRANSACTIONAMOUNT
                               else dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(REVENUESPLIT.ID,@CURRENCYID)
                               end
                   end
            end as GROSSAMOUNT,
            null,  
            null,  
            case when @GROUPBY = 0 then (select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD where REVENUEPAYMENTMETHOD.REVENUEID = MYSITESREV_CTE.ID) end,  
            REVENUESPLITHISTORYDETAIL.DETAIL,  
            MYSITESREV_CTE.CONSTITUENT,  
            SITELIST.SITES,  
            MYSITESREV_CTE.DATEADDED,
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID  
        left join dbo.UFN_REVENUESPLIT_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUESPLITHISTORYDETAIL on REVENUESPLITHISTORYDETAIL.ID = REVENUESPLIT.ID
        left join dbo.UFN_REVENUESPLIT_BUILDSITELIST_BULK() as SITELIST on SITELIST.ID = REVENUESPLIT.ID
        where 
        (
            (
                @GROUPBY = 0 and  
                -- In the commitment view, include only unapplied payment splits.  

                -- Applied payment splits are queried below, and commitment splits are not included.  

                MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and  
                REVENUESPLIT.APPLICATIONCODE in (0,1,4,5,12)
            ) or  
            (
                @GROUPBY = 1 and  
                -- In the transaction view, transactions w/ only one split will be displayed using  

                -- only the revenue line, so exclude them here.  

                MYSITESREV_CTE.SPLITCOUNT > 1
            )
        ) and
        (
            @DATERANGECODE = 0 or 
            MYSITESREV_CTE.DATE between @STARTDATE and @ENDDATE
        ) and 
        (
            @REVENUETYPEOPTIONCODE = -1 or 
            REVENUESPLIT.TYPECODE = @REVENUETYPEOPTIONCODE
        ) and 
        (
            @TRANSACTIONTYPEOPTIONCODE = -1 or  
            MYSITESREV_CTE.TRANSACTIONTYPECODE = @TRANSACTIONTYPEOPTIONCODE
        )

        union all

        ----------------------------------------

        -- pledge payments (commitment view)

        ----------------------------------------


        select 
            cast(MYSITESREV_CTE.ID as nvarchar(36)) + cast(INSTALLMENTSPLITPAYMENT.PLEDGEID as nvarchar(36)),  
            INSTALLMENTSPLITPAYMENT.PLEDGEID,
            MYSITESREV_CTE.ID,
            min(MYSITESREV_CTE.TRANSACTIONTYPECODE),
            min(REVENUESPLIT.APPLICATION + ' ' + lower(MYSITESREV_CTE.TRANSACTIONTYPE)),
            case
                when count(*)=1 then min(REVENUESPLIT.TYPE)
                when min(REVENUESPLIT.TYPE)=max(REVENUESPLIT.TYPE) then min(REVENUESPLIT.TYPE)
                else '<Split>'
            end,
            min(MYSITESREV_CTE.DATE),
      case @CURRENCYCODE
           when 0 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.ID,MYSITESREV_CTE.BASECURRENCYID))
           when 2 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
           else sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.ID,@CURRENCYID))
           end as AMOUNT,
           case when @PRODUCTISUK = 1
                then case @CURRENCYCODE
                   when 0 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,0)) 
                   when 1 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,2)) 
                   when 2 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1)) 
                   when 3 then case @CURRENCYID
                               when MYSITESREV_CTE.TRANSACTIONCURRENCYID then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1))
                               else sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(REVENUESPLIT.ID, 1,@CURRENCYID))
                               end
                   end
                else case @CURRENCYCODE
                   when 0 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.ID,MYSITESREV_CTE.BASECURRENCYID))
                   when 2 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
                   else sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.ID,@CURRENCYID))
                end
            end as SPLITGROSSAMOUNT,
            null,
            null,
            (
                select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD 
                where REVENUEPAYMENTMETHOD.REVENUEID = MYSITESREV_CTE.ID
            ),
            dbo.UDA_BUILDLIST
            (
                REVENUESPLITHISTORYDETAIL.DETAIL
            ),
            min(MYSITESREV_CTE.CONSTITUENT),  
            dbo.UFN_PAYMENTSPLITSAPPLIEDTOCOMMITMENT_BUILDSITELIST(MYSITESREV_CTE.ID,INSTALLMENTSPLITPAYMENT.PLEDGEID,0),
            min(MYSITESREV_CTE.DATEADDED),
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID  
        inner join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLITPAYMENT.PAYMENTID = REVENUESPLIT.ID  
        left join dbo.UFN_REVENUESPLIT_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUESPLITHISTORYDETAIL on REVENUESPLITHISTORYDETAIL.ID = REVENUESPLIT.ID
        where 
            @GROUPBY = 0 and 
            MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and 
            REVENUESPLIT.APPLICATIONCODE in(2,6,7,8,13) and  -- 9,10,11?

            (
                @DATERANGECODE = 0 or 
                MYSITESREV_CTE.DATE between @STARTDATE and @ENDDATE
            ) and
            (
                @REVENUETYPEOPTIONCODE = -1 or 
                REVENUESPLIT.TYPECODE = @REVENUETYPEOPTIONCODE
            ) and
            (
                @TRANSACTIONTYPEOPTIONCODE = -1 or  
                MYSITESREV_CTE.TRANSACTIONTYPECODE = @TRANSACTIONTYPEOPTIONCODE
            )
        group by 
            INSTALLMENTSPLITPAYMENT.PLEDGEID,  
            MYSITESREV_CTE.ID,
      MYSITESREV_CTE.BASECURRENCYID,
      MYSITESREV_CTE.TRANSACTIONCURRENCYID

        union all  

        ----------------------------------------------

        -- recurring gift payments (commitment view)  

        ----------------------------------------------


        select 
            cast(MYSITESREV_CTE.ID as nvarchar(36)) + cast(RECURRINGGIFTACTIVITY.SOURCEREVENUEID as nvarchar(36)),  
            RECURRINGGIFTACTIVITY.SOURCEREVENUEID,  
            MYSITESREV_CTE.ID,  
            min(MYSITESREV_CTE.TRANSACTIONTYPECODE),  
            min(REVENUESPLIT.APPLICATION + ' ' + lower(MYSITESREV_CTE.TRANSACTIONTYPE)),  
            case  
                when count(*)=1 then min(REVENUESPLIT.TYPE)  
                when min(REVENUESPLIT.TYPE)=max(REVENUESPLIT.TYPE) then min(REVENUESPLIT.TYPE)  
                else '<Split>'  
            end,  
            min(MYSITESREV_CTE.DATE),  
            case @CURRENCYCODE
           when 0 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.BASECURRENCYID))
           when 2 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
           else sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,@CURRENCYID))
           end as AMOUNT,
           case when @PRODUCTISUK = 1
                then case @CURRENCYCODE
                       when 0 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,0)) 
                       when 1 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,2)) 
                       when 2 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1)) 
                       when 3 then case @CURRENCYID
                                   when MYSITESREV_CTE.TRANSACTIONCURRENCYID then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1))
                                   else sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(REVENUESPLIT.ID, 1,@CURRENCYID))
                                   end
                       end
                else case @CURRENCYCODE
                   when 0 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.BASECURRENCYID))
                   when 2 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
                   else sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,@CURRENCYID))
                   end
            end as SPLITGROSSAMOUNT, 
            null,  
            null,  
            (
                select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD 
                where REVENUEPAYMENTMETHOD.REVENUEID = MYSITESREV_CTE.ID
            ),
            dbo.UDA_BUILDLIST
            (
                REVENUESPLITHISTORYDETAIL.DETAIL
            ),
            min(MYSITESREV_CTE.CONSTITUENT),  
            dbo.UFN_PAYMENTSPLITSAPPLIEDTOCOMMITMENT_BUILDSITELIST(MYSITESREV_CTE.ID,RECURRINGGIFTACTIVITY.SOURCEREVENUEID,1),  
            min(MYSITESREV_CTE.DATEADDED),
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID  
        inner join dbo.RECURRINGGIFTACTIVITY on RECURRINGGIFTACTIVITY.PAYMENTREVENUEID = REVENUESPLIT.ID  
        left join dbo.UFN_REVENUESPLIT_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUESPLITHISTORYDETAIL on REVENUESPLITHISTORYDETAIL.ID = REVENUESPLIT.ID
        where 
            @GROUPBY = 0 and 
            MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and 
            REVENUESPLIT.APPLICATIONCODE = 3 and 
            (
                @DATERANGECODE = 0 or 
                MYSITESREV_CTE.DATE between @STARTDATE and @ENDDATE
            ) and
            (
                @REVENUETYPEOPTIONCODE = -1 or 
                REVENUESPLIT.TYPECODE = @REVENUETYPEOPTIONCODE
            ) and
            (
                @TRANSACTIONTYPEOPTIONCODE = -1 or  
                MYSITESREV_CTE.TRANSACTIONTYPECODE = @TRANSACTIONTYPEOPTIONCODE
            )
        group by 
            RECURRINGGIFTACTIVITY.SOURCEREVENUEID,  
            MYSITESREV_CTE.ID,
      MYSITESREV_CTE.BASECURRENCYID,
      MYSITESREV_CTE.TRANSACTIONCURRENCYID

        union all  

        ----------------------------------------

        -- pledges from other constituents paid by current constituent (commitment view)  

        ----------------------------------------


        select 
            cast(REVENUE.ID as nvarchar(36)) ID,  
            null PARENTID,  
            REVENUE.ID RECORDID,  
            min(REVENUE.TRANSACTIONTYPECODE),  
            min(REVENUE.TRANSACTIONTYPE + ' (' + CONSTITUENT.NAME + ')'),  
            case  
                when count(*) = 1 then  
                    (
                        select top 1 REVENUESPLIT.TYPE from dbo.REVENUESPLIT 
                        where REVENUESPLIT.REVENUEID = REVENUE.ID
                    )
                else
                    isnull
                    (
                        (
                            select min(REVENUESPLIT.TYPE) from dbo.REVENUESPLIT 
                            where REVENUESPLIT.REVENUEID = REVENUE.ID 
                            group by REVENUESPLIT.REVENUEID 
                            having min(REVENUESPLIT.TYPECODE)=max(REVENUESPLIT.TYPECODE)
                        ),
                        '<Split>'
                    )  
            end,
            min(REVENUE.DATE),  
      case @CURRENCYCODE
           when 0 then min(REVENUE.AMOUNT) 
           when 1 then min(REVENUE.ORGANIZATIONAMOUNT)
           when 2 then min(REVENUE.TRANSACTIONAMOUNT)
           when 3 then case @CURRENCYID
                       when REVENUE.TRANSACTIONCURRENCYID then min(REVENUE.TRANSACTIONAMOUNT)
                       else min(dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID,@CURRENCYID))
                       end
           end  AMOUNT,
      case when @PRODUCTISUK = 1
            then case @CURRENCYCODE
                   when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUE.ID,0)
                   when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUE.ID,2)
                   when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUE.ID,1)
                   when 3 then case @CURRENCYID
                               when REVENUE.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUE.ID,1)
                               else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNTINCURRENCY(REVENUE.ID,@CURRENCYID)
                               end 
                   end
            else case @CURRENCYCODE
                   when 0 then min(REVENUE.AMOUNT) 
                   when 1 then min(REVENUE.ORGANIZATIONAMOUNT)
                   when 2 then min(REVENUE.TRANSACTIONAMOUNT)
                   when 3 then case @CURRENCYID
                               when REVENUE.TRANSACTIONCURRENCYID then min(REVENUE.TRANSACTIONAMOUNT)
                               else min(dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID,@CURRENCYID))
                               end
                   end
      end as GROSSAMOUNT, 
      case @CURRENCYCODE
           when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUE.ID,MYSITESREV_CTE.BASECURRENCYID) 
           when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID) 
           else dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUE.ID,@CURRENCYID
           end as BALANCE,
            case @CURRENCYCODE
                    when 0 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(REVENUE.ID,MYSITESREV_CTE.BASECURRENCYID)
                    when 2 then dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(REVENUE.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID)
                    else dbo.UFN_PLEDGE_GETPASTDUEAMOUNTINCURRENCY(REVENUE.ID,@CURRENCYID)
                    end ,  
            (select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD where REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID and REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE <> 9) PAYMENTMETHOD,  
            REVENUEHISTORYDETAIL.DETAIL,  
            null,  
            SITELIST.SITES,  
            min(REVENUE.DATEADDED),
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.REVENUESPLIT [PAYMENTSPLIT] on [PAYMENTSPLIT].REVENUEID = MYSITESREV_CTE.ID  
        inner join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLITPAYMENT.PAYMENTID = [PAYMENTSPLIT].ID  
        inner join dbo.REVENUE on REVENUE.ID = INSTALLMENTSPLITPAYMENT.PLEDGEID  
        inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID  
        left join dbo.UFN_REVENUE_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUEHISTORYDETAIL on REVENUEHISTORYDETAIL.ID = MYSITESREV_CTE.ID
        left join dbo.UFN_REVENUE_BUILDSITELIST_BULK() as SITELIST on SITELIST.ID = REVENUE.ID
        where 
            @GROUPBY = 0 and 
            MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and 
            [PAYMENTSPLIT].APPLICATIONCODE in (2,6,7,8,13) and 
            REVENUE.CONSTITUENTID <> @CONSTITUENTID and 
            case  
                when @INCLUDEGROUPMEMBERREVENUE = 0 then 1  
                -- don't double select rows already selected for other constituents in this group  

                else 
                    case 
                        when exists(select 'x' from @REVENUETOINCLUDE where ID = REVENUE.ID) then 0 
                        else 1 
                    end  
            end = 1
            and 
            (
                @DATERANGECODE = 0 or 
                MYSITESREV_CTE.DATE between @STARTDATE and @ENDDATE
            ) and 
            (
                @REVENUETYPEOPTIONCODE = -1 or 
                [PAYMENTSPLIT].TYPECODE = @REVENUETYPEOPTIONCODE
            )
            -- don't include pledges from other constituents when filtering to pledges  

            and @TRANSACTIONTYPEOPTIONCODE = -1  
        group by REVENUE.ID,REVENUEHISTORYDETAIL.DETAIL,MYSITESREV_CTE.BASECURRENCYID,MYSITESREV_CTE.TRANSACTIONCURRENCYID,REVENUE.TRANSACTIONCURRENCYID,SITELIST.SITES

        union all

        ----------------------------------------

        -- recurring gifts from other constituents paid by current constituent (commitment view)  

        ----------------------------------------


        select 
            cast(REVENUE.ID as nvarchar(36)) ID,  
            null PARENTID,  
            REVENUE.ID RECORDID,  
            min(REVENUE.TRANSACTIONTYPECODE),  
            min(REVENUE.TRANSACTIONTYPE + ' (' + CONSTITUENT.NAME + ')'),  
            case  
                when count(*) = 1 then  
                (
                    select top 1 REVENUESPLIT.TYPE from dbo.REVENUESPLIT 
                    where REVENUESPLIT.REVENUEID = REVENUE.ID
                )
                else  
                isnull
                (
                    (
                        select min(REVENUESPLIT.TYPE) from dbo.REVENUESPLIT 
                        where REVENUESPLIT.REVENUEID = REVENUE.ID 
                        group by REVENUESPLIT.REVENUEID 
                        having min(REVENUESPLIT.TYPECODE)=max(REVENUESPLIT.TYPECODE)
                    ),
                    '<Split>'
                )  
            end,  
            min(REVENUE.DATE),  
            case @CURRENCYCODE
           when 0 then min(REVENUE.AMOUNT) 
           when 1 then min(REVENUE.ORGANIZATIONAMOUNT)
           when 2 then min(REVENUE.TRANSACTIONAMOUNT)
           when 3 then case @CURRENCYID
                       when REVENUE.TRANSACTIONCURRENCYID then min(REVENUE.TRANSACTIONAMOUNT)
                       else min(dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID,@CURRENCYID))
                       end
           end  AMOUNT,
            case when @PRODUCTISUK = 1
                then case @CURRENCYCODE
                   when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUE.ID,1,0)
                   when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUE.ID,1,2)
                   when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUE.ID,1,1)
                   when 3 then case @CURRENCYID
                                    when REVENUE.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUE.ID,1,1)
                                    else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNTINCURRENCY(REVENUE.ID,1,@CURRENCYID)
                                    end
                   end
                else case @CURRENCYCODE
                   when 0 then min(REVENUE.AMOUNT) 
                   when 1 then min(REVENUE.ORGANIZATIONAMOUNT)
                   when 2 then min(REVENUE.TRANSACTIONAMOUNT)
                   when 3 then case @CURRENCYID
                               when REVENUE.TRANSACTIONCURRENCYID then min(REVENUE.TRANSACTIONAMOUNT)
                               else min(dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUE.ID,@CURRENCYID))
                               end
                   end
            end as GROSSAMOUNT,  
            null,  
      case @CURRENCYCODE
           when 0 then dbo.UFN_RECURRINGGIFT_GETPASTDUEAMOUNTINCURRENCY_2(REVENUE.ID,null,REVENUE.BASECURRENCYID,0)
           when 2 then dbo.UFN_RECURRINGGIFT_GETPASTDUEAMOUNTINCURRENCY_2(REVENUE.ID,null,REVENUE.TRANSACTIONCURRENCYID,0)
           else dbo.UFN_RECURRINGGIFT_GETPASTDUEAMOUNTINCURRENCY_2(REVENUE.ID,null,@CURRENCYID,0)
      end as PASTDUE,
            (
                select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD 
                where 
                    REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID and 
                    REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE <> 9
            ) PAYMENTMETHOD,  
            REVENUEHISTORYDETAIL.DETAIL,  
            null,  
            SITELIST.SITES,  
            min(REVENUE.DATEADDED),
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.REVENUESPLIT [PAYMENTSPLIT] on [PAYMENTSPLIT].REVENUEID = MYSITESREV_CTE.ID  
        inner join dbo.RECURRINGGIFTACTIVITY on RECURRINGGIFTACTIVITY.PAYMENTREVENUEID = [PAYMENTSPLIT].ID  
        inner join dbo.REVENUE on REVENUE.ID = RECURRINGGIFTACTIVITY.SOURCEREVENUEID  
        inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID  
        left join dbo.UFN_REVENUE_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUEHISTORYDETAIL on REVENUEHISTORYDETAIL.ID = MYSITESREV_CTE.ID
        left join dbo.UFN_REVENUE_BUILDSITELIST_BULK() as SITELIST on SITELIST.ID = REVENUE.ID
        where 
            @GROUPBY = 0 and 
            MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and 
            [PAYMENTSPLIT].APPLICATIONCODE = 3 and 
            REVENUE.CONSTITUENTID <> @CONSTITUENTID and 
            case  
                when @INCLUDEGROUPMEMBERREVENUE = 0 then 1  
                -- don't double select rows already selected for other constituents in this group  

                else 
                    case 
                        when exists(select 'x' from @REVENUETOINCLUDE where ID = REVENUE.ID) then 0 
                        else 1 
                    end
            end = 1  
            and 
            (
                @DATERANGECODE = 0 or 
                MYSITESREV_CTE.DATE between @STARTDATE and @ENDDATE
            ) and 
            (
                @REVENUETYPEOPTIONCODE = -1 or 
                [PAYMENTSPLIT].TYPECODE = @REVENUETYPEOPTIONCODE
            )
            -- don't include RGs from other constituents when filtering to RGs  

            and @TRANSACTIONTYPEOPTIONCODE = -1  
        group by REVENUE.ID,
             REVENUEHISTORYDETAIL.DETAIL,
             MYSITESREV_CTE.BASECURRENCYID,
             MYSITESREV_CTE.TRANSACTIONCURRENCYID,
             REVENUE.TRANSACTIONCURRENCYID,
             REVENUE.BASECURRENCYID,
             REVENUEHISTORYDETAIL.DETAIL,
             SITELIST.SITES

        union all  

        ----------------------------------------  

        -- pledge payments from other constituents to commitments for this constituent (commitment view)  

        ----------------------------------------


        select 
            cast(REVENUE.ID as nvarchar(36)) + cast(INSTALLMENTSPLITPAYMENT.PLEDGEID as nvarchar(36)),  
            INSTALLMENTSPLITPAYMENT.PLEDGEID,  
            REVENUE.ID,  
            min(REVENUE.TRANSACTIONTYPECODE),  
            min(REVENUESPLIT.APPLICATION + ' ' + lower(REVENUE.TRANSACTIONTYPE) + ' (' + CONSTITUENT.NAME + ')'),  
            case  
                when count(*)=1 then min(REVENUESPLIT.TYPE)  
                when min(REVENUESPLIT.TYPE)=max(REVENUESPLIT.TYPE) then min(REVENUESPLIT.TYPE)  
                else '<Split>'  
            end,  
            min(REVENUE.DATE),  
      case @CURRENCYCODE
           when 0 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.PLEDGEID,MYSITESREV_CTE.BASECURRENCYID))
           when 2 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.PLEDGEID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
           else sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.PLEDGEID,@CURRENCYID))
           end as AMOUNT,
            case when @PRODUCTISUK = 1
                then case @CURRENCYCODE
                       when 0 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,0))
                       when 1 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,2))
                       when 2 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1))
                       when 3 then case @CURRENCYID
                                   when REVENUESPLIT.TRANSACTIONCURRENCYID then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID,1,1))
                                   else sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(REVENUESPLIT.ID, 1,@CURRENCYID))
                                   end 
                    end
                else case @CURRENCYCODE
                       when 0 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.PLEDGEID,MYSITESREV_CTE.BASECURRENCYID))
                       when 2 then sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.PLEDGEID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
                       else sum(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(INSTALLMENTSPLITPAYMENT.PLEDGEID,@CURRENCYID))
                       end
            end as SPLITGROSSAMOUNT,
            null,  
            null,  
            (
                select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD 
                where REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
            ),
            dbo.UDA_BUILDLIST
            (
                REVENUESPLITHISTORYDETAIL.DETAIL
            ),
            null,
            dbo.UFN_PAYMENTSPLITSAPPLIEDTOCOMMITMENT_BUILDSITELIST(REVENUE.ID,INSTALLMENTSPLITPAYMENT.PLEDGEID,0),  
            min(REVENUE.DATEADDED),
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLITPAYMENT.PLEDGEID = MYSITESREV_CTE.ID  
        inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID  
        inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID  
        inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID  
        left join dbo.UFN_REVENUESPLIT_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUESPLITHISTORYDETAIL on REVENUESPLITHISTORYDETAIL.ID = REVENUESPLIT.ID
        where 
            @GROUPBY = 0 and
            MYSITESREV_CTE.TRANSACTIONTYPECODE <> 0 and 
            REVENUE.CONSTITUENTID <> @CONSTITUENTID and 
            case
                when @INCLUDEGROUPMEMBERREVENUE = 0 then 1  
                -- don't double select rows already selected for other constituents in this group  

                else 
                    case 
                        when exists(select 'x' from @REVENUETOINCLUDE where ID = REVENUE.ID) then 0 
                        else 1 
                    end
            end = 1
            and 
            (
                @DATERANGECODE = 0 or 
                REVENUE.DATE between @STARTDATE and @ENDDATE
            ) and 
            (
                @REVENUETYPEOPTIONCODE = -1 or 
                REVENUESPLIT.TYPECODE = @REVENUETYPEOPTIONCODE
            )
            -- don't include payments from other constituents when filtering to payments  

            and @TRANSACTIONTYPEOPTIONCODE = -1  
        group by 
            INSTALLMENTSPLITPAYMENT.PLEDGEID,  
            REVENUE.ID,
      MYSITESREV_CTE.BASECURRENCYID,
      MYSITESREV_CTE.TRANSACTIONCURRENCYID,
      REVENUESPLIT.TRANSACTIONCURRENCYID

        union all  

        ----------------------------------------  

        -- recurring gift payments from other constituents to commitments for this constituent (commitment view)  

        ----------------------------------------


        select 
            cast(REVENUE.ID as nvarchar(36)) + cast(RECURRINGGIFTACTIVITY.SOURCEREVENUEID as nvarchar(36)),  
            RECURRINGGIFTACTIVITY.SOURCEREVENUEID,  
            REVENUE.ID,  
            min(REVENUE.TRANSACTIONTYPECODE),  
            min(REVENUESPLIT.APPLICATION + ' ' + lower(REVENUE.TRANSACTIONTYPE) + ' (' + CONSTITUENT.NAME + ')'),  
            case  
                when count(*)=1 then min(REVENUESPLIT.TYPE)  
                when min(REVENUESPLIT.TYPE)=max(REVENUESPLIT.TYPE) then min(REVENUESPLIT.TYPE)  
                else '<Split>'  
            end,  
            min(REVENUE.DATE),  
            case @CURRENCYCODE
           when 0 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.BASECURRENCYID))
           when 2 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
           else sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,@CURRENCYID))
        end as AMOUNT,
            case when @PRODUCTISUK = 1
                then case @CURRENCYCODE
                        when 0 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,0))
                        when 1 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,2))
                        when 2 then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1))
                        when 3 then case @CURRENCYID
                                when REVENUESPLIT.TRANSACTIONCURRENCYID then sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID,1,1))
                                else sum(dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(REVENUESPLIT.ID, 1,@CURRENCYID))
                                end
                    end
                else case @CURRENCYCODE
                        when 0 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.BASECURRENCYID))
                        when 2 then sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,MYSITESREV_CTE.TRANSACTIONCURRENCYID))
                        else sum(dbo.UFN_RECURRINGGIFTACTIVITY_GETAMOUNTINCURRENCY(RECURRINGGIFTACTIVITY.ID,@CURRENCYID))
                    end
            end as SPLITGROSSAMOUNT, 
            null,  
            null,  
            (
                select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD 
                where REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
            ),
            dbo.UDA_BUILDLIST
            (
                REVENUESPLITHISTORYDETAIL.DETAIL
            ),
            null,  
            dbo.UFN_PAYMENTSPLITSAPPLIEDTOCOMMITMENT_BUILDSITELIST(REVENUE.ID,RECURRINGGIFTACTIVITY.SOURCEREVENUEID,1),  
            min(REVENUE.DATEADDED),
      case @CURRENCYCODE
           when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.RECURRINGGIFTACTIVITY on RECURRINGGIFTACTIVITY.SOURCEREVENUEID = MYSITESREV_CTE.ID  
        inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = RECURRINGGIFTACTIVITY.PAYMENTREVENUEID  
        inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID  
        inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID  
        left join dbo.UFN_REVENUESPLIT_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUESPLITHISTORYDETAIL on REVENUESPLITHISTORYDETAIL.ID = REVENUESPLIT.ID
        where 
            @GROUPBY = 0 and 
            MYSITESREV_CTE.TRANSACTIONTYPECODE <> 0 and 
            REVENUE.CONSTITUENTID <> @CONSTITUENTID and 
            case  
                when @INCLUDEGROUPMEMBERREVENUE = 0 then 1  
                -- don't double select rows already selected for other constituents in this group  

                else 
                    case 
                        when exists(select 'x' from @REVENUETOINCLUDE where ID = REVENUE.ID) then 0 
                        else 1 
                    end
            end = 1 and 
            (
                @DATERANGECODE = 0 or 
                REVENUE.DATE between @STARTDATE and @ENDDATE
            ) and 
            (
                @REVENUETYPEOPTIONCODE = -1 or 
                REVENUESPLIT.TYPECODE = @REVENUETYPEOPTIONCODE
            )  
            -- don't include payments from other constituents when filtering to payments  

            and @TRANSACTIONTYPEOPTIONCODE = -1  
        group by 
            RECURRINGGIFTACTIVITY.SOURCEREVENUEID,  
            REVENUE.ID,
      MYSITESREV_CTE.BASECURRENCYID,
      MYSITESREV_CTE.TRANSACTIONCURRENCYID,
      REVENUESPLIT.TRANSACTIONCURRENCYID

        union all  

        ----------------------------------------  

        -- pledge writeoff transactions  

        ----------------------------------------


        select 
            cast(WRITEOFF.ID as nvarchar(36)),  
            case @GROUPBY  
                when 0 then WRITEOFF.REVENUEID  
            end,  
            WRITEOFF.REVENUEID,  
            -1,  
            case @GROUPBY  
                when 0 then 'Write-off'  
                when 1 then min(MYSITESREV_CTE.TRANSACTIONTYPE) + ' write-off'  
            end,  
            null,  
            min(WRITEOFF.DATE),  
      case @CURRENCYCODE
          when 0 then (select sum(AMOUNT) from dbo.WRITEOFFSPLIT where WRITEOFFSPLIT.WRITEOFFID = WRITEOFF.id)
          when 1 then (select sum(ORGANIZATIONAMOUNT) from dbo.WRITEOFFSPLIT where WRITEOFFSPLIT.WRITEOFFID = WRITEOFF.id)
          when 2 then (select sum(TRANSACTIONAMOUNT) from dbo.WRITEOFFSPLIT where WRITEOFFSPLIT.WRITEOFFID = WRITEOFF.id)
          else sum(dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY(WRITEOFFSPLIT.ID,@CURRENCYID))
          end as AMOUNT,
            null,  
            null,  
            null,  
            null,  
            case 
                when @GROUPBY = 0 or (select count(*) from dbo.WRITEOFFSPLIT where WRITEOFFSPLIT.WRITEOFFID = WRITEOFF.ID) = 1 then 
                    REVENUEHISTORYDETAIL.DETAIL 
            end,  
            min(MYSITESREV_CTE.CONSTITUENT),  
            dbo.UFN_WRITEOFF_BUILDSITELIST(WRITEOFF.ID),  
            min(WRITEOFF.DATEADDED),
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.WRITEOFF on WRITEOFF.REVENUEID = MYSITESREV_CTE.ID  
    inner join dbo.WRITEOFFSPLIT on WRITEOFFSPLIT.WRITEOFFID = WRITEOFF.ID
    left join dbo.UFN_REVENUE_CONSTITUENTREVENUEHISTORYDETAIL_BULK() as REVENUEHISTORYDETAIL on REVENUEHISTORYDETAIL.ID = MYSITESREV_CTE.ID
        where 
            (
                @DATERANGECODE = 0 or 
                WRITEOFF.DATE between @STARTDATE and @ENDDATE
            ) and 
            @REVENUETYPEOPTIONCODE = -1 and 
            @TRANSACTIONTYPEOPTIONCODE in (-1,90)

      group by WRITEOFF.ID,WRITEOFF.REVENUEID,MYSITESREV_CTE.ID,
      MYSITESREV_CTE.TRANSACTIONCURRENCYID,MYSITESREV_CTE.BASECURRENCYID,REVENUEHISTORYDETAIL.DETAIL
        union all

        ----------------------------------------  

        -- pledge writeoff splits (transaction view)

        ----------------------------------------


        select 
            cast(WRITEOFFSPLIT.ID as nvarchar(36)),  
            WRITEOFF.ID,  
            WRITEOFF.REVENUEID,  
            -1,  
            'Write-off',  
            null,  
            null,  
      case @CURRENCYCODE
            when 0 then WRITEOFFSPLIT.AMOUNT
            when 1 then WRITEOFFSPLIT.ORGANIZATIONAMOUNT
            when 2 then WRITEOFFSPLIT.TRANSACTIONAMOUNT
            when 3 then dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY(WRITEOFFSPLIT.ID,@CURRENCYID)
      end,
            null,  
            null,  
            null,  
            null,  
            DESIGNATION.NAME,  
            MYSITESREV_CTE.CONSTITUENT,  
            SITE.NAME,  
            WRITEOFF.DATEADDED,
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.WRITEOFF on WRITEOFF.REVENUEID = MYSITESREV_CTE.ID  
        inner join dbo.WRITEOFFSPLIT on WRITEOFFSPLIT.WRITEOFFID = WRITEOFF.ID  
        left join dbo.DESIGNATION on DESIGNATION.ID = WRITEOFFSPLIT.DESIGNATIONID  
        left join dbo.DESIGNATIONLEVEL on DESIGNATIONLEVEL.ID = coalesce(DESIGNATION.DESIGNATIONLEVEL5ID,DESIGNATION.DESIGNATIONLEVEL4ID,DESIGNATION.DESIGNATIONLEVEL3ID,DESIGNATION.DESIGNATIONLEVEL2ID,DESIGNATION.DESIGNATIONLEVEL1ID)  
        left join dbo.SITE on SITE.ID = DESIGNATIONLEVEL.SITEID  
        where 
            @GROUPBY = 1 and 
            (
                select count(*) from dbo.WRITEOFFSPLIT 
                where WRITEOFFSPLIT.WRITEOFFID = WRITEOFF.ID
            ) > 1 and 
            (
                @DATERANGECODE = 0 or 
                WRITEOFF.DATE between @STARTDATE and @ENDDATE
            ) and 
            @REVENUETYPEOPTIONCODE = -1 and 
            @TRANSACTIONTYPEOPTIONCODE in (-1,90)

        union all  

        ----------------------------------------  

        -- recurring gift writeoffs  

        ----------------------------------------


        select 
            cast(RECURRINGGIFTWRITEOFF.ID as nvarchar(36)),  
            case @GROUPBY when 0 then RECURRINGGIFTWRITEOFF.REVENUEID end,  
            RECURRINGGIFTWRITEOFF.REVENUEID,  
            -2,  
            case @GROUPBY  
                when 0 then 'Write-off'  
                when 1 then min(MYSITESREV_CTE.TRANSACTIONTYPE) + ' write-off'  
            end,  
            null,  
            min(RECURRINGGIFTWRITEOFF.DATE),  
      case @CURRENCYCODE
          when 0 then (select sum(AMOUNT) from dbo.RECURRINGGIFTINSTALLMENTWRITEOFF where RECURRINGGIFTINSTALLMENTWRITEOFF.WRITEOFFID = RECURRINGGIFTWRITEOFF.ID)
          when 1 then (select sum(ORGANIZATIONAMOUNT) from dbo.RECURRINGGIFTINSTALLMENTWRITEOFF where RECURRINGGIFTINSTALLMENTWRITEOFF.WRITEOFFID = RECURRINGGIFTWRITEOFF.ID)
          when 2 then (select sum(TRANSACTIONAMOUNT) from dbo.RECURRINGGIFTINSTALLMENTWRITEOFF where RECURRINGGIFTINSTALLMENTWRITEOFF.WRITEOFFID = RECURRINGGIFTWRITEOFF.ID)
          when 3 then sum(dbo.UFN_RECURRINGGIFTINSTALLMENTWRITEOFF_GETAMOUNTINCURRENCY(RECURRINGGIFTINSTALLMENTWRITEOFF.ID,@CURRENCYID))
      end,
            null,  
            null,  
            null,  
            null,  
            null,  
            min(MYSITESREV_CTE.CONSTITUENT),  
            SITELIST.SITES,  
            min(RECURRINGGIFTWRITEOFF.DATEADDED),
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.RECURRINGGIFTWRITEOFF on RECURRINGGIFTWRITEOFF.REVENUEID = MYSITESREV_CTE.ID  
        inner join dbo.RECURRINGGIFTINSTALLMENTWRITEOFF on RECURRINGGIFTINSTALLMENTWRITEOFF.WRITEOFFID = RECURRINGGIFTWRITEOFF.ID
        left join dbo.UFN_REVENUE_BUILDSITELIST_BULK() as SITELIST on SITELIST.ID = MYSITESREV_CTE.ID    
        where 
            (
                @DATERANGECODE = 0 or 
                RECURRINGGIFTWRITEOFF.DATE between @STARTDATE and @ENDDATE
            ) and 
            @REVENUETYPEOPTIONCODE = -1 and 
            @TRANSACTIONTYPEOPTIONCODE in(-1,90)
        group by RECURRINGGIFTWRITEOFF.ID,RECURRINGGIFTWRITEOFF.REVENUEID,MYSITESREV_CTE.ID,
      MYSITESREV_CTE.TRANSACTIONCURRENCYID,MYSITESREV_CTE.BASECURRENCYID, SITELIST.SITES
        union all 

        --Auction payments by this constituent   


        select 
            cast(REVENUESPLIT.ID as nvarchar(36)),  
            case when @GROUPBY = 1 then MYSITESREV_CTE.ID end,  
            MYSITESREV_CTE.ID,  
            MYSITESREV_CTE.TRANSACTIONTYPECODE,  
            MYSITESREV_CTE.TRANSACTIONTYPE,  
            REVENUESPLIT.TYPE,  
            case when @GROUPBY = 0 then MYSITESREV_CTE.DATE end,  
            case @CURRENCYCODE
           when 0 then REVENUESPLIT.AMOUNT
           when 1 then REVENUESPLIT.ORGANIZATIONAMOUNT
           when 2 then REVENUESPLIT.TRANSACTIONAMOUNT
           when 3 then dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(REVENUESPLIT.ID,@CURRENCYID
      end as AMOUNT,
            case @CURRENCYCODE
           when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,0
           when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,2
           when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1
           when 3 then case @CURRENCYID
                       when REVENUESPLIT.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNT_2(REVENUESPLIT.ID, 1,1
                       else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(REVENUESPLIT.ID, 1,@CURRENCYID
                       end
      end as GROSSAMOUNT,
            null,  
            null,  
            case 
                when @GROUPBY = 0 then 
                (
                    select REVENUEPAYMENTMETHOD.PAYMENTMETHOD from dbo.REVENUEPAYMENTMETHOD 
                    where REVENUEPAYMENTMETHOD.REVENUEID = MYSITESREV_CTE.ID
                ) 
            end,  
            dbo.UFN_REVENUESPLIT_CONSTITUENTREVENUEHISTORYDETAIL(REVENUESPLIT.ID,REVENUESPLIT.APPLICATIONCODE,REVENUESPLIT.TYPECODE,REVENUESPLIT.DESIGNATIONID),  
            MYSITESREV_CTE.CONSTITUENT,  
            dbo.UFN_REVENUESPLIT_BUILDSITELIST(REVENUESPLIT.ID),  
            MYSITESREV_CTE.DATEADDED,
      case @CURRENCYCODE
            when 2 then MYSITESREV_CTE.TRANSACTIONCURRENCYID
            when 0 then MYSITESREV_CTE.BASECURRENCYID
            else @CURRENCYID
      end as DISPLAYCURRENCY
        from @REVENUETOINCLUDE MYSITESREV_CTE  
        inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID  
        where   
            (
                @DATERANGECODE = 0 or 
                MYSITESREV_CTE.DATE between @STARTDATE and @ENDDATE
            ) and 
            MYSITESREV_CTE.TRANSACTIONTYPECODE = 7 and 
            (
                @REVENUETYPEOPTIONCODE = -1 or 
                REVENUESPLIT.TYPECODE = @REVENUETYPEOPTIONCODE
            ) and 
            (
                @TRANSACTIONTYPEOPTIONCODE = -1 or  
                MYSITESREV_CTE.TRANSACTIONTYPECODE = @TRANSACTIONTYPEOPTIONCODE
            )

    ) as REVENUEHISTORY;