UFN_FAFEVENT_GETREVENUECONSTITUENTS
For reports, get all revenue constituents per event
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@EVENTID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@GIFTTYPECODE | int | IN |
Definition
Copy
create function dbo.UFN_FAFEVENT_GETREVENUECONSTITUENTS
(
@EVENTID as uniqueidentifier,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@GIFTTYPECODE integer = 1 --1:Gift, 2:Pledge, 3:Recurring gift, 4:Pending donation
)
returns TABLE
as
return
with REVENUE_INSTALLMENTS_CTE
as
(
--DECLARE @TRANSACTIONTYPECODE as integer = null
--DECLARE @APPLICATIONCODE as integer = null
--10/28/2010: For the logic on how to calculate all total, please contact DBA group
select
REVENUE.ID as REVENUEID
,REVENUE.TRANSACTIONTYPE
,REVENUE.AMOUNT
,case
when NUMBEROFINSTALLMENTS = 0 then
-- Recurring gift with no end date
case when ENDDATE is null then 1
else
-- Adding one
case FREQUENCYCODE
when 0 then -- Annually
datediff(month, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE )/12
when 1 then -- Semi-annually
(datediff(month, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE )/12)*2
when 2 then -- Quarterly
(datediff(month, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE )/3)
when 3 then -- Monthly
datediff(month, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE)
when 5 then -- Single Installment
1
when 6 then -- Bimonthly
datediff(month, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE)/2
when 7 then -- Semi-Monthly
datediff(month, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE)*2
when 8 then -- Biweekly
datediff(week, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE) /2
when 9 then -- Weekly
datediff(week, REVENUESCHEDULE.STARTDATE, REVENUESCHEDULE.ENDDATE)
end + 1 -- Adding one because the start and enddate are inclusive
end
else isnull(NUMBEROFINSTALLMENTS,1)
end as NUMBEROFINSTALLMENTS
from [dbo].[REVENUE] (nolock)
left join [dbo].[REVENUESCHEDULE] (nolock)
on REVENUE.ID = [REVENUESCHEDULE].ID
)
,EVENT_REVENUEDETAILS_CTE
as
(
select
REVENUE.CONSTITUENTID
,REVENUESPLIT.ID AS [REVENUESPLITID]
,case
when REVENUEOFFLINEDONATION.ID IS NOT NULL then 'Offline Donation'
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 0 then 'Donation'
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 15 then 'Event sponsorship'
when TRANSACTIONTYPECODE = 1 AND APPLICATIONCODE = 0 then 'Pledge'
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 2 then 'Pledge'
when TRANSACTIONTYPECODE = 2 AND APPLICATIONCODE = 0 then 'Recurring gift'
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 3 then 'Recurring gift'
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 7 then 'Matching gift'
when TRANSACTIONTYPECODE = 3 then 'Matching gift'
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 1 then 'Event registration'
end [TRANSACTIONTYPE]
,case
when REVENUEOFFLINEDONATION.ID IS NOT NULL then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 0 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 15 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 1 AND APPLICATIONCODE = 0 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 2 then 0
when TRANSACTIONTYPECODE = 2 AND APPLICATIONCODE = 0 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 3 then 0
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 7 then 0
when TRANSACTIONTYPECODE = 3 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 1 then REVENUESPLIT.AMOUNT
end *
-- Predicted amount based on installments is applied to recurring gifts only
-- This allow us to select to see paid or unpaid amount for recurring gifts
CASE when TRANSACTIONTYPECODE = 2 AND APPLICATIONCODE = 0 THEN NUMBEROFINSTALLMENTS ELSE 1 End
as [ORIGINAL AMOUNT]
,case
when REVENUEOFFLINEDONATION.ID IS NOT NULL then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 0 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 15 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 1 AND APPLICATIONCODE = 0 then 0
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 2 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 2 AND APPLICATIONCODE = 0 then 0
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 3 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 7 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 3 then 0
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 1 then REVENUESPLIT.AMOUNT
end as [APPLIED AMOUNT]
,[EVENT].ID,[EVENTEXTENSION].PRIORYEAREVENTID
from dbo.REVENUESPLIT (nolock)
inner join dbo.REVENUE (nolock)
on REVENUE.ID = REVENUESPLIT.REVENUEID
left join dbo.[EVENT] (nolock)
on REVENUE.APPEALID = [EVENT].APPEALID
join REVENUE_INSTALLMENTS_CTE
on REVENUE_INSTALLMENTS_CTE.REVENUEID = REVENUE.ID
left join dbo.REVENUEOFFLINEDONATION
on REVENUEOFFLINEDONATION.ID = REVENUESPLIT.REVENUEID
LEFT join dbo.[EVENTEXTENSION] (nolock)
on [EVENT].ID=[EVENTEXTENSION].EVENTID
where EVENT.ID = @EVENTID
--AND REVENUESPLIT.APPLICATIONCODE = ISNULL(@APPLICATIONCODE,REVENUESPLIT.APPLICATIONCODE)
--AND REVENUE.TRANSACTIONTYPECODE = ISNULL(@TRANSACTIONTYPECODE,REVENUE.TRANSACTIONTYPECODE)
AND REVENUE.DATE BETWEEN ISNULL(@STARTDATE, '1/1/1900') AND DATEADD(dd, 1, ISNULL(@ENDDATE, '12/30/2999'))
)
select * from EVENT_REVENUEDETAILS_CTE