USP_DATAFORMTEMPLATE_EDIT_RECOGNITIONLEVEL

The save procedure used by the edit dataform template "Recognition Level Edit Data 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.
@NAME nvarchar(100) IN Name
@DESCRIPTION nvarchar(255) IN Description
@TIERCODEID uniqueidentifier IN Tier
@AMOUNT money IN Minimum recognition amount
@PLANNEDGIFTAMOUNT money IN Planned giving amount
@UPDATEFUTUREAMOUNT bit IN Set future minimum amount
@NEWMINIMUMAMOUNT money IN Minimum recognition amount
@NEWPLANNEDGIFTAMOUNT money IN Planned giving amount
@EFFECTIVEDATE datetime IN Effective date

Definition

Copy


          CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_RECOGNITIONLEVEL
          (
            @ID uniqueidentifier,
            @CHANGEAGENTID uniqueidentifier = null,
            @NAME nvarchar(100),
            @DESCRIPTION nvarchar(255),
            @TIERCODEID uniqueidentifier,
            @AMOUNT money,
            @PLANNEDGIFTAMOUNT money,
            @UPDATEFUTUREAMOUNT bit,
            @NEWMINIMUMAMOUNT money,
            @NEWPLANNEDGIFTAMOUNT money,
            @EFFECTIVEDATE datetime
          )
          as
            set nocount on;

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

            declare @CURRENTDATE datetime;
            set @CURRENTDATE = getdate();

            begin try
              if @UPDATEFUTUREAMOUNT = 1 and @EFFECTIVEDATE is null
              begin
                raiserror('ERR_RECOGNITIONLEVEL_EFFECTIVEDATEREQUIRED', 16, 1);
              end

              update dbo.RECOGNITIONLEVEL set
                NAME = @NAME,
                DESCRIPTION = @DESCRIPTION,
                TIERCODEID = @TIERCODEID,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
              where ID = @ID;

              declare @BASECURRENCYID uniqueidentifier;
              declare @DATEADDED datetime;
              declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
              declare @ORGANIZATIONAMOUNT money;
              declare @ORGANIZATIONPLANNEDGIFTAMOUNT money;
              declare @ORGANIZATIONNEWMINIMUMAMOUNT money;
              declare @ORGANIZATIONNEWPLANNEDGIFTAMOUNT money;
              declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

              select
                @BASECURRENCYID = BASECURRENCYID,
                @DATEADDED = DATEADDED,
                @ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
              from dbo.RECOGNITIONLEVEL
              where ID = @ID;

              if @ORGANIZATIONCURRENCYID = @BASECURRENCYID
              begin
                set @ORGANIZATIONAMOUNT = @AMOUNT;
                set @ORGANIZATIONPLANNEDGIFTAMOUNT = @PLANNEDGIFTAMOUNT;
                set @ORGANIZATIONNEWMINIMUMAMOUNT = @NEWMINIMUMAMOUNT;
                set @ORGANIZATIONNEWPLANNEDGIFTAMOUNT = @NEWPLANNEDGIFTAMOUNT;
              end
              else
              begin
                if @ORGANIZATIONEXCHANGERATEID is null
                  set @ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @DATEADDED, 0, null);

                set @ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(@AMOUNT, @ORGANIZATIONEXCHANGERATEID);
                set @ORGANIZATIONPLANNEDGIFTAMOUNT = dbo.UFN_CURRENCY_CONVERT(@PLANNEDGIFTAMOUNT, @ORGANIZATIONEXCHANGERATEID);
                set @ORGANIZATIONNEWMINIMUMAMOUNT = dbo.UFN_CURRENCY_CONVERT(@NEWMINIMUMAMOUNT, @ORGANIZATIONEXCHANGERATEID);
                set @ORGANIZATIONNEWPLANNEDGIFTAMOUNT = dbo.UFN_CURRENCY_CONVERT(@NEWPLANNEDGIFTAMOUNT, @ORGANIZATIONEXCHANGERATEID);
              end

              --jdp 10/19/2010

              --bug 112767

              --if the user has deleted the effective RLA record, this procedure would at this 

              --point attempt to update a non-existent record, with the result that any amount

              --you entered for RecognitionLevelAmount would not be saved.

              --to fix this, we query to see if an effective RLA record exists, and if not

              --we insert one, in the same way as the RLA add spec.  If count = 1

              --we do the update as before.


              if (select count(*) from dbo.RECOGNITIONLEVELAMOUNT where RECOGNITIONLEVELID = @ID and  ACTIVEDATE is null) = 0
              begin
                -- No "effective" RECOGNITIONLEVELAMOUNT record exists, so create one.

                -- Insert statement cribbed verbatim from the RecognitionLevel.Add spec.

                insert into dbo.RECOGNITIONLEVELAMOUNT
                (
                  ID,
                  RECOGNITIONLEVELID,
                  AMOUNT,
                  ORGANIZATIONAMOUNT,
                  PLANNEDGIFTAMOUNT,
                  ORGANIZATIONPLANNEDGIFTAMOUNT,
                  ORGANIZATIONEXCHANGERATEID,
                  BASECURRENCYID,
                  ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                )
                values
                (
                  newid(),
                  @ID,
                  @AMOUNT,
                  @ORGANIZATIONAMOUNT,
                  @PLANNEDGIFTAMOUNT,
                  @ORGANIZATIONPLANNEDGIFTAMOUNT,
                  @ORGANIZATIONEXCHANGERATEID,
                  @BASECURRENCYID,
                  @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                );
              end
              else
              begin
                --an RLA record exists, so issue an update


                update dbo.RECOGNITIONLEVELAMOUNT set
                  AMOUNT = @AMOUNT,
                  ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
                  PLANNEDGIFTAMOUNT = @PLANNEDGIFTAMOUNT,
                  ORGANIZATIONPLANNEDGIFTAMOUNT = @ORGANIZATIONPLANNEDGIFTAMOUNT,
                  ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                  CHANGEDBYID = @CHANGEAGENTID,
                  DATECHANGED = @CURRENTDATE
                where ID =
                  (
                    select top 1 ID
                    from dbo.RECOGNITIONLEVELAMOUNT
                    where
                      RECOGNITIONLEVELID = @ID and
                      coalesce(ACTIVEDATE, 0) < @CURRENTDATE
                    order by ACTIVEDATE desc);
              end

              if @UPDATEFUTUREAMOUNT = 1 
              begin
                if exists (select ID from dbo.RECOGNITIONLEVELAMOUNT where RECOGNITIONLEVELID = @ID and ACTIVEDATE > @CURRENTDATE)
                begin
                  update dbo.RECOGNITIONLEVELAMOUNT set
                    AMOUNT = @NEWMINIMUMAMOUNT,
                    ORGANIZATIONAMOUNT = @ORGANIZATIONNEWMINIMUMAMOUNT,
                    PLANNEDGIFTAMOUNT = @NEWPLANNEDGIFTAMOUNT,
                    ORGANIZATIONPLANNEDGIFTAMOUNT = @ORGANIZATIONNEWPLANNEDGIFTAMOUNT,
                    ACTIVEDATE = @EFFECTIVEDATE,
                    ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                  where ID = 
                    (
                      select top 1 ID
                      from dbo.RECOGNITIONLEVELAMOUNT
                      where
                        RECOGNITIONLEVELID = @ID and
                        ACTIVEDATE > @CURRENTDATE
                      order by ACTIVEDATE asc
                    );
                end
                else
                begin 
                  insert into dbo.RECOGNITIONLEVELAMOUNT
                  (
                    ID,
                    RECOGNITIONLEVELID,
                    AMOUNT,
                    ORGANIZATIONAMOUNT,
                    PLANNEDGIFTAMOUNT,
                    ORGANIZATIONPLANNEDGIFTAMOUNT,
                    ACTIVEDATE,
                    ORGANIZATIONEXCHANGERATEID,
                    BASECURRENCYID,
                    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                  )
                  values
                  (
                    newid(),
                    @ID,
                    @NEWMINIMUMAMOUNT,
                    @ORGANIZATIONNEWMINIMUMAMOUNT,
                    @NEWPLANNEDGIFTAMOUNT,
                    @ORGANIZATIONNEWPLANNEDGIFTAMOUNT,
                    @EFFECTIVEDATE,
                    @ORGANIZATIONEXCHANGERATEID,
                    @BASECURRENCYID,
                    @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                  );
                end
                --jdp 10/19/2010 if future effective amount is de-selected,

                --go ahead and delete any of these that exist.

              end
              else
              begin
                --Cache current context information

                declare @CONTEXTCACHE varbinary(128);
                set @CONTEXTCACHE = CONTEXT_INFO();

                --Set CONTEXT_INFO to @CHANGEAGENTID

                if @CHANGEAGENTID is not null
                  set CONTEXT_INFO @CHANGEAGENTID;

                delete from dbo.RECOGNITIONLEVELAMOUNT
                where RECOGNITIONLEVELID = @ID and ACTIVEDATE > @CURRENTDATE;

                --Reset CONTEXT_INFO to previous value

                if not @CONTEXTCACHE is null
                  set CONTEXT_INFO @CONTEXTCACHE;
              end
            end try
            begin catch
              exec dbo.USP_RAISE_ERROR;
              return 1;
            end catch

            return 0;