USP_DATALIST_FUNDRAISERS

Returns a list of all fundraisers

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@ORGPOSITIONSSELECTIONID uniqueidentifier IN Show for
@INCLUDESTEWARDSHIP bit IN Include stewardship steps
@SHOWINACTIVE bit IN Show inactive
@ONLYOWNEDINTERACTIONS bit IN Only show steps owned by this fundraiser
@MAXROWS int IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_FUNDRAISERS 
(
    @CURRENTAPPUSERID uniqueidentifier,
    @ORGPOSITIONSSELECTIONID uniqueidentifier = null,
    @INCLUDESTEWARDSHIP bit = 0,
    @SHOWINACTIVE bit = 0,
    @ONLYOWNEDINTERACTIONS bit = 0,
    @MAXROWS int = null
)  
as begin
    set nocount on;
    declare @TODAY datetime;
    set @TODAY = getdate();

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

    declare @ASSIGNMENTS int = 0;

    -- AdamBu - 11/12/09 - The average calculation should be using the number of plans assigned to fundraisers, not the total number of all plans

    select @ASSIGNMENTS = sum(coalesce(COUNT,0)) 
    from dbo.UFN_PLANCOUNTBYFUNDRAISER()


    declare @AVERAGE int;
    declare @FUNDRAISERS int;
    select @FUNDRAISERS = count(distinct fdr.CONSTITUENTID) 
                            from 
                            dbo.FUNDRAISERDATERANGE fdr
                            where (fdr.DATEFROM <= @UPPERBOUND or fdr.DATEFROM is null
                            and (fdr.DATETO >= @LOWERBOUND or fdr.DATETO is null);

    if @FUNDRAISERS>0
        set @AVERAGE = round(convert(float,@ASSIGNMENTS) / @FUNDRAISERS, 0);

    declare @ISSYSADMIN bit;
    set @ISSYSADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);

    if @ORGPOSITIONSSELECTIONID is null
    begin

    if @MAXROWS is not null
        set ROWCOUNT @MAXROWS

        select
            CONSTITUENT.ID, 
            NF.NAME, 
            coalesce(PLANCOUNT.COUNT,0), 
            '     ' + 
                case when coalesce(PLANCOUNT.COUNT,0)<@AVERAGE then 
                    convert(varchar(10),@AVERAGE-coalesce(PLANCOUNT.COUNT,0)) + ' under'
                when coalesce(PLANCOUNT.COUNT,0)>@AVERAGE then 
                    convert(varchar(10),coalesce(PLANCOUNT.COUNT,0)-@AVERAGE) + ' over'
                else
                    'even'
                end
            DIFF,
            coalesce(P7.COUNT,0), 
            coalesce(P30.COUNT,0), 
            coalesce(C7.COUNT,0), 
            coalesce(C30.COUNT,0)
        from 
            dbo.CONSTITUENT
            inner join dbo.FUNDRAISERDATERANGE on FUNDRAISERDATERANGE.CONSTITUENTID = CONSTITUENT.ID and
                (@SHOWINACTIVE = 1 or 
                    (FUNDRAISERDATERANGE.DATEFROM <= @UPPERBOUND or FUNDRAISERDATERANGE.DATEFROM is null) and
                    (FUNDRAISERDATERANGE.DATETO >= @LOWERBOUND or FUNDRAISERDATERANGE.DATETO is null))
            left outer join dbo.UFN_PLANCOUNTBYFUNDRAISER() PLANCOUNT on CONSTITUENT.ID=PLANCOUNT.ID
            left outer join dbo.UFN_STEPSUMMARY_PLANNED_4  (dateadd(day,   7, @LOWERBOUND), 0, @LOWERBOUND, @INCLUDESTEWARDSHIP) P7  on CONSTITUENT.ID=P7.ID
            left outer join dbo.UFN_STEPSUMMARY_PLANNED_4  (dateadd(day,  30, @LOWERBOUND), 0, @LOWERBOUND, @INCLUDESTEWARDSHIP) P30 on CONSTITUENT.ID=P30.ID
            left outer join dbo.UFN_STEPSUMMARY_COMPLETED_3(dateadd(day,  -7, @UPPERBOUND), @INCLUDESTEWARDSHIP, 0, @UPPERBOUND) C7  on CONSTITUENT.ID=C7.ID
            left outer join dbo.UFN_STEPSUMMARY_COMPLETED_3(dateadd(day, -30, @UPPERBOUND), @INCLUDESTEWARDSHIP, 0, @UPPERBOUND) C30 on CONSTITUENT.ID=C30.ID
            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(CONSTITUENT.ID) NF
        where
            (
                @SHOWINACTIVE = 1
                or CONSTITUENT.ISINACTIVE = 0
            )
            and (
                @ISSYSADMIN = 1
                or dbo.UFN_SECURITY_APPUSER_GRANTED_DATALIST_FORCONSTIT(@CURRENTAPPUSERID,'364848B8-02F7-4b3f-A7AD-689C374ECF92',CONSTITUENT.ID) = 1
            )

        order by 
            CONSTITUENT.KEYNAME, NF.NAME;

        set rowcount 0;
    end
    else
    begin
        declare @IDS as table(ID uniqueidentifier);
        insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, @CURRENTAPPUSERID;

        if @MAXROWS is not null
            set ROWCOUNT @MAXROWS

        select 
            CONSTITUENT.ID, 
            NF.NAME, 
            coalesce(PLANCOUNT.COUNT,0), 
            '     ' + 
                case when coalesce(PLANCOUNT.COUNT,0)<@AVERAGE then 
                    convert(varchar(10),@AVERAGE-coalesce(PLANCOUNT.COUNT,0)) + ' under'
                when coalesce(PLANCOUNT.COUNT,0)>@AVERAGE then 
                    convert(varchar(10),coalesce(PLANCOUNT.COUNT,0)-@AVERAGE) + ' over'
                else
                    'even'
                end
            DIFF,
            coalesce(P7.COUNT,0), 
            coalesce(P30.COUNT,0), 
            coalesce(C7.COUNT,0), 
            coalesce(C30.COUNT,0)
        from 
            dbo.CONSTITUENT
            inner join dbo.FUNDRAISERDATERANGE on FUNDRAISERDATERANGE.CONSTITUENTID = CONSTITUENT.ID and
                (
                    @SHOWINACTIVE = 1 or 
                    (FUNDRAISERDATERANGE.DATEFROM <= @UPPERBOUND or FUNDRAISERDATERANGE.DATEFROM is null) and
                    (FUNDRAISERDATERANGE.DATETO >= @LOWERBOUND or FUNDRAISERDATERANGE.DATETO is null)
                )
            left outer join dbo.UFN_PLANCOUNTBYFUNDRAISER() PLANCOUNT on CONSTITUENT.ID=PLANCOUNT.ID
            left outer join dbo.UFN_STEPSUMMARY_PLANNED_4  (dateadd(day,   7, @LOWERBOUND), @ONLYOWNEDINTERACTIONS, @LOWERBOUND, @INCLUDESTEWARDSHIP) P7  on CONSTITUENT.ID=P7.ID
            left outer join dbo.UFN_STEPSUMMARY_PLANNED_4  (dateadd(day,  30, @LOWERBOUND), @ONLYOWNEDINTERACTIONS, @LOWERBOUND, @INCLUDESTEWARDSHIP) P30 on CONSTITUENT.ID=P30.ID
            left outer join dbo.UFN_STEPSUMMARY_COMPLETED_3(dateadd(day,  -7, @UPPERBOUND), @INCLUDESTEWARDSHIP, @ONLYOWNEDINTERACTIONS, @UPPERBOUND) C7  on CONSTITUENT.ID=C7.ID
            left outer join dbo.UFN_STEPSUMMARY_COMPLETED_3(dateadd(day, -30, @UPPERBOUND), @INCLUDESTEWARDSHIP, @ONLYOWNEDINTERACTIONS, @UPPERBOUND) C30 on CONSTITUENT.ID=C30.ID
            inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH on OPH.CONSTITUENTID = CONSTITUENT.ID and @TODAY between OPH.DATEFROM and coalesce(OPH.DATETO, @TODAY)
            inner join @IDS as SELECTION on OPH.[ID] = SELECTION.[ID]
            outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(CONSTITUENT.ID) NF
        where
            (
                @SHOWINACTIVE = 1
                or CONSTITUENT.ISINACTIVE = 0
            )
            and (
                @ISSYSADMIN = 1
                or dbo.UFN_SECURITY_APPUSER_GRANTED_DATALIST_FORCONSTIT(@CURRENTAPPUSERID,'364848B8-02F7-4b3f-A7AD-689C374ECF92',CONSTITUENT.ID) = 1
            )
        order by 
            CONSTITUENT.KEYNAME, NF.NAME;

        set rowcount 0;
    end                                              
end;