UFN_REVENUE_GENERATEGLDISTRIBUTION_FORSINGLEREVENUE
Generates GL Account Code from the Account code mappings defined in the system for the given revenue record.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN |
Definition
Copy
CREATE function [dbo].[UFN_REVENUE_GENERATEGLDISTRIBUTION_FORSINGLEREVENUE](@REVENUEID uniqueidentifier)
returns @DISTRIBUTIONS TABLE
(
REVENUEID uniqueidentifier,
GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
TRANSACTIONTYPECODE tinyint,
POSTDATE datetime,
POSTSTATUSCODE tinyint,
ACCOUNTSTRING nvarchar(255),
PROJECT nvarchar(255),
AMOUNT money,
REFERENCE nvarchar(255),
ERRORMESSAGE nvarchar(max),
PAYMENTMETHODCODE tinyint,
REVENUETRANSACTIONTYPECODE tinyint,
ACCOUNTID uniqueidentifier,
REVENUESPLITID uniqueidentifier,
BASECURRENCYID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
ORGANIZATIONAMOUNT money,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
MAPPEDVALUES xml
)
as begin
declare @TRANSACTIONTYPECODE tinyint;
declare @PAYMENTMETHODCODE tinyint;
declare @PAYMENTMETHOD nvarchar(100);
declare @REVENUEPAYMENTMETHODID uniqueidentifier;
declare @POSTDATE date;
declare @POSTSTATUSCODE tinyint;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGEXCHANGERATEID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @HASEVENTS bit = 0;
declare @HASMEMBERSHIP bit = 0;
declare @HASPLEDGEPAY bit = 0;
declare @hasOther bit = 0;
declare @USINGBASICGL bit = dbo.UFN_VALID_BASICGL_INSTALLED();
select
@TRANSACTIONTYPECODE = REVENUE.TYPECODE,
@POSTDATE = REVENUE.POSTDATE,
@POSTSTATUSCODE = REVENUE.POSTSTATUSCODE,
@TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
@BASECURRENCYID = V.BASECURRENCYID,
@BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
@ORGEXCHANGERATEID = REVENUE.ORGEXCHANGERATEID,
@PAYMENTMETHODCODE = PAYMENTMETHODCODE,
@PAYMENTMETHOD = REVENUEPAYMENTMETHOD.PAYMENTMETHOD,
@REVENUEPAYMENTMETHODID = REVENUEPAYMENTMETHOD.ID
from dbo.FINANCIALTRANSACTION as REVENUE with (nolock)
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on
REVENUE.ID = V.FINANCIALTRANSACTIONID
left join dbo.REVENUEPAYMENTMETHOD with (nolock) on
REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
where REVENUE.ID = @REVENUEID;
-- Pledge/Membership installment
if @TRANSACTIONTYPECODE in (1, 15)
begin
/*
We need special handling for Pledge and Membership Installment Plans. Their installments can be paid with various payment methods (e.g. 'credit card', 'debit card' or 'none').
However, the the pledge/installment plan itself should get mapped to the 'None' payment method code (9 and sometimes 99 for pledge--read the next line). This is their appropriate mapping in the GLPAYMENTMETHODREVENUETYPEMAPPING table.
Also, under BasicGL for Pledge: We need to differentiate Inside vs Outside Current Fiscal Year. These correspond to payment method code 9 (Inside) and 99 (Outside).
*/
declare @INSTALLMENTTYPE nvarchar(30)
if @TRANSACTIONTYPECODE = 1 -- Pledge
set @INSTALLMENTTYPE = 'Pledge'
else
set @INSTALLMENTTYPE = 'Membership installment plan'
if @USINGBASICGL = 0 or @TRANSACTIONTYPECODE = 15 -- Membership Installment
begin
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select
REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(9, @TRANSACTIONTYPECODE, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case
when ADJUSTMENT.ID is null then @POSTDATE -- same reason as above [Where? - cr, 4/28/2014]
else ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then (
case
when @POSTSTATUSCODE = 3 then 2
when @POSTSTATUSCODE = 2 then 0
else 1
end
) -- same reason as above.
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
REVENUESPLIT.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, 'None', @INSTALLMENTTYPE) as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
9,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
REVENUESPLIT.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.ORGAMOUNT as ORGANIZATIONAMOUNT,
@ORGEXCHANGERATEID as ORGANIZATIONEXCHANGERATEID,
[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
left join dbo.ADJUSTMENT with (nolock) on
REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and
ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, @TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, 9, REVENUESPLIT_EXT.DESIGNATIONID)
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE != 1
and REVENUESPLIT.POSTSTATUSCODE!=2
end
else
begin
declare @FISCALYEARID uniqueidentifier;
select @FISCALYEARID = GLFISCALYEARID
from dbo.GLFISCALPERIOD
where dbo.UFN_DATE_GETEARLIESTTIME(@POSTDATE) between STARTDATE and ENDDATE;
--Need to handle the case where there is no fiscal year by inserting a dummy row.
--Otherwise the transaction is successfully created with no distributions
if @FISCALYEARID is null
begin
insert into @DISTRIBUTIONS (REVENUEID, ERRORMESSAGE, POSTSTATUSCODE) values (@REVENUEID,'Post date must be in an open period.',1)
return
end
if dbo.UFN_INSTALLMENT_CURRENTYEAR(@REVENUEID, @FISCALYEARID, 1) = 1
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(9, @TRANSACTIONTYPECODE, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null
then @POSTDATE -- same reason as above
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(
case when @POSTSTATUSCODE = 3 -- Do Not Post
then 2
when @POSTSTATUSCODE = 2 -- Posted
then 0
else 1 -- Not Posted
end
) -- same reason as above.
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
(
select
sum(INSTALLMENTSPLIT.AMOUNT)
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on
INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID
and REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
and INSTALLMENT.DATE between
(
select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
and
(
select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
) as AMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, 'None', 'Pledge') as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
9, -- None?
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
(
select
sum(INSTALLMENTSPLIT.TRANSACTIONAMOUNT)
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID
and REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
and INSTALLMENT.DATE between
(
select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
and
(
select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
) as TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
(
select
sum(INSTALLMENTSPLIT.ORGANIZATIONAMOUNT)
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID
and REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
and INSTALLMENT.DATE between
(
select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
and
(
select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
) as ORGANIZATIONAMOUNT,
@ORGEXCHANGERATEID as ORGANIZATIONEXCHANGERATEID,
[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT
on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
left join dbo.ADJUSTMENT with (nolock)
on REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, @TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, 9, REVENUESPLIT_EXT.DESIGNATIONID)
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID and
REVENUESPLIT.DELETEDON is null and
REVENUESPLIT.TYPECODE != 1 and -- Reversal
@TRANSACTIONTYPECODE = 1 and -- Pledge
REVENUESPLIT.POSTSTATUSCODE != 2 and -- Posted
exists
(
select *
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on
INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID and
REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID and
INSTALLMENT.DATE between (select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID) and (select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID )
)
--special handling for Pledge
if dbo.UFN_INSTALLMENT_CURRENTYEAR(@REVENUEID, @FISCALYEARID, 0) = 1
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(9, @TRANSACTIONTYPECODE, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null
then
@POSTDATE -- same reason as above
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(case when @POSTSTATUSCODE = 3
then
2
when @POSTSTATUSCODE = 2
then
0
else
1
end
) -- same reason as above.
else
ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
(
select
sum(INSTALLMENTSPLIT.AMOUNT)
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID
and REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
and INSTALLMENT.DATE not between
(
select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
and
(
select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
) as AMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, 'None', 'Pledge') as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
9, -- None?
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
(
select
sum(INSTALLMENTSPLIT.TRANSACTIONAMOUNT)
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on
INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID
and REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
and INSTALLMENT.DATE not between
(
select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
and
(
select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
) as TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
(
select
sum(INSTALLMENTSPLIT.ORGANIZATIONAMOUNT)
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID
and REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
and INSTALLMENT.DATE not between
(
select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
and
(
select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID
)
) as ORGANIZATIONAMOUNT,
@ORGEXCHANGERATEID as ORGANIZATIONEXCHANGERATEID,
[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on
REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
left join dbo.ADJUSTMENT with (nolock) on
REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and
ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, @TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, 99, REVENUESPLIT_EXT.DESIGNATIONID)
where REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID and
REVENUESPLIT.DELETEDON is null and
REVENUESPLIT.TYPECODE != 1 and
@TRANSACTIONTYPECODE = 1 and
REVENUESPLIT.POSTSTATUSCODE !=2
and exists
(
select *
from dbo.INSTALLMENT
inner join INSTALLMENTSPLIT on
INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENT.REVENUEID and
REVENUESPLIT_EXT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID and
INSTALLMENT.DATE not between (select min(STARTDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID) and
(select max(ENDDATE) from dbo.GLFISCALPERIOD where GLFISCALYEARID = @FISCALYEARID )
)
--special handling for Pledge
end
return;
end
-- Sold stock/property
if (@PAYMENTMETHODCODE = 4 or @PAYMENTMETHODCODE = 5)
if (@PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID)) or
(@PAYMENTMETHODCODE = 5 and exists(select ID from dbo.PROPERTYDETAIL where PROPERTYDETAIL.ID = @REVENUEPAYMENTMETHODID and ISSOLD = 1))
begin
/*
We need special handling for sold stock and property. When a property is sold its payment code is changed from 5 to 8
But even after selling we need to capture the unsold information and so need to pass in 4 and 5 to UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE
and UFN_REVENUE_GENERATEGLACCOUNT to get the correct journal reference and account numbers respectively.
*/
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select REVENUE.ID as REVENUEID,
case REVENUESPLIT_EXT.APPLICATIONCODE
when 1
then dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(SORP.PAYMENTMETHODCODE, REVENUE.TYPECODE, 1, 1, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) -- Event registration fee
when 5
then dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(SORP.PAYMENTMETHODCODE, REVENUE.TYPECODE, 2, 5, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) -- Membership payment
else
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(SORP.PAYMENTMETHODCODE, REVENUE.TYPECODE, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE)
end as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null
then
REVENUE.POSTDATE
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(
case when REVENUE.POSTSTATUSCODE = 3 -- Do Not Post
then
2
when REVENUE.POSTSTATUSCODE = 2 -- Posted
then
0
else
1
end
)
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
coalesce(REVENUESPLIT.BASEAMOUNT,REVENUE.BASEAMOUNT),
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, SORP.PAYMENTMETHOD,REVENUESPLIT_EXT.APPLICATION) as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
@PAYMENTMETHODCODE,
REVENUE.TYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
V.BASECURRENCYID,
coalesce(REVENUESPLIT.TRANSACTIONAMOUNT,REVENUE.TRANSACTIONAMOUNT),
REVENUE.TRANSACTIONCURRENCYID,
REVENUE.BASEEXCHANGERATEID,
coalesce(REVENUESPLIT.ORGAMOUNT,REVENUE.ORGAMOUNT),
REVENUE.ORGEXCHANGERATEID,
[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES
from dbo.FINANCIALTRANSACTION REVENUE with (nolock)
inner join dbo.REVENUE_EXT on
REVENUE.ID = REVENUE_EXT.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock) on
REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID and
REVENUESPLIT.DELETEDON is null and
REVENUESPLIT.TYPECODE != 1 -- Reversal
left join dbo.REVENUESPLIT_EXT on
REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
left join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on
REVENUE.ID = V.FINANCIALTRANSACTIONID
inner join
(
select ID, '4' as PAYMENTMETHODCODE, 'Stock' as PAYMENTMETHOD from dbo.STOCKDETAIL
union all
select ID, '5' as PAYMENTMETHODCODE, 'Property' as PAYMENTMETHOD from dbo.PROPERTYDETAIL
)
as SORP on
@REVENUEPAYMENTMETHODID = SORP.ID
left join dbo.ADJUSTMENT with (nolock) on
REVENUE.ID = ADJUSTMENT.REVENUEID and
ADJUSTMENT.POSTSTATUSCODE <> 0 -- Posted
cross apply UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, REVENUE.TYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, SORP.PAYMENTMETHODCODE, REVENUESPLIT_EXT.DESIGNATIONID)
where
REVENUE.ID = @REVENUEID and
REVENUE.DELETEDON is null and
REVENUESPLIT_EXT.APPLICATIONCODE <> 2 and
REVENUESPLIT.POSTSTATUSCODE !=2 and
((@PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID)) or
(@PAYMENTMETHODCODE = 5 and exists(select ID from dbo.PROPERTYDETAIL where PROPERTYDETAIL.ID = @REVENUEPAYMENTMETHODID and ISSOLD = 1))) --special handling for sold stock/property
union all
/*
Special handling for pledge payments - bookable and non-bookable
Pledge payments post different based on whether their pledges are marked as
'Do not post' or 'Not Posted'
*/
select distinct
REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(SORP.PAYMENTMETHODCODE, DETAIL.REVENUETRANSACTIONTYPECODE, DETAIL.SPLITTYPECODE, DETAIL.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null
then
@POSTDATE -- same reason as above
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(
case when @POSTSTATUSCODE = 3
then
2
when @POSTSTATUSCODE = 2
then
0
else
1
end
) -- same reason as above.
else
ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
REVENUESPLIT.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, SORP.PAYMENTMETHOD, DETAIL.TYPE) as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
@PAYMENTMETHODCODE,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
REVENUESPLIT.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.ORGAMOUNT,
@ORGEXCHANGERATEID,
convert(varchar(max),[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES)
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on
REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join
(
select ID, '4' as PAYMENTMETHODCODE, 'Stock' as PAYMENTMETHOD from dbo.STOCKDETAIL
union all
select ID, '5' as PAYMENTMETHODCODE, 'Property' as PAYMENTMETHOD from dbo.PROPERTYDETAIL
)
as SORP on @REVENUEPAYMENTMETHODID = SORP.ID
inner join dbo.INSTALLMENTPAYMENT with (nolock) on
REVENUESPLIT.ID = INSTALLMENTPAYMENT.PAYMENTID
inner join dbo.FINANCIALTRANSACTION as PLEDGE with (nolock) on
INSTALLMENTPAYMENT.PLEDGEID = PLEDGE.ID and
PLEDGE.DELETEDON is null
cross apply dbo.UFN_POSTTOGLPROCESS_MAPPLEDGEPAYMENTS(PLEDGE.ID, case when PLEDGE.POSTSTATUSCODE = 3 then 2 when PLEDGE.POSTSTATUSCODE = 2 then 0 else 1 end) as DETAIL
left join dbo.ADJUSTMENT with (nolock) on REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and
ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, DETAIL.REVENUETRANSACTIONTYPECODE,DETAIL.SPLITTYPECODE, DETAIL.APPLICATIONCODE, SORP.PAYMENTMETHODCODE, REVENUESPLIT_EXT.DESIGNATIONID)
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID and
REVENUESPLIT.DELETEDON is null and
REVENUESPLIT.TYPECODE != 1 and
((@PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID)) or
(@PAYMENTMETHODCODE = 5 and exists(select ID from dbo.PROPERTYDETAIL where PROPERTYDETAIL.ID = @REVENUEPAYMENTMETHODID and ISSOLD = 1))) and --special handling for sold stock/property
(REVENUESPLIT_EXT.APPLICATIONCODE = 2) and
REVENUESPLIT.POSTSTATUSCODE != 2
return;
end
select
@HASEVENTS = case when EXT.APPLICATIONCODE = 1 then 1 else @HASEVENTS end,
@HASMEMBERSHIP = case when EXT.APPLICATIONCODE = 5 then 1 else @HASMEMBERSHIP end,
@HASPLEDGEPAY = case when EXT.APPLICATIONCODE in (2, 19) then 1 else @HASPLEDGEPAY end, --2: Pledge, 19: Membership installment plan
@hasOther = case when EXT.APPLICATIONCODE not in (1, 2, 5, 12, 19) then 1 else @hasOther end --1: Event Registration, 2: Pledge, 5: Membership, 12: Auction purchase, 19: Membership Installment Plan
from dbo.FINANCIALTRANSACTIONLINEITEM LI
inner join dbo.REVENUESPLIT_EXT EXT on LI.ID = EXT.ID
where LI.FINANCIALTRANSACTIONID = @REVENUEID and LI.DELETEDON is null and LI.TYPECODE != 1
-- Event registration payments
if (@HASEVENTS = 1)
begin
/*
We need special handling for Event Registration since they don't have Designations and have their own mapping table;
...Split TYPECODE and DESIGNATIONID are now passed in for gifts as part of an event registration.
*/
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(@PAYMENTMETHODCODE, @TRANSACTIONTYPECODE, REVENUESPLIT_EXT.TYPECODE, 1, tf.TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
tf.TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null
then
@POSTDATE -- same reason as above
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(
case when @POSTSTATUSCODE = 3
then
2
when @POSTSTATUSCODE = 2
then
0
else
1
end
)
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
tf.ACCOUNTSTRING,
tf.PROJECTCODE as PROJECT,
REVENUESPLIT.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, @PAYMENTMETHOD, REVENUESPLIT_EXT.APPLICATION) as REFERENCE,
tf.ERRORMESSAGE,
@PAYMENTMETHODCODE,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
tf.ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
REVENUESPLIT.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.ORGAMOUNT,
@ORGEXCHANGERATEID,
tf.MAPPEDVALUES
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
left join dbo.ADJUSTMENT with (nolock) on REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, @TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, @PAYMENTMETHODCODE, REVENUESPLIT_EXT.DESIGNATIONID) as tf
where (REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID) and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
and (REVENUESPLIT_EXT.APPLICATIONCODE = 1) --special handling for Event Registration
and REVENUESPLIT.POSTSTATUSCODE!=2
end
-- Membership payments
if (@HASMEMBERSHIP = 1)
begin
/*
We need special handling for Memberships since they don't have Designations and have their own mapping table
*/
insert into @DISTRIBUTIONS(REVENUEID,GLPAYMENTMETHODREVENUETYPEMAPPINGID,TRANSACTIONTYPECODE,POSTDATE,POSTSTATUSCODE,ACCOUNTSTRING,PROJECT,AMOUNT,REFERENCE,ERRORMESSAGE,PAYMENTMETHODCODE,REVENUETRANSACTIONTYPECODE,ACCOUNTID,REVENUESPLITID,
BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, MAPPEDVALUES)
select REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(@PAYMENTMETHODCODE, @TRANSACTIONTYPECODE, 2, 5, tf.TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
tf.TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null then @POSTDATE -- same reason as above
else ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null then (case when @POSTSTATUSCODE = 3 then 2 when @POSTSTATUSCODE = 2 then 0 else 1 end) -- same reason as above.
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
tf.ACCOUNTSTRING,
tf.PROJECTCODE as PROJECT,
REVENUESPLIT.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, @PAYMENTMETHOD, REVENUESPLIT_EXT.APPLICATION) as REFERENCE,
tf.ERRORMESSAGE,
@PAYMENTMETHODCODE,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
tf.ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
REVENUESPLIT.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.ORGAMOUNT,
@ORGEXCHANGERATEID,
tf.MAPPEDVALUES
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
left join dbo.ADJUSTMENT with (nolock) on REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, @TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, @PAYMENTMETHODCODE, null) as tf
where (REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID) and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
and (REVENUESPLIT_EXT.APPLICATIONCODE = 5) --special handling for Memberships
and REVENUESPLIT.POSTSTATUSCODE!=2
end
-- Pledge payments
if (@HASPLEDGEPAY = 1)
begin
/*
Special handling for pledge and membership installment plan payments - bookable and non-bookable
These payments post differently based on whether their pledges/plans are marked as 'Do not post' or 'Not Posted'
*/
insert into @DISTRIBUTIONS(REVENUEID,GLPAYMENTMETHODREVENUETYPEMAPPINGID,TRANSACTIONTYPECODE,POSTDATE,POSTSTATUSCODE,ACCOUNTSTRING,PROJECT,AMOUNT,REFERENCE,ERRORMESSAGE,PAYMENTMETHODCODE,REVENUETRANSACTIONTYPECODE,ACCOUNTID,REVENUESPLITID,
BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, MAPPEDVALUES)
select distinct
REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(@PAYMENTMETHODCODE, DETAIL.REVENUETRANSACTIONTYPECODE, DETAIL.SPLITTYPECODE, DETAIL.APPLICATIONCODE, tf.TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
tf.TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null then @POSTDATE -- same reason as above
else ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null then (case when @POSTSTATUSCODE = 3 then 2 when @POSTSTATUSCODE = 2 then 0 else 1 end) -- same reason as above.
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
tf.ACCOUNTSTRING,
tf.PROJECTCODE as PROJECT,
REVENUESPLIT.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, @PAYMENTMETHOD, DETAIL.TYPE) as REFERENCE,
tf.ERRORMESSAGE,
@PAYMENTMETHODCODE,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
tf.ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
REVENUESPLIT.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.ORGAMOUNT,
@ORGEXCHANGERATEID,
convert(varchar(max),tf.MAPPEDVALUES)
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.INSTALLMENTPAYMENT with (nolock) on REVENUESPLIT.ID = INSTALLMENTPAYMENT.PAYMENTID
inner join dbo.FINANCIALTRANSACTION as PLEDGE with (nolock) on INSTALLMENTPAYMENT.PLEDGEID = PLEDGE.ID and PLEDGE.DELETEDON is null
cross apply dbo.UFN_POSTTOGLPROCESS_MAPPLEDGEPAYMENTS_2 (
PLEDGE.ID,
case
when PLEDGE.POSTSTATUSCODE = 3 then 2
when PLEDGE.POSTSTATUSCODE = 2 then 0
else 1
end,
@USINGBASICGL,
PLEDGE.TYPECODE,
REVENUESPLIT_EXT.APPLICATIONCODE,
REVENUESPLIT_EXT.APPLICATION,
REVENUESPLIT_EXT.TYPECODE
) as DETAIL
left join dbo.ADJUSTMENT with (nolock) on REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, @TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, @PAYMENTMETHODCODE, REVENUESPLIT_EXT.DESIGNATIONID) as tf
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID and
REVENUESPLIT.DELETEDON is null and
REVENUESPLIT.TYPECODE != 1 and
REVENUESPLIT_EXT.APPLICATIONCODE in (2, 19) and --Pledge, Membership Installment Plan
REVENUESPLIT.POSTSTATUSCODE!=2
end
if (@TRANSACTIONTYPECODE in (0,5,6,7)) and
(@HASOTHER = 1)
begin
/* Getting 'Postable' Revenue */
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select FTLI.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(@PAYMENTMETHODCODE, @TRANSACTIONTYPECODE, RSX.TYPECODE, RSX.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null
then
@POSTDATE-- same reason as above
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(
case @POSTSTATUSCODE when 3
then
2
when 2
then
0
else
1
end
) -- same reason as above.
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
FTLI.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (FTLI.ID, @PAYMENTMETHOD, RSX.APPLICATION) as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
@PAYMENTMETHODCODE,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
FTLI.ID as REVENUESPLITID,
@BASECURRENCYID,
FTLI.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
FTLI.ORGAMOUNT,
@ORGEXCHANGERATEID,
[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES
from dbo.FINANCIALTRANSACTIONLINEITEM as FTLI with (nolock)
inner join dbo.REVENUESPLIT_EXT as RSX with (nolock) on
FTLI.ID = RSX.ID
left join dbo.ADJUSTMENT with (nolock) on
FTLI.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and
ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(FTLI.ID, @TRANSACTIONTYPECODE,RSX.TYPECODE, RSX.APPLICATIONCODE, @PAYMENTMETHODCODE, RSX.DESIGNATIONID)
where
(
FTLI.FINANCIALTRANSACTIONID = @REVENUEID) and
FTLI.TYPECODE = 0 and
FTLI.DELETEDON is NULL and
(not RSX.APPLICATIONCODE in (1,2,5,12,19)
) --special handling for Pledge, Event Registration, Membership, Auction purchase, and Membership Installment Plan
and
(
RSX.APPLICATIONCODE <> 10 or -- Order
RSX.TYPECODE <> 20 -- Overage
)
and FTLI.POSTSTATUSCODE!=2
end
if (@TRANSACTIONTYPECODE = 4) and (@USINGBASICGL = 1) and (@HASOTHER = 1)
begin
/* Getting 'Postable' Revenue */
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(@PAYMENTMETHODCODE, @TRANSACTIONTYPECODE, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case when ADJUSTMENT.ID is null
then
@POSTDATE -- same reason as above
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(
case when @POSTSTATUSCODE = 3
then
2
when @POSTSTATUSCODE = 2
then
0
else
1
end
) -- same reason as above.
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
REVENUESPLIT.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, @PAYMENTMETHOD, REVENUESPLIT_EXT.APPLICATION) + ' Contribution' as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
@PAYMENTMETHODCODE,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
REVENUESPLIT.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.ORGAMOUNT,
@ORGEXCHANGERATEID,
[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES
from FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on
REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.PLANNEDGIFTREVENUE with (nolock)
on REVENUESPLIT.FINANCIALTRANSACTIONID = PLANNEDGIFTREVENUE.REVENUEID
inner join dbo.PLANNEDGIFT with (nolock) on
PLANNEDGIFT.ID = PLANNEDGIFTREVENUE.ID
left join dbo.ADJUSTMENT with (nolock) on
REVENUESPLIT.FINANCIALTRANSACTIONID = ADJUSTMENT.REVENUEID and ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID,@TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, PLANNEDGIFT.VEHICLECODE, REVENUESPLIT_EXT.DESIGNATIONID)
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID and
REVENUESPLIT.DELETEDON is null and
REVENUESPLIT.TYPECODE != 1 and
(
not REVENUESPLIT_EXT.APPLICATIONCODE in (1,2,5,19)
) --special handling for Pledge, Event Registration, Membership, and Membership Installment Plan
and REVENUESPLIT.POSTSTATUSCODE != 2
--Additions
insert into @DISTRIBUTIONS
(
REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
TRANSACTIONTYPECODE,
POSTDATE,
POSTSTATUSCODE,
ACCOUNTSTRING,
PROJECT,
AMOUNT,
REFERENCE,
ERRORMESSAGE,
PAYMENTMETHODCODE,
REVENUETRANSACTIONTYPECODE,
ACCOUNTID,
REVENUESPLITID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
MAPPEDVALUES
)
select
REVENUESPLIT.FINANCIALTRANSACTIONID as REVENUEID,
dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(@PAYMENTMETHODCODE, @TRANSACTIONTYPECODE, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, [UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
[UFN_REVENUE_GENERATEGLACCOUNT].TRANSACTIONTYPECODE,
case
when ADJUSTMENT.ID is null
then
@POSTDATE -- same reason as above
else
ADJUSTMENT.POSTDATE
end as POSTDATE,
case when ADJUSTMENT.ID is null
then
(
case when @POSTSTATUSCODE = 3
then
2
when @POSTSTATUSCODE = 2
then
0
else
1
end
) -- same reason as above.
else ADJUSTMENT.POSTSTATUSCODE
end as POSTSTATUSCODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTSTRING,
[UFN_REVENUE_GENERATEGLACCOUNT].PROJECTCODE as PROJECT,
REVENUESPLIT.BASEAMOUNT,
dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, @PAYMENTMETHOD, REVENUESPLIT_EXT.APPLICATION) + ' Contribution' as REFERENCE,
[UFN_REVENUE_GENERATEGLACCOUNT].ERRORMESSAGE,
@PAYMENTMETHODCODE,
@TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
[UFN_REVENUE_GENERATEGLACCOUNT].ACCOUNTID as ACCOUNTID,
REVENUESPLIT.ID as REVENUESPLITID,
@BASECURRENCYID,
REVENUESPLIT.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
REVENUESPLIT.ORGAMOUNT,
@ORGEXCHANGERATEID,
[UFN_REVENUE_GENERATEGLACCOUNT].MAPPEDVALUES
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT with (nolock)
inner join dbo.REVENUESPLIT_EXT on
REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.PLANNEDGIFTADDITIONREVENUE with (nolock) on
PLANNEDGIFTADDITIONREVENUE.REVENUEID = REVENUESPLIT.FINANCIALTRANSACTIONID
inner join dbo.PLANNEDGIFTADDITION on
PLANNEDGIFTADDITION.ID = PLANNEDGIFTADDITIONREVENUE.ID
inner join dbo.PLANNEDGIFT with (nolock) on
PLANNEDGIFT.ID = PLANNEDGIFTADDITION.PLANNEDGIFTID
left join dbo.ADJUSTMENT with (nolock) on
ADJUSTMENT.REVENUEID = REVENUESPLIT.FINANCIALTRANSACTIONID and
ADJUSTMENT.POSTSTATUSCODE <> 0
cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, @TRANSACTIONTYPECODE,REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, PLANNEDGIFT.VEHICLECODE, REVENUESPLIT_EXT.DESIGNATIONID)
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID and
REVENUESPLIT_EXT.APPLICATIONCODE not in (1,2,5,19) and --special handling for Pledge, Event Registration, Membership, and Membership Installment Plan
REVENUESPLIT.DELETEDON is null and
REVENUESPLIT.TYPECODE != 1 and
REVENUESPLIT.POSTSTATUSCODE != 2
end
return;
end