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;