USP_DATAFORMTEMPLATE_PROSPECTMANAGER2_EDITSAVE

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

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.
@PROSPECTMANAGERFUNDRAISERID uniqueidentifier IN Prospect manager
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@PROSPECTMANAGERSTARTDATE date IN Start date
@PROSPECTMANAGERENDDATE date IN End date

Definition

Copy

          CREATE procedure dbo.USP_DATAFORMTEMPLATE_PROSPECTMANAGER2_EDITSAVE (
            @ID uniqueidentifier,
            @CHANGEAGENTID uniqueidentifier = null,
            @PROSPECTMANAGERFUNDRAISERID uniqueidentifier,
            @CURRENTAPPUSERID uniqueidentifier = null,
            @PROSPECTMANAGERSTARTDATE date,
            @PROSPECTMANAGERENDDATE date
          ) as
            set nocount on;

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

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

            begin try
              declare @PREVIOUSMANAGERFUNDRAISERID uniqueidentifier, @PREVIOUSMANAGERENDDATE datetime, @PREVIOUSMANAGERSTARTDATE datetime, @PREVIOUSMANAGERHISTORYID uniqueidentifier;
              if @PROSPECTMANAGERFUNDRAISERID is null
                select 
                  @PROSPECTMANAGERSTARTDATE = null,
                  @PROSPECTMANAGERENDDATE = null

              if exists (select 1 from dbo.PROSPECT where ID = @ID
              begin
                --Bug#244263 - Arun Saini - Update latest history record enddate if new manager startdate is greater than that
                -- Get previous manager history so that we can update its end date if its greater than new manager start date
                select top 1 
                  @PREVIOUSMANAGERHISTORYID = ID
                from PROSPECTMANAGERHISTORY 
                where 
                  PROSPECTID =  @ID
                order by 
                  DATETO desc
                  DATECHANGED desc

                -- Update history record end date if that is greater than new manager start date
                if(@PREVIOUSMANAGERHISTORYID is not null)
                begin
                  update PROSPECTMANAGERHISTORY
                  set DATETO = @PROSPECTMANAGERSTARTDATE 
                  where 
                    ID = @PREVIOUSMANAGERHISTORYID 
                    and DATETO > @PROSPECTMANAGERSTARTDATE
                end

                select 
                  @PREVIOUSMANAGERFUNDRAISERID = PROSPECTMANAGERFUNDRAISERID,
                  @PREVIOUSMANAGERENDDATE = PROSPECTMANAGERENDDATE,
                  @PREVIOUSMANAGERSTARTDATE = PROSPECTMANAGERSTARTDATE
                from dbo.PROSPECT where ID = @ID;

                update dbo.PROSPECT set
                  PROSPECTMANAGERFUNDRAISERID = @PROSPECTMANAGERFUNDRAISERID,
                  PROSPECTMANAGERSTARTDATE = @PROSPECTMANAGERSTARTDATE,
                  PROSPECTMANAGERENDDATE = @PROSPECTMANAGERENDDATE,
                  CHANGEDBYID = @CHANGEAGENTID,
                  DATECHANGED = @CURRENTDATE
                where
                  ID = @ID;

                declare @MANAGERHISTORYID as uniqueidentifier, @HISTORYFUNDRAISERID  as uniqueidentifier, @HISTORYFROM as datetime, @HISTORYDATETO as datetime;

                -- Select managerid and history table's id of the latest changed record 
                select top 1 @MANAGERHISTORYID = ID,
                  @HISTORYFUNDRAISERID = FUNDRAISERID,
                  @HISTORYFROM = DATEFROM,
                  @HISTORYDATETO = DATETO
                from PROSPECTMANAGERHISTORY 
                where 
                  PROSPECTID =  @ID 
                order by 
                  DATECHANGED desc

                --Create history for previous manager. 
                --This is required only when previous manager end date was not specified and previous manager start date was not a future date
                if(@PREVIOUSMANAGERFUNDRAISERID <> @PROSPECTMANAGERFUNDRAISERID 
                  and @PREVIOUSMANAGERENDDATE is null 
                  and ( @PREVIOUSMANAGERSTARTDATE is null or dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSMANAGERSTARTDATE) = dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)))
                begin

                  --Calculate previous manager history end date
                  declare @HISTORYENDDATE as datetime = case
                            when @PROSPECTMANAGERSTARTDATE is not null  -- new manager start date is provided
                              then @PROSPECTMANAGERSTARTDATE            -- set it to new manager start date
                            when @PROSPECTMANAGERENDDATE < dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)   -- New manager end date is a past date
                              then @PROSPECTMANAGERENDDATE                                              -- Set it to new manager end date
                            else                                          --For all other cases
                              dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)  -- set it to current date
                            end

                  --Calculate previous manager history start date
                  declare @HISTORYSTARTDATE as datetime = case
                            -- A record already exists in history table and previous manager start date  is not provided
                            when (@MANAGERHISTORYID is not null and @PREVIOUSMANAGERSTARTDATE is null)  
                              then @HISTORYENDDATE  -- We need to set the startdate same as enddate
                            else
                              @PREVIOUSMANAGERSTARTDATE 
                            end

                  insert into dbo.PROSPECTMANAGERHISTORY(ID, PROSPECTID, FUNDRAISERID, DATEFROM, DATETO, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
                  values(newid(), @ID, @PREVIOUSMANAGERFUNDRAISERID, @HISTORYSTARTDATE,  @HISTORYENDDATE, @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID)

                end

                -- if the current manager's dates overlap with the latest historical manager, delete the historical row and update the start date of the current manager
                if(@PROSPECTMANAGERFUNDRAISERID is not null and @MANAGERHISTORYID is not null and @PROSPECTMANAGERENDDATE is null and @HISTORYFUNDRAISERID = @PROSPECTMANAGERFUNDRAISERID and dbo.UFN_DATE_GETEARLIESTTIME(@PROSPECTMANAGERSTARTDATE) = dbo.UFN_DATE_GETEARLIESTTIME(@HISTORYDATETO))
                begin
                -- if history is already present for this manager and user has cleared the end date delete history record
                  delete 
                  from PROSPECTMANAGERHISTORY 
                  where ID = @MANAGERHISTORYID

                  --update the prospect with the history's start date to make it a continuous active record
                  update dbo.PROSPECT
                  set PROSPECTMANAGERSTARTDATE = case when @HISTORYFROM is null then @PROSPECTMANAGERSTARTDATE else @HISTORYFROM end
                  where ID = @ID
                end     
                else if(
                    @HISTORYFUNDRAISERID = @PROSPECTMANAGERFUNDRAISERID and dbo.UFN_DATE_GETEARLIESTTIME(@PROSPECTMANAGERSTARTDATE) = dbo.UFN_DATE_GETEARLIESTTIME(@HISTORYDATETO) and
                    @PROSPECTMANAGERFUNDRAISERID is not null and @MANAGERHISTORYID is not null and 
                    ((@PREVIOUSMANAGERSTARTDATE is null and  @PROSPECTMANAGERSTARTDATE is not null) or
                    (@PREVIOUSMANAGERSTARTDATE is not null and  @PROSPECTMANAGERSTARTDATE is null) or
                    dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSMANAGERENDDATE) <> dbo.UFN_DATE_GETEARLIESTTIME(@PROSPECTMANAGERENDDATE) or
                    dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSMANAGERSTARTDATE) <> dbo.UFN_DATE_GETEARLIESTTIME(@PROSPECTMANAGERSTARTDATE))
                    )
                --if history is already present for this manager and the dates have changed and the start date is the same has the history's end date then update the history.
                begin
                  update PROSPECTMANAGERHISTORY
                  set
        DATEFROM = case when @PROSPECTMANAGERSTARTDATE < DATEFROM then @PROSPECTMANAGERSTARTDATE else DATEFROM end,
                    DATETO = @PROSPECTMANAGERENDDATE,
                    DATECHANGED = @CURRENTDATE,
                    CHANGEDBYID = @CHANGEAGENTID
                  where ID = @MANAGERHISTORYID
                end  
                else if( @PROSPECTMANAGERFUNDRAISERID is not null and (@MANAGERHISTORYID is null or  @HISTORYFUNDRAISERID <> @PROSPECTMANAGERFUNDRAISERID) and @PROSPECTMANAGERENDDATE is not null
                begin
                  --Calculate new manager history start date
                  declare @NEWMANAGERHISTORYSTARTDATE as datetime = case
                                                                    -- A record already exists in history table and new manager start date  is not provided
                                                                    when (exists (select 1 from PROSPECTMANAGERHISTORY where PROSPECTID =  @ID) and @PROSPECTMANAGERSTARTDATE is null and @PROSPECTMANAGERENDDATE >=  dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)  )  
                                                                      then dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)  -- We need to set the startdate same as currentdate
                                                                    when (exists (select 1 from PROSPECTMANAGERHISTORY where PROSPECTID =  @ID) and @PROSPECTMANAGERSTARTDATE is null and @PROSPECTMANAGERENDDATE <  dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)  )  
                                                                      then @PROSPECTMANAGERENDDATE
                                                                    else
                                                                      @PROSPECTMANAGERSTARTDATE 
                                                                    end
                  -- create history if history is not already present and end date is supplied
                  insert into dbo.PROSPECTMANAGERHISTORY(ID, PROSPECTID, FUNDRAISERID, DATEFROM, DATETO, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
                  values(newid(), @ID, @PROSPECTMANAGERFUNDRAISERID, @NEWMANAGERHISTORYSTARTDATE, @PROSPECTMANAGERENDDATE, @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID)
                end
              end
            else
            begin
              select 
                @PREVIOUSMANAGERFUNDRAISERID = CONSTITUENTID 
              from dbo.APPUSER 
              where APPUSER.ID = @CURRENTAPPUSERID;

              insert into dbo.PROSPECT
              (
                ID,
                PROSPECTMANAGERFUNDRAISERID,
                PROSPECTMANAGERSTARTDATE,
                PROSPECTMANAGERENDDATE,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
              )
              values
              (
                @ID,
                @PROSPECTMANAGERFUNDRAISERID,
                @PROSPECTMANAGERSTARTDATE,
                @PROSPECTMANAGERENDDATE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
              );
            end

            exec dbo.USP_PROSPECTASSIGNEDALERT_SEND @PREVIOUSMANAGERFUNDRAISERID, @ID;

            update dbo.INTERACTION set
              FUNDRAISERID = @PROSPECTMANAGERFUNDRAISERID,
              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;