TR_GLTRANSACTION_INSERTUPDATE_CURRENCY
Definition
Copy
CREATE trigger [dbo].[TR_GLTRANSACTION_INSERTUPDATE_CURRENCY] on [dbo].[GLTRANSACTION]
after insert, update
not for replication
as
begin
set nocount on;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
-- if we try to save an amount without explicitly setting an organization amount and an exchange rate,
-- copy the amount to the organization and transaction amounts.
if update(AMOUNT)
update
dbo.GLTRANSACTION
set
GLTRANSACTION.ORGANIZATIONAMOUNT = GLTRANSACTION.AMOUNT,
GLTRANSACTION.TRANSACTIONAMOUNT = GLTRANSACTION.AMOUNT,
GLTRANSACTION.BASECURRENCYID = @ORGANIZATIONCURRENCYID,
GLTRANSACTION.TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID,
GLTRANSACTION.CHANGEDBYID = GLTRANSACTION.CHANGEDBYID,
GLTRANSACTION.DATECHANGED = GLTRANSACTION.DATECHANGED
from
inserted
full outer join deleted on deleted.ID = inserted.ID -- this is used to figure out if we are inserting or updating
inner join
dbo.GLTRANSACTION on inserted.ID = GLTRANSACTION.ID
where
GLTRANSACTION.ORGANIZATIONEXCHANGERATEID is null
and (GLTRANSACTION.BASECURRENCYID is null or GLTRANSACTION.BASECURRENCYID = @ORGANIZATIONCURRENCYID)
and GLTRANSACTION.BASEEXCHANGERATEID is null
and (GLTRANSACTION.TRANSACTIONCURRENCYID is null or GLTRANSACTION.TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID)
and
(
GLTRANSACTION.ORGANIZATIONAMOUNT <> GLTRANSACTION.AMOUNT
or GLTRANSACTION.TRANSACTIONAMOUNT <> GLTRANSACTION.AMOUNT
or GLTRANSACTION.AMOUNT = 0
)
and ((deleted.ID is null and inserted.BASECURRENCYID is null) or (deleted.ID is not null and deleted.TRANSACTIONAMOUNT = deleted.AMOUNT and deleted.ORGANIZATIONAMOUNT = deleted.AMOUNT))
end