TR_EVENTEXPENSE_INSERTUPDATE_CURRENCY

Definition

Copy


                    create trigger [dbo].[TR_EVENTEXPENSE_INSERTUPDATE_CURRENCY] on [dbo].[EVENTEXPENSE]
                    after insert, update
                    not for replication
                    as
                    begin
                        set nocount on;

                        -- if we try to save an amount without explicitly setting an organization amount and an exchange rate, 

                        -- copy the amount to the organization amount.

                        if update(BUDGETEDAMOUNT) or update(ACTUALAMOUNT) or update(AMOUNTPAID)
                        begin
                            declare @BASECURRENCYID uniqueidentifier; 
                            set @BASECURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(); 

                            update dbo.EVENTEXPENSE
                                set EVENTEXPENSE.ORGANIZATIONBUDGETEDAMOUNT = EVENTEXPENSE.BUDGETEDAMOUNT,                                
                                    EVENTEXPENSE.ORGANIZATIONACTUALAMOUNT = EVENTEXPENSE.ACTUALAMOUNT,
                                    EVENTEXPENSE.ORGANIZATIONAMOUNTPAID = EVENTEXPENSE.AMOUNTPAID,

                                    EVENTEXPENSE.BASECURRENCYID = @BASECURRENCYID,

                                    EVENTEXPENSE.CHANGEDBYID = EVENTEXPENSE.CHANGEDBYID,
                                    EVENTEXPENSE.DATECHANGED = EVENTEXPENSE.DATECHANGED
                            from inserted
                            inner join dbo.EVENTEXPENSE on inserted.ID = EVENTEXPENSE.ID
                            where EVENTEXPENSE.ORGANIZATIONEXCHANGERATEID is null
                            and (EVENTEXPENSE.BASECURRENCYID is null or EVENTEXPENSE.BASECURRENCYID = @BASECURRENCYID)
                            and
                            (
                                EVENTEXPENSE.ORGANIZATIONBUDGETEDAMOUNT <> EVENTEXPENSE.BUDGETEDAMOUNT 
                                or EVENTEXPENSE.ORGANIZATIONACTUALAMOUNT <> EVENTEXPENSE.ACTUALAMOUNT
                                or EVENTEXPENSE.ORGANIZATIONAMOUNTPAID <> EVENTEXPENSE.AMOUNTPAID
                                or (EVENTEXPENSE.BUDGETEDAMOUNT = 0 
                                    and EVENTEXPENSE.ACTUALAMOUNT = 0 
                                    and EVENTEXPENSE.AMOUNTPAID = 0)
                            );
                        end
                    end