USP_CONSTITUENT_CUMULATIVEGIVINGSUMMARYGET

Returns the cumulative giving history for a constituent.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN
@CURRENCYCODE tinyint IN

Definition

Copy


CREATE procedure dbo.USP_CONSTITUENT_CUMULATIVEGIVINGSUMMARYGET
(
  @CONSTITUENTID uniqueidentifier,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @SITEFILTERMODE tinyint = 0,
  @SITESSELECTED xml = null,
  @SECURITYFEATUREID uniqueidentifier = null,
  @SECURITYFEATURETYPE tinyint = null,
  @CURRENCYCODE tinyint = 1
)
as
  set nocount on;

  declare @TOTALNUMBER int = null;
  declare @TOTALAMOUNT money = null;
  declare @AVERAGEAMOUNT money = null;
  declare @MOSTFREQUENTAMOUNT money = null;
  declare @TOTALPLEDGEBALANCE money = null;
  declare @TOTALYEARS int = null;
  declare @CONSECUTIVEYEARS int = null;
  declare @GIVENSINCEFISCALYEAR datetime = null;
  declare @LARGESTID uniqueidentifier = null;
  declare @LARGESTRECORDID uniqueidentifier = null;
  declare @LARGESTDATE datetime = null;
  declare @LARGESTTYPECODE tinyint = null;
  declare @LARGESTTYPE nvarchar(22) = null;
  declare @LARGESTAMOUNT money = null;
  declare @LARGESTPLEDGEBALANCE money = null;
  declare @LARGESTSPLITS xml = null;
  declare @FIRSTID uniqueidentifier = null;
  declare @FIRSTRECORDID uniqueidentifier = null;
  declare @FIRSTDATE datetime = null;
  declare @FIRSTTYPECODE tinyint = null;
  declare @FIRSTTYPE nvarchar(22) = null;
  declare @FIRSTAMOUNT money = null;
  declare @FIRSTPLEDGEBALANCE money = null;
  declare @FIRSTSPLITS xml = null;
  declare @LATESTID uniqueidentifier = null;
  declare @LATESTRECORDID uniqueidentifier = null;
  declare @LATESTDATE datetime = null;
  declare @LATESTTYPECODE tinyint = null;
  declare @LATESTTYPE nvarchar(22) = null;
  declare @LATESTAMOUNT money = null;
  declare @LATESTPLEDGEBALANCE money = null;
  declare @LATESTSPLITS xml = null;
  declare @RECOGNITIONTOTALNUMBER int = null;
  declare @RECOGNITIONTOTALAMOUNT money = null;
  declare @RECOGNITIONAVERAGEAMOUNT money = null;
  declare @RECOGNITIONMOSTFREQUENTAMOUNT money = null;
  declare @RECOGNITIONTOTALYEARS int = null;
  declare @RECOGNITIONCONSECUTIVEYEARS int = null;
  declare @RECOGNITIONGIVENSINCEFISCALYEAR datetime = null;
  declare @RECOGNITIONLARGESTID uniqueidentifier = null;
  declare @RECOGNITIONLARGESTRECORDID uniqueidentifier = null;
  declare @RECOGNITIONLARGESTDATE datetime = null;
  declare @RECOGNITIONLARGESTTYPECODE tinyint = null;
  declare @RECOGNITIONLARGESTTYPE nvarchar(22) = null;
  declare @RECOGNITIONLARGESTAMOUNT money = null;
  declare @RECOGNITIONFIRSTID uniqueidentifier = null;
  declare @RECOGNITIONFIRSTRECORDID uniqueidentifier = null;
  declare @RECOGNITIONFIRSTDATE datetime = null;
  declare @RECOGNITIONFIRSTTYPECODE tinyint = null;
  declare @RECOGNITIONFIRSTTYPE nvarchar(22) = null;
  declare @RECOGNITIONFIRSTAMOUNT money = null;
  declare @RECOGNITIONLATESTID uniqueidentifier = null;
  declare @RECOGNITIONLATESTRECORDID uniqueidentifier = null;
  declare @RECOGNITIONLATESTDATE datetime = null;
  declare @RECOGNITIONLATESTTYPECODE tinyint = null;
  declare @RECOGNITIONLATESTTYPE nvarchar(22) = null;
  declare @RECOGNITIONLATESTAMOUNT money = null;
  declare @HOUSEHOLDID uniqueidentifier = null;
  declare @TOTALHOUSEHOLDGIVING money = null;
  declare @TOTALGIVINGWITHGIFTAID money = null;
  declare @TOTALRECOGNITIONWITHGIFTAID money = null;
  declare @MATCHEDGIFTSAMOUNT money = null;

  declare @CURRENCYID uniqueidentifier
  if @CURRENCYCODE = 1
    set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
  else
    set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);    

  declare @ORGANIZATIONCURRENCYID uniqueidentifier;
  declare @DECIMALDIGITS tinyint;
  declare @ROUNDINGTYPECODE tinyint;
  declare @ORIGINCODE tinyint;

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

  select @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),
      @DECIMALDIGITS = DECIMALDIGITS,
      @ROUNDINGTYPECODE = ROUNDINGTYPECODE
  from 
    dbo.CURRENCY
  where
    CURRENCY.ID = @CURRENCYID;

  exec dbo.USP_CONSTITUENT_GIVINGSUMMARYGET
    @CONSTITUENTID,
    @TOTALNUMBER = @TOTALNUMBER output,
    @TOTALAMOUNT = @TOTALAMOUNT output,
    @AVERAGEAMOUNT = @AVERAGEAMOUNT output,
    @MOSTFREQUENTAMOUNT = @MOSTFREQUENTAMOUNT output,
    @TOTALPLEDGEBALANCE = @TOTALPLEDGEBALANCE output,
    @TOTALYEARS = @TOTALYEARS output,
    @CONSECUTIVEYEARS = @CONSECUTIVEYEARS output,
    @GIVENSINCEFISCALYEAR = @GIVENSINCEFISCALYEAR output,
    @HOUSEHOLDID = @HOUSEHOLDID output,
    @TOTALHOUSEHOLDGIVING = @TOTALHOUSEHOLDGIVING output,
    @CURRENTAPPUSERID = @CURRENTAPPUSERID,
    @SITEFILTERMODE = @SITEFILTERMODE
    @SITESSELECTED = @SITESSELECTED,
    @SECURITYFEATUREID = @SECURITYFEATUREID,
    @SECURITYFEATURETYPE = @SECURITYFEATURETYPE,
    @TOTALGIVINGWITHGIFTAID = @TOTALGIVINGWITHGIFTAID output,
    @MATCHEDGIFTSAMOUNT = @MATCHEDGIFTSAMOUNT output,
    @CURRENCYID = @CURRENCYID;

  declare @ALLREVENUE table
  (
    REVENUEID uniqueidentifier,
    TRANSACTIONTYPECODE tinyint,
    TRANSACTIONTYPE nvarchar(21),
    REVENUEAMOUNT money,
    [DATE] datetime,
    DATEADDED datetime,
    SPLITID uniqueidentifier,
    APPLICATIONCODE tinyint,
    DESIGNATIONID uniqueidentifier,
    SPLITAMOUNT money,
    WRITEOFFAMOUNT money,
    SPLITNETAMOUNT money
  )    

  insert @ALLREVENUE
  select * 
  from dbo.UFN_CONSTITUENT_GIVINGHISTORYINCURRENCY_BULK(
    @CONSTITUENTID,
    @CURRENTAPPUSERID,
    @SITEFILTERMODE,
    @SITESSELECTED,
    @SECURITYFEATUREID,
    @SECURITYFEATURETYPE,
    @CURRENCYID,
    @ORGANIZATIONCURRENCYID,
    @DECIMALDIGITS,
    @ROUNDINGTYPECODE);

  --LARGEST GIFT

  select top 1
    @LARGESTID = ALLREVENUE.REVENUEID,
    @LARGESTRECORDID = ALLREVENUE.REVENUEID,
    @LARGESTDATE = ALLREVENUE.DATE,
    @LARGESTTYPECODE = ALLREVENUE.TRANSACTIONTYPECODE,
    @LARGESTTYPE = ALLREVENUE.TRANSACTIONTYPE,
    @LARGESTAMOUNT = sum(ALLREVENUE.SPLITNETAMOUNT),
    @LARGESTPLEDGEBALANCE = case ALLREVENUE.TRANSACTIONTYPECODE when 1 then coalesce(PLEDGEBALANCE.BALANCEINCURRENCY,0) else null end,
    --using this instead of TOXML function, because a different root element is needed

    @LARGESTSPLITS = (select
        [AMOUNT],
        [ID],
        [PURPOSE]
      from
        dbo.[UFN_REVENUE_GETSPLITS_LISTINCURRENCY_BULK](ALLREVENUE.REVENUEID, @CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, @ORIGINCODE)
      order by
        ID
      for xml raw('ITEM'),type,elements,root('LARGESTSPLITS'),BINARY BASE64)
  from
    @ALLREVENUE ALLREVENUE
  left join dbo.UFN_PLEDGE_GETBALANCEASOFINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, getdate(), @ORIGINCODE, 3) PLEDGEBALANCE on PLEDGEBALANCE.ID = ALLREVENUE.REVENUEID
  group by
    ALLREVENUE.REVENUEID, ALLREVENUE.DATE, ALLREVENUE.TRANSACTIONTYPECODE, ALLREVENUE.TRANSACTIONTYPE, ALLREVENUE.DATEADDED, PLEDGEBALANCE.BALANCEINCURRENCY
  order by
    sum(ALLREVENUE.SPLITNETAMOUNT) desc, ALLREVENUE.DATE desc, ALLREVENUE.DATEADDED desc;

  --FIRST GIFT

  select top 1
    @FIRSTID = ALLREVENUE.REVENUEID,
    @FIRSTRECORDID = ALLREVENUE.REVENUEID,
    @FIRSTDATE = ALLREVENUE.DATE,
    @FIRSTTYPECODE = ALLREVENUE.TRANSACTIONTYPECODE,
    @FIRSTTYPE = ALLREVENUE.TRANSACTIONTYPE,
    @FIRSTAMOUNT = sum(ALLREVENUE.SPLITNETAMOUNT),
    @FIRSTPLEDGEBALANCE = case ALLREVENUE.TRANSACTIONTYPECODE when 1 then coalesce(PLEDGEBALANCE.BALANCEINCURRENCY,0) else null end,
    --using this instead of TOXML function, because a different root element is needed

    @FIRSTSPLITS = (select
        [AMOUNT],
        [ID],
        [PURPOSE]
      from
        dbo.[UFN_REVENUE_GETSPLITS_LISTINCURRENCY_BULK](ALLREVENUE.REVENUEID, @CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, @ORIGINCODE)
      order by
        ID
      for xml raw('ITEM'),type,elements,root('FIRSTSPLITS'),BINARY BASE64)
  from
    @ALLREVENUE ALLREVENUE
  left join dbo.UFN_PLEDGE_GETBALANCEASOFINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, getdate(), @ORIGINCODE, 3) PLEDGEBALANCE on PLEDGEBALANCE.ID = ALLREVENUE.REVENUEID
  group by
    ALLREVENUE.REVENUEID, ALLREVENUE.DATE, ALLREVENUE.TRANSACTIONTYPECODE, ALLREVENUE.TRANSACTIONTYPE, ALLREVENUE.DATEADDED, PLEDGEBALANCE.BALANCEINCURRENCY
  order by
    ALLREVENUE.DATE asc, ALLREVENUE.DATEADDED asc;

  --LATEST GIFT

  select top 1
    @LATESTID = ALLREVENUE.REVENUEID,
    @LATESTRECORDID = ALLREVENUE.REVENUEID,
    @LATESTDATE = ALLREVENUE.DATE,
    @LATESTTYPECODE = ALLREVENUE.TRANSACTIONTYPECODE,
    @LATESTTYPE = ALLREVENUE.TRANSACTIONTYPE,
    @LATESTAMOUNT = sum(ALLREVENUE.SPLITNETAMOUNT),
    @LATESTPLEDGEBALANCE = case ALLREVENUE.TRANSACTIONTYPECODE when 1 then coalesce(PLEDGEBALANCE.BALANCEINCURRENCY, 0) else null end,
    --using this instead of TOXML function, because a different root element is needed

    @LATESTSPLITS = (select
        [AMOUNT],
        [ID],
        [PURPOSE]
      from
        dbo.[UFN_REVENUE_GETSPLITS_LISTINCURRENCY_BULK](ALLREVENUE.REVENUEID, @CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, @ORIGINCODE)
      order by
        ID
      for xml raw('ITEM'),type,elements,root('LATESTSPLITS'),BINARY BASE64)
  from
    @ALLREVENUE ALLREVENUE
  left join dbo.UFN_PLEDGE_GETBALANCEASOFINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, getdate(), @ORIGINCODE, 3) PLEDGEBALANCE on PLEDGEBALANCE.ID = ALLREVENUE.REVENUEID
  group by
    ALLREVENUE.REVENUEID, ALLREVENUE.DATE, ALLREVENUE.TRANSACTIONTYPECODE, ALLREVENUE.TRANSACTIONTYPE, ALLREVENUE.DATEADDED, PLEDGEBALANCE.BALANCEINCURRENCY
  order by
    ALLREVENUE.DATE desc, ALLREVENUE.DATEADDED desc;

  -- Recognition credits

  exec dbo.USP_CONSTITUENT_RECOGNITIONSUMMARYGET
  @CONSTITUENTID,
  @RECOGNITIONTOTALNUMBER output,
  @RECOGNITIONTOTALAMOUNT output,
  @RECOGNITIONAVERAGEAMOUNT output,
  @RECOGNITIONMOSTFREQUENTAMOUNT output,
  @RECOGNITIONTOTALYEARS output,
  @RECOGNITIONCONSECUTIVEYEARS output,
  @RECOGNITIONGIVENSINCEFISCALYEAR output,
  @CURRENTAPPUSERID,
  @SITEFILTERMODE
  @SITESSELECTED,
  @SECURITYFEATUREID,
  @SECURITYFEATURETYPE,
  @TOTALRECOGNITIONWITHGIFTAID output,
  @CURRENCYID = @CURRENCYID;

  --LARGEST GIFT

  select top 1
    @RECOGNITIONLARGESTID = RR.ID,
    @RECOGNITIONLARGESTRECORDID = R.ID,
    @RECOGNITIONLARGESTDATE = RR.EFFECTIVEDATE,
    @RECOGNITIONLARGESTTYPECODE = R.TRANSACTIONTYPECODE,
    @RECOGNITIONLARGESTTYPE = R.TRANSACTIONTYPE,
    @RECOGNITIONLARGESTAMOUNT = RR.AMOUNTINCURRENCY
  from
    (
        select RR.ID, RR.CONSTITUENTID, RR.AMOUNTINCURRENCY, RR.EFFECTIVEDATE, RR.APPLICATIONCODE, RR.TRANSACTIONTYPECODE, RR.REVENUECONSTITUENTID, RR.DATE, RR.REVENUEID, RR.REVENUESPLITID, RR.DATEADDED
        from dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RR

        union all

        select RC.ID, RC.CONSTITUENTID, RC.AMOUNTINCURRENCY, RC.EFFECTIVEDATE, RC.APPLICATIONCODE, RC.TRANSACTIONTYPECODE, RC.REVENUECONSTITUENTID, RC.DATE, RC.REVENUEID, RC.REVENUESPLITID, RC.DATEADDED
        from dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RC
    ) RR
  inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
  inner join dbo.REVENUE R on RS.REVENUEID = R.ID
  left join
    dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS PGR on PGR.REVENUEID = R.ID
  left join
    dbo.PLANNEDGIFT PG on PG.ID = PGR.PLANNEDGIFTID
  where
    (R.TRANSACTIONTYPECODE = 1 or --Pledge

      R.TRANSACTIONTYPECODE = 7 or --Auction donation

      R.TRANSACTIONTYPECODE = 8 or --Donor challenge claim

    R.TRANSACTIONTYPECODE = 3 or --Matching gift claim

    (R.TRANSACTIONTYPECODE = 4 and PG.VEHICLECODE in (0,1,2,5,6,7,8,9)) or --Planned gift

    (R.TRANSACTIONTYPECODE = 5 and RS.APPLICATIONCODE = 0) or -- Donations on orders

    (R.TRANSACTIONTYPECODE = 0 and (RS.APPLICATIONCODE in (0, 3, 7) or (RS.APPLICATIONCODE = 1 and RS.TYPECODE = 0)))) and --Payment (Gift or Recurring gift payment)

    RR.CONSTITUENTID = @CONSTITUENTID
    and    exists 
    (
      select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
      cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
      where RSSUB.REVENUEID = R.ID
      /*next line is #SITEEXTENTION code*/
      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)
      )
    )                    
  order by
    RR.AMOUNTINCURRENCY desc, RR.EFFECTIVEDATE desc, RR.DATEADDED desc;

  --FIRST GIFT

  select top 1
    @RECOGNITIONFIRSTID = RR.ID,
    @RECOGNITIONFIRSTRECORDID = R.ID,
    @RECOGNITIONFIRSTDATE = RR.EFFECTIVEDATE,
    @RECOGNITIONFIRSTTYPECODE = R.TRANSACTIONTYPECODE,
    @RECOGNITIONFIRSTTYPE = R.TRANSACTIONTYPE,
    @RECOGNITIONFIRSTAMOUNT = RR.AMOUNTINCURRENCY
  from
    (
        select RR.ID, RR.CONSTITUENTID, RR.AMOUNTINCURRENCY, RR.EFFECTIVEDATE, RR.APPLICATIONCODE, RR.TRANSACTIONTYPECODE, RR.REVENUECONSTITUENTID, RR.DATE, RR.REVENUEID, RR.REVENUESPLITID, RR.DATEADDED
        from dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RR

        union all

        select RC.ID, RC.CONSTITUENTID, RC.AMOUNTINCURRENCY, RC.EFFECTIVEDATE, RC.APPLICATIONCODE, RC.TRANSACTIONTYPECODE, RC.REVENUECONSTITUENTID, RC.DATE, RC.REVENUEID, RC.REVENUESPLITID, RC.DATEADDED
        from dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RC
    ) RR
  inner join dbo.REVENUESPLIT RS on RR.REVENUESPLITID = RS.ID
  inner join dbo.REVENUE R on RS.REVENUEID = R.ID
  left join
    dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS PGR on PGR.REVENUEID = R.ID
  left join
    dbo.PLANNEDGIFT PG on PG.ID = PGR.PLANNEDGIFTID
  where
    (R.TRANSACTIONTYPECODE = 1 or --Pledge

      R.TRANSACTIONTYPECODE = 7 or -- Auction donation

      R.TRANSACTIONTYPECODE = 8 or --Donor challenge claim

    R.TRANSACTIONTYPECODE = 3 or --Matching gift claim

    (R.TRANSACTIONTYPECODE = 4 and PG.VEHICLECODE in (0,1,2,5,6,7,8,9)) or --Planned gift

    (R.TRANSACTIONTYPECODE = 5 and RS.APPLICATIONCODE = 0) or -- Donations on orders

    (R.TRANSACTIONTYPECODE = 0 and (RS.APPLICATIONCODE in (0, 3, 7) or (RS.APPLICATIONCODE = 1 and RS.TYPECODE = 0)))) and --Payment (Gift or Recurring gift payment)

    RR.CONSTITUENTID = @CONSTITUENTID
    and    exists 
    (
      select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
      cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
      where RSSUB.REVENUEID = R.ID
      /*next line is #SITEEXTENTION code*/
      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)
      )
    )                    
  order by
    RR.EFFECTIVEDATE asc, RR.DATEADDED asc;

  --LATEST GIFT

  select top 1
    @RECOGNITIONLATESTID = RR.ID,
    @RECOGNITIONLATESTRECORDID = RR.REVENUEID,
    @RECOGNITIONLATESTDATE = RR.EFFECTIVEDATE,
    @RECOGNITIONLATESTTYPECODE = RR.TRANSACTIONTYPECODE,
    @RECOGNITIONLATESTTYPE = RR.TRANSACTIONTYPE,
    @RECOGNITIONLATESTAMOUNT = RR.AMOUNTINCURRENCY
  from
    (
        select RR.ID, RR.CONSTITUENTID, RR.AMOUNTINCURRENCY, RR.EFFECTIVEDATE, RR.APPLICATIONCODE, RR.TRANSACTIONTYPECODE, RR.REVENUECONSTITUENTID, RR.DATE, RR.REVENUEID, RR.REVENUESPLITID, RR.DATEADDED, RR.TRANSACTIONTYPE, RR.REVENUESPLITTYPECODE
        from dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RR

        union all

        select RC.ID, RC.CONSTITUENTID, RC.AMOUNTINCURRENCY, RC.EFFECTIVEDATE, RC.APPLICATIONCODE, RC.TRANSACTIONTYPECODE, RC.REVENUECONSTITUENTID, RC.DATE, RC.REVENUEID, RC.REVENUESPLITID, RC.DATEADDED, RC.TRANSACTIONTYPE, RC.REVENUESPLITTYPECODE
        from dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RC
    ) RR
  left join
    dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS PGR on PGR.REVENUEID = RR.REVENUEID
  left join
    dbo.PLANNEDGIFT PG on PG.ID = PGR.PLANNEDGIFTID
  where
    (RR.TRANSACTIONTYPECODE = 1 or --Pledge

    RR.TRANSACTIONTYPECODE = 7 or --Auction donation

    RR.TRANSACTIONTYPECODE = 8 or --Donor challenge claim

    RR.TRANSACTIONTYPECODE = 3 or --Matching gift claim

    (RR.TRANSACTIONTYPECODE = 4 and PG.VEHICLECODE in (0,1,2,5,6,7,8,9)) or --Planned gift

    (RR.TRANSACTIONTYPECODE = 5 and RR.APPLICATIONCODE = 0) or -- Donations on orders

    (RR.TRANSACTIONTYPECODE = 0 and (RR.APPLICATIONCODE in (0, 3, 7) or (RR.APPLICATIONCODE = 1 and RR.REVENUESPLITTYPECODE = 0)))) and --Payment (Gift or Recurring gift payment)

    RR.CONSTITUENTID = @CONSTITUENTID
    and    exists 
    (
      select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
      cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
      where RSSUB.REVENUEID = RR.REVENUEID
      /*next line is #SITEEXTENTION code*/
      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)
      )
    )                    
  order by
    RR.EFFECTIVEDATE desc, RR.DATEADDED desc;

  select
    @TOTALNUMBER as TOTALNUMBER,
    @TOTALAMOUNT as TOTALAMOUNT,
    @AVERAGEAMOUNT as AVERAGEAMOUNT,
    @MOSTFREQUENTAMOUNT as MOSTFREQUENTAMOUNT,
    @TOTALPLEDGEBALANCE as TOTALPLEDGEBALANCE,
    @TOTALYEARS as TOTALYEARS,
    @CONSECUTIVEYEARS as CONSECUTIVEYEARS,
    @GIVENSINCEFISCALYEAR as GIVENSINCEFISCALYEAR,
    @LARGESTID as LARGESTID,
    @LARGESTRECORDID as LARGESTRECORDID,
    @LARGESTDATE as LARGESTDATE,
    @LARGESTTYPECODE as LARGESTTYPECODE,
    @LARGESTTYPE as LARGESTTYPE,
    @LARGESTAMOUNT as LARGESTAMOUNT,
    @LARGESTPLEDGEBALANCE as LARGESTPLEDGEBALANCE,
    @LARGESTSPLITS as LARGESTSPLITS,
    @FIRSTID as FIRSTID,
    @FIRSTRECORDID as FIRSTRECORDID,
    @FIRSTDATE as FIRSTDATE,
    @FIRSTTYPECODE as FIRSTTYPECODE,
    @FIRSTTYPE as FIRSTTYPE,
    @FIRSTAMOUNT as FIRSTAMOUNT,
    @FIRSTPLEDGEBALANCE as FIRSTPLEDGEBALANCE,
    @FIRSTSPLITS as FIRSTSPLITS,
    @LATESTID as LATESTID,
    @LATESTRECORDID as LATESTRECORDID,
    @LATESTDATE as LATESTDATE,
    @LATESTTYPECODE as LATESTTYPECODE,
    @LATESTTYPE as LATESTTYPE,
    @LATESTAMOUNT as LATESTAMOUNT,
    @LATESTPLEDGEBALANCE as LATESTPLEDGEBALANCE,
    @LATESTSPLITS as LATESTSPLITS,
    @RECOGNITIONTOTALNUMBER as RECOGNITIONTOTALNUMBER,
    @RECOGNITIONTOTALAMOUNT as RECOGNITIONTOTALAMOUNT,
    @RECOGNITIONAVERAGEAMOUNT as RECOGNITIONAVERAGEAMOUNT,
    @RECOGNITIONMOSTFREQUENTAMOUNT as RECOGNITIONMOSTFREQUENTAMOUNT,
    @RECOGNITIONTOTALYEARS as RECOGNITIONTOTALYEARS,
    @RECOGNITIONCONSECUTIVEYEARS as RECOGNITIONCONSECUTIVEYEARS,
    @RECOGNITIONGIVENSINCEFISCALYEAR as RECOGNITIONGIVENSINCEFISCALYEAR,
    @RECOGNITIONLARGESTID as RECOGNITIONLARGESTID,
    @RECOGNITIONLARGESTRECORDID as RECOGNITIONLARGESTRECORDID,
    @RECOGNITIONLARGESTDATE as RECOGNITIONLARGESTDATE,
    @RECOGNITIONLARGESTTYPECODE as RECOGNITIONLARGESTTYPECODE,
    @RECOGNITIONLARGESTTYPE as RECOGNITIONLARGESTTYPE,
    @RECOGNITIONLARGESTAMOUNT as RECOGNITIONLARGESTAMOUNT,
    @RECOGNITIONFIRSTID as RECOGNITIONFIRSTID,
    @RECOGNITIONFIRSTRECORDID as RECOGNITIONFIRSTRECORDID,
    @RECOGNITIONFIRSTDATE as RECOGNITIONFIRSTDATE,
    @RECOGNITIONFIRSTTYPECODE as RECOGNITIONFIRSTTYPECODE,
    @RECOGNITIONFIRSTTYPE as RECOGNITIONFIRSTTYPE,
    @RECOGNITIONFIRSTAMOUNT as RECOGNITIONFIRSTAMOUNT,
    @RECOGNITIONLATESTID as RECOGNITIONLATESTID,
    @RECOGNITIONLATESTRECORDID as RECOGNITIONLATESTRECORDID,
    @RECOGNITIONLATESTDATE as RECOGNITIONLATESTDATE,
    @RECOGNITIONLATESTTYPECODE as RECOGNITIONLATESTTYPECODE,
    @RECOGNITIONLATESTTYPE as RECOGNITIONLATESTTYPE,
    @RECOGNITIONLATESTAMOUNT as RECOGNITIONLATESTAMOUNT,
    @HOUSEHOLDID as HOUSEHOLDID,
    @TOTALHOUSEHOLDGIVING as TOTALHOUSEHOLDGIVING,
    @TOTALGIVINGWITHGIFTAID as TOTALGIVINGWITHGIFTAID,
    @TOTALRECOGNITIONWITHGIFTAID as TOTALRECOGNITIONWITHGIFTAID,
    @MATCHEDGIFTSAMOUNT as MATCHEDGIFTSAMOUNT,
    CURRENCY.ISO4217,
    CURRENCY.DECIMALDIGITS,
    CURRENCY.CURRENCYSYMBOL,
    CURRENCY.SYMBOLDISPLAYSETTINGCODE
  from
  -- Have a placeholder row so we can left join to CURRENCY and still have all other values returned

  -- if @CURRENCYID is null

  (
    select 1 as PLACEHOLDERVALUE
  ) as PLACEHOLDERROW
  left join dbo.CURRENCY on ID = @CURRENCYID;