UFN_CONSTITUENT_GETREVENUESTREAMS

Returns all unapplied revenue streams for a constituent.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_CONSTITUENT_GETREVENUESTREAMS
            (
                @CONSTITUENTID uniqueidentifier
            )
            returns @RESULT table
            (
                ID uniqueidentifier, 
                CONSTITUENTID uniqueidentifier,
                CONSTITUENTNAME nvarchar(255),
                APPLIED money,
                BALANCE money,
                AMOUNTDUE money,
                DATEDUE datetime,
                TYPECODE tinyint,
                RECEIPTAMOUNT money,
                DONOTRECEIPT bit,
                DESCRIPTION nvarchar(255)
            )
            as 
            begin

                declare @CURRENTDATE datetime;
                set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());            

                declare @HOUSEHOLDSCANBEDONORS bit;
                set @HOUSEHOLDSCANBEDONORS = dbo.UFN_INSTALLATIONINFO_GETHOUSEHOLDSCANBEDONORS();

                declare @HOUSEHOLDID uniqueidentifier;
                if @HOUSEHOLDSCANBEDONORS = 1
                    select 
                        top(1) @HOUSEHOLDID = GROUPMEMBER.GROUPID
                    from 
                        dbo.GROUPMEMBER
                    left outer join 
                        dbo.GROUPDATA on GROUPDATA.ID = GROUPMEMBER.GROUPID
                    where 
                        GROUPMEMBER.MEMBERID = @CONSTITUENTID
                    and 
                        GROUPDATA.GROUPTYPECODE = 0
                    and 
                        dbo.UFN_GROUPMEMBER_ISCURRENTMEMBER(GROUPMEMBER.ID) = 1;

                -- include related household records

                with CONSTITUENTCTE as
                (
                    select 
                        @HOUSEHOLDID as ID
                    union
                    select 
                        case when dbo.UFN_CONSTITUENT_ISHOUSEHOLD(@CONSTITUENTID) = 1 then 
                            (case when @HOUSEHOLDSCANBEDONORS = 1 then @CONSTITUENTID else null end)
                            else @CONSTITUENTID
                        end
                    union
                    select 
                        GM.MEMBERID
                    from 
                        dbo.GROUPMEMBER GM
                    left outer join 
                        dbo.GROUPMEMBERDATERANGE GMDR on GM.ID = GMDR.GROUPMEMBERID
                    where 
                        GM.GROUPID = @HOUSEHOLDID
                    or
                        GM.GROUPID = @CONSTITUENTID
                    and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > @CURRENTDATE))
                            or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @CURRENTDATE)) 
                            or (GMDR.DATEFROM <= @CURRENTDATE and GMDR.DATETO > @CURRENTDATE))
                )
                insert into @RESULT
                    select    --Pledges and MGPledges

                        REVENUE.ID,
                        CONSTITUENT.ID,
                        CONSTITUENT.NAME,
                        0,
                        dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) as [Balance],
                        dbo.UFN_INSTALLMENT_GETINSTALLMENTBALANCE(dbo.UFN_REVENUE_GETNEXTINSTALLMENT(REVENUE.ID)),
                        INSTALLMENT.DATE,
                        REVENUE.TRANSACTIONTYPECODE,
                        0 as [RECEIPTAMOUNT],
                        0 as [DONOTRECEIPT],
                        ''
                    from dbo.REVENUE                    
                    inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
                    inner join dbo.INSTALLMENT on INSTALLMENT.ID = dbo.UFN_REVENUE_GETNEXTINSTALLMENT(REVENUE.ID)
                    inner join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = REVENUE.ID
                    inner join CONSTITUENTCTE on CONSTITUENTCTE.ID = REVENUE.CONSTITUENTID
                    where dbo.UFN_PLEDGE_GETBALANCE(REVENUE.ID) > 0
                    and REVENUESCHEDULE.ISPENDING = 0    --Isn't Pending

                union all
                    select    --Recurring Gifts

                        REVENUE.ID, 
                        CONSTITUENT.ID,
                        CONSTITUENT.NAME,
                        0,
                        REVENUE.AMOUNT as [Balance],
                        NEXTINSTALLMENT.BALANCE,
                        NEXTINSTALLMENT.DATE,
                        REVENUE.TRANSACTIONTYPECODE,
                        0 as [RECEIPTAMOUNT],
                        0 as [DONOTRECEIPT],
                        ''
                    from dbo.REVENUE                    
                    inner join dbo.REVENUESCHEDULE on REVENUE.ID = REVENUESCHEDULE.ID
                    outer apply dbo.UFN_RECURRINGGIFT_GETNEXTINSTALLMENTINFO(REVENUE.ID,null) NEXTINSTALLMENT
                    inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
                    inner join CONSTITUENTCTE on CONSTITUENTCTE.ID = REVENUE.CONSTITUENTID
                    where REVENUE.TRANSACTIONTYPECODE = 2                --Recurring Gift

                        and REVENUESCHEDULE.STATUSCODE  in (0,5)        --Active & Lapsed

                        and REVENUESCHEDULE.ISPENDING = 0                    --Isn't pending

                        and REVENUE.AMOUNT > 0                    --Has Value???

                union all
                    select -- Event registrations

                        REGISTRANT.ID,
                        CONSTITUENT.ID,
                        CONSTITUENT.NAME,
                        0,
                        dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) as [Balance],  
                        dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID),  
                        [EVENT].STARTDATE,        --JamesWill CR260844-113006 2007/03/15 Use the event start date as the due date

                        6 as [REVENUETYPECODE], --Event Registration Fee

                        0 as [RECEIPTAMOUNT],
                        0 as [DONOTRECEIPT],
                        [EVENT].NAME
                    from dbo.REGISTRANT 
                    inner join dbo.CONSTITUENT on CONSTITUENT.ID = REGISTRANT.CONSTITUENTID
                    inner join dbo.[EVENT] on [EVENT].ID = REGISTRANT.EVENTID
                    inner join CONSTITUENTCTE on CONSTITUENTCTE.ID = REGISTRANT.CONSTITUENTID
                    where dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) > 0
                union all
                    select
                        O.ID,
                        C.ID,
                        C.NAME,
                        0,
                        O.AMOUNT - dbo.UFN_OPPORTUNITY_GETAMOUNTPAID(O.ID),
                        null, -- amount due

                        null, -- date due

                        100, -- arbitrary application type code for opportunities, resolved in USP_REVENUE_APPLYTOREVENUESTREAMS

                        0,
                        0,
                        dbo.UFN_OPPORTUNITY_GETDESCRIPTION(O.ID)
                    from 
                        dbo.OPPORTUNITY O
                    inner join 
                        dbo.PROSPECTPLAN PP on PP.ID = O.PROSPECTPLANID
                    inner join 
                        CONSTITUENTCTE on CONSTITUENTCTE.ID = PP.PROSPECTID
                    inner join 
                        dbo.OPPORTUNITYDESIGNATION on OPPORTUNITYDESIGNATION.OPPORTUNITYID = O.ID
                    left outer join 
                        dbo.CONSTITUENT C on C.ID = PP.PROSPECTID;

                return;
            end