UFN_CURRENCYEXCHANGERATE_GETLATESTORGANIZATIONRATE

Returns the most recent valid organization exchange rate from one currency to another.

Return

Return Type
uniqueidentifier

Parameters

Parameter Parameter Type Mode Description
@FROMCURRENCYID uniqueidentifier IN
@TOCURRENCYID uniqueidentifier IN
@ASOFDATE datetime IN
@SOURCECODEID uniqueidentifier IN
@TRANSACTIONFROMCURRENCYID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTORGANIZATIONRATE
            (
                @FROMCURRENCYID uniqueidentifier,
                @TOCURRENCYID uniqueidentifier,
                @ASOFDATE datetime = null,
                @SOURCECODEID uniqueidentifier = null,
                @TRANSACTIONFROMCURRENCYID uniqueidentifier = null
            )
            returns uniqueidentifier
            as begin

                -- if the system organization amount source currency is transaction currency, use the @TRANSACTIONFROMCURRENCYID parameter to look up the exchange rate

                if (@TRANSACTIONFROMCURRENCYID is not null) and ((select top 1 ORGANIZATIONAMOUNTORIGINCODE from dbo.MULTICURRENCYCONFIGURATION) = 1)
                    set @FROMCURRENCYID = @TRANSACTIONFROMCURRENCYID;

                declare @DATEWITHOFFSET datetimeoffset;
                declare @DATE datetime;

                if @ASOFDATE is null
                    set @DATEWITHOFFSET = getutcdate();
                else
                begin
                    set @DATE = @ASOFDATE;

                    --If the date does not have a time component, use the latest time 

                    --so that the latest exchange rate for this date will be used.

                    if @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE)
                        set @DATE = dbo.UFN_DATE_GETLATESTTIME(@DATE);

                    set @DATEWITHOFFSET = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(@DATE, 0);
                end

                return (
                    select top 1
                        CURRENCYEXCHANGERATE.ID
                    from
                        dbo.CURRENCYEXCHANGERATE
                        left join dbo.CURRENCYEXCHANGERATESOURCECODE on CURRENCYEXCHANGERATESOURCECODE.ID = CURRENCYEXCHANGERATE.SOURCECODEID
                    where
                        (CURRENCYEXCHANGERATE.FROMCURRENCYID = @FROMCURRENCYID) and
                        (CURRENCYEXCHANGERATE.TOCURRENCYID = @TOCURRENCYID) and
                        (CURRENCYEXCHANGERATE.ASOFDATE <= @DATEWITHOFFSET) and
                        (CURRENCYEXCHANGERATE.EXPIRATIONDATE is null or CURRENCYEXCHANGERATE.EXPIRATIONDATE >= @DATEWITHOFFSET) and
                        (CURRENCYEXCHANGERATE.TYPECODE = 0) and
                        (@SOURCECODEID is null or CURRENCYEXCHANGERATE.SOURCECODEID = @SOURCECODEID)
                    order by
                        CURRENCYEXCHANGERATE.ASOFDATE desc,
                        CURRENCYEXCHANGERATE.DATEADDED desc
                        CURRENCYEXCHANGERATE.DATECHANGED desc
                        CURRENCYEXCHANGERATE.RATE
                )
            end