UFN_REVENUE_CONSTITUENTRECOGNIZEDAMOUNT

Provide recognized revenue amount per constituent in a given FAF event

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN

Definition

Copy


CREATE function [dbo].[UFN_REVENUE_CONSTITUENTRECOGNIZEDAMOUNT]
(

     @EVENTID                as uniqueidentifier 
    ,@CONSTITUENTID            as uniqueidentifier 
)
returns money
with execute as caller
as
begin

  /*
      Revenue amount raised by the current constituent
        in the current event.  Constituent in this 
    context can be individual, team, company or household.  
    Self recognition is excluded. 
  */

  -- Configuration flags variables

    declare 
        @ISUNPAIDPLEDGES                    bit = 0
      , @ISUNPAIDRECURRINGGIFTS                bit = 0
      , @ISSPONSORSHIPREVENUE                bit = 0
      , @ISUNPAIDSPONSORSHIPREVENUE            bit = 0
      , @ISREGISTRATIONREVENUE                bit = 0
      , @ISPENDINGMATCHINGGIFTS                bit = 0
      , @UNCONFIRMEDPARTICIPANTGIFTENTRY    bit = 0;

    -- Get configuration settings

    select 
        @ISUNPAIDPLEDGES                 = FAFEVENTDONATIONOPTIONSCONFIG.ISUNPAIDPLEDGES
      , @ISUNPAIDRECURRINGGIFTS             = FAFEVENTDONATIONOPTIONSCONFIG.ISUNPAIDRECURRINGGIFTS
      , @ISSPONSORSHIPREVENUE             = FAFEVENTDONATIONOPTIONSCONFIG.ISSPONSORSHIPREVENUE
      , @ISUNPAIDSPONSORSHIPREVENUE         = FAFEVENTDONATIONOPTIONSCONFIG.ISUNPAIDSPONSORSHIPREVENUE
      , @ISREGISTRATIONREVENUE             = FAFEVENTDONATIONOPTIONSCONFIG.ISREGISTRATIONREVENUE
      , @ISPENDINGMATCHINGGIFTS             = FAFEVENTDONATIONOPTIONSCONFIG.ISPENDINGMATCHINGGIFTS
      , @UNCONFIRMEDPARTICIPANTGIFTENTRY = FAFEVENTDONATIONOPTIONSCONFIG.UNCONFIRMEDPARTICIPANTGIFTENTRY
    from    dbo.FAFEVENTDONATIONOPTIONSCONFIG 
    where    FAFEVENTDONATIONOPTIONSCONFIG.EVENTID = @EVENTID;

  declare @AMOUNT as money = 0.0;

  ;with EVENTRECOGNIZEDREVENUE_CTE        
    as
    (
        select     
             REVENUERECOGNITION.CONSTITUENTID
            ,EVENT_REVENUE.TRANSACTIONTYPE as [REVENUETYPE]
            ,EVENT_REVENUE.[ORIGINAL AMOUNT] as ORIGINALAMOUNT
            ,EVENT_REVENUE.[APPLIED AMOUNT] as APPLIEDAMOUNT
      ,EVENT_REVENUE.REVENUESPLITID
        from    [dbo].[UFN_REVENUE_EVENT](@EVENTID) AS EVENT_REVENUE
        inner    join REVENUERECOGNITION
        on        REVENUERECOGNITION.CONSTITUENTID    <> EVENT_REVENUE.CONSTITUENTID
        and        REVENUERECOGNITION.REVENUESPLITID    = EVENT_REVENUE.REVENUESPLITID
    WHERE REVENUERECOGNITION.CONSTITUENTID = @CONSTITUENTID
    )
    ,[RAISEDAMOUNT_CTE]     -- Apply revenue rules

    as
    (
        select    
            case 
              when [REVENUETYPE] = 'Donation' THEN  [ORIGINALAMOUNT]
        when [REVENUETYPE] = 'Offline Donation' THEN 
              case when @UNCONFIRMEDPARTICIPANTGIFTENTRY=1 then [ORIGINALAMOUNT] ELSE 0 END
                when [REVENUETYPE] = 'Event registration'    then 
                    case when @ISREGISTRATIONREVENUE = 1 then [ORIGINALAMOUNT] else 0 end
                when [REVENUETYPE] = 'Pledge'                then 
                    case when @ISUNPAIDPLEDGES=1 then [ORIGINALAMOUNT] else [APPLIEDAMOUNT] end
                when [REVENUETYPE] = 'Event sponsorship'    then 
                    case when @ISSPONSORSHIPREVENUE = 0  then 0 else 
                        case when @ISUNPAIDSPONSORSHIPREVENUE=1 then  [ORIGINALAMOUNT] else [APPLIEDAMOUNT] end
                    end
                when [REVENUETYPE] = 'Matching gift'    then
                    case when @ISPENDINGMATCHINGGIFTS=1 then [ORIGINALAMOUNT] else [APPLIEDAMOUNT] end
                when [REVENUETYPE] = 'Recurring gift'    then 
                    case when @ISUNPAIDRECURRINGGIFTS=1 then [ORIGINALAMOUNT] else [APPLIEDAMOUNT] end
            end as [TOTAL]
        from    [EVENTRECOGNIZEDREVENUE_CTE]
    )
    select @AMOUNT = SUM(ISNULL(TOTAL,0)) from [RAISEDAMOUNT_CTE];

    return(@AMOUNT);
end