UFN_REVENUEUPDATEBATCH_GETAPPLICATIONSTREAM
gets the applications (revenue) streams for a item loaded in revenue update batch.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_REVENUEUPDATEBATCH_GETAPPLICATIONSTREAM
(
@REVENUEID uniqueidentifier,
@CONSTITUENTID uniqueidentifier
)
returns @RESULT table
(
ID uniqueidentifier,
APPLICATIONID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
CONSTITUENTNAME nvarchar(255),
APPLIED money,
BALANCE money,
AMOUNTDUE money,
DATEDUE datetime,
TYPECODE tinyint,
DESCRIPTION nvarchar(255),
MEMBERSHIPS xml,
DESIGNATIONLIST nvarchar(512),
SPONSORSHIPOPPORTUNITY nvarchar(255),
REVENUESPLITID uniqueidentifier,
TRANSACTIONCURRENCYID uniqueidentifier,
APPLICATIONCURRENCYID uniqueidentifier,
PDACCOUNTSYSTEMID uniqueidentifier,
SPONSORSHIPRGADDITIONALGIFT bit,
RECEIPTAMOUNT money
)
as
begin
insert into @RESULT
-- Payments towards: Pledge (2), Planned Gift (6), Matching Gift (7), Grant Award (8), Donor Challenge (13)
select
'00000000-0000-0000-0000-000000000000' as ID,
INSTALLMENTSPLITPAYMENT.PLEDGEID as APPLICATIONID,
CONSTITUENT.ID as CONSTITUENTID,
(
select case PLEDGEREVENUE.TRANSACTIONTYPECODE
when 3 then
CONSTITUENT.NAME + ' - ' +
(
select
C1.NAME + ' (' + C1.LOOKUPID + ')'
from
dbo.REVENUEMATCHINGGIFT MG1
inner join dbo.REVENUE R1 on R1.ID = MG1.MGSOURCEREVENUEID
inner join dbo.CONSTITUENT C1 on C1.ID = R1.CONSTITUENTID
where
MG1.ID = PLEDGEREVENUE.ID
)
else
CONSTITUENT.NAME
end
) as CONSTITUENTNAME,
REVENUESPLIT.TRANSACTIONAMOUNT as [APPLIED],
dbo.UFN_PLEDGE_GETBALANCE(INSTALLMENTSPLITPAYMENT.PLEDGEID) as [BALANCE],
case
when [PLEDGEREVENUE].TRANSACTIONTYPECODE in (1 ,3, 4, 6, 8)
then dbo.UFN_INSTALLMENT_GETINSTALLMENTBALANCE(dbo.UFN_REVENUE_GETNEXTINSTALLMENT([PLEDGEREVENUE].ID))
when [PLEDGEREVENUE].TRANSACTIONTYPECODE = 2 and REVENUESCHEDULE.STATUSCODE = 0
then NEXTINSTALLMENT.BALANCE
when [PLEDGEREVENUE].TRANSACTIONTYPECODE = 2 and REVENUESCHEDULE.STATUSCODE in (1, 2, 3, 4)
then 0
else null
end as [AMOUNTDUE],
case
when [PLEDGEREVENUE].TRANSACTIONTYPECODE in (1, 3, 4, 6, 8)
then INSTALLMENT.DATE
when [PLEDGEREVENUE].TRANSACTIONTYPECODE = 2
then NEXTINSTALLMENT.DATE
else null
end as [DATEDUE],
case PLEDGEREVENUE.TRANSACTIONTYPECODE when 6 then 9 when 8 then 10 else PLEDGEREVENUE.TRANSACTIONTYPECODE end as REVENUETYPECODE,
'' as DESCRIPTION,
null as MEMBERSHIPS,
(select VANITYNAME from dbo.DESIGNATION where ID = REVENUESPLIT.DESIGNATIONID) as DESIGNATIONLIST,
'' as SPONSORSHIPOPPORTUNITY,
REVENUESPLIT.ID as REVENUESPLITID,
REVENUESPLIT.TRANSACTIONCURRENCYID,
INSTALLMENTSPLITPAYMENT.APPLICATIONCURRENCYID,
null as PDACCOUNTSYSTEMID,
0 SPONSORSHIPRGADDITIONALGIFT,
REVENUE.RECEIPTAMOUNT
from dbo.REVENUE
inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
inner join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLITPAYMENT.PAYMENTID = REVENUESPLIT.ID
inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.ID = INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID
left join dbo.REVENUE as [PLEDGEREVENUE] on [PLEDGEREVENUE].ID = INSTALLMENTSPLITPAYMENT.PLEDGEID
left join dbo.INSTALLMENT on INSTALLMENT.ID = dbo.UFN_REVENUE_GETNEXTINSTALLMENT([PLEDGEREVENUE].ID)
left join dbo.CONSTITUENT on CONSTITUENT.ID = [PLEDGEREVENUE].CONSTITUENTID
left join dbo.REVENUESPLITGIFTAID on REVENUESPLITGIFTAID.ID = REVENUESPLIT.ID
left join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = [PLEDGEREVENUE].ID
outer apply dbo.UFN_RECURRINGGIFT_GETNEXTINSTALLMENTINFO([PLEDGEREVENUE].ID,null) NEXTINSTALLMENT
where REVENUE.ID = @REVENUEID and REVENUESPLIT.APPLICATIONCODE in (2, 6, 7, 8, 13)
group by
REVENUESPLIT.ID,
INSTALLMENTSPLITPAYMENT.PLEDGEID,
REVENUESPLIT.APPLICATIONCODE,
PLEDGEREVENUE.TRANSACTIONTYPECODE,
PLEDGEREVENUE.CONSTITUENTID,
CONSTITUENT.ID,
REVENUESPLIT.DESIGNATIONID,
CONSTITUENT.NAME,
PLEDGEREVENUE.ID,
REVENUESPLIT.TRANSACTIONAMOUNT,
REVENUESPLIT.TRANSACTIONCURRENCYID,
INSTALLMENTSPLITPAYMENT.APPLICATIONCURRENCYID,
REVENUESCHEDULE.STATUSCODE,
INSTALLMENT.DATE,
REVENUE.RECEIPTAMOUNT,
NEXTINSTALLMENT.BALANCE,
NEXTINSTALLMENT.DATE
union all
-- recurring gift payments
select
'00000000-0000-0000-0000-000000000000' as ID,
TEMPLATE.ID as APPLICATIONID,
CONSTITUENT.ID as CONSTITUENTID,
CONSTITUENT.NAME,
REVENUESPLIT.TRANSACTIONAMOUNT as APPLIED,
TEMPLATESPLIT.TRANSACTIONAMOUNT as BALANCE,
0.00 as AMOUNTDUE,
RECURRINGGIFTACTIVITY.SCHEDULEDATE as DATEDUE,
TEMPLATE.TRANSACTIONTYPECODE as REVENUETYPECODE,
'' as DESCRIPTION,
null as MEMBERSHIPS,
(select VANITYNAME from dbo.DESIGNATION where ID = REVENUESPLIT.DESIGNATIONID) as DESIGNATIONLIST,
(select coalesce((select NAME from SPONSORSHIPOPPORTUNITYCHILD where ID=SPONSORSHIP.SPONSORSHIPOPPORTUNITYID),
(select NAME from SPONSORSHIPOPPORTUNITYPROJECT where ID = SPONSORSHIP.SPONSORSHIPOPPORTUNITYID)) opportunity
from dbo.SPONSORSHIP
inner join dbo.SPONSORSHIPOPPORTUNITY OPP on OPP.ID = SPONSORSHIP.SPONSORSHIPOPPORTUNITYID
where SPONSORSHIP.ID = dbo.UFN_SPONSORSHIP_ID_FROM_REVENUEID( TEMPLATE.ID)
and SPONSORSHIP.ISMOSTRECENTFORCOMMITMENT = 1) as SPONSORSHIPOPPORTUNITY,
REVENUESPLIT.ID as REVENUESPLITID,
REVENUESPLIT.TRANSACTIONCURRENCYID,
RECURRINGGIFTACTIVITY.APPLICATIONCURRENCYID,
null as PDACCOUNTSYSTEMID,
case when REVENUESPLIT.TYPECODE = 17 then 1 else 0 end SPONSORSHIPRGADDITIONALGIFT,
REVENUE.RECEIPTAMOUNT
from dbo.REVENUE
inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
inner join dbo.RECURRINGGIFTACTIVITY on PAYMENTREVENUEID = REVENUESPLIT.ID
inner join dbo.REVENUE TEMPLATE on TEMPLATE.ID = RECURRINGGIFTACTIVITY.SOURCEREVENUEID
left outer join dbo.REVENUESPLIT TEMPLATESPLIT on TEMPLATESPLIT.REVENUEID = TEMPLATE.ID and TEMPLATESPLIT.DESIGNATIONID = REVENUESPLIT.DESIGNATIONID
left join dbo.REVENUESPLITGIFTAID on REVENUESPLITGIFTAID.ID = REVENUESPLIT.ID
where REVENUE.ID = @REVENUEID and REVENUESPLIT.APPLICATIONCODE = 3
union all
-- Membership
select
'00000000-0000-0000-0000-000000000000' as ID,
MEMBERSHIP.ID as APPLICATIONID,
CONSTITUENT.ID,
CONSTITUENT.NAME,
REVENUESPLIT.TRANSACTIONAMOUNT as [APPLIED],
0 as BALANCE,
0 as AMOUNTDUE,
MEMBERSHIP.EXPIRATIONDATE,
5 as REVENUETYPECODE, --Membership
dbo.UFN_MEMBERSHIPPROGRAM_GETNAME(MEMBERSHIP.MEMBERSHIPPROGRAMID) + ' - ' + dbo.UFN_MEMBERSHIPLEVEL_GETNAME(MEMBERSHIP.MEMBERSHIPLEVELID) as description,
(select
'00000000-0000-0000-0000-000000000000' as ID,
MEMBERSHIPPROGRAMID,
MEMBERSHIPLEVELID,
MEMBERSHIPLEVELTERMID,
MEMBERSHIPLEVELTYPECODEID,
NUMBEROFCHILDREN,
COMMENTS,
ISGIFT,
SENDRENEWALCODE,
EXPIRATIONDATE,
GIVENBYID,
(select
MEMBER.ID,
MEMBER.CONSTITUENTID,
MEMBER.ISPRIMARY,
(select
MEMBERSHIPCARD.ID,
MEMBERSHIPCARD.NAMEONCARD,
MEMBERSHIPCARD.EXPIRATIONDATE
from dbo.MEMBERSHIPCARD
where MEMBERSHIPCARD.MEMBERID = MEMBER.ID
for xml raw('ITEM'),type,elements,BINARY BASE64) MEMBERSHIPCARDS
from dbo.MEMBER
where MEMBER.MEMBERSHIPID = MEMBERSHIPSUB.ID
for xml raw('ITEM'),type,elements,BINARY BASE64) MEMBERS
from dbo.MEMBERSHIP MEMBERSHIPSUB
where MEMBERSHIPSUB.ID = MEMBERSHIP.ID
for xml raw('ITEM'),type,elements,BINARY BASE64) MEMBERSHIPS,
'' as DESIGNATIONLIST,
'' as SPONSORSHIPOPPORTUNITY,
REVENUESPLIT.ID as REVENUESPLITID,
REVENUESPLIT.TRANSACTIONCURRENCYID,
REVENUESPLIT.TRANSACTIONCURRENCYID [APPLICATIONCURRENCYID],
null as PDACCOUNTSYSTEMID,
0 SPONSORSHIPRGADDITIONALGIFT,
REVENUE.RECEIPTAMOUNT
from dbo.MEMBERSHIP
inner join dbo.MEMBERSHIPTRANSACTION on MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
inner join dbo.REVENUESPLIT on MEMBERSHIPTRANSACTION.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = @CONSTITUENTID
inner join dbo.MEMBERSHIPLEVELTERM on MEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
where REVENUE.ID = @REVENUEID and REVENUESPLIT.APPLICATIONCODE = 5
union all
-- Event Reg Payments
select
'00000000-0000-0000-0000-000000000000' as ID,
REGISTRANT.ID as APPLICATIONID,
CONSTITUENT.ID as CONSTITUENTID,
CONSTITUENT.NAME as CONSTITUENTNAME,
REVENUESPLIT.TRANSACTIONAMOUNT as [APPLIED],
dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) as [BALANCE],
dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) as AMOUNTDUE,
EVENT.STARTDATE as [DATEDUE],
6 as [REVENUETYPECODE],
EVENT.NAME as [DESCRIPTION],
null as MEMBERSHIPS,
case REVENUESPLIT.TYPECODE when 1 then ''
else (select VANITYNAME from dbo.DESIGNATION where ID = REVENUESPLIT.DESIGNATIONID) --Use designation list to determine if this split is a charitable event registration split (event with designations)
end as DESIGNATIONLIST,
'' as SPONSORSHIPOPPORTUNITY,
REVENUESPLIT.ID as REVENUESPLITID,
REVENUESPLIT.TRANSACTIONCURRENCYID,
[PAYMENT].APPLICATIONCURRENCYID,
null as PDACCOUNTSYSTEMID,
0 SPONSORSHIPRGADDITIONALGIFT,
REVENUE.RECEIPTAMOUNT
from dbo.REGISTRANT
inner join dbo.CONSTITUENT on CONSTITUENT.ID = REGISTRANT.CONSTITUENTID
inner join dbo.[EVENT] on [EVENT].ID = REGISTRANT.EVENTID
inner join dbo.EVENTREGISTRANTPAYMENT as [PAYMENT] on [PAYMENT].REGISTRANTID = REGISTRANT.ID
inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = [PAYMENT].PAYMENTID
inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
where REVENUE.ID = @REVENUEID and
REVENUESPLIT.APPLICATIONCODE = 1;
declare @APPLICATIONCOUNT int;
select @APPLICATIONCOUNT = count(*) from @RESULT
if @APPLICATIONCOUNT > 0
begin
insert into @RESULT
select
null as ID,
REVENUEID,
CONSTITUENTID,
CONSTITUENTNAME,
APPLIED,
BALANCE,
AMOUNTDUE,
DATEDUE,
REVENUETYPECODE,
DESCRIPTION,
null as MEMBERSHIPS,
DESIGNATIONLIST,
SPONSORSHIPOPPORTUNITY,
null as REVENUESPLITID,
null as TRANSACTIONCURRENCYID,
APPLICATIONCURRENCYID,
PDACCOUNTSYSTEMID,
SPONSORSHIPRGADDITIONALGIFT,
0 as RECEIPTAMOUNT
from dbo.UFN_CONSTITUENTUNREALIZEDREVENUE(@CONSTITUENTID, 0, null, null, null) OPENCOMMITMENTS
where
not exists (select 'X' from @RESULT APPLIED where APPLIED.APPLICATIONID = OPENCOMMITMENTS.REVENUEID) and
OPENCOMMITMENTS.REVENUETYPECODE <> 100; -- Exclude opportunities since they aren't supported in batch
end
return;
end