USP_CURRENCYEXCHANGERATE_ADD

Adds a new exchange rate record to the system

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@FROMCURRENCYID uniqueidentifier IN
@TOCURRENCYID uniqueidentifier IN
@RATE decimal(20, 8) IN
@ASOFDATE datetimeoffset IN
@TYPECODE tinyint IN
@SOURCECODEID uniqueidentifier IN
@TIMEZONEENTRYID uniqueidentifier IN
@EXPIRATIONDATETIMEOFFSET datetimeoffset IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_CURRENCYEXCHANGERATE_ADD
            (
                @ID uniqueidentifier,
                @FROMCURRENCYID uniqueidentifier,
                @TOCURRENCYID uniqueidentifier,
                @RATE decimal(20,8) = 0,
                @ASOFDATE datetimeoffset,
                @TYPECODE tinyint = 0,
                @SOURCECODEID uniqueidentifier = null,
                @TIMEZONEENTRYID uniqueidentifier = null,
                @EXPIRATIONDATETIMEOFFSET datetimeoffset = null,
                @CHANGEAGENTID uniqueidentifier = null,
                @CURRENTDATE datetime = null
            )
            as
                set nocount on;

                declare @PREVIOUSRATEASOFDATE datetimeoffset(3);
                declare @NEXTRATEASOFDATE datetimeoffset(3);

                if @CHANGEAGENTID is null
                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                if @CURRENTDATE is null
                    set @CURRENTDATE = getdate();

                if @EXPIRATIONDATETIMEOFFSET is null
                    set @EXPIRATIONDATETIMEOFFSET = dbo.UFN_CURRENCY_GETEXPIRATIONDATE(@TYPECODE,@ASOFDATE,@TIMEZONEENTRYID);


                --Get the next ASOFDATE after the ASOFDATE of the new record.

                if @TYPECODE <> 2
                    select top 1
                        @NEXTRATEASOFDATE = ASOFDATE
                    from 
                        dbo.CURRENCYEXCHANGERATE
                    where 
                        FROMCURRENCYID = @FROMCURRENCYID
                        and TOCURRENCYID = @TOCURRENCYID
                        and ASOFDATE > @ASOFDATE
                    order by
                        ASOFDATE; 

                insert into dbo.CURRENCYEXCHANGERATE(
                    ID, 
                    FROMCURRENCYID,
                    TOCURRENCYID,
                    RATE,
                    ASOFDATE,
                    TYPECODE,
                    SOURCECODEID,
                    TIMEZONEENTRYID,
                    EXPIRATIONDATE,
                    ADDEDBYID, 
                    CHANGEDBYID, 
                    DATEADDED, 
                    DATECHANGED,
                    NEXTRATEASOFDATE,
                    ISLATESTRATEFORASOFDATE
                )
                values(
                    @ID,
                    @FROMCURRENCYID,
                    @TOCURRENCYID,
                    @RATE,
                    @ASOFDATE,
                    @TYPECODE,
                    @SOURCECODEID,
                    @TIMEZONEENTRYID,
                    @EXPIRATIONDATETIMEOFFSET,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE,

                    --If there is a rate with an ASOFDATE after the new rate, set the NEXTRATEASOFDATE to

                    --the ASOFDATE of the next rate minus 3ms.

                    case when @NEXTRATEASOFDATE is null or @TYPECODE = 2
                        then null 
                        else DATEADD(ms, -1, @NEXTRATEASOFDATE
                    end,

                    --Since we define latest rate as order by ASOFDATE desc, DATEADDED desc, DATECHANGED desc, the new rate

                    --will always be the LATESTRATEFORASOFDATE

                    1
                );

                return 0;