USP_DATAFORMTEMPLATE_PROSPECTPLANREPLACEPRIMARYMANAGER_EDITSAVE
The save procedure used by the edit dataform template "Prospect Plan Replace Primary 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_PROSPECTPLANREPLACEPRIMARYMANAGER_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
/*
If replacing primary manager, insert the old record into the history table.
Also, clear the record out to prevent constraint violations.
*/
if @PREVIOUSMANAGERID is not null
begin
declare @ORIGINALPREVIOUSMANAGERID uniqueidentifier, @ORIGINALPREVIOUSMANAGERSTARTDATE datetime, @ORIGINALPREVIOUSMANAGERENDDATE datetime
select
@ORIGINALPREVIOUSMANAGERID = PRIMARYMANAGERFUNDRAISERID,
@ORIGINALPREVIOUSMANAGERSTARTDATE = PRIMARYMANAGERSTARTDATE,
@ORIGINALPREVIOUSMANAGERENDDATE = PRIMARYMANAGERENDDATE
from dbo.PROSPECTPLAN
where
ID = @ID
update
dbo.PROSPECTPLAN
set
PRIMARYMANAGERFUNDRAISERID = null,
PRIMARYMANAGERSTARTDATE = null,
PRIMARYMANAGERENDDATE = null,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @ID
/* cache current context information */
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
set CONTEXT_INFO @CHANGEAGENTID
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 = 0
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache
declare @MANAGERHISTORYID as uniqueidentifier, @HISTORYFUNDRAISERID as uniqueidentifier, @HISTORYDATETO as datetime;
select top 1
@MANAGERHISTORYID = ID,
@HISTORYFUNDRAISERID = FUNDRAISERID,
@HISTORYDATETO = DATETO
from
PROSPECTPLANMANAGERHISTORY
where
PROSPECTPLANID = @ID and
ISPRIMARYMANAGER = 1
order by
DATECHANGED desc
--Insert in history only when such record in not already there or when the dates do not overlap
if( @MANAGERHISTORYID is null or @HISTORYFUNDRAISERID <> @ORIGINALPREVIOUSMANAGERID or ( @HISTORYFUNDRAISERID = @PREVIOUSMANAGERID and dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSMANAGERSTARTDATE) <> dbo.UFN_DATE_GETEARLIESTTIME(@HISTORYDATETO)))
begin
insert into dbo.PROSPECTPLANMANAGERHISTORY(ID, PROSPECTPLANID, FUNDRAISERID, ISPRIMARYMANAGER, DATEFROM, DATETO, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
values(newid(), @ID, @PREVIOUSMANAGERID, 1, @PREVIOUSMANAGERSTARTDATE, @PREVIOUSMANAGERENDDATE, @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID)
end
-- update the history record if the dates overlap and if it is the same fundraiser
else if (@HISTORYFUNDRAISERID = @PREVIOUSMANAGERID and
(dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSMANAGERSTARTDATE) = dbo.UFN_DATE_GETEARLIESTTIME(@HISTORYDATETO) or
dbo.UFN_DATE_GETEARLIESTTIME(@PREVIOUSMANAGERENDDATE) = dbo.UFN_DATE_GETEARLIESTTIME(@HISTORYDATETO))
)
update PROSPECTPLANMANAGERHISTORY
set
DATEFROM = case when @PREVIOUSMANAGERSTARTDATE > DATEFROM then DATEFROM else @PREVIOUSMANAGERSTARTDATE end,
DATETO = @PREVIOUSMANAGERENDDATE,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @MANAGERHISTORYID
end
if @NEWMANAGERID is not null
update
dbo.PROSPECTPLAN
set
PRIMARYMANAGERFUNDRAISERID = @NEWMANAGERID,
PRIMARYMANAGERSTARTDATE = @NEWMANAGERSTARTDATE,
PRIMARYMANAGERENDDATE = @NEWMANAGERENDDATE,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @ID
if(@NEWMANAGERENDDATE is not null)
insert into dbo.PROSPECTPLANMANAGERHISTORY
(
ID,
PROSPECTPLANID,
FUNDRAISERID,
ISPRIMARYMANAGER,
DATEFROM,
DATETO,
DATEADDED,
DATECHANGED,
ADDEDBYID,
CHANGEDBYID
)
values
(
newid(),
@ID,
@NEWMANAGERID,1,
@NEWMANAGERSTARTDATE,
@NEWMANAGERENDDATE,
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
)
declare @PREVIOUSSECONDARYFUNDRAISERID uniqueidentifier;
select
@PREVIOUSSECONDARYFUNDRAISERID = SECONDARYMANAGERFUNDRAISERID
from
dbo.PROSPECTPLAN
where
ID = @ID;
exec dbo.USP_PROSPECTPLANASSIGNEDALERT_SEND @PREVIOUSMANAGERID, @PREVIOUSSECONDARYFUNDRAISERID, @ID;
update dbo.INTERACTION set
FUNDRAISERID = @NEWMANAGERID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
dbo.PLANOUTLINESTEP SI
where
SI.ID = PLANOUTLINESTEPID
and SI.FUNDRAISERROLECODE = 1
and FUNDRAISERID is null
and PROSPECTPLANID = @ID;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;