USP_DATALIST_CONSTITUENTPROFILEDASHBOARDREVENUEBYDESIGNATION

Returns a constituent's revenue by designation.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN Constituent
@ISVISIBLE bit IN Visible
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SELECTEDCURRENCYID uniqueidentifier IN Selected currency ID
@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.
@REVENUEFILTERID uniqueidentifier IN

Definition

Copy


                    CREATE procedure dbo.USP_DATALIST_CONSTITUENTPROFILEDASHBOARDREVENUEBYDESIGNATION
                    (
                        @CONSTITUENTID uniqueidentifier,
                        @ISVISIBLE bit = 1,
                        @CURRENTAPPUSERID uniqueidentifier = null,
                        @SELECTEDCURRENCYID uniqueidentifier = null,
                        @SECURITYFEATUREID uniqueidentifier = null,
                        @SECURITYFEATURETYPE tinyint = null,
                        @REVENUEFILTERID uniqueidentifier = null
                    )
                    with execute as OWNER
                    as
                        set nocount on;

                        if @ISVISIBLE = 1
                        begin

                            declare
                            @CURRENCYDECIMALDIGITS tinyint = 0,
                            @ORGANIZATIONCURRENCYID uniqueidentifier = null,
                            @CURRENCYROUNDINGTYPECODE tinyint

                            set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                            declare @ORIGINCODE tinyint
                            select @ORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE
                            from dbo.MULTICURRENCYCONFIGURATION;

                            declare @CURRENCYCODE tinyint = 3
                            if @SELECTEDCURRENCYID = @ORGANIZATIONCURRENCYID 
                                set @CURRENCYCODE = 1;

                            select
                              @CURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS,
                              @CURRENCYROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
                           from dbo.CURRENCY where ID = @SELECTEDCURRENCYID;

                            declare @ISGROUP bit;
                            declare @INCLUDEMEMBERGIVING bit;

                            select 
                              @ISGROUP = 1,
                              @INCLUDEMEMBERGIVING = 
                              case 
                                  when GROUPDATA.GROUPTYPECODE = 0 or GROUPTYPE.INCLUDEMEMBERGIVING = 1 then 1 
                                  else 0 
                               end
                            from dbo.GROUPDATA
                            left join dbo.GROUPTYPE on GROUPDATA.GROUPTYPEID = GROUPTYPE.ID
                            where GROUPDATA.ID = @CONSTITUENTID;

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

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


                            create table #TMP_DATA_CONSTITUENTPROFILEDASHBOARDREVENUEBYDESIGNATION_REVENUESPLITIDS
                            (  
                              ID uniqueidentifier,
                              ISGROUPMEMBER bit,
                              ISGROUP bit
                            );


                            declare @SQL nvarchar(max);

                            set @SQL = '
                              with CONSTITS_CTE as
                              (
                                select  
                                  @CONSTITUENTID as CONSTITUENTID,
                                  null as DATEFROM,
                                  null as DATETO,
                                  0 ISGROUPMEMBER,
                                  0 ISGROUP 
                           '

                           if @INCLUDEMEMBERGIVING=1
                             set @SQL = @SQL + '
                                  union all
                  select
                                    GROUPMEMBER.MEMBERID as CONSTITUENTID,
                                    GROUPMEMBERDATERANGE.DATEFROM,
                                    GROUPMEMBERDATERANGE.DATETO,
                                    1 ISGROUPMEMBER,
                                    0 ISGROUP
                                  from dbo.GROUPMEMBER
                                  left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
                                  where
                                    GROUPMEMBER.GROUPID = @CONSTITUENTID
                              '

                           set @SQL = @SQL + '
                                union all
                                select GROUPMEMBER.GROUPID as CONSTITUENTID,
                                  GROUPMEMBERDATERANGE.DATEFROM,
                                  GROUPMEMBERDATERANGE.DATETO,
                                  0 ISGROUPMEMBER,
                                  1 ISGROUP
                                from dbo.GROUPMEMBER 
                                left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID 
                                where 
                                    GROUPMEMBER.MEMBERID = @CONSTITUENTID
                              )
                              insert into #TMP_DATA_CONSTITUENTPROFILEDASHBOARDREVENUEBYDESIGNATION_REVENUESPLITIDS(ID,ISGROUPMEMBER,ISGROUP)
                              select REVENUESPLIT.ID,CONSTITS.ISGROUPMEMBER,CONSTITS.ISGROUP
                              from REVENUESPLIT ' + char(13);

                             if @REVENUEFILTERID is not null
                              set @SQL = @SQL + 'inner join dbo.UFN_REVENUEFILTER_BYID(@REVENUEFILTERID) FILTERED on REVENUESPLIT.ID = FILTERED.ID ' + char(13);

                             set @SQL = @SQL +
                                'inner join dbo.REVENUE
                                  on REVENUE.ID = REVENUESPLIT.REVENUEID
                                inner join CONSTITS_CTE CONSTITS
                                  on CONSTITS.CONSTITUENTID = REVENUE.CONSTITUENTID
                                where REVENUE.TRANSACTIONTYPECODE not in (5, 2) ' + char(13);

                             exec sp_executesql @SQL, N'@CONSTITUENTID uniqueidentifier,@REVENUEFILTERID uniqueidentifier',@CONSTITUENTID,@REVENUEFILTERID;


                            /*DELETE FOR SECURITY AND SITEFILTER*/
                            delete FILTERED 
                            from #TMP_DATA_CONSTITUENTPROFILEDASHBOARDREVENUEBYDESIGNATION_REVENUESPLITIDS FILTERED
                            where
                                not exists 
                                (
                                    select top 1 REVSITES.SITEID 
                                            from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(FILTERED.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
                                )


                            declare @REVLIST table
                            (  
                              REVENUEID uniqueidentifier,
                              DESIGNATIONID uniqueidentifier,
                              AMOUNT money,
                              ISGROUPMEMBER bit,
                              ISGROUP bit
                            );

                         insert into @REVLIST
                            select REVENUESPLIT.REVENUEID,
                                    REVENUESPLIT.DESIGNATIONID,
                                    case 
                                        when REVENUE.TRANSACTIONTYPECODE in (
                                            1, --Pledge

                                            3, --Matching gift claim

                                            4, --Planned gift

                                            6, --Grant award

                                            8 --Donor challenge claim

                                        ) 
                                        then
                                            (select REVENUESPLITBALANCE.BALANCE 
                                            from dbo.UFN_PLEDGE_GETREVALUEDSPLITBALANCESINCURRENCY(
                                                REVENUE.ID,
                                                @SELECTEDCURRENCYID
                                                @ORGANIZATIONCURRENCYID
                                                @CURRENCYDECIMALDIGITS
                                                @CURRENCYROUNDINGTYPECODE,
                                                @CURRENTDATE,
                                                @ORIGINCODE,
                                                @CURRENCYCODE
                                            ) as REVENUESPLITBALANCE
                                            where REVENUESPLITBALANCE.ID = FILTERED.ID)
                                        else REVENUESPLIT.AMOUNTINCURRENCY 
                                    end AMOUNT,
                                    FILTERED.ISGROUP,
                                    FILTERED.ISGROUPMEMBER
                                    from #TMP_DATA_CONSTITUENTPROFILEDASHBOARDREVENUEBYDESIGNATION_REVENUESPLITIDS FILTERED
                                          inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
                                            @SELECTEDCURRENCYID
                                            @ORGANIZATIONCURRENCYID
                                            @CURRENCYDECIMALDIGITS
                                            @CURRENCYROUNDINGTYPECODE) as REVENUESPLIT on FILTERED.ID = REVENUESPLIT.ID
                                        inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID;

                            with REV_CTE
                            as
                            (
                              select 
                                DESIGNATIONID,
                                count(distinct REVENUEID) CNT,
                                sum(AMOUNT) AMOUNT,
                                ISGROUPMEMBER,
                                ISGROUP
                              from @REVLIST
                              group by DESIGNATIONID, ISGROUPMEMBER, ISGROUP
                            )
                            ,DES_CTE as
                            (
                            select
                                DESIGNATIONID,
                                sum(case when REVSUB.ISGROUP=0 and REVSUB.ISGROUPMEMBER=0 then REVSUB.AMOUNT else 0 end) as CONSTITUENTAMOUNT,
                                sum(case when REVSUB.ISGROUP=0 and REVSUB.ISGROUPMEMBER=0 then REVSUB.CNT else 0 end) as CONSTITUENTNUMBER,
                                sum(case when REVSUB.ISGROUPMEMBER=1 then REVSUB.AMOUNT else 0 end) as MEMBERAMOUNT,
                                sum(case when REVSUB.ISGROUPMEMBER=1 then REVSUB.CNT else 0 end) as MEMBERNUMBER,
                                sum(case when REVSUB.ISGROUP=1 then REVSUB.AMOUNT else 0 end) as ASSOCIATEDGROUPSAMOUNT,
                                sum(case when REVSUB.ISGROUP=1 then REVSUB.CNT else 0 end) as ASSOCIATEDGROUPSNUMBER
                            from
                                REV_CTE REVSUB
                            group by DESIGNATIONID
                            )
                            select DESIGNATION.NAME,
                                DES_CTE.CONSTITUENTAMOUNT,
                                DES_CTE.CONSTITUENTNUMBER,
                                DES_CTE.MEMBERAMOUNT,
                                DES_CTE.MEMBERNUMBER,
                                DES_CTE.ASSOCIATEDGROUPSAMOUNT,
                                DES_CTE.ASSOCIATEDGROUPSNUMBER
                            from DES_CTE
                            inner join dbo.DESIGNATION on DESIGNATION.ID = DES_CTE.DESIGNATIONID
                            order by DESIGNATION.NAME
                        end