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)
            )