UFN_REGISTRANTREGISTRATION_GETAMOUNTINCURRENCY_BULK

Returns the amount for a specified registrant registration 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

Definition

Copy


        CREATE function dbo.UFN_REGISTRANTREGISTRATION_GETAMOUNTINCURRENCY_BULK
        (
            @CURRENCYID uniqueidentifier,
            @ORGANIZATIONCURRENCYID uniqueidentifier,
            @DECIMALDIGITS tinyint,
            @ROUNDINGTYPECODE tinyint
        )
        returns table
        as
        return
        (
            select
                REGISTRANTREGISTRATION.ID,
                case
                    when (@CURRENCYID is null) or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
                    then REGISTRANTREGISTRATION.ORGANIZATIONAMOUNT
                    else REGISTRANTREGISTRATION.AMOUNT
                end [AMOUNTINCURRENCY]
            from dbo.REGISTRANTREGISTRATION
            inner join dbo.REGISTRANT on REGISTRANTREGISTRATION.REGISTRANTID = REGISTRANT.ID
            inner join dbo.EVENT on REGISTRANT.EVENTID = EVENT.ID
            where (@CURRENCYID is null
                or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
                or @CURRENCYID = EVENT.BASECURRENCYID

            union all
            select
                REGISTRANTREGISTRATION.ID,
            case when [LATESTORGANIZATIONEXCHANGERATE].RATE is not null
                    then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REGISTRANTREGISTRATION.ORGANIZATIONAMOUNT, [LATESTORGANIZATIONEXCHANGERATE].RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
                when [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE is not null
                    then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REGISTRANTREGISTRATION.ORGANIZATIONAMOUNT, cast((1 / [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
                else 0
            end [AMOUNTINCURRENCY]
            from dbo.REGISTRANTREGISTRATION
            inner join dbo.REGISTRANT on REGISTRANTREGISTRATION.REGISTRANTID = REGISTRANT.ID
            inner join dbo.EVENT on REGISTRANT.EVENTID = EVENT.ID
            outer apply
            (
                select RATE
                from dbo.CURRENCYEXCHANGERATE
                where @ORGANIZATIONCURRENCYID = CURRENCYEXCHANGERATE.FROMCURRENCYID
                    and @CURRENCYID = CURRENCYEXCHANGERATE.TOCURRENCYID
                    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
                    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
                    and REGISTRANTREGISTRATION.DATEADDED >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
                    and REGISTRANTREGISTRATION.DATEADDED <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
            ) [LATESTORGANIZATIONEXCHANGERATE]
            outer apply
            (
                select RATE
                from dbo.CURRENCYEXCHANGERATE
                where @CURRENCYID = CURRENCYEXCHANGERATE.FROMCURRENCYID
                    and @ORGANIZATIONCURRENCYID= CURRENCYEXCHANGERATE.TOCURRENCYID
                    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
                    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
                    and REGISTRANTREGISTRATION.DATEADDED >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
                    and REGISTRANTREGISTRATION.DATEADDED <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
            ) LATESTINVERSEORGANIZATIONEXCHANGERATE
            where (@CURRENCYID is not null
                and (@CURRENCYID <> @ORGANIZATIONCURRENCYID)
                and @CURRENCYID <> EVENT.BASECURRENCYID   
        );