UFN_MEMBERSHIPLEVELREVENUESPLIT_GETAMOUNTSINCURRENCY_BULK
Returns the revenue split amounts of all membership level 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_MEMBERSHIPLEVELREVENUESPLIT_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 MEMBERSHIPLEVELCTE
as
(
select
MEMBERSHIPTRANSACTION.ID MEMBERSHIPTRANSACTIONID,
MEMBERSHIPLEVEL.ID MEMBERSHIPLEVELID,
case @CURRENCYCODE
when 0 then MEMBERSHIPLEVEL.BASECURRENCYID
when 1 then @ORGANIZATIONCURRENCYID
else @CURRENCYID
end as CURRENCYID,
REVENUESPLIT.ID REVENUESPLITID,
REVENUESPLIT.BASEAMOUNT REVENUESPLITAMOUNT,
REVENUESPLIT.ORGAMOUNT REVENUESPLITORGANIZATIONAMOUNT,
isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID) REVENUESPLITBASECURRENCYID,
cast(REVENUE.DATE as datetime) DATE
from
dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = REVENUE.ID
inner join dbo.MEMBERSHIPTRANSACTION on MEMBERSHIPTRANSACTION.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPLEVEL.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
inner join dbo.PDACCOUNTSYSTEM on REVENUE.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
where
REVENUESPLIT.TYPECODE <> 1
and REVENUE.DELETEDON is null
and REVENUESPLIT.DELETEDON is null
)
select -- Selected currency = base or org currency
MEMBERSHIPLEVELCTE.MEMBERSHIPTRANSACTIONID,
MEMBERSHIPLEVELCTE.MEMBERSHIPLEVELID,
case
when (MEMBERSHIPLEVELCTE.CURRENCYID = MEMBERSHIPLEVELCTE.REVENUESPLITBASECURRENCYID)
then MEMBERSHIPLEVELCTE.REVENUESPLITAMOUNT
when (MEMBERSHIPLEVELCTE.CURRENCYID = @ORGANIZATIONCURRENCYID) or (MEMBERSHIPLEVELCTE.CURRENCYID is null)
then MEMBERSHIPLEVELCTE.REVENUESPLITORGANIZATIONAMOUNT
end [REVENUESPLITAMOUNTINCURRENCY],
MEMBERSHIPLEVELCTE.REVENUESPLITID
from
MEMBERSHIPLEVELCTE
where
(MEMBERSHIPLEVELCTE.CURRENCYID is null)
or (MEMBERSHIPLEVELCTE.CURRENCYID = MEMBERSHIPLEVELCTE.REVENUESPLITBASECURRENCYID)
or (MEMBERSHIPLEVELCTE.CURRENCYID = @ORGANIZATIONCURRENCYID)
union all -- Use membership level base currency and currency <> base, org currency
select
MEMBERSHIPLEVELCTE.MEMBERSHIPTRANSACTIONID,
MEMBERSHIPLEVELCTE.MEMBERSHIPLEVELID,
case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(MEMBERSHIPLEVELCTE.REVENUESPLITORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(MEMBERSHIPLEVELCTE.REVENUESPLITORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
else 0
end [REVENUESPLITAMOUNTINCURRENCY],
MEMBERSHIPLEVELCTE.REVENUESPLITID
from MEMBERSHIPLEVELCTE
left join dbo.CURRENCY on CURRENCY.ID = MEMBERSHIPLEVELCTE.CURRENCYID
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = MEMBERSHIPLEVELCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
) LATESTEXCHANGERATE
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = MEMBERSHIPLEVELCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
) LATESTINVERSEEXCHANGERATE
where (MEMBERSHIPLEVELCTE.CURRENCYID is not null)
and (MEMBERSHIPLEVELCTE.CURRENCYID <> MEMBERSHIPLEVELCTE.REVENUESPLITBASECURRENCYID)
and (MEMBERSHIPLEVELCTE.CURRENCYID <> @ORGANIZATIONCURRENCYID)
and @CURRENCYCODE = 0
union all -- Use arbitrary currency and currency <> base, org currency
select
MEMBERSHIPLEVELCTE.MEMBERSHIPTRANSACTIONID,
MEMBERSHIPLEVELCTE.MEMBERSHIPLEVELID,
case
when LATESTEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(MEMBERSHIPLEVELCTE.REVENUESPLITORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(MEMBERSHIPLEVELCTE.REVENUESPLITORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
else 0
end [REVENUESPLITAMOUNTINCURRENCY],
MEMBERSHIPLEVELCTE.REVENUESPLITID
from MEMBERSHIPLEVELCTE
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = MEMBERSHIPLEVELCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
) LATESTEXCHANGERATE
outer apply
(
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = MEMBERSHIPLEVELCTE.CURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = @ORGANIZATIONCURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,MEMBERSHIPLEVELCTE.DATE)
) LATESTINVERSEEXCHANGERATE
where (MEMBERSHIPLEVELCTE.CURRENCYID is not null)
and (MEMBERSHIPLEVELCTE.CURRENCYID <> MEMBERSHIPLEVELCTE.REVENUESPLITBASECURRENCYID)
and (MEMBERSHIPLEVELCTE.CURRENCYID <> @ORGANIZATIONCURRENCYID)
and @CURRENCYCODE not in (0, 1)
)