USP_REPORT_REVENUEDETAILGROUP

Returns the data for the Revenue detail group/household report.

Parameters

Parameter Parameter Type Mode Description
@DATETYPE tinyint IN
@DATERANGEDISPLAY nvarchar(100) IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@REVENUETRANSACTIONQUERY uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@APPEALID uniqueidentifier IN
@DESIGNATIONID uniqueidentifier IN
@INCLUDEGROUPS bit IN
@CURRENTAPPUSERID uniqueidentifier IN
@REPORTUSERID nvarchar(128) IN
@CURRENCYCODE tinyint IN
@ALTREPORTUSERID nvarchar(128) IN

Definition

Copy


CREATE procedure dbo.USP_REPORT_REVENUEDETAILGROUP(
    @DATETYPE tinyint = null,
    @DATERANGEDISPLAY nvarchar(100) = '',
    @STARTDATE datetime = null
    @ENDDATE datetime = null,
    @REVENUETRANSACTIONQUERY uniqueidentifier = null,
    @CONSTITUENTID uniqueidentifier = null,
    @APPEALID uniqueidentifier = null,
    @DESIGNATIONID uniqueidentifier = null,
    @INCLUDEGROUPS bit = 0,
    @CURRENTAPPUSERID uniqueidentifier = null,
    @REPORTUSERID nvarchar(128) = null,
    @CURRENCYCODE tinyint = null,
    @ALTREPORTUSERID nvarchar(128) = null
)
with execute as owner
as
set nocount on;
set transaction isolation level read uncommitted;

if @CURRENTAPPUSERID is null
    set @CURRENTAPPUSERID = dbo.UFN_APPUSER_GETREPORTAPPUSERID(@REPORTUSERID, @ALTREPORTUSERID);

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

declare @STARTDATEEARLIEST datetime = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
declare @ENDDATELATEST datetime = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);

