UFN_CURRENCYEXCHANGERATE_GETLATEST

Returns the most recent valid 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
@TYPECODE tinyint IN
@SOURCECODEID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST
            (
                @FROMCURRENCYID uniqueidentifier,
                @TOCURRENCYID uniqueidentifier,
                @ASOFDATE datetime = null,
                @TYPECODE tinyint = 1, -- 0 = latest corporate rate, 1 = latest daily/corporate rate

                @SOURCECODEID uniqueidentifier = null
            )
            returns uniqueidentifier
            as begin
                declare @DATE datetime;
                declare @DATEWITHTIMEOFFSET datetimeoffset;

                if @ASOFDATE is null
                    set @DATEWITHTIMEOFFSET = 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 @DATEWITHTIMEOFFSET = 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 <= @DATEWITHTIMEOFFSET) and
                        (CURRENCYEXCHANGERATE.EXPIRATIONDATE is null or CURRENCYEXCHANGERATE.EXPIRATIONDATE >= @DATEWITHTIMEOFFSET) and
                        ((CURRENCYEXCHANGERATE.TYPECODE = 0 and @TYPECODE = 0) or
                        (CURRENCYEXCHANGERATE.TYPECODE in (0,1) and @TYPECODE = 1)) and
                        (@SOURCECODEID is null or CURRENCYEXCHANGERATE.SOURCECODEID = @SOURCECODEID)
                    order by
                        CURRENCYEXCHANGERATE.ASOFDATE desc,
                        CURRENCYEXCHANGERATE.DATEADDED desc
                        CURRENCYEXCHANGERATE.DATECHANGED desc
                        CURRENCYEXCHANGERATE.RATE
                )
            end