UFN_REVENUESPLITINFORMATION
Returns revenue split information given an ID and a source code, this is used in the GL mapping functions.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@REVENUESPLITID | uniqueidentifier | IN | |
@INFORMATIONSOURCECODE | tinyint | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_REVENUESPLITINFORMATION
(
@REVENUEID uniqueidentifier,
@REVENUESPLITID uniqueidentifier,
@INFORMATIONSOURCECODE tinyint, -- 0 is the revenue table, 1 is the batch revenue table
@CURRENTAPPUSERID uniqueidentifier = null
)
returns @RETVAL table
(
ID uniqueidentifier,
REVENUEID uniqueidentifier,
DESIGNATIONID uniqueidentifier,
EVENTID uniqueidentifier,
PROGRAMID uniqueidentifier,
CATEGORYCODEID uniqueidentifier,
MEMBERSHIPLEVELID uniqueidentifier,
ORDERMEMBERSHIPLEVELID uniqueidentifier,
ORDERMERCHANDISEPRODUCTINSTANCEID uniqueidentifier,
ORDERMERCHANDISEDEPARTMENTID uniqueidentifier,
ORDEREVENTID uniqueidentifier,
ORDERPROGRAMID uniqueidentifier,
ORDERFEEID uniqueidentifier,
ORDERTAXID uniqueidentifier,
ORDEREVENTLOCATIONID uniqueidentifier,
ORDERRESOURCECATEGORYCODEID uniqueidentifier,
AMOUNT money,
TYPECODE tinyint,
APPLICATIONCODE tinyint,
BASECURRENCYID uniqueidentifier,
ORGANIZATIONAMOUNT money,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
OVERRIDEBUSINESSUNITS bit,
REVENUESPLITBUSINESSUNITOVERRIDECODEID uniqueidentifier
)
as begin
if @INFORMATIONSOURCECODE = 0
begin
declare @BASECURRENCYID uniqueidentifier;
declare @ORGEXCHANGERATEID uniqueidentifier;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
select @BASECURRENCYID = CURRENCYSET.BASECURRENCYID
,@ORGEXCHANGERATEID = FINANCIALTRANSACTION.ORGEXCHANGERATEID
,@TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
,@BASEEXCHANGERATEID = FINANCIALTRANSACTION.BASEEXCHANGERATEID
from dbo.FINANCIALTRANSACTION
inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
where FINANCIALTRANSACTION.ID = @REVENUEID;
insert into @RETVAL
(
ID,
REVENUEID,
DESIGNATIONID,
EVENTID,
PROGRAMID,
CATEGORYCODEID,
MEMBERSHIPLEVELID,
ORDERMEMBERSHIPLEVELID,
ORDERMERCHANDISEPRODUCTINSTANCEID,
ORDERMERCHANDISEDEPARTMENTID,
ORDEREVENTID,
ORDERPROGRAMID,
ORDERFEEID,
ORDERTAXID,
ORDEREVENTLOCATIONID,
ORDERRESOURCECATEGORYCODEID,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
OVERRIDEBUSINESSUNITS,
REVENUESPLITBUSINESSUNITOVERRIDECODEID
)
select REVENUESPLIT.ID,
FTLI.FINANCIALTRANSACTIONID,
REVENUESPLIT.DESIGNATIONID,
REGISTRANT.EVENTID,
EVENT.PROGRAMID,
REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID,
MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID,
REVENUESPLITORDER.MEMBERSHIPLEVELID,
REVENUESPLITORDER.MERCHANDISEPRODUCTINSTANCEID,
MERCHANDISEPRODUCT.MERCHANDISEDEPARTMENTID,
REVENUESPLITORDER.EVENTID,
REVENUESPLITORDER.PROGRAMID,
REVENUESPLITORDER.FEEID,
REVENUESPLITORDER.TAXID,
REVENUESPLITORDER.EVENTLOCATIONID,
RESOURCE.RESOURCECATEGORYCODEID,
FTLI.BASEAMOUNT,
REVENUESPLIT.TYPECODE,
REVENUESPLIT.APPLICATIONCODE,
@BASECURRENCYID BASECURRENCYID,
FTLI.ORGAMOUNT,
@ORGEXCHANGERATEID,
FTLI.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.OVERRIDEBUSINESSUNITS,
REVENUESPLIT.REVENUESPLITBUSINESSUNITOVERRIDECODEID
from dbo.REVENUESPLIT_EXT REVENUESPLIT
inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on REVENUESPLIT.ID = FTLI.ID
left outer join dbo.REVENUESPLITORDER
on REVENUESPLITORDER.ID = REVENUESPLIT.ID
left outer join dbo.MERCHANDISEPRODUCTINSTANCE
on MERCHANDISEPRODUCTINSTANCE.ID = REVENUESPLITORDER.MERCHANDISEPRODUCTINSTANCEID
left outer join dbo.MERCHANDISEPRODUCT
on MERCHANDISEPRODUCT.ID = MERCHANDISEPRODUCTINSTANCE.MERCHANDISEPRODUCTID
left outer join dbo.REVENUECATEGORY
on REVENUECATEGORY.ID = REVENUESPLIT.ID
--Membership recurring gift payment Membership Level Resolution
left join dbo.RECURRINGGIFTACTIVITY RA on RA.PAYMENTREVENUEID = REVENUESPLIT.ID and REVENUESPLIT.APPLICATIONCODE = 3 and REVENUESPLIT.TYPECODE = 2
left join (
select
RGLI.ID,
RGLI.FINANCIALTRANSACTIONID
from dbo.FINANCIALTRANSACTIONLINEITEM RGLI
inner join dbo.REVENUESPLIT_EXT RGRS on RGRS.ID = RGLI.ID
where RGLI.DELETEDON is null and RGLI.TYPECODE != 1
) RGLI on --Recurring gift line item
RGLI.FINANCIALTRANSACTIONID = RA.SOURCEREVENUEID
--Membership installment plan Membership Level Resolution
outer apply (
select top 1 [MIPLI].ID --The split could be applied to several installments
from dbo.INSTALLMENTPAYMENT with (nolock)
inner join dbo.FINANCIALTRANSACTIONLINEITEM as [MIPLI] on --Membership installment plan line item
INSTALLMENTPAYMENT.PLEDGEID = [MIPLI].FINANCIALTRANSACTIONID and
[MIPLI].DELETEDON is null and
[MIPLI].TYPECODE != 1 --1: Reversal
inner join dbo.REVENUESPLIT_EXT as [MIPLI_EXT] on
[MIPLI].ID = [MIPLI_EXT].ID and
[MIPLI_EXT].APPLICATIONCODE = 5 and --Membership
[MIPLI_EXT].TYPECODE = 2 --Membership
where
REVENUESPLIT.ID = INSTALLMENTPAYMENT.PAYMENTID and
REVENUESPLIT.APPLICATIONCODE = 19 and --Membership installment plan
REVENUESPLIT.TYPECODE = 2 --Membership
) [MEMBERSHIPINSTALLMENTLI]
left outer join dbo.MEMBERSHIPTRANSACTION
on MEMBERSHIPTRANSACTION.REVENUESPLITID = coalesce(RGLI.ID, [MEMBERSHIPINSTALLMENTLI].ID, REVENUESPLIT.ID)
left outer join dbo.EVENTREGISTRANTPAYMENT
on EVENTREGISTRANTPAYMENT.PAYMENTID = REVENUESPLIT.ID
left outer join dbo.REGISTRANT
on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
left outer join dbo.EVENT
on EVENT.ID = REGISTRANT.EVENTID
left outer join dbo.RESOURCE
on RESOURCE.ID = REVENUESPLITORDER.RESOURCEID
where REVENUESPLIT.ID = @REVENUESPLITID and FTLI.DELETEDON is null and FTLI.TYPECODE != 1;
end
else if @INFORMATIONSOURCECODE = 1
begin
-- If the revenue type is pledge then we need to use the older version of the splits function
if ((select TYPECODE from dbo.BATCHREVENUE where ID = @REVENUEID) = 1)
begin
insert into @RETVAL
(
ID,
REVENUEID,
DESIGNATIONID,
EVENTID,
PROGRAMID,
CATEGORYCODEID,
MEMBERSHIPLEVELID,
ORDERMEMBERSHIPLEVELID,
ORDERMERCHANDISEPRODUCTINSTANCEID,
ORDEREVENTID,
ORDERRESOURCECATEGORYCODEID,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
OVERRIDEBUSINESSUNITS,
REVENUESPLITBUSINESSUNITOVERRIDECODEID
)
select APPLICATIONS.ID,
@REVENUEID,
APPLICATIONS.DESIGNATIONID,
null,
null,
null,
null,
null,
null,
null,
null,
APPLICATIONS.AMOUNT,
APPLICATIONS.TYPECODE,
0,
null,
null,
null,
null,
null,
null,
0,
null
from dbo.UFN_REVENUEBATCH_GETSPLITS(@REVENUEID) as APPLICATIONS
where APPLICATIONS.ID = @REVENUESPLITID;
end
else
begin
-- Get the applications
-- but first check to see if it's a single payment application
declare @SINGLEAPPLICATIONID uniqueidentifier;
declare @APPLICATIONTYPECODE tinyint;
select
@SINGLEAPPLICATIONID = SINGLEAPPLICATIONID,
@APPLICATIONTYPECODE = APPLICATIONTYPECODE
from dbo.UFN_REVENUEBATCH_GETSINGLEAPPLICATIONINFO(@REVENUEID);
if @SINGLEAPPLICATIONID is null
begin
insert into @RETVAL
(
ID,
REVENUEID,
DESIGNATIONID,
EVENTID,
PROGRAMID,
CATEGORYCODEID,
MEMBERSHIPLEVELID,
ORDERMEMBERSHIPLEVELID,
ORDERMERCHANDISEPRODUCTINSTANCEID,
ORDERMERCHANDISEDEPARTMENTID,
ORDEREVENTID,
ORDERPROGRAMID,
ORDERFEEID,
ORDERTAXID,
ORDEREVENTLOCATIONID,
ORDERRESOURCECATEGORYCODEID,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
OVERRIDEBUSINESSUNITS,
REVENUESPLITBUSINESSUNITOVERRIDECODEID
)
select APPLICATIONSWITHCHILDREN.ID,
@REVENUEID,
case when (APPLICATIONSWITHCHILDREN.TYPECODE = 1) and
(not APPLICATIONSWITHCHILDREN.PLEDGES is null) then
-- When this is a pledge payment we need to get the designation from the pledge
-- grab the designation from the first split.
(select top 1 T.c.value('(DESIGNATIONID)[1]','uniqueidentifier')
from APPLICATIONSWITHCHILDREN.PLEDGES.nodes('(((/ITEM)[1]/SPLITS)[1]/ITEM)[1]') T(c))
else
case when (APPLICATIONSWITHCHILDREN.TYPECODE = 1) then
(select top 1 DESIGNATIONID from REVENUESPLIT T1 join BATCHREVENUEAPPLICATION T2 on T1.REVENUEID = T2.REVENUEID where T2.BATCHREVENUEID = @REVENUEID and T2.ID = @REVENUESPLITID)
else
null
end
end,
isnull(REGISTRANT.EVENTID, BATCHREVENUEREGISTRANT.EVENTID),
isnull(REGISTRANTEVENT.PROGRAMID, BATCHREVENUEREGISTRANTEVENT.PROGRAMID),
null, --CATEGORYCODEID,
isnull(BATCHREVENUEAPPLICATIONMEMBERSHIP.MEMBERSHIPID,(select top 1 MEMBERSHIPLEVELID from dbo.UFN_REVENUEBATCH_GETAPPLICATIONSWITHCHILDREN(@REVENUEID) as APPWITHCHILDREN
left outer join dbo.BATCHREVENUEAPPLICATIONMEMBERSHIP on BATCHREVENUEAPPLICATIONMEMBERSHIP.MEMBERSHIPID = APPWITHCHILDREN.APPLICATIONID where APPWITHCHILDREN.ID = @REVENUESPLITID)),
null,
null,
null,
null,
null,
null,
null,
null,
null,
APPLICATIONSWITHCHILDREN.APPLIED,
case APPLICATIONSWITHCHILDREN.TYPECODE
when 6 then 1
when 5 then 2
when 3 then 9
when 1 then 0
when 2 then -- Recurring gift payment, should be marked as a payment if not sponsorship
case
when APPLICATIONSWITHCHILDREN.SPONSORSHIPOPPORTUNITY is not null then 9 -- sponsorship RG
when APPLICATIONSWITHCHILDREN.SPONSORSHIPRGADDITIONALGIFT = 1 then 17 -- sponsorship recurring additional gift
else 0
end
when 10 then 0 -- Donor challenge payment, should be marked as a payment
-- TODO: Other types
end,
case APPLICATIONSWITHCHILDREN.TYPECODE
when 1 then 2 --Pledge Payment
when 3 then 7 --MGPledge Payment
when 2 then 3 --Recurring Gift Payment
when 6 then 1 --Event Registration Payment
when 4 then 6 --Planned gift
when 5 then 5 --Membership
when 9 then 8 --Grant Award Payment
when 10 then 13 --Donor challenge payment
else 99
end,
null,
null,
null,
null,
null,
null,
null,
null
from dbo.UFN_REVENUEBATCH_GETAPPLICATIONSWITHCHILDREN(@REVENUEID) as APPLICATIONSWITHCHILDREN
left outer join dbo.REGISTRANT
on APPLICATIONSWITHCHILDREN.APPLICATIONID = REGISTRANT.ID
left outer join dbo.BATCHREVENUEREGISTRANT
on APPLICATIONSWITHCHILDREN.APPLICATIONID = BATCHREVENUEREGISTRANT.ID
left outer join dbo.EVENT as REGISTRANTEVENT
on REGISTRANT.EVENTID = REGISTRANTEVENT.ID
left outer join dbo.EVENT as BATCHREVENUEREGISTRANTEVENT
on BATCHREVENUEREGISTRANT.EVENTID = BATCHREVENUEREGISTRANTEVENT.ID
left outer join dbo.BATCHREVENUEAPPLICATIONMEMBERSHIP
on BATCHREVENUEAPPLICATIONMEMBERSHIP.ID = APPLICATIONSWITHCHILDREN.APPLICATIONID
where APPLICATIONSWITHCHILDREN.ID = @REVENUESPLITID;
end
else -- Get the single payment application where the applicationinfo field holds the key to the application
begin
insert into @RETVAL
(
ID,
REVENUEID,
DESIGNATIONID,
EVENTID,
PROGRAMID,
CATEGORYCODEID,
MEMBERSHIPLEVELID,
ORDERMEMBERSHIPLEVELID,
ORDERMERCHANDISEPRODUCTINSTANCEID,
ORDERMERCHANDISEDEPARTMENTID,
ORDEREVENTID,
ORDERPROGRAMID,
ORDERFEEID,
ORDERTAXID,
ORDEREVENTLOCATIONID,
ORDERRESOURCECATEGORYCODEID,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
OVERRIDEBUSINESSUNITS,
REVENUESPLITBUSINESSUNITOVERRIDECODEID
)
select REVENUESPLIT.ID,
REVENUESPLIT.REVENUEID,
REVENUESPLIT.DESIGNATIONID,
REGISTRANT.EVENTID,
EVENT.PROGRAMID,
REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID,
MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID,
REVENUESPLITORDER.MEMBERSHIPLEVELID,
REVENUESPLITORDER.MERCHANDISEPRODUCTINSTANCEID,
MERCHANDISEPRODUCT.MERCHANDISEDEPARTMENTID,
REVENUESPLITORDER.EVENTID,
REVENUESPLITORDER.PROGRAMID,
REVENUESPLITORDER.FEEID,
REVENUESPLITORDER.TAXID,
REVENUESPLITORDER.EVENTLOCATIONID,
RESOURCE.RESOURCECATEGORYCODEID,
REVENUESPLIT.AMOUNT,
REVENUESPLIT.TYPECODE,
case @APPLICATIONTYPECODE
when 5 then 2 -- pledge payment
when 4 then 3 -- recurring gift payment
when 8 then 7 -- matching gift payment
when 6 then 6 -- planned gift payment
when 10 then 13 -- Donor challenge payment
when 1 then 3 -- sponsorship payment
when 2 then 5 -- membership payment
when 3 then 10 -- order payment
when 9 then 8 -- grant award payment
else 0 end as APPLICATIONCODE,
REVENUESPLIT.BASECURRENCYID,
REVENUESPLIT.ORGANIZATIONAMOUNT,
REVENUESPLIT.ORGANIZATIONEXCHANGERATEID,
REVENUESPLIT.TRANSACTIONAMOUNT,
REVENUESPLIT.TRANSACTIONCURRENCYID,
REVENUESPLIT.BASEEXCHANGERATEID,
REVENUESPLIT.OVERRIDEBUSINESSUNITS,
REVENUESPLIT.REVENUESPLITBUSINESSUNITOVERRIDECODEID
from dbo.REVENUESPLIT
left outer join dbo.REVENUESPLITORDER
on REVENUESPLITORDER.ID = REVENUESPLIT.ID
left outer join dbo.EVENT as ORDEREVENT
on ORDEREVENT.ID = REVENUESPLITORDER.EVENTID
left outer join dbo.MERCHANDISEPRODUCTINSTANCE
on MERCHANDISEPRODUCTINSTANCE.ID = REVENUESPLITORDER.MERCHANDISEPRODUCTINSTANCEID
left outer join dbo.MERCHANDISEPRODUCT
on MERCHANDISEPRODUCT.ID = MERCHANDISEPRODUCTINSTANCE.MERCHANDISEPRODUCTID
left outer join dbo.REVENUECATEGORY
on REVENUECATEGORY.ID = REVENUESPLIT.ID
left outer join dbo.MEMBERSHIPTRANSACTION
on MEMBERSHIPTRANSACTION.REVENUESPLITID = REVENUESPLIT.ID
left outer join dbo.EVENTREGISTRANTPAYMENT
on EVENTREGISTRANTPAYMENT.PAYMENTID = REVENUESPLIT.ID
left outer join dbo.REGISTRANT
on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
left outer join dbo.EVENT
on EVENT.ID = REGISTRANT.EVENTID
left outer join dbo.RESOURCE
on RESOURCE.ID = REVENUESPLITORDER.RESOURCEID
where REVENUESPLIT.ID = @REVENUESPLITID;
end
-- Get the additional applications
insert into @RETVAL
(
ID,
REVENUEID,
DESIGNATIONID,
EVENTID,
PROGRAMID,
CATEGORYCODEID,
MEMBERSHIPLEVELID,
ORDERMEMBERSHIPLEVELID,
ORDERMERCHANDISEPRODUCTINSTANCEID,
ORDEREVENTID,
ORDERRESOURCECATEGORYCODEID,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
OVERRIDEBUSINESSUNITS,
REVENUESPLITBUSINESSUNITOVERRIDECODEID
)
select ID,
@REVENUEID,
DESIGNATIONID,
null,
null,
CATEGORYCODEID,
null,
null,
null,
null,
null,
APPLIED,
case TYPECODE
when 0 then 0
when 1 then 4
when 2 then 0
when 3 then 9
end,
case TYPECODE
when 0 then 0
when 1 then 4
when 2 then 7
when 3 then 0
end,
null,
null,
null,
null,
null,
null,
null,
null
from dbo.UFN_REVENUEBATCH_GETADDITIONALAPPLICATIONS(@REVENUEID) as ADDITIONALAPPLICATIONS
where ADDITIONALAPPLICATIONS.ID = @REVENUESPLITID;
-- Insert the other applications using the old version that are not part of the new process
insert into @RETVAL
(
ID,
REVENUEID,
DESIGNATIONID,
EVENTID,
PROGRAMID,
CATEGORYCODEID,
MEMBERSHIPLEVELID,
ORDERMEMBERSHIPLEVELID,
ORDERMERCHANDISEPRODUCTINSTANCEID,
ORDEREVENTID,
ORDERRESOURCECATEGORYCODEID,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
OVERRIDEBUSINESSUNITS,
REVENUESPLITBUSINESSUNITOVERRIDECODEID
)
select ID,
@REVENUEID,
DESIGNATIONID,
null,
null,
null,
null,
null,
null,
null,
null,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
null,
null,
null,
null,
null,
null,
null,
null
from dbo.UFN_REVENUEBATCH_GETSPLITS(@REVENUEID) as OLDAPPLICATIONS
where (OLDAPPLICATIONS.ID = @REVENUESPLITID) and
(not OLDAPPLICATIONS.ID in (select ID from @RETVAL));
end
end
return;
end