create table #REVENUEFILTER (
    ID uniqueidentifier
)
if @REVENUETRANSACTIONQUERY is not null
begin
    declare @DBOBJECTNAME nvarchar(128);
    declare @DBOBJECTTYPE smallint;

    if not exists(
        select ID 
        from dbo.IDSETREGISTER 
        where ID = @REVENUETRANSACTIONQUERY
    ) 
        raiserror('ID set does not exist in the database.', 15, 1);

    select 
        @DBOBJECTNAME = DBOBJECTNAME, 
        @DBOBJECTTYPE = OBJECTTYPE 
    from dbo.IDSETREGISTER 
    where ID = @REVENUETRANSACTIONQUERY;

    if @DBOBJECTTYPE = 1 
        set @DBOBJECTNAME = @DBOBJECTNAME + '()';
    else if @DBOBJECTTYPE = 2 
        set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @REVENUETRANSACTIONQUERY) + ''')';

    declare @SQLTOEXEC nvarchar(max);
    set @SQLTOEXEC = '
    insert into #REVENUEFILTER(
        ID
    )
    select ID
    from dbo.' + @DBOBJECTNAME + nchar(13);

    exec sp_executesql @SQLTOEXEC;
end
else
begin
    insert into #REVENUEFILTER(
        ID
    )
    select FT.ID
    from dbo.FINANCIALTRANSACTION FT
    inner join dbo.REVENUE_EXT R on R.ID = FT.ID
    where FT.DELETEDON is null and FT.TYPECODE in (0,1,2,3,4,5,6,7,8,9)
end

declare @ORIGINCODE tinyint;
select @ORIGINCODE = coalesce(ORGANIZATIONAMOUNTORIGINCODE, 0) from dbo.MULTICURRENCYCONFIGURATION;

declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
select
    @ORGANIZATIONCURRENCYID = ID,
    @DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
    @ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
from dbo.CURRENCY 
where CURRENCY.ISORGANIZATIONCURRENCY=1;

if @DESIGNATIONID is null


with CTE_CONSTITUENT as(
    select
        CONSTITUENT.ID,
        CONSTITUENT.KEYNAME,
        CONSTITUENT.FIRSTNAME,
        CASE CONSTITUENT.ISORGANIZATION 
            WHEN 1 THEN 
                CASE CONSTITUENT.KEYNAMEPREFIX WHEN '' THEN 
                    CONSTITUENT.KEYNAME ELSE CONSTITUENT.KEYNAMEPREFIX + ' ' +  CONSTITUENT.KEYNAME 
                END
            ELSE CASE CONSTITUENT.ISGROUP WHEN 1 THEN
              CASE CONSTITUENT.DISPLAYNAME WHEN '' THEN CONSTITUENT.KEYNAME ELSE CONSTITUENT.DISPLAYNAME END
          ELSE
              CASE CONSTITUENT.FIRSTNAME WHEN '' THEN '' ELSE CONSTITUENT.FIRSTNAME + ' ' END
              +
              CASE CONSTITUENT.MIDDLENAME WHEN '' THEN '' ELSE LEFT(CONSTITUENT.MIDDLENAME,1) + '. ' END
              + 
              CONSTITUENT.KEYNAME
          END
      END [NAME],
        GROUPCONSTITUENT.ID as GROUPHOUSEHOLDID,
        GROUPCONSTITUENT.NAME as GROUPHOUSEHOLDNAME
    from dbo.CONSTITUENT 
        inner join dbo.GROUPMEMBER on CONSTITUENT.ID = GROUPMEMBER.MEMBERID
        inner join dbo.CONSTITUENT GROUPCONSTITUENT with (nolock) on GROUPMEMBER.GROUPID = GROUPCONSTITUENT.ID
        inner join dbo.GROUPDATA on GROUPCONSTITUENT.ID = GROUPDATA.ID
        left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
        left join dbo.GROUPTYPE on GROUPDATA.GROUPTYPEID = GROUPTYPE.ID
    where (@CONSTITUENTID is null or CONSTITUENT.ID = @CONSTITUENTID)
        and (GROUPDATA.GROUPTYPECODE = 0 
            or (GROUPTYPE.INCLUDEMEMBERGIVING = 1 and @INCLUDEGROUPS = 1)
        )
        and (GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM <= @CURRENTDATEEARLIESTTIME)
        and (GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO >= @CURRENTDATEEARLIESTTIME)
),
DONATIONREFUNDED_CTE as (
    select ORDERSPLIT.ID as REVENUESPLITID, CREDITLINEITEM.BASEAMOUNT as DONATIONREFUNDED
    from dbo.FINANCIALTRANSACTIONLINEITEM CREDITLINEITEM
        inner join dbo.CREDITITEM_EXT on CREDITLINEITEM.ID = CREDITITEM_EXT.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM ORDERLINEITEM on ORDERLINEITEM.ID = CREDITLINEITEM.SOURCELINEITEMID
        inner join dbo.REVENUESPLIT_EXT ORDERSPLIT on ORDERLINEITEM.ID = ORDERSPLIT.ID
    where CREDITITEM_EXT.TYPECODE = 2 and ORDERSPLIT.TYPECODE = 0 AND ORDERSPLIT.APPLICATIONCODE = 0
),
ORDERPAYMENT_CTE as (
    select ORDERPAYMENTLINEITEM.SOURCELINEITEMID as ID, coalesce(sum(ORDERPAYMENTLINEITEM.BASEAMOUNT), 0) as BASEAMOUNT, coalesce(sum(ORDERPAYMENTLINEITEM.TRANSACTIONAMOUNT), 0) as TRANSACTIONAMOUNT
        from dbo.FINANCIALTRANSACTIONLINEITEM ORDERPAYMENTLINEITEM
        inner join dbo.SALESORDERPAYMENT on SALESORDERPAYMENT.PAYMENTID = ORDERPAYMENTLINEITEM.FINANCIALTRANSACTIONID 
    where ORDERPAYMENTLINEITEM.SOURCELINEITEMID is not null
    group by ORDERPAYMENTLINEITEM.SOURCELINEITEMID
),
ORDERITEMPAYMENT_CTE as (
    select CONTRIBUTEDMEMBERSHIPLINEITEM.ID, isnull(ORDERPAYMENT_CTE.BASEAMOUNT, 0) as BASEAMOUNT, isnull(ORDERPAYMENT_CTE.TRANSACTIONAMOUNT, 0) as TRANSACTIONAMOUNT
        from dbo.FINANCIALTRANSACTIONLINEITEM CONTRIBUTEDMEMBERSHIPLINEITEM
        inner join dbo.REVENUESPLIT_EXT CONTRIBUTEDMEMBERSHIPSPLIT on CONTRIBUTEDMEMBERSHIPSPLIT.ID = CONTRIBUTEDMEMBERSHIPLINEITEM.ID
        inner join dbo.SALESORDER on CONTRIBUTEDMEMBERSHIPLINEITEM.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
        left join ORDERPAYMENT_CTE on CONTRIBUTEDMEMBERSHIPLINEITEM.ID = ORDERPAYMENT_CTE.ID
    where 
        ((CONTRIBUTEDMEMBERSHIPSPLIT.TYPECODE = 0 
            and CONTRIBUTEDMEMBERSHIPSPLIT.APPLICATIONCODE = 0 
            and CONTRIBUTEDMEMBERSHIPLINEITEM.SOURCELINEITEMID is not null
        or 
        (CONTRIBUTEDMEMBERSHIPSPLIT.TYPECODE = 2 
            and CONTRIBUTEDMEMBERSHIPSPLIT.APPLICATIONCODE = 5 
            and exists (select * from dbo.FINANCIALTRANSACTIONLINEITEM DONATIONLINEITEM
                            inner join dbo.REVENUESPLIT_EXT DONATIONSPLIT on DONATIONLINEITEM.ID = DONATIONSPLIT.ID
                            where DONATIONSPLIT.TYPECODE = 0 and DONATIONSPLIT.APPLICATIONCODE = 0 and DONATIONLINEITEM.SOURCELINEITEMID = CONTRIBUTEDMEMBERSHIPSPLIT.ID
            )))
)



select 'http://www.blackbaud.com/REVENUETRANSACTIONID?REVENUETRANSACTIONID=' + CONVERT(nvarchar(36),REVENUE.ID) as REVENUETRANSACTIONID,
    CTE_CONSTITUENT.KEYNAME,
    CTE_CONSTITUENT.FIRSTNAME,
    CTE_CONSTITUENT.NAME,
    REVENUE.DATE,
    dbo.UDA_BUILDLIST(distinct DESIGNATION.NAME) DESIGNATIONLIST,    
    sum(case 
        when REVENUE.TRANSACTIONTYPECODE = 5 and ORDERPAYMENTFORMEMBERSHIP.ID is not null  then ORDERPAYMENTFORMEMBERSHIP.BASEAMOUNT - coalesce(DONATIONREFUNDED_CTE.DONATIONREFUNDED, 0)
        when REVENUE.TRANSACTIONTYPECODE in (0,5,7) and ORDERPAYMENTFORMEMBERSHIP.ID is null then case @CURRENCYCODE when 0 then LI.BASEAMOUNT when 2 then LI.TRANSACTIONAMOUNT else LI.ORGAMOUNT end - coalesce(DONATIONREFUNDED_CTE.DONATIONREFUNDED, 0)
        else 0.00 end) GIFT,
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then REVENUE.BALANCEINCURRENCY else 0.00 end PLEDGEBALANCE,
    CTE_CONSTITUENT.GROUPHOUSEHOLDID as GROUPHOUSEHOLDID,
    CTE_CONSTITUENT.GROUPHOUSEHOLDNAME as GROUPHOUSEHOLDNAME,
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then 1 else 0 end DISPLAYGIFTAMOUNT,
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.ISO4217 else null end [GIFTISOCURRENCYCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.CURRENCYSYMBOL else null end [GIFTCURRENCYSYMBOL],
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE else null end [GIFTCURRENCYSYMBOLDISPLAYSETTINGCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.DECIMALDIGITS else null end [GIFTDECIMALDIGITS],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.ISO4217 else null end [PLEDGEISOCURRENCYCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.CURRENCYSYMBOL else null end [PLEDGECURRENCYSYMBOL],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE else null end [PLEDGECURRENCYSYMBOLDISPLAYSETTINGCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.DECIMALDIGITS else null end [PLEDGEDECIMALDIGITS]
from dbo.UFN_PLEDGE_GETREVALUEDBALANCEINCURRENCY_BULK2(
        @ORGANIZATIONCURRENCYID,
        @ORGANIZATIONCURRENCYID,
        @DECIMALDIGITS,
        @ROUNDINGTYPECODE,
        @STARTDATEEARLIEST,
        @ENDDATELATEST,
        @ORIGINCODE,
        @CURRENCYCODE
    ) as REVENUE 
    inner join #REVENUEFILTER FILTER on FILTER.ID=REVENUE.ID
    inner join CTE_CONSTITUENT on CTE_CONSTITUENT.ID = REVENUE.CONSTITUENTID 
    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = REVENUE.ID and LI.TYPECODE != 1 and LI.DELETEDON is null
    inner join dbo.REVENUESPLIT_EXT REVENUESPLIT on REVENUESPLIT.ID = LI.ID
    inner join dbo.DESIGNATION on DESIGNATION.ID = REVENUESPLIT.DESIGNATIONID
    inner join dbo.CURRENCY CURRENCYPROPERTIES on CURRENCYPROPERTIES.ID = REVENUE.CURRENCYID
    left outer join DONATIONREFUNDED_CTE on DONATIONREFUNDED_CTE.REVENUESPLITID = REVENUESPLIT.ID
    left outer join ORDERITEMPAYMENT_CTE as ORDERPAYMENTFORMEMBERSHIP on ORDERPAYMENTFORMEMBERSHIP.ID = REVENUESPLIT.ID
where
    (
        REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,7,8)
        or (REVENUE.TRANSACTIONTYPECODE = 5 and REVENUESPLIT.APPLICATIONCODE = 0)
        or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0,2,3,4,6,7,8,12,13))
        or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 1 and REVENUESPLIT.TYPECODE = 0)
    )
    and (@APPEALID is null or REVENUE.APPEALID = @APPEALID)
    and (@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
    and exists (
        select 1 
        from dbo.FINANCIALTRANSACTIONLINEITEM
        inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
        where FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1 and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REVENUE.ID 
            and exists (
                select HASPERMISSION
                from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT_EXT.ID) REVSITES
                    cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, '8F250015-83FB-44d5-A467-E0A760256768', REVSITES.SITEID)
            )
    )
group by 
    REVENUE.ID, CTE_CONSTITUENT.ID, CTE_CONSTITUENT.KEYNAME, CTE_CONSTITUENT.FIRSTNAME, CTE_CONSTITUENT.NAME, 
    REVENUE.ID, REVENUE.DATE, REVENUE.TRANSACTIONTYPECODE, CTE_CONSTITUENT.GROUPHOUSEHOLDNAME, CTE_CONSTITUENT.GROUPHOUSEHOLDID, 
    CURRENCYPROPERTIES.ISO4217, CURRENCYPROPERTIES.CURRENCYSYMBOL, CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE, 
    CURRENCYPROPERTIES.DECIMALDIGITS, REVENUE.BASECURRENCYID, REVENUE.TRANSACTIONCURRENCYID, REVENUE.BALANCEINCURRENCY
order by 
    CTE_CONSTITUENT.KEYNAME, CTE_CONSTITUENT.FIRSTNAME, CTE_CONSTITUENT.GROUPHOUSEHOLDNAME, REVENUE.DATE

else

with CTE_CONSTITUENT as(
    select
        CONSTITUENT.ID,
        CONSTITUENT.KEYNAME,
        CONSTITUENT.FIRSTNAME,
        CASE CONSTITUENT.ISORGANIZATION 
            WHEN 1 THEN 
                CASE CONSTITUENT.KEYNAMEPREFIX WHEN '' THEN 
                    CONSTITUENT.KEYNAME ELSE CONSTITUENT.KEYNAMEPREFIX + ' ' +  CONSTITUENT.KEYNAME 
                END
            ELSE CASE CONSTITUENT.ISGROUP WHEN 1 THEN
              CASE CONSTITUENT.DISPLAYNAME WHEN '' THEN CONSTITUENT.KEYNAME ELSE CONSTITUENT.DISPLAYNAME END
          ELSE
              CASE CONSTITUENT.FIRSTNAME WHEN '' THEN '' ELSE CONSTITUENT.FIRSTNAME + ' ' END
              +
              CASE CONSTITUENT.MIDDLENAME WHEN '' THEN '' ELSE LEFT(CONSTITUENT.MIDDLENAME,1) + '. ' END
              + 
              CONSTITUENT.KEYNAME
          END
      END [NAME],
        GROUPCONSTITUENT.ID as GROUPHOUSEHOLDID,
        GROUPCONSTITUENT.NAME as GROUPHOUSEHOLDNAME
    from dbo.CONSTITUENT 
        inner join dbo.GROUPMEMBER on CONSTITUENT.ID = GROUPMEMBER.MEMBERID
        inner join dbo.CONSTITUENT GROUPCONSTITUENT with (nolock) on GROUPMEMBER.GROUPID = GROUPCONSTITUENT.ID
        inner join dbo.GROUPDATA on GROUPCONSTITUENT.ID = GROUPDATA.ID
        left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
        left join dbo.GROUPTYPE on GROUPDATA.GROUPTYPEID = GROUPTYPE.ID
    where (@CONSTITUENTID is null or CONSTITUENT.ID = @CONSTITUENTID)
        and (GROUPDATA.GROUPTYPECODE = 0 
            or (GROUPTYPE.INCLUDEMEMBERGIVING = 1 and @INCLUDEGROUPS = 1)
        )
        and (GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM <= @CURRENTDATEEARLIESTTIME)
        and (GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO >= @CURRENTDATEEARLIESTTIME)
),
DONATIONREFUNDED_CTE as (
    select ORDERSPLIT.ID as REVENUESPLITID, CREDITLINEITEM.BASEAMOUNT as DONATIONREFUNDED
    from dbo.FINANCIALTRANSACTIONLINEITEM CREDITLINEITEM
        inner join dbo.CREDITITEM_EXT on CREDITLINEITEM.ID = CREDITITEM_EXT.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM ORDERLINEITEM on ORDERLINEITEM.ID = CREDITLINEITEM.SOURCELINEITEMID
        inner join dbo.REVENUESPLIT_EXT ORDERSPLIT on ORDERLINEITEM.ID = ORDERSPLIT.ID
    where CREDITITEM_EXT.TYPECODE = 2 and ORDERSPLIT.TYPECODE = 0 AND ORDERSPLIT.APPLICATIONCODE = 0
),
ORDERPAYMENT_CTE as (
    select ORDERPAYMENTLINEITEM.SOURCELINEITEMID as ID, coalesce(sum(ORDERPAYMENTLINEITEM.BASEAMOUNT), 0) as BASEAMOUNT, coalesce(sum(ORDERPAYMENTLINEITEM.TRANSACTIONAMOUNT), 0) as TRANSACTIONAMOUNT
        from dbo.FINANCIALTRANSACTIONLINEITEM ORDERPAYMENTLINEITEM
        inner join dbo.SALESORDERPAYMENT on SALESORDERPAYMENT.PAYMENTID = ORDERPAYMENTLINEITEM.FINANCIALTRANSACTIONID 
    where ORDERPAYMENTLINEITEM.SOURCELINEITEMID is not null
    group by ORDERPAYMENTLINEITEM.SOURCELINEITEMID
),
ORDERITEMPAYMENT_CTE as (
    select CONTRIBUTEDMEMBERSHIPLINEITEM.ID, isnull(ORDERPAYMENT_CTE.BASEAMOUNT, 0) as BASEAMOUNT, isnull(ORDERPAYMENT_CTE.TRANSACTIONAMOUNT, 0) as TRANSACTIONAMOUNT
        from dbo.FINANCIALTRANSACTIONLINEITEM CONTRIBUTEDMEMBERSHIPLINEITEM
        inner join dbo.REVENUESPLIT_EXT CONTRIBUTEDMEMBERSHIPSPLIT on CONTRIBUTEDMEMBERSHIPSPLIT.ID = CONTRIBUTEDMEMBERSHIPLINEITEM.ID
        inner join dbo.SALESORDER on CONTRIBUTEDMEMBERSHIPLINEITEM.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
        left join ORDERPAYMENT_CTE on CONTRIBUTEDMEMBERSHIPLINEITEM.ID = ORDERPAYMENT_CTE.ID
    where 
        ((CONTRIBUTEDMEMBERSHIPSPLIT.TYPECODE = 0 
            and CONTRIBUTEDMEMBERSHIPSPLIT.APPLICATIONCODE = 0 
            and CONTRIBUTEDMEMBERSHIPLINEITEM.SOURCELINEITEMID is not null
        or 
        (CONTRIBUTEDMEMBERSHIPSPLIT.TYPECODE = 2 
            and CONTRIBUTEDMEMBERSHIPSPLIT.APPLICATIONCODE = 5 
            and exists (select * from dbo.FINANCIALTRANSACTIONLINEITEM DONATIONLINEITEM
                            inner join dbo.REVENUESPLIT_EXT DONATIONSPLIT on DONATIONLINEITEM.ID = DONATIONSPLIT.ID
                            where DONATIONSPLIT.TYPECODE = 0 and DONATIONSPLIT.APPLICATIONCODE = 0 and DONATIONLINEITEM.SOURCELINEITEMID = CONTRIBUTEDMEMBERSHIPSPLIT.ID
            )))
)

select 'http://www.blackbaud.com/REVENUETRANSACTIONID?REVENUETRANSACTIONID=' + CONVERT(nvarchar(36),REVENUE.ID) as REVENUETRANSACTIONID,
    CTE_CONSTITUENT.KEYNAME,
    CTE_CONSTITUENT.FIRSTNAME,
    CTE_CONSTITUENT.NAME,
    REVENUE.DATE,
    dbo.UDA_BUILDLIST(distinct DESIGNATION.NAME) DESIGNATIONLIST,    
    sum(case 
        when REVENUE.TRANSACTIONTYPECODE = 5 and ORDERPAYMENTFORMEMBERSHIP.ID is not null  then ORDERPAYMENTFORMEMBERSHIP.BASEAMOUNT - coalesce(DONATIONREFUNDED_CTE.DONATIONREFUNDED, 0)
        when REVENUE.TRANSACTIONTYPECODE in (0,5,7) and ORDERPAYMENTFORMEMBERSHIP.ID is null then case @CURRENCYCODE when 0 then LI.BASEAMOUNT when 2 then LI.TRANSACTIONAMOUNT else LI.ORGAMOUNT end - coalesce(DONATIONREFUNDED_CTE.DONATIONREFUNDED, 0)
        else 0.00 end) GIFT,
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then 
    case when @DESIGNATIONID is null then 
              REVENUE.BALANCEINCURRENCY 
            else                           
              PLEDGESPLIT.BALANCE 
            end    
  else 0.00 
  end PLEDGEBALANCE,
    CTE_CONSTITUENT.GROUPHOUSEHOLDID as GROUPHOUSEHOLDID,
    CTE_CONSTITUENT.GROUPHOUSEHOLDNAME as GROUPHOUSEHOLDNAME,
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then 1 else 0 end DISPLAYGIFTAMOUNT,
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.ISO4217 else null end [GIFTISOCURRENCYCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.CURRENCYSYMBOL else null end [GIFTCURRENCYSYMBOL],
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE else null end [GIFTCURRENCYSYMBOLDISPLAYSETTINGCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (0,5,7) then CURRENCYPROPERTIES.DECIMALDIGITS else null end [GIFTDECIMALDIGITS],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.ISO4217 else null end [PLEDGEISOCURRENCYCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.CURRENCYSYMBOL else null end [PLEDGECURRENCYSYMBOL],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE else null end [PLEDGECURRENCYSYMBOLDISPLAYSETTINGCODE],
    case when REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,8) then CURRENCYPROPERTIES.DECIMALDIGITS else null end [PLEDGEDECIMALDIGITS]
from dbo.UFN_PLEDGE_GETREVALUEDBALANCEINCURRENCY_BULK2(
        @ORGANIZATIONCURRENCYID,
        @ORGANIZATIONCURRENCYID,
        @DECIMALDIGITS,
        @ROUNDINGTYPECODE,
        @STARTDATEEARLIEST,
        @ENDDATELATEST,
        @ORIGINCODE,
        @CURRENCYCODE
    ) as REVENUE 
    inner join #REVENUEFILTER FILTER on FILTER.ID=REVENUE.ID
    inner join CTE_CONSTITUENT on CTE_CONSTITUENT.ID = REVENUE.CONSTITUENTID 
    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = REVENUE.ID and LI.TYPECODE != 1 and LI.DELETEDON is null
    inner join dbo.REVENUESPLIT_EXT REVENUESPLIT on REVENUESPLIT.ID = LI.ID
    inner join dbo.DESIGNATION on DESIGNATION.ID = REVENUESPLIT.DESIGNATIONID
    inner join dbo.CURRENCY CURRENCYPROPERTIES on CURRENCYPROPERTIES.ID = REVENUE.CURRENCYID
    left outer join dbo.UFN_PLEDGE_GETREVALUEDSPLITBALANCESINCURRENCY_BULK_2
    (
        @ORGANIZATIONCURRENCYID,
        @ORGANIZATIONCURRENCYID,
        @DECIMALDIGITS,
        @ROUNDINGTYPECODE,
        getdate(),
        @ORIGINCODE,
        @CURRENCYCODE,
        @DESIGNATIONID,
        @STARTDATE,
        @ENDDATE,
        @STARTDATEEARLIEST,
        @ENDDATELATEST       
    ) as PLEDGESPLIT on PLEDGESPLIT.ID = LI.ID  
    left outer join DONATIONREFUNDED_CTE on DONATIONREFUNDED_CTE.REVENUESPLITID = REVENUESPLIT.ID
    left outer join ORDERITEMPAYMENT_CTE as ORDERPAYMENTFORMEMBERSHIP on ORDERPAYMENTFORMEMBERSHIP.ID = REVENUESPLIT.ID
where
    (
        REVENUE.TRANSACTIONTYPECODE in (1,3,4,6,7,8)
        or (REVENUE.TRANSACTIONTYPECODE = 5 and REVENUESPLIT.APPLICATIONCODE = 0)
        or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0,2,3,4,6,7,8,12,13))
        or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 1 and REVENUESPLIT.TYPECODE = 0)
    )
    and (@APPEALID is null or REVENUE.APPEALID = @APPEALID)
    and (@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
    and exists (
        select 1 
        from dbo.FINANCIALTRANSACTIONLINEITEM
        inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
        where FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1 and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REVENUE.ID 
            and exists (
                select HASPERMISSION
                from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT_EXT.ID) REVSITES
                    cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, '8F250015-83FB-44d5-A467-E0A760256768', REVSITES.SITEID)
            )
    )
group by 
    REVENUE.ID,PLEDGESPLIT.ID,PLEDGESPLIT.BALANCE,
  CTE_CONSTITUENT.ID, CTE_CONSTITUENT.KEYNAME, CTE_CONSTITUENT.FIRSTNAME, CTE_CONSTITUENT.NAME, 
    REVENUE.ID, REVENUE.DATE, REVENUE.TRANSACTIONTYPECODE, CTE_CONSTITUENT.GROUPHOUSEHOLDNAME, CTE_CONSTITUENT.GROUPHOUSEHOLDID, 
    CURRENCYPROPERTIES.ISO4217, CURRENCYPROPERTIES.CURRENCYSYMBOL, CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE, 
    CURRENCYPROPERTIES.DECIMALDIGITS, REVENUE.BASECURRENCYID, REVENUE.TRANSACTIONCURRENCYID, REVENUE.BALANCEINCURRENCY
order by 
    CTE_CONSTITUENT.KEYNAME, CTE_CONSTITUENT.FIRSTNAME, CTE_CONSTITUENT.GROUPHOUSEHOLDNAME, REVENUE.DATE


drop table #REVENUEFILTER