UFN_REVENUE_EVENT
Provide revenue details in a given FAF event
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@EVENTID | uniqueidentifier | IN |
Definition
Copy
CREATE function [dbo].[UFN_REVENUE_EVENT]
(
@EVENTID as uniqueidentifier
)
returns TABLE
as
return
with REVENUE_INSTALLMENTS_CTE
as
(
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]
,TRANSACTIONTYPECODE
,REVENUESPLIT.APPLICATIONCODE
,REVENUE.[TRANSACTIONTYPE] as [RTRANSACTIONTYPE]
,APPLICATION as RAPPLICATION
,case
when TRANSACTIONTYPECODE = 9 AND APPLICATIONCODE = 0 then 'Offline Donation'
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 17 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 TRANSACTIONTYPECODE = 9 AND APPLICATIONCODE = 0 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 17 then 0
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 TRANSACTIONTYPECODE = 0 AND APPLICATIONCODE = 17 then REVENUESPLIT.AMOUNT
when TRANSACTIONTYPECODE = 9 AND APPLICATIONCODE = 0 then 0
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]
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
where EVENT.ID = @EVENTID
)
select *
from EVENT_REVENUEDETAILS_CTE