USP_REPORT_GIVINGLEVELPROGRAM_WITHIDSET

Returns necessary data for the Giving Level Program Report.

Parameters

Parameter Parameter Type Mode Description
@IDSETID uniqueidentifier IN
@GIVINGLEVELPROGRAMID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_REPORT_GIVINGLEVELPROGRAM_WITHIDSET
            (
                @IDSETID uniqueidentifier = null,
                @GIVINGLEVELPROGRAMID uniqueidentifier = null
            ) with execute as owner as
                set nocount on;

                declare @DBOBJECTNAME nvarchar(128);
                declare @DBOBJECTTYPE smallint;

                if @IDSETID is not null begin
                    if not exists(select ID from dbo.IDSETREGISTER where ID = @IDSETID) raiserror('ID set does not exist in the database.', 15, 1);
                    select @DBOBJECTNAME = DBOBJECTNAME, @DBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @IDSETID;
                    if @DBOBJECTTYPE = 1 set @DBOBJECTNAME = @DBOBJECTNAME + '()';
                    else if @DBOBJECTTYPE = 2 set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @IDSETID) + ''')';
                end

                declare @SMARTFIELDID uniqueidentifier;
                declare @SMARTFIELDTABLENAME nvarchar(100);

                select @SMARTFIELDID = GIVINGLEVELPROGRAM.SMARTFIELDID
                from dbo.GIVINGLEVELPROGRAM
                where GIVINGLEVELPROGRAM.ID = @GIVINGLEVELPROGRAMID;

                declare @MINIMUMUNIT money;
                select @MINIMUMUNIT =  coalesce(power(10.0000,-CURRENCY.DECIMALDIGITS), 0.01)
                from dbo.CURRENCY where CURRENCY.ID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                declare @SQLTOEXEC nvarchar(max);

                if @SMARTFIELDID is not null begin
                    if not exists(select ID from dbo.SMARTFIELD where ID = @SMARTFIELDID) raiserror('Smart field does not exist in the database.', 15, 1);

                    select @SMARTFIELDTABLENAME = TABLENAME
                    from dbo.TABLECATALOG
                    inner join dbo.SMARTFIELD on TABLECATALOG.ID = SMARTFIELD.TABLECATALOGID
                    where SMARTFIELD.ID = @SMARTFIELDID;
                end                
                set @SQLTOEXEC = N'set nocount on;

                with
                    GIVINGLEVELPROGRAMINNER_CTE as (
                        select
                            GLP.[NAME] PROGRAMNAME,
                            GLPL.[NAME] LEVELNAME,
                            GLPL.[MINIMUMAMOUNT] MINAMOUNT,
                            ROW_NUMBER() over (order by GLPL.[MINIMUMAMOUNT]) ROWNUMBER
                        from
                            dbo.[GIVINGLEVELPROGRAM] GLP
                        inner join
                            dbo.[GIVINGLEVELPROGRAMLEVEL] GLPL
                        on
                            GLPL.[GIVINGLEVELPROGRAMID] = GLP.[ID]
                        where
                            GLP.[ID] = @GIVINGLEVELPROGRAMID),
                    GIVINGLEVELPROGRAM_CTE as (
                        select
                            GIVINGLEVELPROGRAMINNER_CTE.[PROGRAMNAME],
                            GIVINGLEVELPROGRAMINNER_CTE.[LEVELNAME],
                            GIVINGLEVELPROGRAMINNER_CTE.[MINAMOUNT],
                            (select [MINAMOUNT] - @MINIMUMUNIT from GIVINGLEVELPROGRAMINNER_CTE SUB where SUB.[ROWNUMBER] = GIVINGLEVELPROGRAMINNER_CTE.[ROWNUMBER] + 1) MAXAMOUNT
                        from
                            GIVINGLEVELPROGRAMINNER_CTE),
                    CONSTITUENTREVENUE_CTE as (
                        select
                            ''http://www.blackbaud.com/CONSTITUENTID?CONSTITUENTID='' + CONVERT(nvarchar(36),C.[ID]) ID,
                            C.[KEYNAME],
                            NF.[NAME],
                            SF.[VALUE] AMOUNT
                        from
                            dbo.[CONSTITUENT] C with (nolock)
                            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(C.ID) NF
                            ' + nchar(13);

                set @SQLTOEXEC = @SQLTOEXEC + 'inner join dbo.' + @SMARTFIELDTABLENAME + ' as SF on C.[ID] = SF.[ID]' + nchar(13);

                if @IDSETID is not null begin
                    set @SQLTOEXEC = @SQLTOEXEC + 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on C.[ID] = SELECTION.[ID]' + nchar(13);
                end

                set @SQLTOEXEC = @SQLTOEXEC + N'inner join
                            GIVINGLEVELPROGRAMINNER_CTE
                        on
                            GIVINGLEVELPROGRAMINNER_CTE.ROWNUMBER = 1
                        group by
                            C.[ID], C.[KEYNAME], NF.[NAME], GIVINGLEVELPROGRAMINNER_CTE.[MINAMOUNT], SF.[VALUE]
                        having
                            SF.[VALUE] >= GIVINGLEVELPROGRAMINNER_CTE.[MINAMOUNT])
                        select
                            GIVINGLEVELPROGRAM_CTE.PROGRAMNAME,
                            GIVINGLEVELPROGRAM_CTE.LEVELNAME,
                            GIVINGLEVELPROGRAM_CTE.MINAMOUNT,
                            GIVINGLEVELPROGRAM_CTE.MAXAMOUNT,
                            CONSTITUENTREVENUE_CTE.ID CONSTITUENTID,
                            CONSTITUENTREVENUE_CTE.KEYNAME CONSTITUENTKEYNAME,
                            CONSTITUENTREVENUE_CTE.NAME CONSTITUENTNAME,
                            CONSTITUENTREVENUE_CTE.AMOUNT
                        from
                            GIVINGLEVELPROGRAM_CTE
                        left join
                            CONSTITUENTREVENUE_CTE
                        on
                            CONSTITUENTREVENUE_CTE.AMOUNT >= GIVINGLEVELPROGRAM_CTE.MINAMOUNT and
                            (CONSTITUENTREVENUE_CTE.AMOUNT <= GIVINGLEVELPROGRAM_CTE.MAXAMOUNT or
                            GIVINGLEVELPROGRAM_CTE.MAXAMOUNT is null)
                        order by
                            GIVINGLEVELPROGRAM_CTE.MINAMOUNT, CONSTITUENTREVENUE_CTE.KEYNAME, CONSTITUENTREVENUE_CTE.NAME;';

                        exec sp_executesql @SQLTOEXEC, N'@GIVINGLEVELPROGRAMID uniqueidentifier, @MINIMUMUNIT money',@GIVINGLEVELPROGRAMID=@GIVINGLEVELPROGRAMID,@MINIMUMUNIT=@MINIMUMUNIT;