USP_DATAFORMTEMPLATE_EDIT_APPEALBASECURRENCY

The save procedure used by the edit dataform template "Appeal 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_APPEALBASECURRENCY (
          @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;
          declare @DATEADDED datetime;

          set @CURRENTDATE = getdate();

          begin try
              declare @OLDBASECURRENCYID uniqueidentifier;

              if exists(select ID from dbo.EVENT where EVENT.APPEALID = @ID)
                raiserror('ERR_TEAMFUNDRAISINGAPPEAL', 13, 1);

              if exists(select 1 from dbo.[MKTCOMMUNICATIONTEMPLATEDEFAULTAPPEAL] where [APPEALSYSTEMID] = cast(@ID as nvarchar(36)))
                raiserror('ERR_ASSOCIATEDCOMMUNICATIONTEMPLATE', 13, 1);

              select 
                @OLDBASECURRENCYID = BASECURRENCYID,
                @DATEADDED = DATEADDED
              from 
                dbo.APPEAL
              where
                ID = @ID;

              update dbo.APPEAL 
              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.APPEAL
                    set
                      ORGANIZATIONGOAL = GOAL,
                      ORGANIZATIONEXCHANGERATEID = null,
                      CHANGEDBYID = @CHANGEAGENTID,
                      DATECHANGED = @CURRENTDATE
                    where
                      ID = @ID;
                  end
                else --Base currency has changed and isn't the org currency
                  begin
                    declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier; 
                    set @ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, @DATEADDED, 0, null);

                    update dbo.APPEAL

                    set
                      ORGANIZATIONGOAL = dbo.UFN_CURRENCY_CONVERT(GOAL, @ORGANIZATIONEXCHANGERATEID),
                      ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                      CHANGEDBYID = @CHANGEAGENTID,
                      DATECHANGED = @CURRENTDATE
                    where
                      ID = @ID;
                  end

                  update dbo.APPEALBENEFIT
                  set 
                    APPEALBENEFIT.ORGANIZATIONAMOUNT = CURRENCYVALUES.ORGANIZATIONAMOUNT, 
                    APPEALBENEFIT.ORGANIZATIONEXCHANGERATEID = CURRENCYVALUES.ORGANIZATIONEXCHANGERATEID,
                    APPEALBENEFIT.BASECURRENCYID = @BASECURRENCYID,
                    APPEALBENEFIT.CHANGEDBYID = @CHANGEAGENTID,
                    APPEALBENEFIT.DATECHANGED = @CURRENTDATE
                  from dbo.APPEALBENEFIT 
                    cross apply dbo.UFN_CURRENCY_GETCURRENCYVALUES(
                      APPEALBENEFIT.AMOUNT, 
                      APPEALBENEFIT.DATEADDED,
                      @BASECURRENCYID,
                      null,
                      null
                    ) CURRENCYVALUES 
                  where APPEALBENEFIT.APPEALID = @ID;

                  update dbo.TEAMFUNDRAISER
                  set 
                    TEAMFUNDRAISER.ORGANIZATIONGOAL = CURRENCYVALUES.ORGANIZATIONAMOUNT, 
                    TEAMFUNDRAISER.ORGANIZATIONEXCHANGERATEID = CURRENCYVALUES.ORGANIZATIONEXCHANGERATEID,
                    TEAMFUNDRAISER.BASECURRENCYID = @BASECURRENCYID
                  from dbo.TEAMFUNDRAISER
                    cross apply dbo.UFN_CURRENCY_GETCURRENCYVALUES(
                      TEAMFUNDRAISER.GOAL, 
                      TEAMFUNDRAISER.DATEADDED,
                      @BASECURRENCYID,
                      null,
                      null
                    ) CURRENCYVALUES 
                  where TEAMFUNDRAISER.APPEALID = @ID;

                  update dbo.TEAMFUNDRAISINGTEAM
                  set 
                    TEAMFUNDRAISINGTEAM.ORGANIZATIONGOAL = CURRENCYVALUES.ORGANIZATIONAMOUNT, 
                    TEAMFUNDRAISINGTEAM.ORGANIZATIONEXCHANGERATEID = CURRENCYVALUES.ORGANIZATIONEXCHANGERATEID,
                    TEAMFUNDRAISINGTEAM.BASECURRENCYID = @BASECURRENCYID
                  from dbo.TEAMFUNDRAISINGTEAM
                    cross apply dbo.UFN_CURRENCY_GETCURRENCYVALUES(
                      TEAMFUNDRAISINGTEAM.GOAL, 
                      TEAMFUNDRAISINGTEAM.DATEADDED,
                      @BASECURRENCYID,
                      null,
                      null
                    ) CURRENCYVALUES 
                  where TEAMFUNDRAISINGTEAM.APPEALID = @ID;

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

              return 0;