USP_KPI_EVENTS_REVENUE_VALUE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@VALUE | money | INOUT | |
@ASOFDATE | datetime | IN | |
@EVENTID | uniqueidentifier | IN | |
@INCLUDEREGISTRATIONS | bit | IN | |
@INCLUDEDONTATIONS | bit | IN | |
@INCLUDEOTHER | bit | IN | |
@OTHERTYPECODEID | uniqueidentifier | IN | |
@INCLUDESUBEVENTS | bit | IN | |
@CURRENCYID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_KPI_EVENTS_REVENUE_VALUE
@VALUE money output,
@ASOFDATE datetime,
@EVENTID uniqueidentifier,
@INCLUDEREGISTRATIONS bit = 1,
@INCLUDEDONTATIONS bit = 1,
@INCLUDEOTHER bit = 1,
@OTHERTYPECODEID uniqueidentifier = null,
@INCLUDESUBEVENTS bit = 0,
@CURRENCYID uniqueidentifier = null
as
set nocount on;
set @VALUE=0;
declare @REGISTRATIONINCOME money = 0;
declare @REFUNDS money = 0;
declare @DONATIONINCOME money = 0;
declare @OTHERINCOME money = 0;
declare @APPEALIDS table (ID uniqueidentifier);
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
select
@DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
@ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
from
dbo.CURRENCY
where
CURRENCY.ID = @CURRENCYID;
select @ASOFDATE=dbo.UFN_DATE_GETLATESTTIME(@ASOFDATE);
declare @EVENTS table
(
ID uniqueidentifier
)
if @INCLUDESUBEVENTS = 0
begin
insert into @EVENTS
select @EVENTID
end
else begin
insert into @EVENTS
select RELATEDEVENT.ID
from dbo.EVENTHIERARCHY as RELATEDEVENT
inner join dbo.EVENTHIERARCHY as SOURCEEVENT on SOURCEEVENT.ID = @EVENTID
where RELATEDEVENT.HIERARCHYPATH.IsDescendantOf(SOURCEEVENT.HIERARCHYPATH) = 1
end
if (@INCLUDEDONTATIONS = 1) or (@INCLUDEOTHER = 1)
begin
-- Get all of the team fundraising appeals.
insert into @APPEALIDS(ID)
select
EVENT.APPEALID
from
dbo.EVENT
where
(EVENT.APPEALID is not null)
and (
EVENT.ID in (select ID from @EVENTS)
)
-- Get all of the other appeals.
insert into @APPEALIDS(ID)
select
EVENTAPPEAL.APPEALID
from
dbo.EVENTAPPEAL
where
EVENTAPPEAL.EVENTID in (select ID from @EVENTS)
end
if @INCLUDEREGISTRATIONS = 1
begin
select @REGISTRATIONINCOME = coalesce(sum(coalesce(REVENUESPLITAMOUNTINCURRENCY.AMOUNTINCURRENCY,0)),0)
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REGISTRANT on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
inner join dbo.EVENT on EVENT.ID = REGISTRANT.EVENTID
inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) REVENUESPLITAMOUNTINCURRENCY on REVENUESPLITAMOUNTINCURRENCY.ID = FINANCIALTRANSACTIONLINEITEM.ID
where (EVENT.ID in (select ID from @EVENTS))
and (FINANCIALTRANSACTION.DATE <= @ASOFDATE or @ASOFDATE is null)
and REVENUESPLIT_EXT.APPLICATIONCODE = 1 and REVENUESPLIT_EXT.TYPECODE = 1 and FINANCIALTRANSACTION.TYPECODE in (0,5) --Payment and Order
and FINANCIALTRANSACTION.DELETEDON is null;
select
@REFUNDS = isnull(sum((LI.QUANTITY * LI.UNITVALUE) - EXT.DISCOUNTS), 0)
from
dbo.FINANCIALTRANSACTION as FT
inner join
dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = FT.ID
inner join
dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
inner join
dbo.CREDITITEMEVENTREGISTRATION on CREDITITEMEVENTREGISTRATION.ID = LI.ID
inner join
dbo.REGISTRANT on REGISTRANT.ID = CREDITITEMEVENTREGISTRATION.REGISTRANTID
where
FT.TYPECODE = 23 -- Refund
and REGISTRANT.EVENTID in (select ID from @EVENTS)
and (@ASOFDATE is null or FT.CALCULATEDDATE <= @ASOFDATE);
end
if @INCLUDEDONTATIONS = 1
begin
declare @RECEIVED money
declare @PLEDGEBALANCE money
--Donations, pledge payments, and matching gift payments on the given event
select @RECEIVED = coalesce(sum(coalesce(REVENUESPLITAMOUNTINCURRENCY.AMOUNTINCURRENCY,0)),0)
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REGISTRANT on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
inner join dbo.EVENT on EVENT.ID = REGISTRANT.EVENTID
inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) REVENUESPLITAMOUNTINCURRENCY on REVENUESPLITAMOUNTINCURRENCY.ID = FINANCIALTRANSACTIONLINEITEM.ID
left join @APPEALIDS as APPEALIDS on APPEALIDS.ID = REVENUE_EXT.APPEALID
where (EVENT.ID in (select ID from @EVENTS))
and (FINANCIALTRANSACTION.DATE <= @ASOFDATE or @ASOFDATE is null)
and FINANCIALTRANSACTION.TYPECODE = 0
and FINANCIALTRANSACTION.DELETEDON is null
and ((REVENUE_EXT.APPEALID is not null and REVENUESPLIT_EXT.APPLICATIONCODE in (0,2,7)) or (REVENUESPLIT_EXT.APPLICATIONCODE = 1 and REVENUESPLIT_EXT.TYPECODE = 0));
select @PLEDGEBALANCE =
coalesce(sum(coalesce(REVENUESPLITAMOUNTINCURRENCY.AMOUNTINCURRENCY, 0)),0) --Pledges and matching gift claims on the given event
-(
coalesce (( --Subtract payments made to pledges and MGCs on the given event
select sum(coalesce(REVENUESPLITAMOUNTINCURRENCY.AMOUNTINCURRENCY, 0))
from dbo.FINANCIALTRANSACTIONLINEITEM PAYSPLIT
inner join dbo.FINANCIALTRANSACTION PAY on PAY.ID = PAYSPLIT.FINANCIALTRANSACTIONID
inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) REVENUESPLITAMOUNTINCURRENCY on REVENUESPLITAMOUNTINCURRENCY.ID = PAYSPLIT.ID
where PAYSPLIT.ID in
(select INSTALLMENTPAYMENT.PAYMENTID
from dbo.INSTALLMENTPAYMENT
inner join dbo.FINANCIALTRANSACTION PLEDGE on PLEDGE.ID = INSTALLMENTPAYMENT.PLEDGEID
inner join dbo.FINANCIALTRANSACTIONLINEITEM PLEDGESPLIT on PLEDGESPLIT.FINANCIALTRANSACTIONID = PLEDGE.ID
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = PLEDGE.ID
inner join @APPEALIDS as APPEALIDS ON APPEALIDS.ID = REVENUE_EXT.APPEALID
where
(PLEDGE.DATE <= @ASOFDATE or @ASOFDATE is null)
and (PAY.DATE <= @ASOFDATE or @ASOFDATE is null)
)
), 0)
+ coalesce(( --Subtract writeoffs on pledges and MGCs on the given event
select sum(dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY(WRITEOFFSPLIT.ID, @CURRENCYID))
from dbo.WRITEOFFSPLIT
inner join dbo.WRITEOFF on WRITEOFF.ID = WRITEOFFSPLIT.WRITEOFFID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = WRITEOFF.REVENUEID
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
inner join @APPEALIDS as APPEALIDS ON APPEALIDS.ID = REVENUE_EXT.APPEALID
where
(FINANCIALTRANSACTION.DATE <= @ASOFDATE or @ASOFDATE is null)
and FINANCIALTRANSACTION.TYPECODE in (1,3)
and FINANCIALTRANSACTION.DELETEDON is null
), 0)
)
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REGISTRANT on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
inner join dbo.EVENT on EVENT.ID = REGISTRANT.EVENTID
inner join @APPEALIDS as APPEALIDS ON APPEALIDS.ID = REVENUE_EXT.APPEALID
inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) REVENUESPLITAMOUNTINCURRENCY on REVENUESPLITAMOUNTINCURRENCY.ID = FINANCIALTRANSACTIONLINEITEM.ID
where (EVENT.ID in (select ID from @EVENTS))
and (FINANCIALTRANSACTION.DATE <= @ASOFDATE or @ASOFDATE is null)
and FINANCIALTRANSACTION.TYPECODE in (1,3)
and FINANCIALTRANSACTION.DELETEDON is null;
set @DONATIONINCOME = @RECEIVED + @PLEDGEBALANCE;
end
if @INCLUDEOTHER = 1
begin
--Other payments on the given event
select @OTHERINCOME = coalesce(sum(coalesce(REVENUESPLITAMOUNTINCURRENCY.AMOUNTINCURRENCY,0)),0)
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REGISTRANT on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
inner join dbo.EVENT on EVENT.ID = REGISTRANT.EVENTID
inner join @APPEALIDS as APPEALIDS ON APPEALIDS.ID = REVENUE_EXT.APPEALID
inner join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID,@ORGANIZATIONCURRENCYID,@DECIMALDIGITS,@ROUNDINGTYPECODE) REVENUESPLITAMOUNTINCURRENCY on REVENUESPLITAMOUNTINCURRENCY.ID = FINANCIALTRANSACTIONLINEITEM.ID
left join dbo.REVENUESPLITOTHER on REVENUESPLITOTHER.ID = FINANCIALTRANSACTIONLINEITEM.ID
where (EVENT.ID in (select ID from @EVENTS))
and (FINANCIALTRANSACTION.DATE <= @ASOFDATE or @ASOFDATE is null)
and FINANCIALTRANSACTION.TYPECODE = 0
and REVENUESPLIT_EXT.APPLICATIONCODE = 4
and FINANCIALTRANSACTION.DELETEDON is null
and (@OTHERTYPECODEID is null or REVENUESPLITOTHER.OTHERTYPECODEID=@OTHERTYPECODEID);
end
set @VALUE = @REGISTRATIONINCOME + @DONATIONINCOME + @OTHERINCOME - @REFUNDS;