USP_REPORT_TEAMFUNDRAISINGEVENTPERFORMANCE
Returns rows for Team Fundraising Event Performance report.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@EVENTQUERYID | uniqueidentifier | IN | |
@EVENTID | uniqueidentifier | IN | |
@QUICKCOMPEVENTS | nvarchar(max) | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@REPORTUSERID | nvarchar(128) | IN | |
@CURRENCYCODE | tinyint | IN | |
@ALTREPORTUSERID | nvarchar(128) | IN |
Definition
Copy
CREATE procedure dbo.USP_REPORT_TEAMFUNDRAISINGEVENTPERFORMANCE
(
@EVENTQUERYID uniqueidentifier = null,
@EVENTID uniqueidentifier = null,
@QUICKCOMPEVENTS nvarchar(max) = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@REPORTUSERID nvarchar(128),
@CURRENCYCODE tinyint = null,
@ALTREPORTUSERID nvarchar(128) = null
)
as
set nocount on;
begin try
create table #FUNDRAISERINFO
(
EVENTID uniqueidentifier,
TEAMID uniqueidentifier,
PARENTTEAMID uniqueidentifier,
FUNDRAISERID uniqueidentifier,
REVENUEID uniqueidentifier,
AMOUNTSOLICITED money
)
declare @CURRENTAPPUSERID uniqueidentifier;
set @CURRENTAPPUSERID = dbo.UFN_APPUSER_GETREPORTAPPUSERID(@REPORTUSERID, @ALTREPORTUSERID);
declare @SELECTEDCURRENCYID uniqueidentifier;
if @CURRENCYCODE = 3
begin
if dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID) is not null
begin
select @SELECTEDCURRENCYID = CURRENCYSET.BASECURRENCYID
from dbo.CURRENCYSET
where
CURRENCYSET.ID = dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID);
end
else
begin
select @SELECTEDCURRENCYID = CURRENCYSET.BASECURRENCYID
from dbo.CURRENCYSET
where
CURRENCYSET.ID = dbo.UFN_CURRENCYSET_GETAPPUSERDEFAULTCURRENCYSET();
end
end
else
set @SELECTEDCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
-- Retrieve the table for the selection, if there is one.
declare @DBOBJECTNAME nvarchar(128);
declare @DBOBJECTTYPE smallint;
if @EVENTQUERYID is not null begin
if not exists(select ID from dbo.IDSETREGISTER where ID = @EVENTQUERYID) raiserror('ID set does not exist in the database.', 15, 1);
select @DBOBJECTNAME = DBOBJECTNAME, @DBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @EVENTQUERYID;
if @DBOBJECTTYPE = 1 set @DBOBJECTNAME = @DBOBJECTNAME + '()';
else if @DBOBJECTTYPE = 2 set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @EVENTQUERYID) + ''')';
end
declare @SQLTOEXEC nvarchar(max);
set @SQLTOEXEC =
'-- Build a table to contain those events that are to
-- be included if the user selected a specific
-- event and some of its quick comparisons
declare @INCLUDEDEVENTS table(
ID uniqueidentifier
);
insert into @INCLUDEDEVENTS (ID)
values (@EVENTID);
declare @TEMPID uniqueidentifier
while len(@QUICKCOMPEVENTS) > 0
begin
set @TEMPID = convert( uniqueidentifier, substring(@QUICKCOMPEVENTS, 1, 36 ));
if (@TEMPID <> ''00000000-0000-0000-0000-000000000000'' and @TEMPID <> ''00000000-0000-0000-0000-000000000001'') and not exists(select ID from @INCLUDEDEVENTS where ID=@TEMPID)
begin
insert into @INCLUDEDEVENTS (ID)
values (@TEMPID);
end
set @QUICKCOMPEVENTS = substring(@QUICKCOMPEVENTS, 37, len(@QUICKCOMPEVENTS) - 36 );
end
-- Retrieve all the data that will be need to do
-- the report calculations
insert into #FUNDRAISERINFO
(
EVENTID,
TEAMID,
PARENTTEAMID,
FUNDRAISERID,
REVENUEID,
AMOUNTSOLICITED
)
select
EVENT.ID,
TEAMFUNDRAISINGTEAM.ID,
TEAMFUNDRAISINGTEAM.PARENTTEAMID,
TEAMFUNDRAISER.ID,
REVENUE.ID,
case when REVENUE.ID is null then 0 else sum(coalesce(dbo.UFN_REVENUESOLICITOR_GETAMOUNTINCURRENCY(REVENUESOLICITOR.ID, @SELECTEDCURRENCYID),0)) end
from dbo.EVENT
inner join dbo.TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.APPEALID=EVENT.APPEALID
left join dbo.TEAMFUNDRAISINGTEAMMEMBER on TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAM.ID
left join dbo.TEAMFUNDRAISER
on TEAMFUNDRAISER.APPEALID = EVENT.APPEALID and TEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
left join dbo.REVENUESOLICITOR on REVENUESOLICITOR.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
left join dbo.REVENUESPLIT on REVENUESPLIT.ID = REVENUESOLICITOR.REVENUESPLITID
left join dbo.REVENUE with (nolock) on REVENUE.APPEALID = EVENT.APPEALID and REVENUESPLIT.REVENUEID = REVENUE.ID
' + nchar(13);
if not @EVENTID is null
begin
set @SQLTOEXEC = @SQLTOEXEC +
'inner join @INCLUDEDEVENTS INCLUDEDEVENTS on INCLUDEDEVENTS.ID=EVENT.ID' + nchar(13);
end
else
begin
if @EVENTQUERYID is not null
begin
set @SQLTOEXEC = @SQLTOEXEC +
'inner join dbo.' + @DBOBJECTNAME + ' as EVENTQUERY on EVENT.[ID] = EVENTQUERY.[ID]' + nchar(13);
end
end
set @SQLTOEXEC = @SQLTOEXEC +
'where
(EVENT.STARTDATE >= @STARTDATE or @STARTDATE is null) --On or after start date
and (EVENT.STARTDATE <= @ENDDATE or @ENDDATE is null) --On or before end date
and (
(
(REVENUE.TRANSACTIONTYPECODE = 1
or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0,3))
--adding event registration donation
or (REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 1 and REVENUESPLIT.TYPECODE = 0)
) --Revenue is a pledge, gift, and recurring gift payment
) --Fundraiser has raised money for the event/appeal in question
or REVENUESOLICITOR.ID is null --Fundraiser has not raised anything yet
or ((not REVENUESOLICITOR.ID is null) and REVENUE.ID is null) --Fundraiser has raised money, but it is not for the appeal/event in question
)
and (@CURRENTAPPUSERID is null or dbo.UFN_EVENT_USERHASSITEACCESS(@CURRENTAPPUSERID, EVENT.ID) = 1) --Check site security on event
group by EVENT.ID, TEAMFUNDRAISINGTEAM.ID, TEAMFUNDRAISER.ID, REVENUE.ID,
TEAMFUNDRAISINGTEAM.PARENTTEAMID' + nchar(13);
exec sp_executesql @SQLTOEXEC,
N'@EVENTQUERYID uniqueidentifier, @EVENTID uniqueidentifier, @QUICKCOMPEVENTS nvarchar(max), @STARTDATE datetime, @ENDDATE datetime, @CURRENTAPPUSERID uniqueidentifier, @SELECTEDCURRENCYID uniqueidentifier',
@EVENTQUERYID=@EVENTQUERYID, @EVENTID=@EVENTID, @QUICKCOMPEVENTS=@QUICKCOMPEVENTS, @STARTDATE=@STARTDATE, @ENDDATE=@ENDDATE,@CURRENTAPPUSERID=@CURRENTAPPUSERID, @SELECTEDCURRENCYID=@SELECTEDCURRENCYID;
--Filter collected data for calculating event totals
declare @EVENTINFO table(
EVENTID uniqueidentifier,
REVENUEID uniqueidentifier,
AMOUNTSOLICITED money
)
insert into @EVENTINFO
(
EVENTID,
REVENUEID,
AMOUNTSOLICITED
)
select distinct EVENTID, REVENUEID, AMOUNTSOLICITED
from #FUNDRAISERINFO
--Filter collected data for calculating team totals
declare @TEAMINFO table(
EVENTID uniqueidentifier,
TEAMID uniqueidentifier,
PARENTTEAMID uniqueidentifier,
TOTAL money,
NUMGIFTS int,
MAXGIFT money
)
insert into @TEAMINFO
(
EVENTID,
TEAMID,
PARENTTEAMID,
TOTAL,
NUMGIFTS,
MAXGIFT
)
select
EVENTID,
TEAMID,
PARENTTEAMID,
sum(AMOUNTSOLICITED) TOTAL,
count(REVENUEID) NUMGIFTS,
max(AMOUNTSOLICITED) MAXGIFT
from (
select distinct
EVENTID,
TEAMID,
PARENTTEAMID,
REVENUEID,
AMOUNTSOLICITED
from #FUNDRAISERINFO
) TEAMINFO
group by EVENTID, TEAMID, PARENTTEAMID;
-- Calculate totals and build dataset
with CTE_TEAMCHILDREN( TEAMID, ANCESTORTEAMID, TEAMREVENUE ) as
(
select TEAMID, TEAMID, TOTAL
from @TEAMINFO
where TEAMID in (
select PARENTTEAMID
from @TEAMINFO
)
union all
select TEAMINFO.TEAMID, CTE_TEAMCHILDREN.ANCESTORTEAMID, TEAMINFO.TOTAL
from @TEAMINFO TEAMINFO
inner join CTE_TEAMCHILDREN on TEAMINFO.PARENTTEAMID=CTE_TEAMCHILDREN.TEAMID
)
select distinct
'http://www.blackbaud.com/EVENTID?EVENTID=' + convert(nvarchar(36),EVENT.ID) as EVENTID,
EVENT.NAME EVENTNAME,
EVENTINFO.TOTAL EVENTTOTAL,
dbo.UFN_APPEAL_GETGOALINCURRENCY(APPEAL.ID, @SELECTEDCURRENCYID) EVENTGOAL,
EVENTINFO.NUMGIFTS EVENTNUMGIFTS,
EVENTINFO.MAXGIFT EVENTMAXGIFT,
dbo.UFN_TEAMFUNDRAISINGTEAM_BUILDFULLNAME(TEAMINFO.TEAMID) TEAMNAME,
coalesce(TEAMROLLUPTOTALS.ROLLUPTOTAL,TEAMINFO.TOTAL) TEAMROLLUPTOTAL,
TEAMINFO.TOTAL TEAMTOTAL,
case
when @SELECTEDCURRENCYID = TEAMFUNDRAISINGTEAM.BASECURRENCYID then
TEAMFUNDRAISINGTEAM.GOAL
when (@CURRENCYCODE = 3) and (@SELECTEDCURRENCYID <> dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()) then
dbo.UFN_CURRENCY_CONVERT(TEAMFUNDRAISINGTEAM.ORGANIZATIONGOAL, dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(), @SELECTEDCURRENCYID, (select top 1 [INNERAPPEAL].DATEADDED from dbo.APPEAL [INNERAPPEAL] where [INNERAPPEAL].ID = TEAMFUNDRAISINGTEAM.APPEALID), 1, null))
else
TEAMFUNDRAISINGTEAM.ORGANIZATIONGOAL
end TEAMGOAL,
TEAMINFO.NUMGIFTS TEAMNUMGIFTS,
TEAMINFO.MAXGIFT TEAMMAXGIFT,
CONSTITUENT.NAME FUNDRAISERNAME,
FUNDRAISERINFO.TOTAL FUNDRAISERTOTAL,
case
when @SELECTEDCURRENCYID = TEAMFUNDRAISER.BASECURRENCYID then
TEAMFUNDRAISER.GOAL
when (@CURRENCYCODE = 3) and (@SELECTEDCURRENCYID <> dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()) then
dbo.UFN_CURRENCY_CONVERT(TEAMFUNDRAISER.ORGANIZATIONGOAL, dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(), @SELECTEDCURRENCYID, (select top 1 [INNERAPPEAL].DATEADDED from dbo.APPEAL [INNERAPPEAL] where [INNERAPPEAL].ID = TEAMFUNDRAISER.APPEALID), 1, null))
else
TEAMFUNDRAISER.ORGANIZATIONGOAL
end FUNDRAISERGOAL,
FUNDRAISERINFO.NUMGIFTS FUNDRAISERNUMGIFTS,
FUNDRAISERINFO.MAXGIFT FUNDRAISERMAXGIFT,
CURRENCYPROPERTIES.ISO4217 [ISOCURRENCYCODE],
CURRENCYPROPERTIES.CURRENCYSYMBOL,
CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE [CURRENCYSYMBOLDISPLAYSETTINGCODE],
CURRENCYPROPERTIES.DECIMALDIGITS
from (
select
EVENTID,
TEAMID,
FUNDRAISERID ID,
sum(AMOUNTSOLICITED) TOTAL,
count(REVENUEID) NUMGIFTS,
max(AMOUNTSOLICITED) MAXGIFT
from #FUNDRAISERINFO
group by EVENTID, TEAMID, FUNDRAISERID
) FUNDRAISERINFO
inner join dbo.EVENT on EVENT.ID = FUNDRAISERINFO.EVENTID
inner join(
select
EVENTID ID,
sum(AMOUNTSOLICITED) TOTAL,
count(REVENUEID) NUMGIFTS,
max(AMOUNTSOLICITED) MAXGIFT
from @EVENTINFO
group by EVENTID
) EVENTINFO on EVENTINFO.ID = EVENT.ID
inner join dbo.APPEAL on APPEAL.ID = EVENT.APPEALID
left join dbo.TEAMFUNDRAISER on TEAMFUNDRAISER.ID = FUNDRAISERINFO.ID
left join dbo.CONSTITUENT with (nolock) on CONSTITUENT.ID = TEAMFUNDRAISER.CONSTITUENTID
left join dbo.TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAM.ID = FUNDRAISERINFO.TEAMID
left join @TEAMINFO TEAMINFO on TEAMINFO.TEAMID = TEAMFUNDRAISINGTEAM.ID and TEAMINFO.EVENTID = EVENT.ID
left join(
select
ANCESTORTEAMID TEAMID,
sum(TEAMREVENUE) ROLLUPTOTAL
from CTE_TEAMCHILDREN
group by ANCESTORTEAMID
) TEAMROLLUPTOTALS on TEAMROLLUPTOTALS.TEAMID=TEAMINFO.TEAMID
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(@SELECTEDCURRENCYID) CURRENCYPROPERTIES
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;