USP_DATAFORMTEMPLATE_PROSPECTREPLACEPROSPECTMANAGER_EDITSAVE

The save procedure used by the edit dataform template "Prospect Replace Prospect Manager Edit".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@PREVIOUSMANAGERID uniqueidentifier IN Current manager
@PREVIOUSMANAGERSTARTDATE datetime IN Start date
@PREVIOUSMANAGERENDDATE datetime IN End date
@NEWMANAGERID uniqueidentifier IN New manager
@NEWMANAGERSTARTDATE datetime IN Start date
@NEWMANAGERENDDATE datetime IN End date
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.

Definition

Copy


          CREATE procedure dbo.USP_DATAFORMTEMPLATE_PROSPECTREPLACEPROSPECTMANAGER_EDITSAVE 
          (
            @ID uniqueidentifier,
            @PREVIOUSMANAGERID uniqueidentifier,
            @PREVIOUSMANAGERSTARTDATE datetime,
            @PREVIOUSMANAGERENDDATE datetime,
            @NEWMANAGERID uniqueidentifier,
            @NEWMANAGERSTARTDATE datetime,
            @NEWMANAGERENDDATE datetime,
            @CHANGEAGENTID uniqueidentifier = null
          ) as
            set nocount on;

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

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

            begin try
              declare @ORIGINALPREVIOUSMANAGERID uniqueidentifier;
              declare @ORIGINALPREVIOUSMANAGERSTARTDATE datetime;
              declare @ORIGINALPREVIOUSMANAGERENDDATE datetime;

              /*
                If replacing prospect manager, insert the old record into the history table.
                Also, clear the record out to prevent constraint violations.
              */

              select 
                @ORIGINALPREVIOUSMANAGERID = PROSPECTMANAGERFUNDRAISERID,
                @ORIGINALPREVIOUSMANAGERSTARTDATE = PROSPECTMANAGERSTARTDATE,
                @ORIGINALPREVIOUSMANAGERENDDATE = PROSPECTMANAGERENDDATE
              from dbo.PROSPECT
              where ID = @ID;

              if @PREVIOUSMANAGERID is not null
              begin
                update dbo.PROSPECT set 
                  PROSPECTMANAGERFUNDRAISERID = null,
                  PROSPECTMANAGERSTARTDATE = null,
                  PROSPECTMANAGERENDDATE = null,
                  DATECHANGED  = @CURRENTDATE,
                  CHANGEDBYID = @CHANGEAGENTID
                where ID = @ID;

                declare @MANAGERHISTORYID uniqueidentifier;
                declare @HISTORYFUNDRAISERID uniqueidentifier;
                declare @HISTORYDATEFROM datetime;
                declare @HISTORYDATETO datetime;

                select top 1
                  @MANAGERHISTORYID = ID,
                  @HISTORYFUNDRAISERID = FUNDRAISERID,
                  @HISTORYDATEFROM = DATEFROM,
                  @HISTORYDATETO = DATETO
                from dbo.PROSPECTMANAGERHISTORY 
                where PROSPECTID = @ID 
                order by DATETO desc;

                declare @RANGESOVERLAP bit = dbo.UFN_DATES_AREDATESOVERLAPPING(@PREVIOUSMANAGERSTARTDATE, @PREVIOUSMANAGERENDDATE, @HISTORYDATEFROM, @HISTORYDATETO);

                --Insert in history only when such record is not already there or when the dates don't overlap

                if
                (
                  (
                    @MANAGERHISTORYID is null or
                    @HISTORYFUNDRAISERID <> @ORIGINALPREVIOUSMANAGERID
                  ) or
                  (
                    @HISTORYFUNDRAISERID = @PREVIOUSMANAGERID and
                    @RANGESOVERLAP = 0
                  )
                )
                begin
                  insert into dbo.PROSPECTMANAGERHISTORY
                  (
                    ID,
                    PROSPECTID,
                    FUNDRAISERID,
                    DATEFROM,
                    DATETO,
                    DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID
                  )
                  values
                  (
                    newid(),
                    @ID,
                    @PREVIOUSMANAGERID,
                    @PREVIOUSMANAGERSTARTDATE,
                    @PREVIOUSMANAGERENDDATE,
                    @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID
                  )
                end
                -- update the history record if the dates overlap if it is the same fundraiser

                else if
                (
                  @HISTORYFUNDRAISERID = @ORIGINALPREVIOUSMANAGERID and @RANGESOVERLAP = 1
                )
                begin
                  update PROSPECTMANAGERHISTORY set
                    DATEFROM = case when @PREVIOUSMANAGERSTARTDATE > DATEFROM then DATEFROM else @PREVIOUSMANAGERSTARTDATE end,
                    DATETO = @PREVIOUSMANAGERENDDATE,
                    DATECHANGED = @CURRENTDATE,
                    CHANGEDBYID = @CHANGEAGENTID
                  where ID = @MANAGERHISTORYID;
                end
              end

              if @NEWMANAGERID is not null
              begin
                update dbo.PROSPECT set 
                  PROSPECTMANAGERFUNDRAISERID = @NEWMANAGERID,
                  PROSPECTMANAGERSTARTDATE = @NEWMANAGERSTARTDATE,
                  PROSPECTMANAGERENDDATE = @NEWMANAGERENDDATE,
                  DATECHANGED  = @CURRENTDATE,
                  CHANGEDBYID = @CHANGEAGENTID
                where ID = @ID;
              end

              if @NEWMANAGERENDDATE is not null
              begin
                insert into dbo.PROSPECTMANAGERHISTORY
                (
                  ID,
                  PROSPECTID,
                  FUNDRAISERID,
                  DATEFROM,
                  DATETO,
                  DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID
                )
                values
                (
                  newid(),
                  @ID,
                  @NEWMANAGERID,
                  @NEWMANAGERSTARTDATE,
                  @NEWMANAGERENDDATE,
                  @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID
                );
              end

              exec dbo.USP_PROSPECTASSIGNEDALERT_SEND @PREVIOUSMANAGERID, @ID;

              update dbo.INTERACTION set
                FUNDRAISERID = @PREVIOUSMANAGERID,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
              from dbo.INTERACTION I
                inner join dbo.PROSPECTPLAN PP on PP.ID = I.PROSPECTPLANID
                left outer join dbo.PLANOUTLINESTEP SI on SI.ID=I.PLANOUTLINESTEPID
              where
                I.FUNDRAISERID is null
                and SI.FUNDRAISERROLECODE = 0
                and PP.PROSPECTID = @ID;
            end try
            begin catch
              exec dbo.USP_RAISE_ERROR;
              return 1;
            end catch

            return 0;