UFN_APPEALREVENUESPLIT_GETAMOUNTSINCURRENCYNODESNAMENOGIFTAID_BULK
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_GETAMOUNTSINCURRENCYNODESNAMENOGIFTAID_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,
REVENUESPLIT_EXT.DESIGNATIONID DESIGNATIONID,
FINANCIALTRANSACTION.ID REVENUEID,
cast(FINANCIALTRANSACTION.DATE as datetime) [DATE],
FINANCIALTRANSACTION.TYPECODE TRANSACTIONTYPECODE,
REVENUESPLIT_EXT.ID REVENUESPLITID,
REVENUESPLIT_EXT.APPLICATIONCODE,
REVENUESPLIT_EXT.TYPECODE,
FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT REVENUESPLITTRANSACTIONAMOUNT,
FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT REVENUESPLITAMOUNT,
FINANCIALTRANSACTIONLINEITEM.ORGAMOUNT REVENUESPLITORGANIZATIONAMOUNT,
FINANCIALTRANSACTION.TRANSACTIONCURRENCYID REVENUETRANSACTIONCURRENCYID,
isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, V.BASECURRENCYID) REVENUEBASECURRENCYID,
WOLI.TRANSACTIONAMOUNT WRITEOFFSPLITTRANSACTIONAMOUNT,
WOLI.BASEAMOUNT WRITEOFFSPLITAMOUNT,
WOLI.ORGAMOUNT WRITEOFFSPLITORGANIZATIONAMOUNT
from
dbo.FINANCIALTRANSACTION
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
left join dbo.FINANCIALTRANSACTION WRITEOFF on FINANCIALTRANSACTION.ID = WRITEOFF.PARENTID
left join dbo.FINANCIALTRANSACTIONLINEITEM WOLI on WRITEOFF.ID = WOLI.FINANCIALTRANSACTIONID
left join dbo.REVENUESPLIT_EXT WRITEOFFSPLIT on WRITEOFFSPLIT.ID = WOLI.ID and REVENUESPLIT_EXT.DESIGNATIONID = WRITEOFFSPLIT.DESIGNATIONID
left join dbo.APPEAL on APPEAL.ID = REVENUE_EXT.APPEALID
where FINANCIALTRANSACTION.TYPECODE in (0,1,2,3,4,5,6,7,8,9) and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
and (WRITEOFF.ID is null or (WRITEOFF.TYPECODE in (20, 21) and 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],
APPEALCTE.DESIGNATIONID,
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],
APPEALCTE.DESIGNATIONID,
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],
APPEALCTE.DESIGNATIONID,
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)
)