UFN_APPEALREVENUE_GETAMOUNTSINCURRENCY_BULK
Returns the revenue 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_APPEALREVENUE_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,
REVENUE.ID REVENUEID,
REVENUE.DATE,
REVENUE.TYPECODE as TRANSACTIONTYPECODE,
REVENUE.TRANSACTIONAMOUNT REVENUETRANSACTIONAMOUNT,
REVENUE.BASEAMOUNT REVENUEAMOUNT,
REVENUE.ORGAMOUNT REVENUEORGANIZATIONAMOUNT,
REVENUE.TRANSACTIONCURRENCYID REVENUETRANSACTIONCURRENCYID,
V.BASECURRENCYID REVENUEBASECURRENCYID,
REVENUE_EXT.MAILINGID
from
dbo.FINANCIALTRANSACTION as REVENUE inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on REVENUE.ID = V.FINANCIALTRANSACTIONID
left join dbo.APPEAL on APPEAL.ID = REVENUE_EXT.APPEALID
where REVENUE.TYPECODE < 10
and REVENUE.DELETEDON is null
)
select -- Selected currency = base or org currency
APPEALCTE.APPEALID,
case
when (APPEALCTE.CURRENCYID = APPEALCTE.REVENUEBASECURRENCYID)
then APPEALCTE.REVENUEAMOUNT
when (APPEALCTE.CURRENCYID = @ORGANIZATIONCURRENCYID) or (APPEALCTE.CURRENCYID is null)
then APPEALCTE.REVENUEORGANIZATIONAMOUNT
end [REVENUEAMOUNTINCURRENCY],
APPEALCTE.REVENUEID,
APPEALCTE.DATE,
APPEALCTE.TRANSACTIONTYPECODE,
APPEALCTE.MAILINGID
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.REVENUEORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.REVENUEORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), CURRENCY.DECIMALDIGITS, CURRENCY.ROUNDINGTYPECODE)
else 0
end [REVENUEAMOUNTINCURRENCY],
APPEALCTE.REVENUEID,
APPEALCTE.DATE,
APPEALCTE.TRANSACTIONTYPECODE,
APPEALCTE.MAILINGID
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.REVENUEORGANIZATIONAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null
then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(APPEALCTE.REVENUEORGANIZATIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
else 0
end [REVENUEAMOUNTINCURRENCY],
APPEALCTE.REVENUEID,
APPEALCTE.DATE,
APPEALCTE.TRANSACTIONTYPECODE,
APPEALCTE.MAILINGID
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)
)