USP_CONSTITUENT_RECOGNITIONSUMMARYEXPANDED_2

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@ISGROUP bit IN
@HOUSEHOLDID uniqueidentifier IN
@RECOGNITIONFILTERID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@CURRENTAPPUSERID uniqueidentifier IN
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN
@CURRENCYCODE tinyint IN
@RECOGNITIONTOTALNUMBER int INOUT
@RECOGNITIONTOTALAMOUNT money INOUT
@RECOGNITIONTOTALAMOUNT_HOUSEHOLD money INOUT
@RECOGNITIONTOTALYEARS int INOUT
@RECOGNITIONCONSECUTIVEYEARS int INOUT
@RECOGNITIONGIVENSINCEFISCALYEAR nvarchar(24) INOUT
@TOTALRECOGNITIONWITHGIFTAID money INOUT
@RECOGNITIONFIRSTID uniqueidentifier INOUT
@RECOGNITIONFIRSTRECORDID uniqueidentifier INOUT
@RECOGNITIONFIRSTDATE datetime INOUT
@RECOGNITIONFIRSTTYPECODE tinyint INOUT
@RECOGNITIONFIRSTTYPE nvarchar(50) INOUT
@RECOGNITIONFIRSTAMOUNT money INOUT
@RECOGNITIONLATESTID uniqueidentifier INOUT
@RECOGNITIONLATESTRECORDID uniqueidentifier INOUT
@RECOGNITIONLATESTDATE datetime INOUT
@RECOGNITIONLATESTTYPECODE tinyint INOUT
@RECOGNITIONLATESTTYPE nvarchar(50) INOUT
@RECOGNITIONLATESTAMOUNT money INOUT
@CURRENCYISOCURRENCYCODE nvarchar(3) INOUT
@CURRENCYDECIMALDIGITS tinyint INOUT
@CURRENCYSYMBOL nvarchar(5) INOUT
@CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint INOUT
@BREAKDOWNBY tinyint IN
@CAMPAIGNFILTERMODE tinyint IN
@CAMPAIGNSSELECTED xml IN

Definition

