USP_DATAFORMTEMPLATE_PROSPECTPLANSECONDARYMANAGER_EDITSAVE
The save procedure used by the edit dataform template "Prospect Plan Secondary Manager Edit".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@SECONDARYMANAGERID | uniqueidentifier | IN | Secondary manager |
@SECONDARYMANAGERSTARTDATE | datetime | IN | Start date |
@SECONDARYMANAGERENDDATE | 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_PROSPECTPLANSECONDARYMANAGER_EDITSAVE
(
@ID uniqueidentifier,
@SECONDARYMANAGERID uniqueidentifier,
@SECONDARYMANAGERSTARTDATE datetime,
@SECONDARYMANAGERENDDATE 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 @PREVIOUSSECONDARYMANAGERFUNDRAISERID uniqueidentifier, @PREVIOUSSECONDARYMANAGERENDDATE datetime, @PREVIOUSSECONDARYMANAGERSTARTDATE datetime, @PREVIOUSMANAGERHISTORYID uniqueidentifier;
/* cache current context information */
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
set CONTEXT_INFO @CHANGEAGENTID
if @SECONDARYMANAGERID is not null
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 PROSPECTPLANMANAGERHISTORY
where
PROSPECTPLANID = @ID
and ISPRIMARYMANAGER = 0
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)
update PROSPECTPLANMANAGERHISTORY
set DATETO = @SECONDARYMANAGERSTARTDATE
where
ID = @PREVIOUSMANAGERHISTORYID
and DATETO > @SECONDARYMANAGERSTARTDATE
select
@PREVIOUSSECONDARYMANAGERFUNDRAISERID = SECONDARYMANAGERFUNDRAISERID,
@PREVIOUSSECONDARYMANAGERENDDATE = SECONDARYMANAGERENDDATE,
@PREVIOUSSECONDARYMANAGERSTARTDATE = SECONDARYMANAGERSTARTDATE
from dbo.PROSPECTPLAN
where ID = @ID;
update
dbo.PROSPECTPLAN
set
SECONDARYMANAGERFUNDRAISERID = @SECONDARYMANAGERID,
SECONDARYMANAGERSTARTDATE = @SECONDARYMANAGERSTARTDATE,
SECONDARYMANAGERENDDATE = @SECONDARYMANAGERENDDATE,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @ID
declare @MANAGERHISTORYID as uniqueidentifier, @HISTORYFUNDRAISERID as uniqueidentifier, @HISTORYDATETO as datetime, @HISTORYDATEFROM as datetime;
select top 1
@MANAGERHISTORYID = ID,
@HISTORYFUNDRAISERID = FUNDRAISERID,
@HISTORYDATEFROM = DATEFROM,
@HISTORYDATETO = DATETO
from PROSPECTPLANMANAGERHISTORY
where
PROSPECTPLANID = @ID
and ISPRIMARYMANAGER = 0
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(@PREVIOUSSECONDARYMANAGERFUNDRAISERID <> @SECONDARYMANAGERID
and @PREVIOUSSECONDARYMANAGERENDDATE is null
and ( @PREVIOUSSECONDARYMANAGERSTARTDATE is null or dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSSECONDARYMANAGERSTARTDATE) <= dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE)))
begin
--Calculate previous manager history end date
declare @HISTORYENDDATE as datetime = case
when @SECONDARYMANAGERSTARTDATE is not null -- new manager start date is provided
then @SECONDARYMANAGERSTARTDATE -- set it to new manager start date
when @SECONDARYMANAGERENDDATE < dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE) -- New manager end date is a past date
then @SECONDARYMANAGERENDDATE -- 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 @PREVIOUSSECONDARYMANAGERSTARTDATE is null)
then @HISTORYENDDATE -- We need to set the startdate same as enddate
else
@PREVIOUSSECONDARYMANAGERSTARTDATE
end
insert into dbo.PROSPECTPLANMANAGERHISTORY(ID, PROSPECTPLANID, FUNDRAISERID,ISPRIMARYMANAGER, DATEFROM, DATETO, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
values(newid(), @ID, @PREVIOUSSECONDARYMANAGERFUNDRAISERID,0, @HISTORYSTARTDATE, @HISTORYENDDATE, @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID)
end
if(@SECONDARYMANAGERID is not null and @MANAGERHISTORYID is not null and @SECONDARYMANAGERENDDATE is null and @HISTORYFUNDRAISERID = @SECONDARYMANAGERID and dbo.UFN_DATE_GETEARLIESTTIME(@SECONDARYMANAGERSTARTDATE) = 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 PROSPECTPLANMANAGERHISTORY
where ID = @MANAGERHISTORYID
--update the prospect with the history's start date to make it a continuous active record
update dbo.PROSPECTPLAN
set SECONDARYMANAGERSTARTDATE = @HISTORYDATEFROM
where ID = @ID
end
else if( @HISTORYFUNDRAISERID = @SECONDARYMANAGERID and dbo.UFN_DATE_GETEARLIESTTIME(@SECONDARYMANAGERSTARTDATE) = dbo.UFN_DATE_GETEARLIESTTIME(@HISTORYDATETO) and
@SECONDARYMANAGERID is not null and @MANAGERHISTORYID is not null and
((@PREVIOUSSECONDARYMANAGERSTARTDATE is null and @SECONDARYMANAGERSTARTDATE is not null) or
(@PREVIOUSSECONDARYMANAGERSTARTDATE is not null and @SECONDARYMANAGERSTARTDATE is null) or
dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSSECONDARYMANAGERENDDATE) <> dbo.UFN_DATE_GETEARLIESTTIME(@SECONDARYMANAGERENDDATE) or
dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSSECONDARYMANAGERSTARTDATE) <> dbo.UFN_DATE_GETEARLIESTTIME(@SECONDARYMANAGERSTARTDATE))
)
--if history is already present for this manager and end date or start date has changed and the start date overlaps with the history's end date then update the history . we don't require endates to check for null as no update is required for those
begin
update PROSPECTPLANMANAGERHISTORY
set
DATEFROM = case when @SECONDARYMANAGERSTARTDATE < DATEFROM then @SECONDARYMANAGERSTARTDATE end,
DATETO = @SECONDARYMANAGERENDDATE,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where ID = @MANAGERHISTORYID
end
else if( @SECONDARYMANAGERID is not null and (@MANAGERHISTORYID is null or @HISTORYFUNDRAISERID <> @SECONDARYMANAGERID) and @SECONDARYMANAGERENDDATE 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 PROSPECTPLANMANAGERHISTORY where PROSPECTPLANID = @ID and ISPRIMARYMANAGER = 0) and @SECONDARYMANAGERSTARTDATE is null and @SECONDARYMANAGERENDDATE >= 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 PROSPECTPLANMANAGERHISTORY where PROSPECTPLANID = @ID and ISPRIMARYMANAGER = 0) and @SECONDARYMANAGERSTARTDATE is null and @SECONDARYMANAGERENDDATE < dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE) )
then @SECONDARYMANAGERENDDATE
else
@SECONDARYMANAGERSTARTDATE
end
-- create history if history is not already present and end date is supplied
insert into dbo.PROSPECTPLANMANAGERHISTORY(ID, PROSPECTPLANID, FUNDRAISERID,ISPRIMARYMANAGER, DATEFROM, DATETO, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
values(newid(), @ID, @SECONDARYMANAGERID,0, @NEWMANAGERHISTORYSTARTDATE, @SECONDARYMANAGERENDDATE, @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID)
end
end
else
begin
update
dbo.PROSPECTPLAN
set
SECONDARYMANAGERFUNDRAISERID = null,
SECONDARYMANAGERSTARTDATE = null,
SECONDARYMANAGERENDDATE = null,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @ID
end
if (@PREVIOUSSECONDARYMANAGERFUNDRAISERID <> @SECONDARYMANAGERID) or (@SECONDARYMANAGERID is null)
delete
dbo.OPPORTUNITYSOLICITOR
from
dbo.OPPORTUNITYSOLICITOR
inner join dbo.OPPORTUNITY on OPPORTUNITYSOLICITOR.OPPORTUNITYID = OPPORTUNITY.ID
inner join dbo.PROSPECTPLAN on OPPORTUNITY.PROSPECTPLANID = PROSPECTPLAN.ID
where
PROSPECTPLAN.ID = @ID
and FUNDRAISERTYPECODE = 1
declare @PREVIOUSPRIMARYFUNDRAISERID uniqueidentifier;
declare @PREVIOUSSECONDARYFUNDRAISERID uniqueidentifier;
select
@PREVIOUSPRIMARYFUNDRAISERID = PRIMARYMANAGERFUNDRAISERID,
@PREVIOUSSECONDARYFUNDRAISERID = SECONDARYMANAGERFUNDRAISERID
from
dbo.PROSPECTPLAN
where
ID = @ID;
exec dbo.USP_PROSPECTPLANASSIGNEDALERT_SEND @PREVIOUSPRIMARYFUNDRAISERID, @PREVIOUSSECONDARYFUNDRAISERID, @ID;
update dbo.INTERACTION set
FUNDRAISERID = @SECONDARYMANAGERID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
dbo.PLANOUTLINESTEP SI
where
SI.ID=PLANOUTLINESTEPID
and SI.FUNDRAISERROLECODE = 2
and FUNDRAISERID is null
and PROSPECTPLANID = @ID;
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;