UFN_INSTALLMENTSPLITWRITEOFF_GETAMOUNTSINCURRENCY_BULK
Returns the amounts of all installment split writeoff 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 | |
@ORIGINCODE | tinyint | IN | |
@CURRENCYCODE | tinyint | IN |
Definition
Copy
CREATE function [dbo].[UFN_INSTALLMENTSPLITWRITEOFF_GETAMOUNTSINCURRENCY_BULK]
(
-- If you want to convert to...
-- The base currency of each row:
-- set @CURRENCYCODE = 0
-- set @ORGANIZATIONCURRENCYID, @ASOFDATE, and @ORIGINCODE appropriately
-- The transaction currency of each row:
-- set @CURRENCYCODE = 2
-- set @ORGANIZATIONCURRENCYID, @ASOFDATE and @ORIGINCODE appropriately
-- The organization currency:
-- set @CURRENCYCODE = anything but 0 or 2
-- set @CURRENCYID = the org currency's ID
-- set @DECIMALDIGITS and @ROUNDINGTYPECODE according to the org currency
-- set @ORGANIZATIONCURRENCYID, @ASOFDATE and @ORIGINCODE appropriately
-- An arbitrary currency:
-- set @CURRENCYCODE = anything but 0 or 2
-- set @CURRENCYID = the currency's ID
-- set @DECIMALDIGITS and @ROUNDINGTYPECODE according to the currency
-- set @ORGANIZATIONCURRENCYID, @ASOFDATE and @ORIGINCODE appropriately
@CURRENCYID uniqueidentifier,
@ORGANIZATIONCURRENCYID uniqueidentifier,
@DECIMALDIGITS tinyint,
@ROUNDINGTYPECODE tinyint,
@ORIGINCODE tinyint,
@CURRENCYCODE tinyint
)
returns table
as
return
(
with INSTALLMENTSPLITWRITEOFF_CTE as
(
select
INSTALLMENTSPLITWRITEOFF.ID,
INSTALLMENTSPLITWRITEOFF.WRITEOFFID,
INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID,
INSTALLMENTSPLITWRITEOFF.TRANSACTIONAMOUNT,
INSTALLMENTSPLITWRITEOFF.TRANSACTIONCURRENCYID,
INSTALLMENTSPLITWRITEOFF.BASECURRENCYID,
cast(REVENUE.DATE as datetime) [DATE],
BASEEXCHANGERATE.RATE [BASERATE],
ORGANIZATIONEXCHANGERATE.RATE [ORGANIZATIONRATE],
case @CURRENCYCODE
when 0 then INSTALLMENTSPLITWRITEOFF.BASECURRENCYID
when 2 then INSTALLMENTSPLITWRITEOFF.TRANSACTIONCURRENCYID
else @CURRENCYID
end CURRENCYID
from
dbo.INSTALLMENTSPLITWRITEOFF
inner join dbo.FINANCIALTRANSACTION WRITEOFF on WRITEOFF.ID = INSTALLMENTSPLITWRITEOFF.WRITEOFFID
inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = WRITEOFF.PARENTID
left join dbo.CURRENCYEXCHANGERATE BASEEXCHANGERATE on BASEEXCHANGERATE.ID = INSTALLMENTSPLITWRITEOFF.BASEEXCHANGERATEID
left join dbo.CURRENCYEXCHANGERATE ORGANIZATIONEXCHANGERATE on ORGANIZATIONEXCHANGERATE.ID = INSTALLMENTSPLITWRITEOFF.ORGANIZATIONEXCHANGERATEID
where WRITEOFF.TYPECODE = 20 and WRITEOFF.DELETEDON is null and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9) and REVENUE.DELETEDON is null
)
-- transaction currency
select
INSTALLMENTSPLITWRITEOFF_CTE.ID,
INSTALLMENTSPLITWRITEOFF_CTE.WRITEOFFID,
INSTALLMENTSPLITWRITEOFF_CTE.INSTALLMENTSPLITID,
INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONAMOUNT [AMOUNTINCURRENCY]
from
INSTALLMENTSPLITWRITEOFF_CTE
where
INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID is null
or
INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONCURRENCYID
-- base or org currency
union all
select
INSTALLMENTSPLITWRITEOFF_CTE.ID,
INSTALLMENTSPLITWRITEOFF_CTE.WRITEOFFID,
INSTALLMENTSPLITWRITEOFF_CTE.INSTALLMENTSPLITID,
case
when INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.BASECURRENCYID then
dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONAMOUNT, INSTALLMENTSPLITWRITEOFF_CTE.BASERATE), BASECURRENCY.DECIMALDIGITS, BASECURRENCY.ROUNDINGTYPECODE)
when INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID = @ORGANIZATIONCURRENCYID then
case @ORIGINCODE
when 0 then
case
when INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONCURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.BASECURRENCYID then
dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONAMOUNT, INSTALLMENTSPLITWRITEOFF_CTE.ORGANIZATIONRATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
else
dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONAMOUNT, INSTALLMENTSPLITWRITEOFF_CTE.BASERATE), BASECURRENCY.DECIMALDIGITS, BASECURRENCY.ROUNDINGTYPECODE), INSTALLMENTSPLITWRITEOFF_CTE.ORGANIZATIONRATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
end
when 1 then
dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONAMOUNT, INSTALLMENTSPLITWRITEOFF_CTE.ORGANIZATIONRATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
end
else 0
end [AMOUNTINCURRENCY]
from
INSTALLMENTSPLITWRITEOFF_CTE
left join dbo.CURRENCY BASECURRENCY on BASECURRENCY.ID = INSTALLMENTSPLITWRITEOFF_CTE.BASECURRENCYID
where
(INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID is not null)
and (INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID <> INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONCURRENCYID)
and (INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID = @ORGANIZATIONCURRENCYID
or INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.BASECURRENCYID)
-- arbitrary currency
union all
select
INSTALLMENTSPLITWRITEOFF_CTE.ID,
INSTALLMENTSPLITWRITEOFF_CTE.WRITEOFFID,
INSTALLMENTSPLITWRITEOFF_CTE.INSTALLMENTSPLITID,
case
when LATESTEXCHANGERATE.RATE is not null then
dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
when LATESTINVERSEEXCHANGERATE.RATE is not null then
dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
else 0
end [AMOUNTINCURRENCY]
from
INSTALLMENTSPLITWRITEOFF_CTE
outer apply (
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONCURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,INSTALLMENTSPLITWRITEOFF_CTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996,INSTALLMENTSPLITWRITEOFF_CTE.DATE)
) LATESTEXCHANGERATE
outer apply (
select
RATE
from
dbo.CURRENCYEXCHANGERATE
where
CURRENCYEXCHANGERATE.FROMCURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID
and CURRENCYEXCHANGERATE.TOCURRENCYID = INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONCURRENCYID
and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996,INSTALLMENTSPLITWRITEOFF_CTE.DATE)
and CURRENCYEXCHANGERATE.NEXTRATEASOFDATESDTZ >= dateadd(ms, 86399996,INSTALLMENTSPLITWRITEOFF_CTE.DATE)
) LATESTINVERSEEXCHANGERATE
where
INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID is not null
and INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID <> INSTALLMENTSPLITWRITEOFF_CTE.TRANSACTIONCURRENCYID
and INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID <> INSTALLMENTSPLITWRITEOFF_CTE.BASECURRENCYID
and INSTALLMENTSPLITWRITEOFF_CTE.CURRENCYID <> @ORGANIZATIONCURRENCYID
)