Copy


        CREATE procedure dbo.USP_CONSTITUENT_RECOGNITIONSUMMARYEXPANDED_2(
        @CONSTITUENTID uniqueidentifier,
        @ISGROUP bit = 0,
        @HOUSEHOLDID uniqueidentifier = null,
        @RECOGNITIONFILTERID uniqueidentifier = null,
        @STARTDATE datetime = null,
        @ENDDATE datetime = null,
        @CURRENTAPPUSERID uniqueidentifier = null,
        @SITEFILTERMODE tinyint = 0,
        @SITESSELECTED xml = null,
        @SECURITYFEATUREID uniqueidentifier = null,
        @SECURITYFEATURETYPE tinyint = null,
        @CURRENCYCODE tinyint = 1,
        @RECOGNITIONTOTALNUMBER int = null output,
        @RECOGNITIONTOTALAMOUNT money = null output,
        @RECOGNITIONTOTALAMOUNT_HOUSEHOLD money = null output,
        @RECOGNITIONTOTALYEARS int = null output,
        @RECOGNITIONCONSECUTIVEYEARS int = null output,
        @RECOGNITIONGIVENSINCEFISCALYEAR nvarchar(24) = null output,
        @TOTALRECOGNITIONWITHGIFTAID money = null output,

        @RECOGNITIONFIRSTID uniqueidentifier = null output,
        @RECOGNITIONFIRSTRECORDID uniqueidentifier = null output,
        @RECOGNITIONFIRSTDATE datetime = null output,
        @RECOGNITIONFIRSTTYPECODE tinyint = null output,
        @RECOGNITIONFIRSTTYPE nvarchar(50) = null output,
        @RECOGNITIONFIRSTAMOUNT money = null output,
        @RECOGNITIONLATESTID uniqueidentifier = null output,
        @RECOGNITIONLATESTRECORDID uniqueidentifier = null output,
        @RECOGNITIONLATESTDATE datetime = null output,
        @RECOGNITIONLATESTTYPECODE tinyint = null output,
        @RECOGNITIONLATESTTYPE nvarchar(50) = null output,
        @RECOGNITIONLATESTAMOUNT money = null output,

        @CURRENCYISOCURRENCYCODE nvarchar(3) = null output,
        @CURRENCYDECIMALDIGITS tinyint = 0 output,
        @CURRENCYSYMBOL nvarchar(5) = null output,
        @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint = 0 output,

        @BREAKDOWNBY tinyint = 0,
        @CAMPAIGNFILTERMODE tinyint = 0,
        @CAMPAIGNSSELECTED xml = null
    )
        with EXECUTE as OWNER      
    as
    begin
        set nocount on


        declare @CONSTITID uniqueidentifier;
        declare @DATEFROM datetime;
        declare @DATETO datetime;
        declare @ISUK bit;
        declare @CURRENCYROUNDINGTYPECODE tinyint = 0;

        /* Get currency info */
        declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
        declare @CURRENCYID uniqueidentifier = null;
        if @CURRENCYCODE = 1
          set @CURRENCYID = @ORGANIZATIONCURRENCYID;
        else
          set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);        

        select
          @CURRENCYISOCURRENCYCODE = CURRENCY.ISO4217,
          @CURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS,
          @CURRENCYSYMBOL = CURRENCY.CURRENCYSYMBOL,
          @CURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCY.SYMBOLDISPLAYSETTINGCODE,    
          @CURRENCYROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE   
        from dbo.CURRENCY where ID = @CURRENCYID;

        set @ISUK = dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D');

        /* Get Recognition IDs */
        if object_id('tempdb..#TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS') is not null
          drop table #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS;

        create table #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS
        (  
          ID uniqueidentifier
        );

        declare @SQL nvarchar(max) = '';
        declare @RECOGNITIONCREDITS_SQL nvarchar(max) = '';

        if @CAMPAIGNFILTERMODE != 0
        begin
          set @SQL = '
              declare @CAMPAIGNFILTERTABLE table (ID uniqueidentifier)
              insert into @CAMPAIGNFILTERTABLE
              select T.c.value(''(ID)[1]'',''uniqueidentifier'')
              from @CAMPAIGNSSELECTED.nodes(''/CAMPAIGNSSELECTED/ITEM'') T(c);' + char(13);
          set @RECOGNITIONCREDITS_SQL = replace(@SQL, '@CAMPAIGNFILTERTABLE', '@CAMPAIGNFILTERTABLE_RC');
        end

        select @SQL = @SQL + '
          with CONSTITS_CTE as (
            select @CONSTITUENTID CONSTITUENTID, @STARTDATE STARTDATE, @ENDDATE ENDDATE
            union all
            select
              GROUPMEMBER.MEMBERID as CONSTITUENTID,
              case when GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM < @STARTDATE then @STARTDATE else GROUPMEMBERDATERANGE.DATEFROM end STARTDATE,
              case when GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO > @ENDDATE then @ENDDATE else GROUPMEMBERDATERANGE.DATETO end ENDDATE
            from dbo.GROUPMEMBER
            left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
            where
              GROUPMEMBER.GROUPID = @CONSTITUENTID
          )
          insert into #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS(ID)
          select distinct
            REVENUERECOGNITION.ID
          from dbo.REVENUERECOGNITION ' + char(13);   

        select @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + replace(@SQL, 'REVENUERECOGNITION', 'RECOGNITIONCREDIT')

        --BBNT\RyanDow 2012-04-20

        --Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains

        --Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)

        --If this logic is changed, the other places that use revenue/recognition filters will need to be updated

        declare @REVENUEFILTERID uniqueidentifier
        declare @REVENUEFILTERFUNCTION nvarchar(250)
        declare @PLEDGERECOGNITIONCODE tinyint
        if @RECOGNITIONFILTERID is not null
        begin
            select 
                @REVENUEFILTERID = RECOGNITIONFILTER.REVENUEFILTERID,
                @PLEDGERECOGNITIONCODE = RECOGNITIONFILTER.PLEDGERECOGNITIONCODE,
                @REVENUEFILTERFUNCTION = REVENUEFILTER.FUNCTIONNAME
            from 
                dbo.RECOGNITIONFILTER 
                left join dbo.REVENUEFILTER on REVENUEFILTER.ID = RECOGNITIONFILTER.REVENUEFILTERID
            where
                RECOGNITIONFILTER.ID = @RECOGNITIONFILTERID

            if @REVENUEFILTERID is not null and @REVENUEFILTERFUNCTION is not null and @REVENUEFILTERFUNCTION <> ''
            begin
                select @SQL = @SQL + '
                    inner join ' + @REVENUEFILTERFUNCTION + '() FILTERED on FILTERED.ID = REVENUERECOGNITION.REVENUESPLITID ' + CHAR(13);
            end

          set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + 'inner join dbo.UFN_RECOGNITIONCREDIT_VALIDFILTER(@RECOGNITIONFILTERID) FILTERED on RECOGNITIONCREDIT.ID = FILTERED.ID ' + char(13);
        end

        set @SQL = @SQL + '
            inner join CONSTITS_CTE CONSTITS on CONSTITS.CONSTITUENTID = REVENUERECOGNITION.CONSTITUENTID ' + char(13)

        --BBNT\RyanDow 2012-04-20

        --Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains

        --Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)

        --If this logic is changed, the other places that use revenue/recognition filters will need to be updated

        if @RECOGNITIONFILTERID is not null
        begin
            select @SQL = @SQL + '
            left join dbo.RECOGNITIONFILTERRECOGNTIONTYPE on RECOGNITIONFILTERRECOGNTIONTYPE.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID
                and RECOGNITIONFILTERRECOGNTIONTYPE.RECOGNITIONFILTERID = @RECOGNITIONFILTERID ' + char(13)

            if @PLEDGERECOGNITIONCODE <> 1
            begin
                select @SQL = @SQL + '
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
                    inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                    inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
                    left join dbo.INSTALLMENTSPLITPAYMENT on FINANCIALTRANSACTIONLINEITEM.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                    left join dbo.FINANCIALTRANSACTION as PLEDGE on INSTALLMENTSPLITPAYMENT.PLEDGEID = PLEDGE.ID
                where
                    FINANCIALTRANSACTION.DELETEDON is null and
                    FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and
                    FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1 and ' + CHAR(13)
            end
            else
            begin
                select @SQL = @SQL + '
                    where ' + CHAR(13)
            end
        end
        else
        begin
            select @SQL = @SQL + '
                where ' + CHAR(13)
        end

        select @SQL = @SQL + '
            (CONSTITS.STARTDATE is null or REVENUERECOGNITION.EFFECTIVEDATE >= CONSTITS.STARTDATE) and
            (CONSTITS.ENDDATE is null or REVENUERECOGNITION.EFFECTIVEDATE <= CONSTITS.ENDDATE) ' + char(13);

        set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL +
          '
          inner join CONSTITS_CTE CONSTITS
            on CONSTITS.CONSTITUENTID = RECOGNITIONCREDIT.CONSTITUENTID
          left join dbo.DONORCHALLENGEENCUMBERED on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
          where
            (CONSTITS.STARTDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE >= CONSTITS.STARTDATE)
            and
            (CONSTITS.ENDDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE <= CONSTITS.ENDDATE)
            and
            ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or (RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1 and RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID is not null))';

        if @CAMPAIGNFILTERMODE != 0
        begin
            set @SQL = @SQL +
                'and exists (
                    select 1
                    from dbo.REVENUESPLITCAMPAIGN
                        inner join @CAMPAIGNFILTERTABLE CAMPAIGNFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNFILTER.ID
                    where REVENUESPLITCAMPAIGN.REVENUESPLITID = REVENUERECOGNITION.REVENUESPLITID
                ) ' + char(13);

            set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL +
                'and ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or exists (
                    select 1
                    from dbo.REVENUESPLITCAMPAIGN
                        inner join @CAMPAIGNFILTERTABLE_RC CAMPAIGNFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNFILTER.ID
                    where REVENUESPLITCAMPAIGN.REVENUESPLITID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
                ))' + char(13);
        end

        --BBNT\RyanDow 2012-04-20

        --Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains

        --Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)

        --If this logic is changed, the other places that use revenue/recognition filters will need to be updated

        if @RECOGNITIONFILTERID is not null
        begin
            if @PLEDGERECOGNITIONCODE <> 1
            begin
                select @SQL = @SQL + '
                    and
                    (
                        -- Find commitments or payments other than pledges

                        (FINANCIALTRANSACTION.TYPECODE <> 0 or REVENUESPLIT_EXT.APPLICATIONCODE <> 2)
                        or
                        -- Find payments without pledge recognition

                        (
                            (FINANCIALTRANSACTION.TYPECODE = 0 and REVENUESPLIT_EXT.APPLICATIONCODE = 2)
                            and
                            (not exists (select top 1 RR.ID from dbo.REVENUERECOGNITION as RR inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on FTLI.ID = RR.REVENUESPLITID where RR.CONSTITUENTID in (select @CONSTITUENTID union select GM.MEMBERID from dbo.GROUPMEMBER as GM left outer join dbo.GROUPDATA as GD on GD.ID = GM.GROUPID where GM.GROUPID = @CONSTITUENTID) and FTLI.FINANCIALTRANSACTIONID = PLEDGE.ID))
                        )
                    ) ' + char(13)
            end

            select @SQL = @SQL + '
                and 
                (
                    RECOGNITIONFILTERRECOGNTIONTYPE.ID is not null
                    or not exists(select top 1 ID from dbo.RECOGNITIONFILTERRECOGNTIONTYPE RSUB where RSUB.RECOGNITIONFILTERID = @RECOGNITIONFILTERID)
                ) ' + char(13)
        end

        exec sp_executesql @SQL, N'@CONSTITUENTID uniqueidentifier, @RECOGNITIONFILTERID uniqueidentifier, @STARTDATE datetime,  @ENDDATE datetime, @CAMPAIGNSSELECTED xml'
        @CONSTITUENTID, @RECOGNITIONFILTERID, @STARTDATE, @ENDDATE, @CAMPAIGNSSELECTED;

        exec sp_executesql @RECOGNITIONCREDITS_SQL, N'@CONSTITUENTID uniqueidentifier, @RECOGNITIONFILTERID uniqueidentifier, @STARTDATE datetime,  @ENDDATE datetime, @CAMPAIGNSSELECTED xml'
        @CONSTITUENTID, @RECOGNITIONFILTERID, @STARTDATE, @ENDDATE, @CAMPAIGNSSELECTED;

        /*remove based on site filter*/
        delete FILTERED 
        from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
        inner join dbo.REVENUERECOGNITION on FILTERED.ID = REVENUERECOGNITION.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
        where
          not exists 
          (
            select top 1 REVSITES.SITEID
            from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(FINANCIALTRANSACTIONLINEITEM.ID) REVSITES
            where
            -- Using a case statement since the standard site extension filters

            -- resulted in a poor plan

            case 
                when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
                when exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)) then 1
                else 0 
              end = 1
            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)
            )
          )

        delete FILTERED 
        from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
        inner join dbo.RECOGNITIONCREDIT on FILTERED.ID = RECOGNITIONCREDIT.ID
        where not exists (
            select top 1 RECOGNITIONCREDIT.ID 
            from dbo.RECOGNITIONCREDIT
            where RECOGNITIONCREDIT.ID = FILTERED.ID
              -- Using a case statement since the standard site extension filters

              -- resulted in a poor plan

              and case 
                when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
                when exists (
                    select 1 
                    from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE
                    where SITEID=dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID) or (SITEID is null and dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID) is null)
                  ) then 1
                else 0 
              end = 1
              and (
                @SITEFILTERMODE = 0
                  or exists(
                    select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID 
                    from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED
                    where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID)
                  )
              )
          );

        /* Get Constituent totals */
        /* This IF ELSE is a small duplication of code, but it drastically helps non-UK customers */
        /* The difference is the left join to get Gift Aid amounts in the ELSE */
        if @ISUK = 0
        begin
            select
              @RECOGNITIONTOTALNUMBER = count(RECOGNITION.ID),
              @RECOGNITIONTOTALAMOUNT = isnull(sum(RECOGNITION.AMOUNTINCURRENCY), 0),
              @TOTALRECOGNITIONWITHGIFTAID = cast(isnull(sum(RECOGNITION.GA_AMOUNTINCURRENCY), 0) as money),
              @RECOGNITIONTOTALYEARS = count(distinct(
                                                          case when @BREAKDOWNBY = 0 then YEAR(RECOGNITION.EFFECTIVEDATE) else dbo.UFN_GLFISCALYEAR_GETYEARFROMDATE(RECOGNITION.EFFECTIVEDATE) end
                                                        ))
            from (
              select RR.ID, RR.AMOUNTINCURRENCY, 0 as GA_AMOUNTINCURRENCY, RR.EFFECTIVEDATE
              from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
                inner join dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) RR on FILTERED.ID = RR.ID

              union

              select RC.ID, RC.AMOUNTINCURRENCY, 0 as GA_AMOUNTINCURRENCY, RC.EFFECTIVEDATE
              from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
                inner join dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) RC on FILTERED.ID = RC.ID
            ) RECOGNITION
        end
        else
        begin
            select
              @RECOGNITIONTOTALNUMBER = count(RECOGNITION.ID),
              @RECOGNITIONTOTALAMOUNT = isnull(sum(RECOGNITION.AMOUNTINCURRENCY), 0),
              @RECOGNITIONTOTALYEARS = count(distinct(
                                                          case when @BREAKDOWNBY = 0 then YEAR(RECOGNITION.EFFECTIVEDATE) else dbo.UFN_GLFISCALYEAR_GETYEARFROMDATE(RECOGNITION.EFFECTIVEDATE) end
                                                        ))
            from (
              select RR.ID, RR.AMOUNTINCURRENCY, RR.EFFECTIVEDATE
              from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
                inner join dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) RR on FILTERED.ID = RR.ID

              union

              select RC.ID, RC.AMOUNTINCURRENCY, RC.EFFECTIVEDATE
              from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
                inner join dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) RC on FILTERED.ID = RC.ID
            ) RECOGNITION

            select
              @TOTALRECOGNITIONWITHGIFTAID = cast(isnull(sum(RRWGA.AMOUNTINCURRENCY), 0) as money)
            from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
            inner join dbo.UFN_REVENUERECOGNITIONWITHGIFTAID_GETAMOUNTSINCURRENCY_BULK_2(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE, @ISUK, @CONSTITUENTID) RRWGA on RRWGA.ID = FILTERED.ID
        end

        set @RECOGNITIONTOTALNUMBER = coalesce(@RECOGNITIONTOTALNUMBER, 0);
        set @RECOGNITIONTOTALAMOUNT = coalesce(@RECOGNITIONTOTALAMOUNT, 0);

        declare @YEARSQL nvarchar(max);
        declare @YEARSNIPPET nvarchar(100);

        if @BREAKDOWNBY = 0 
          set @YEARSNIPPET = 'dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(coalesce(RR.EFFECTIVEDATE, RC.EFFECTIVEDATE),0)';
        else
          set @YEARSNIPPET = 'dbo.UFN_GLFISCALYEAR_GETYEARFROMDATE(coalesce(RR.EFFECTIVEDATE, RC.EFFECTIVEDATE))';


        set @YEARSQL = 
          'select ' + @YEARSNIPPET + ' FISCALYEAR_FIRSTDAY
          from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
          left join dbo.REVENUERECOGNITION RR on FILTERED.ID = RR.ID
          left join dbo.RECOGNITIONCREDIT RC on FILTERED.ID = RC.ID
          where (RR.ID is not null) or (RC.ID is not null)
          group by ' + @YEARSNIPPET + '
          order by ' + @YEARSNIPPET + ' desc'                     


        declare @THISYEAR datetime;
        declare @LASTYEAR datetime;
        declare @CURRENTDATE datetime = getdate();

        set @THISYEAR = case when @BREAKDOWNBY = 0 then dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(@CURRENTDATE, 0) else dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(@CURRENTDATE, 0) end;
        set @LASTYEAR = case when @BREAKDOWNBY = 0 then dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(dateadd(year,-1,@CURRENTDATE),0) else dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(dateadd(year,-1,@CURRENTDATE), 0) end;

        declare @RECOGNITIONGIVENSINCEYEAR datetime = null;

        --CONSECUTIVE YEARS

        exec dbo.USP_CONSTITUENT_GETCONSECUTIVEYEARSFROMGIVENSET
          @YEARSQL,
          @THISYEAR,
          @LASTYEAR,
          @RECOGNITIONCONSECUTIVEYEARS output,
          @RECOGNITIONGIVENSINCEYEAR output

        set @RECOGNITIONGIVENSINCEFISCALYEAR = case when @BREAKDOWNBY = 0 then cast(YEAR(@RECOGNITIONGIVENSINCEYEAR) as nvarchar(24)) else dbo.UFN_GLFISCALYEAR_GETLABEL(@RECOGNITIONGIVENSINCEYEAR) end;

        --FIRST GIFT

        --Only run conversions for the first gift.

        select top 1
          @RECOGNITIONFIRSTID = RECOGNITION.ID,
          @RECOGNITIONFIRSTRECORDID = RECOGNITION.REVENUEID,
          @RECOGNITIONFIRSTDATE = RECOGNITION.EFFECTIVEDATE,
          @RECOGNITIONFIRSTTYPECODE = RECOGNITION.TRANSACTIONTYPECODE,
          @RECOGNITIONFIRSTTYPE = RECOGNITION.TRANSACTIONTYPE
        from (
          select REVENUERECOGNITION.ID, FINANCIALTRANSACTION.ID REVENUEID, REVENUERECOGNITION.EFFECTIVEDATE, FINANCIALTRANSACTION.TYPECODE TRANSACTIONTYPECODE, FINANCIALTRANSACTION.TYPE TRANSACTIONTYPE, REVENUERECOGNITION.DATEADDED
          from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
            inner join dbo.REVENUERECOGNITION on FILTERED.ID = REVENUERECOGNITION.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID

          union

          select RC.ID, null REVENUEID, RC.EFFECTIVEDATE, 8, 'Donor challenge claim - Internal sponsor', RC.DATEADDED
          from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
            inner join dbo.RECOGNITIONCREDIT RC on FILTERED.ID = RC.ID
            inner join dbo.DONORCHALLENGEENCUMBERED on RC.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
        ) RECOGNITION            
        order by
          RECOGNITION.EFFECTIVEDATE asc, RECOGNITION.DATEADDED asc;

        if exists (select 1 from dbo.REVENUERECOGNITION where ID = @RECOGNITIONFIRSTID)
          set @RECOGNITIONFIRSTAMOUNT = dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY(@RECOGNITIONFIRSTID, @CURRENCYID)
        else
          if exists (select 1 from dbo.RECOGNITIONCREDIT where ID = @RECOGNITIONFIRSTID)
            set @RECOGNITIONFIRSTAMOUNT = dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY(@RECOGNITIONFIRSTID, @CURRENCYID)

        --LATEST GIFT

        select top 1
          @RECOGNITIONLATESTID = RECOGNITION.ID,
          @RECOGNITIONLATESTRECORDID = RECOGNITION.REVENUEID,
          @RECOGNITIONLATESTDATE = RECOGNITION.EFFECTIVEDATE,
          @RECOGNITIONLATESTTYPECODE = RECOGNITION.TRANSACTIONTYPECODE,
          @RECOGNITIONLATESTTYPE = RECOGNITION.TRANSACTIONTYPE
        from (
          select REVENUERECOGNITION.ID, FINANCIALTRANSACTION.ID REVENUEID, REVENUERECOGNITION.EFFECTIVEDATE, FINANCIALTRANSACTION.TYPECODE TRANSACTIONTYPECODE, FINANCIALTRANSACTION.TYPE TRANSACTIONTYPE, REVENUERECOGNITION.DATEADDED
          from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
            inner join dbo.REVENUERECOGNITION on FILTERED.ID = REVENUERECOGNITION.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID

          union

          select RC.ID, null REVENUEID, RC.EFFECTIVEDATE, 8, 'Donor challenge claim - Internal sponsor', RC.DATEADDED
          from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
            inner join dbo.RECOGNITIONCREDIT RC on FILTERED.ID = RC.ID
            inner join dbo.DONORCHALLENGEENCUMBERED on RC.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
        ) RECOGNITION            
        order by
          RECOGNITION.EFFECTIVEDATE desc, RECOGNITION.DATEADDED desc;

        if exists (select 1 from dbo.REVENUERECOGNITION where ID = @RECOGNITIONLATESTID)
          set @RECOGNITIONLATESTAMOUNT = dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY(@RECOGNITIONLATESTID, @CURRENCYID)
        else
          if exists (select 1 from dbo.RECOGNITIONCREDIT where ID = @RECOGNITIONLATESTID)
            set @RECOGNITIONLATESTAMOUNT = dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY(@RECOGNITIONLATESTID, @CURRENCYID)

        /* Get Household figures */
        if @ISGROUP = 1 or @HOUSEHOLDID is not null
        begin

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


          create table #TMP_DATA_RECOGNITIONSUMMARY_HOUSEHOLDRECOGNITIONIDS
          (  
            ID uniqueidentifier
          );


          if @ISGROUP = 1
          begin
            --Insert members from previous get to keep from having to get them twice

            insert into #TMP_DATA_RECOGNITIONSUMMARY_HOUSEHOLDRECOGNITIONIDS(ID) 
            select FILTERED.ID
            from #TMP_DATA_RECOGNITIONSUMMARY_CONSTITRECOGNITIONIDS FILTERED
            left join dbo.REVENUERECOGNITION RR on RR.ID = FILTERED.ID
            left join dbo.RECOGNITIONCREDIT RC on RC.ID = FILTERED.ID
            where (RR.ID is not null and RR.CONSTITUENTID <> @CONSTITUENTID) or (RC.ID is not null and RC.CONSTITUENTID <> @CONSTITUENTID);
          end
          else
          begin

              if @CAMPAIGNFILTERMODE != 0
              begin
                set @SQL = '
                  declare @CAMPAIGNFILTERTABLE table (ID uniqueidentifier)
                  insert into @CAMPAIGNFILTERTABLE
                  select T.c.value(''(ID)[1]'',''uniqueidentifier'')
                  from @CAMPAIGNSSELECTED.nodes(''/CAMPAIGNSSELECTED/ITEM'') T(c);' + char(13);
                set @RECOGNITIONCREDITS_SQL = replace(@SQL, '@CAMPAIGNFILTERTABLE', '@CAMPAIGNFILTERTABLE_RC');
              end
              else
              begin
                set @SQL = '';
                set @RECOGNITIONCREDITS_SQL = '';
              end

              select @SQL = @SQL + '                    
                with CONSTITS_CTE as (
                  select @HOUSEHOLDID CONSTITUENTID, @STARTDATE STARTDATE, @ENDDATE ENDDATE
                  union all
                  select
                    GROUPMEMBER.MEMBERID as CONSTITUENTID,
                    case when GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM < @STARTDATE then @STARTDATE else GROUPMEMBERDATERANGE.DATEFROM end STARTDATE,
                    case when GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO > @ENDDATE then @ENDDATE else GROUPMEMBERDATERANGE.DATETO end ENDDATE
                  from dbo.GROUPMEMBER
                  left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
                  where
                    GROUPMEMBER.GROUPID = @HOUSEHOLDID
                )
                insert into #TMP_DATA_RECOGNITIONSUMMARY_HOUSEHOLDRECOGNITIONIDS(ID)
                select distinct
                    REVENUERECOGNITION.ID
                from dbo.REVENUERECOGNITION ' + char(13);

              select @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + replace(@SQL, 'REVENUERECOGNITION', 'RECOGNITIONCREDIT')

              --BBNT\RyanDow 2012-04-20

              --Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains

              --Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)

              --If this logic is changed, the other places that use revenue/recognition filters will need to be updated

              if @RECOGNITIONFILTERID is not null
              begin
                    if @REVENUEFILTERID is not null and @REVENUEFILTERFUNCTION is not null and @REVENUEFILTERFUNCTION <> ''
                    begin
                        select @SQL = @SQL + '
                            inner join ' + @REVENUEFILTERFUNCTION + '() FILTERED on FILTERED.ID = REVENUERECOGNITION.REVENUESPLITID ' + CHAR(13);
                    end

                set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL + 'inner join dbo.UFN_RECOGNITIONCREDIT_VALIDFILTER(@RECOGNITIONFILTERID) FILTERED on RECOGNITIONCREDIT.ID = FILTERED.ID ' + char(13);
              end

              set @SQL = @SQL + '
                  inner join CONSTITS_CTE CONSTITS on CONSTITS.CONSTITUENTID = REVENUERECOGNITION.CONSTITUENTID ' + char(13)

              --BBNT\RyanDow 2012-04-20

              --Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains

              --Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)

              --If this logic is changed, the other places that use revenue/recognition filters will need to be updated

              if @RECOGNITIONFILTERID is not null
              begin
                  select @SQL = @SQL + '
                    left join dbo.RECOGNITIONFILTERRECOGNTIONTYPE on RECOGNITIONFILTERRECOGNTIONTYPE.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID
                        and RECOGNITIONFILTERRECOGNTIONTYPE.RECOGNITIONFILTERID = @RECOGNITIONFILTERID ' + CHAR(13)

                if @PLEDGERECOGNITIONCODE <> 1
                  begin
                      select @SQL = @SQL + '
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
                      inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                      inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
                        left join dbo.INSTALLMENTSPLITPAYMENT on FINANCIALTRANSACTIONLINEITEM.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                    left join dbo.FINANCIALTRANSACTION as PLEDGE on INSTALLMENTSPLITPAYMENT.PLEDGEID = PLEDGE.ID ' + CHAR(13)
                  end
              end

              select @SQL = @SQL + '
                  where
                    (CONSTITS.STARTDATE is null or REVENUERECOGNITION.EFFECTIVEDATE >= CONSTITS.STARTDATE)
                    and
 (CONSTITS.ENDDATE is null or REVENUERECOGNITION.EFFECTIVEDATE <= CONSTITS.ENDDATE) ' + char(13);

              set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL +
                '
                  inner join CONSTITS_CTE CONSTITS
                  on CONSTITS.CONSTITUENTID = RECOGNITIONCREDIT.CONSTITUENTID
                  left join dbo.DONORCHALLENGEENCUMBERED on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
                  where
                    (CONSTITS.STARTDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE >= CONSTITS.STARTDATE)
                    and
                    (CONSTITS.ENDDATE is null or RECOGNITIONCREDIT.EFFECTIVEDATE <= CONSTITS.ENDDATE)
                    and 
                    ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or (RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1 and RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID is not null))
                ';

              if @CAMPAIGNFILTERMODE != 0
              begin
                  set @SQL = @SQL +
                      'and exists (
                          select 1
                          from dbo.REVENUESPLITCAMPAIGN
                              inner join @CAMPAIGNFILTERTABLE CAMPAIGNFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNFILTER.ID
                          where REVENUESPLITCAMPAIGN.REVENUESPLITID = REVENUERECOGNITION.REVENUESPLITID
                      ) ' + char(13);

                  set @RECOGNITIONCREDITS_SQL = @RECOGNITIONCREDITS_SQL +
                      'and ((RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 0) or exists (
                          select 1
                          from dbo.REVENUESPLITCAMPAIGN
                              inner join @CAMPAIGNFILTERTABLE_RC CAMPAIGNFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNFILTER.ID
                          where REVENUESPLITCAMPAIGN.REVENUESPLITID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
                      ))' + char(13);
              end

                --BBNT\RyanDow 2012-04-20

                --Pulling recognition and revenue filter SQL directly into this dynamic SQL for performance gains

                --Bypass UFN_REVENUERECOGNITION_VALIDFILTER(@RECOGNITIONFILTERID)

                --If this logic is changed, the other places that use revenue/recognition filters will need to be updated

                if @RECOGNITIONFILTERID is not null
                begin
                    if @PLEDGERECOGNITIONCODE <> 1
                    begin
                        select @SQL = @SQL + '
                            and
                            (
                              -- Find commitments or payments other than pledges

                              (FINANCIALTRANSACTION.TYPECODE <> 0 or REVENUESPLIT_EXT.APPLICATIONCODE <> 2)
                              or
                              -- Find payments without pledge recognition

                              (
                                  (FINANCIALTRANSACTION.TYPECODE = 0 and REVENUESPLIT_EXT.APPLICATIONCODE = 2)
                                  and
                                  (not exists (select top 1 RR.ID from dbo.REVENUERECOGNITION as RR inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on FTLI.ID = RR.REVENUESPLITID where RR.CONSTITUENTID in (select @HOUSEHOLDID union select GM.MEMBERID from dbo.GROUPMEMBER as GM left outer join dbo.GROUPDATA as GD on GD.ID = GM.GROUPID where GM.GROUPID = @HOUSEHOLDID) and FTLI.FINANCIALTRANSACTIONID = PLEDGE.ID))
                              )
                            ) ' + char(13)
                    end

                    select @SQL = @SQL + '
                        and 
                        (
                            RECOGNITIONFILTERRECOGNTIONTYPE.ID is not null
                            or not exists(select top 1 ID from dbo.RECOGNITIONFILTERRECOGNTIONTYPE RSUB where RSUB.RECOGNITIONFILTERID = @RECOGNITIONFILTERID)
                        ) ' + char(13)
                end

        exec sp_executesql @SQL, N'@HOUSEHOLDID uniqueidentifier, @RECOGNITIONFILTERID uniqueidentifier, @STARTDATE datetime,  @ENDDATE datetime, @CAMPAIGNSSELECTED xml'
              @HOUSEHOLDID, @RECOGNITIONFILTERID, @STARTDATE,  @ENDDATE, @CAMPAIGNSSELECTED;

              exec sp_executesql @RECOGNITIONCREDITS_SQL, N'@HOUSEHOLDID uniqueidentifier, @RECOGNITIONFILTERID uniqueidentifier, @STARTDATE datetime,  @ENDDATE datetime, @CAMPAIGNSSELECTED xml'
              @HOUSEHOLDID, @RECOGNITIONFILTERID, @STARTDATE,  @ENDDATE, @CAMPAIGNSSELECTED;
            end

          /*remove based on site filter*/
          delete FILTERED 
          from #TMP_DATA_RECOGNITIONSUMMARY_HOUSEHOLDRECOGNITIONIDS FILTERED
          inner join dbo.REVENUERECOGNITION on FILTERED.ID = REVENUERECOGNITION.ID
          inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
          where
            not exists 
            (
              select top 1 REVSITES.SITEID
              from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(FINANCIALTRANSACTIONLINEITEM.ID) REVSITES
              where
              -- Using a case statement since the standard site extension filters

              -- resulted in a poor plan

              case 
                  when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
                  when exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)) then 1
                  else 0 
                end = 1
              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)
              )
            )

          delete FILTERED 
          from #TMP_DATA_RECOGNITIONSUMMARY_HOUSEHOLDRECOGNITIONIDS FILTERED
          inner join dbo.RECOGNITIONCREDIT on FILTERED.ID = RECOGNITIONCREDIT.ID
          where not exists (
              select top 1 RECOGNITIONCREDIT.ID 
              from dbo.RECOGNITIONCREDIT
              where RECOGNITIONCREDIT.ID = FILTERED.ID
                -- Using a case statement since the standard site extension filters

                -- resulted in a poor plan

                and case 
                  when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
                  when exists (
                      select 1 
                      from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE
                      where SITEID=dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID) or (SITEID is null and dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID) is null)
                    ) then 1
                  else 0 
                end = 1
                and (
                  @SITEFILTERMODE = 0
                    or exists(
                      select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID 
                      from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED
                      where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(RECOGNITIONCREDIT.DESIGNATIONID)
                    )
                )
            );

          /* Get Constituent totals */
          select
            @RECOGNITIONTOTALAMOUNT_HOUSEHOLD = isnull(sum(RECOGNITION.AMOUNTINCURRENCY), 0)
          from 
          (select RR.AMOUNTINCURRENCY
            from #TMP_DATA_RECOGNITIONSUMMARY_HOUSEHOLDRECOGNITIONIDS FILTERED
            inner join dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) RR on FILTERED.ID = RR.ID

            union all

            select RC.AMOUNTINCURRENCY
            from #TMP_DATA_RECOGNITIONSUMMARY_HOUSEHOLDRECOGNITIONIDS FILTERED
            inner join dbo.UFN_RECOGNITIONCREDIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) RC on FILTERED.ID = RC.ID              
          ) RECOGNITION
      end
    end