UFN_DESIGNATION_REVENUECOUNTS_2

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@STARTDATETIME datetime IN
@ENDDATETIME datetime IN

Definition

Copy


create function dbo.UFN_DESIGNATION_REVENUECOUNTS_2(
    @STARTDATETIME datetime
    @ENDDATETIME datetime
)
returns @REVENUEINFO table
(
    DESIGNATIONID uniqueidentifier NOT NULL PRIMARY KEY CLUSTERED,
    NUMDONORS int NOT NULL,
    NUMGIFTS int NOT NULL,
    MAXGIFT money NOT NULL,
    NUMREFUNDED int NOT NULL,
    MAXREFUND money NOT NULL
)
as
begin
    declare @STARTDATE datetimeoffset(3) = isnull(@STARTDATETIME, '1753-01-01')
    declare @ENDDATE datetimeoffset(3) = isnull(dateadd(day, 1, @ENDDATETIME), '9999-12-31')

    insert @REVENUEINFO
        select 
            REVENUEINFO.DESIGNATIONID,
            count(distinct FINANCIALTRANSACTION.CONSTITUENTID),
            count(distinct REVENUEINFO.REVENUEID),
            max(REVENUEINFO.SPLITSTODESIGNATIONSUM),
            sum(REFUNDCOUNT),
            max(REFUNDAMOUNT)
        from (
            select 
                D.ID DESIGNATIONID,
                FINANCIALTRANSACTION.ID REVENUEID,
                sum(REVENUELINEITEM.BASEAMOUNT) - coalesce((select sum(WOS.BASEAMOUNT) from dbo.FINANCIALTRANSACTION WO inner join dbo.FINANCIALTRANSACTIONLINEITEM WOS on WO.ID = WOS.FINANCIALTRANSACTIONID where WO.TYPECODE = 20 and WOS.DELETEDON is null and WO.PARENTID = FINANCIALTRANSACTION.ID), 0) SPLITSTODESIGNATIONSUM,
                count(distinct REFUNDLINEITEM.SOURCELINEITEMID) as REFUNDCOUNT,
                isnull(max(REFUNDLINEITEM.AMOUNT),0) as REFUNDAMOUNT
            from dbo.DESIGNATION D
            inner join dbo.DESIGNATION D2 on (D.DESIGNATIONLEVEL1ID = D2.DESIGNATIONLEVEL1ID
                and (D.DESIGNATIONLEVEL2ID = D2.DESIGNATIONLEVEL2ID or D.DESIGNATIONLEVEL2ID is null)
                and (D.DESIGNATIONLEVEL3ID = D2.DESIGNATIONLEVEL3ID or D.DESIGNATIONLEVEL3ID is null)
                and (D.DESIGNATIONLEVEL4ID = D2.DESIGNATIONLEVEL4ID or D.DESIGNATIONLEVEL4ID is null)
                and (D.DESIGNATIONLEVEL5ID = D2.DESIGNATIONLEVEL5ID or D.DESIGNATIONLEVEL5ID is null))
            inner join dbo.REVENUESPLIT_EXT RS on RS.DESIGNATIONID = D2.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUELINEITEM on 
                REVENUELINEITEM.ID = RS.ID
            inner join dbo.FINANCIALTRANSACTION on 
                REVENUELINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
            left join (
                --Refunds for donations made in this time period. These refunds could have been made outside of the time period

                --Right now, only a full refund can be made against a donation in sales. Not making that assumption here: using subquery and grouping on source line item.

                --However, I am counting all the refunds toward a donation as one refund.

                select 
                    FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID,
                    sum(FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT) as AMOUNT
                from dbo.FINANCIALTRANSACTIONLINEITEM
                inner join dbo.CREDITITEM_EXT on 
                    FINANCIALTRANSACTIONLINEITEM.ID = CREDITITEM_EXT.ID
                inner join dbo.FINANCIALTRANSACTION REFUND on
                    FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REFUND.ID
                where REFUND.TYPECODE = 23
                group by FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID
            ) as REFUNDLINEITEM on
                REVENUELINEITEM.ID = REFUNDLINEITEM.SOURCELINEITEMID
            where 
                FINANCIALTRANSACTION.DELETEDON is null and
                FINANCIALTRANSACTION.DATE >= @STARTDATE and
                FINANCIALTRANSACTION.DATE < @ENDDATE and
                (
                    --Donation, event registration (donation), recurring gift payment, planned gift payment, matching gift payment, and donor challenge payments

                    (FINANCIALTRANSACTION.TYPECODE = 0 and RS.APPLICATIONCODE in (0,1,3,6,7,13)) or
                    --pledges or orders or grants or auction donations

                    (FINANCIALTRANSACTION.TYPECODE in (1,5,6,7))
                )
            group by FINANCIALTRANSACTION.ID, D.ID
        ) REVENUEINFO
        inner join dbo.FINANCIALTRANSACTION on 
            FINANCIALTRANSACTION.ID = REVENUEINFO.REVENUEID
        group by REVENUEINFO.DESIGNATIONID
    return
end