USP_MULTICURRENCYCONFIGURATION_EDIT

Configures system to use multicurrency.

Parameters

Parameter Parameter Type Mode Description
@CHANGEAGENTID uniqueidentifier IN
@ORGANIZATIONAMOUNTORIGINCODE tinyint IN
@DEFAULTCURRENCYSETNAME nvarchar(110) IN

Definition

Copy


            CREATE procedure dbo.USP_MULTICURRENCYCONFIGURATION_EDIT
            (
                @CHANGEAGENTID uniqueidentifier = null,
                @ORGANIZATIONAMOUNTORIGINCODE tinyint = null,
                @DEFAULTCURRENCYSETNAME nvarchar(110) = null
            )
            with execute as caller
            as
                set nocount on;

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

                declare @CURRENTDATE datetime;
                set @CURRENTDATE = getdate();

                begin try

                    --Add default currencies

                    exec dbo.USP_CURRENCY_ADDDEFAULTCURRENCIES @CHANGEAGENTID

                    --If there isn't an organization currency, define one.

                    if dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY() is null
                    begin
                        update top (1) dbo.CURRENCY
                        set 
                            ISORGANIZATIONCURRENCY = 1,
                            INACTIVE = 0,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where
                            ISO4217 = N'USD'
                            or NAME = N'US Dollar'
                    end

                    declare @ORGCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                    if coalesce(@DEFAULTCURRENCYSETNAME,'') = ''
                        set @DEFAULTCURRENCYSETNAME = dbo.UFN_CURRENCY_GETDESCRIPTION(@ORGCURRENCYID);

                    -- Look for an existing currency set first that's already marked as default, then that already the organization currency as 

                    --  its base currency, then that already has the default name, then finally the one that was created earliest. If none matching exist,

                    --  create one; otherwise, update it to be the default set.

                    declare @CURRENCYSETID uniqueidentifier;
                    select
                        @CURRENCYSETID = MATCHINGCURRENCYSET.ID
                    from (
                        select top(1)
                            CURRENCYSET.ID
                        from
                            dbo.CURRENCYSET
                        order by
                            CURRENCYSET.ISAPPUSERDEFAULT desc,
                            case when CURRENCYSET.BASECURRENCYID = @ORGCURRENCYID then 1 else 0 end desc,
                            case when CURRENCYSET.NAME = @DEFAULTCURRENCYSETNAME then 1 else 0 end desc,
                            CURRENCYSET.DATEADDED asc
                    ) as MATCHINGCURRENCYSET;

                    if @CURRENCYSETID is null
                    begin
                        set @CURRENCYSETID = newid();

                        insert into dbo.CURRENCYSET(
                            ID,
                            NAME,
                            BASECURRENCYID,
                            ISAPPUSERDEFAULT,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED,
                            DATECHANGED
                        )
                        values(
                            @CURRENCYSETID,
                            @DEFAULTCURRENCYSETNAME,
                            @ORGCURRENCYID,
                            1,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                        );

                        insert into dbo.CURRENCYSETTRANSACTIONCURRENCY(
                            CURRENCYSETID,
                            CURRENCYID,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED,
                            DATECHANGED
                        )
                        values(
                            @CURRENCYSETID,
                            @ORGCURRENCYID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                        );             
                    end
                    else
                    begin
                        update dbo.CURRENCYSET set
                            ISAPPUSERDEFAULT = 1,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where
                            CURRENCYSET.ID = @CURRENCYSETID
            and
              ISAPPUSERDEFAULT = 0;
                    end

                    if (select count(ID) from dbo.MULTICURRENCYCONFIGURATION) = 0
                    begin
                        insert into dbo.MULTICURRENCYCONFIGURATION(ID,ORGANIZATIONAMOUNTORIGINCODE,DATEADDED,DATECHANGED,ADDEDBYID,CHANGEDBYID)
                        values(newid(),coalesce(@ORGANIZATIONAMOUNTORIGINCODE,0),@CURRENTDATE,@CURRENTDATE,@CHANGEAGENTID,@CHANGEAGENTID);
                    end
                    else if @ORGANIZATIONAMOUNTORIGINCODE is not null
                    begin
                        update dbo.MULTICURRENCYCONFIGURATION
                        set                         
                            ORGANIZATIONAMOUNTORIGINCODE = @ORGANIZATIONAMOUNTORIGINCODE,
                            DATECHANGED = @CURRENTDATE,
                            CHANGEDBYID = @CHANGEAGENTID
                        where
                            ORGANIZATIONAMOUNTORIGINCODE <> @ORGANIZATIONAMOUNTORIGINCODE;
                    end

                    --Set 'Multicurrency' condition setting

                    exec dbo.USP_CONDITIONSETTING_SETCONDITION
                        @NAME = N'Multicurrency',
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @CURRENTDATE = @CURRENTDATE;

                end try
                begin catch
                    exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch

                return 0;