UFN_BBNC_KPI_ALLREVENUEFORCHANNEL

Returns all revenues associated with Blackbaud Internet Solutions for use in KPI calculations.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@STARTDATE datetime IN
@ENDDATE datetime IN

Definition

Copy


        CREATE function dbo.UFN_BBNC_KPI_ALLREVENUEFORCHANNEL(@STARTDATE datetime, @ENDDATE datetime)
        returns @BBNCREVENUE table
        (
            REVENUEID uniqueidentifier,
            REVENUESPLITID uniqueidentifier, 
            REVENUETYPECODE tinyint,
            REVENUEAMOUNT money,
            REVENUEDATE datetime
        )
        as
        begin

            insert into @BBNCREVENUE(REVENUEID, REVENUESPLITID, REVENUETYPECODE, REVENUEAMOUNT, REVENUEDATE)
                select
                    REVENUE.ID,
                    REVENUESPLIT.ID,
                    case when REVENUE.TRANSACTIONTYPECODE = 0 then --Gift

                       case when REVENUESPLIT.APPLICATIONCODE = 0 then 0 --Simple Donation

                            when REVENUESPLIT.APPLICATIONCODE = 1 then 6 --Event registration fee

                            when REVENUESPLIT.APPLICATIONCODE = 2 then 4 --Pledge Payment

                          when REVENUESPLIT.APPLICATIONCODE = 3 then 5 --Recurring Gift Payment

                          when REVENUESPLIT.APPLICATIONCODE = 7 then 8 --Matching Gift payment

                          else 0 
                     end
                     when REVENUE.TRANSACTIONTYPECODE = 3 then 3 --Matching Gift Claim

                     when REVENUE.TRANSACTIONTYPECODE = 1 then 1 --Pledge

                     when REVENUE.TRANSACTIONTYPECODE = 2 then 2 --Recurring Gift

                else
                    -1 --Invalid according to the filters for the KPI

                end as [REVENUETYPECODE],
                REVENUESPLIT.AMOUNT,
                REVENUE.DATE
                from dbo.REVENUE
                inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
            inner join dbo.REVENUEBBNC on REVENUEBBNC.ID = REVENUE.ID
                  --Can't filter on REVENUE.DATE here because, even if a pledge (or whatever) doesn't fall in the date range, its payments might. 

              ;

            --chase down payments for any pledges or matching gift claims

            insert into @BBNCREVENUE(REVENUEID, REVENUESPLITID, REVENUETYPECODE,REVENUEAMOUNT, REVENUEDATE)
                --The distinct worries me a little because a single payment can pay multiple installments, I think. But BBNC will only ever create a single installment so it should be fine

                select distinct 
                    REVENUE.ID,
                    REVENUESPLIT.ID,
                    case when [B].REVENUETYPECODE = 1 then 4 --Pledge payment

                         else 8 end, --Matching gift payment

                    REVENUESPLIT.AMOUNT,
                    REVENUE.DATE
                from dbo.REVENUESPLIT
                inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
                inner join dbo.INSTALLMENTPAYMENT on INSTALLMENTPAYMENT.PAYMENTID = REVENUESPLIT.ID
                inner join @BBNCREVENUE as [B] on [B].REVENUEID = INSTALLMENTPAYMENT.PLEDGEID
                left join @BBNCREVENUE as [B1] on [B1].REVENUEID = REVENUE.ID and [B1].REVENUESPLITID = REVENUESPLIT.ID
                where [B1].REVENUEID is null --Don't insert duplicates

                  and REVENUE.DATE between @STARTDATE and @ENDDATE;

            insert into @BBNCREVENUE(REVENUEID, REVENUESPLITID, REVENUETYPECODE, REVENUEAMOUNT, REVENUEDATE)
                select
                    REVENUE.ID,
                    REVENUESPLIT.ID,
                    5,
                    REVENUESPLIT.AMOUNT,
                    REVENUE.DATE
                from dbo.REVENUESPLIT
                inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
                inner join dbo.RECURRINGGIFTACTIVITY on RECURRINGGIFTACTIVITY.PAYMENTREVENUEID = REVENUESPLIT.ID    
                inner join @BBNCREVENUE as [B] on [B].REVENUEID = RECURRINGGIFTACTIVITY.SOURCEREVENUEID
                left join @BBNCREVENUE as [B1] on [B1].REVENUEID = REVENUE.ID and [B1].REVENUESPLITID = REVENUESPLIT.ID
                where [B1].REVENUEID is null --Don't insert duplicates

                  and REVENUE.DATE between @STARTDATE and @ENDDATE;

           --Since we couldn't filter on REVENUE.DATE in the first select, remove any outside of the date from the results before returning

           delete from @BBNCREVENUE 
           where not REVENUEDATE between @STARTDATE and @ENDDATE;

            return;
        end