USP_DATAFORMTEMPLATE_EDIT_CAMPAIGNBASECURRENCY

The save procedure used by the edit dataform template "Campaign Base Currency Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@BASECURRENCYID uniqueidentifier IN Base currency

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_CAMPAIGNBASECURRENCY (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @BASECURRENCYID uniqueidentifier
                    )
                    as

                        set nocount on;

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

                        declare @CURRENTDATE datetime
                        set @CURRENTDATE = getdate()

                        begin try
                            declare @OLDBASECURRENCYID uniqueidentifier;
                            select 
                                @OLDBASECURRENCYID = BASECURRENCYID
                            from 
                                dbo.CAMPAIGN
                            where
                                ID = @ID

                            update dbo.CAMPAIGN set
                                BASECURRENCYID = @BASECURRENCYID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @ID

                            --If the user saves without changing the base currency, don't update org amounts.

                            if @OLDBASECURRENCYID <> @BASECURRENCYID
                            begin
                                declare @ORGCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()

                                --If the new base currency is the org currency, org amount equals amount, so don't bother getting

                                --    an exchange rate or doing a conversion.

                                if @BASECURRENCYID = @ORGCURRENCYID
                                begin

                                    update dbo.CAMPAIGNHIERARCHYGOAL
                                    set
                                        ORGANIZATIONAMOUNT = AMOUNT,
                                        CURRENCYEXCHANGERATEID = null,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNID = @ID

                                    update dbo.CAMPAIGNGOAL
                                    set
                                        ORGANIZATIONAMOUNT = AMOUNT,
                                        CURRENCYEXCHANGERATEID = null,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNID = @ID

                                    update dbo.CAMPAIGNPRIORITY
                                    set
                                        ORGANIZATIONAMOUNT = GOAL,
                                        CURRENCYEXCHANGERATEID = null,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNID = @ID

                                    update dbo.CAMPAIGNSUBPRIORITY
                                    set
                                        ORGANIZATIONAMOUNT = GOAL,
                                        CURRENCYEXCHANGERATEID = null,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNPRIORITYID in(
                                            select ID
                                            from dbo.CAMPAIGNPRIORITY
                                            where CAMPAIGNID = @ID
                                        )
                                end
                                else --Base currency has changed and isn't the org currency

                                begin
                                    declare @DATEADDED datetime
                                    select
                                        @DATEADDED = DATEADDED
                                    from 
                                        dbo.CAMPAIGN
                                    where 
                                         ID = @ID

                                    declare @CURRENCYEXCHANGERATEID uniqueidentifier = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(), @DATEADDED, 0, null);

                                    update dbo.CAMPAIGNHIERARCHYGOAL
                                    set
                                        ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(AMOUNT, @CURRENCYEXCHANGERATEID),
                                        CURRENCYEXCHANGERATEID = @CURRENCYEXCHANGERATEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNID = @ID                                

                                    update dbo.CAMPAIGNGOAL
                                    set
                                        ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(AMOUNT, @CURRENCYEXCHANGERATEID),
                                        CURRENCYEXCHANGERATEID = @CURRENCYEXCHANGERATEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNID = @ID

                                    update dbo.CAMPAIGNPRIORITY
                                    set
                                        ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(GOAL, @CURRENCYEXCHANGERATEID),
                                        CURRENCYEXCHANGERATEID = @CURRENCYEXCHANGERATEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNID = @ID

                                    update dbo.CAMPAIGNSUBPRIORITY
                                    set
                                        ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(GOAL, @CURRENCYEXCHANGERATEID),
                                        CURRENCYEXCHANGERATEID = @CURRENCYEXCHANGERATEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where
                                        CAMPAIGNPRIORITYID in(
                                            select ID
                                            from dbo.CAMPAIGNPRIORITY
                                            where CAMPAIGNID = @ID
                                        )
                                end
                            end
                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                        return 0;