UFN_APPEALREVENUESPLIT_GETAMOUNTSINCURRENCY_BULK
Returns the revenue split amounts of all appeal records in the given currency.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONCURRENCYID | uniqueidentifier | IN | |
@DECIMALDIGITS | tinyint | IN | |
@ROUNDINGTYPECODE | tinyint | IN | |
@CURRENCYCODE | tinyint | IN |
Definition
Copy
CREATE function [dbo].[UFN_APPEALREVENUESPLIT_GETAMOUNTSINCURRENCY_BULK]
(
-- If you want to convert to...
-- The base currency of each row:
-- set @CURRENCYCODE = 0
-- set @ORGANIZATIONCURRENCYID appropriately
-- The organization currency:
-- set @CURRENCYCODE = 1
-- set @ORGANIZATIONCURRENCYID appropriately
-- An arbitrary currency:
-- set @CURRENCYCODE = anything but 0 or 1
-- set @CURRENCYID = the currency's ID
-- set @DECIMALDIGITS and @ROUNDINGTYPECODE according to the currency
-- set @ORGANIZATIONCURRENCYID
@CURRENCYID uniqueidentifier,
@ORGANIZATIONCURRENCYID uniqueidentifier,
@DECIMALDIGITS tinyint,
@ROUNDINGTYPECODE tinyint,
@CURRENCYCODE tinyint
)
returns table
as
return
(
with APPEALCTE
as
(
select
APPEAL.ID APPEALID,
case @CURRENCYCODE
when 0 then APPEAL.BASECURRENCYID
when 1 then @ORGANIZATIONCURRENCYID
else @CURRENCYID
end as CURRENCYID,
DESIGNATION.ID DESIGNATIONID,
DESIGNATION.NAME DESIGNATIONNAME,
REVENUE.ID REVENUEID,
cast(REVENUE.DATE as datetime) [DATE],
REVENUE.TYPECODE TRANSACTIONTYPECODE,
REVENUESPLIT.ID REVENUESPLITID,
REVENUESPLIT.APPLICATIONCODE,
REVENUESPLIT.TYPECODE,
LI.TRANSACTIONAMOUNT REVENUESPLITTRANSACTIONAMOUNT,
LI.BASEAMOUNT REVENUESPLITAMOUNT,
LI.ORGAMOUNT REVENUESPLITORGANIZATIONAMOUNT,
REVENUE.TRANSACTIONCURRENCYID REVENUETRANSACTIONCURRENCYID,
isnull(REX.NONPOSTABLEBASECURRENCYID, V.BASECURRENCYID) REVENUEBASECURRENCYID,
WOLI.TRANSACTIONAMOUNT WRITEOFFSPLITTRANSACTIONAMOUNT,
WOLI.BASEAMOUNT WRITEOFFSPLITAMOUNT,
WOLI.ORGAMOUNT WRITEOFFSPLITORGANIZATIONAMOUNT,
case
--2 = 'Valid declaration', 3 = 'Covenant gift', 4 = 'Gift Aid sponsorship'
when REVENUESPLITGIFTAIDAMOUNTS.ELIGIBILITYCODE in (2,3,4) then REVENUESPLITGIFTAIDAMOUNTS.TRANSACTIONTAXCLAIMAMOUNT
else 0
end as TRANSACTIONTAXCLAIMAMOUNT,
case
when REVENUESPLITGIFTAIDAMOUNTS.ELIGIBILITYCODE in (2,3,4) then REVENUESPLITGIFTAIDAMOUNTS.TAXCLAIMAMOUNT
else 0
end as TAXCLAIMAMOUNT,
case
when REVENUESPLITGIFTAIDAMOUNTS.ELIGIBILITYCODE in (2,3,4) then REVENUESPLITGIFTAIDAMOUNTS.ORGANIZATIONTAXCLAIMAMOUNT
else 0
end as ORGANIZATIONTAXCLAIMAMOUNT
from
dbo.FINANCIALTRANSACTION REVENUE
inner join dbo.REVENUE_EXT REX on REX.ID = REVENUE.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on REVENUE.ID = LI.FINANCIALTRANSACTIONID
inner join dbo.REVENUESPLIT_EXT REVENUESPLIT on REVENUESPLIT.ID = LI.ID
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on LI.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
left join dbo.DESIGNATION on DESIGNATION.ID = REVENUESPLIT.DESIGNATIONID
left join dbo.FINANCIALTRANSACTION WRITEOFF on REVENUE.ID = WRITEOFF.PARENTID and WRITEOFF.TYPECODE = 20
left join dbo.FINANCIALTRANSACTIONLINEITEM WOLI on WRITEOFF.ID = WOLI.FINANCIALTRANSACTIONID
left join dbo.REVENUESPLIT_EXT WRITEOFFSPLIT on WRITEOFFSPLIT.ID = WOLI.ID and REVENUESPLIT.DESIGNATIONID = WRITEOFFSPLIT.DESIGNATIONID
left join dbo.APPEAL on APPEAL.ID = REX.APPEALID
left join dbo.[REVENUESPLITGIFTAIDAMOUNTS] on [REVENUESPLIT].[ID] = [REVENUESPLITGIFTAIDAMOUNTS].[ID]
where REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9) and LI.DELETEDON is null and LI.TYPECODE != 1
and (WRITEOFF.ID is null or (WOLI.DELETEDON is null and WOLI.TYPECODE = 0))
)
select -- Selected currency = base, org currency
APPEALCTE.APPEALID,
case
when (APPEALCTE.CURRENCYID = APPEALCTE.REVENUEBASECURRENCYID)
then APPEALCTE.REVENUESPLITAMOUNT
when (APPEALCTE.CURRENCYID = @ORGANIZATIONCURRENCYID) or (APPEALCTE.CURRENCYID is null)
then APPEALCTE.REVENUESPLITORGANIZATIONAMOUNT
end [REVENUESPLITAMOUNTINCURRENCY],
isnull(case
when (APPEALCTE.CURRENCYID = APPEALCTE.REVENUEBASECURRENCYID)
then APPEALCTE.WRITEOFFSPLITAMOUNT
when (APPEALCTE.CURRENCYID = @ORGANIZATIONCURRENCYID) or (APPEALCTE.CURRENCYID is null)
then APPEALCTE.WRITEOFFSPLITORGANIZATIONAMOUNT
end, 0) [WRITEOFFSPLITAMOUNTINCURRENCY],
isnull(case
when (APPEALCTE.CURRENCYID = APPEALCTE.REVENUEBASECURRENCYID)
then APPEALCTE.TAXCLAIMAMOUNT
when (APPEALCTE.CURRENCYID = @ORGANIZATIONCURRENCYID) or (APPEALCTE.CURRENCYID is null)
then APPEALCTE.ORGANIZATIONTAXCLAIMAMOUNT
end, 0) [TAXCLAIMAMOUNTINCURRENCY],
APPEALCTE.DESIGNATIONID,
APPEALCTE.DESIGNATIONNAME,
APPEALCTE.REVENUEID,
APPEALCTE.DATE,
APPEALCTE.TRANSACTIONTYPECODE,
APPEALCTE.REVENUESPLITID,
APPEALCTE.APPLICATIONCODE,
APPEALCTE.TYPECODE
from
APPEALCTE
where
(APPEALCTE.CURRENCYID is null)
or (APPEALCTE.CURRENCYID = APPEALCTE.REVENUEBASECURRENCYID)
or (APPEALCTE.CURRENCYID = @ORGANIZATIONCURRENCYID)
union all -- Use designation base currency and currency <> base, org currency
select
APPEALCTE.APPEALID,
case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.REVENUESPLITORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.REVENUESPLITORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
else 0
end [REVENUESPLITAMOUNTINCURRENCY],
isnull(case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.WRITEOFFSPLITORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.WRITEOFFSPLITORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
else 0
end, 0) [WRITEOFFSPLITAMOUNTINCURRENCY],
isnull(case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.ORGANIZATIONTAXCLAIMAMOUNT, LATESTEXCHANGERATE.RATE), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.ORGANIZATIONTAXCLAIMAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
else 0
end, 0) [TAXCLAIMAMOUNTINCURRENCY],
APPEALCTE.DESIGNATIONID,
APPEALCTE.DESIGNATIONNAME,
APPEALCTE.REVENUEID,
APPEALCTE.DATE,
APPEALCTE.TRANSACTIONTYPECODE,
APPEALCTE.REVENUESPLITID,
APPEALCTE.APPLICATIONCODE,
APPEALCTE.TYPECODE
from APPEALCTE
left join dbo.CURRENCY on CURRENCY.ID = APPEALCTE.CURRENCYID
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = APPEALCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,APPEALCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,APPEALCTE.DATE)
) LATESTEXCHANGERATE
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = APPEALCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,APPEALCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,APPEALCTE.DATE)
) LATESTINVERSEEXCHANGERATE
where (APPEALCTE.CURRENCYID is not null)
and (APPEALCTE.CURRENCYID <> APPEALCTE.REVENUEBASECURRENCYID)
and (APPEALCTE.CURRENCYID <> @ORGANIZATIONCURRENCYID)
and @CURRENCYCODE = 0
union all -- Use arbitrary currency and currency <> base, org currency
select
APPEALCTE.APPEALID,
case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.REVENUESPLITORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.REVENUESPLITORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
else 0
end [REVENUESPLITAMOUNTINCURRENCY],
isnull(case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.WRITEOFFSPLITORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.WRITEOFFSPLITORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
else 0
end, 0) [WRITEOFFSPLITAMOUNTINCURRENCY],
isnull(case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.ORGANIZATIONTAXCLAIMAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.ORGANIZATIONTAXCLAIMAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
else 0
end, 0) [TAXCLAIMAMOUNTINCURRENCY],
APPEALCTE.DESIGNATIONID,
APPEALCTE.DESIGNATIONNAME,
APPEALCTE.REVENUEID,
APPEALCTE.DATE,
APPEALCTE.TRANSACTIONTYPECODE,
APPEALCTE.REVENUESPLITID,
APPEALCTE.APPLICATIONCODE,
APPEALCTE.TYPECODE
from APPEALCTE
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = APPEALCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,APPEALCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,APPEALCTE.DATE)
) LATESTEXCHANGERATE
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = APPEALCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,APPEALCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,APPEALCTE.DATE)
) LATESTINVERSEEXCHANGERATE
where (APPEALCTE.CURRENCYID is not null)
and (APPEALCTE.CURRENCYID <> APPEALCTE.REVENUEBASECURRENCYID)
and (APPEALCTE.CURRENCYID <> @ORGANIZATIONCURRENCYID)
and @CURRENCYCODE not in (0, 1)
)