USP_DATAFORMTEMPLATE_EDIT_RESEARCHGROUPFUNDRAISERASSIGNMENT_2
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@PROSPECTMANAGERFUNDRAISERID | uniqueidentifier | IN | |
@OVERWRITEEXISTINGPROSPECTMANAGER | bit | IN | |
@PREVIOUSMANAGERENDDATE | date | IN | |
@NEWMANAGERSTARTDATE | date | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_RESEARCHGROUPFUNDRAISERASSIGNMENT_2 (
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@PROSPECTMANAGERFUNDRAISERID uniqueidentifier,
@OVERWRITEEXISTINGPROSPECTMANAGER bit,
@PREVIOUSMANAGERENDDATE date,
@NEWMANAGERSTARTDATE date
) as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
--For Enterprise and Advanced Development product flags, update Prospect Manager History and Interactions
if exists(Select top 1 1 from INSTALLEDPRODUCTLIST where ID in ('3117D2C8-7F46-42F2-ABEB-B654F2F63046','a84df439-5a75-4a3b-b3f5-b47035ddd3ff'))
begin
begin try
--JamesWill WI185347 2012-01-26 In order to make the constraints work out, we have to update the PROSPECT table
--before inserting into the PROSPECTMANAGERHISTORY table. In order to do this, we have to keep track of what the previous prospect
--managers looked like before we updated them with the new current values.
declare @CURRENTPROSPECTMANAGERS table
(
PROSPECTID uniqueidentifier,
CURRENTMANAGER uniqueidentifier,
MANAGERSTARTDATE datetime
);
insert into @CURRENTPROSPECTMANAGERS(PROSPECTID, CURRENTMANAGER, MANAGERSTARTDATE)
select
[PROSPECT].ID,
[PROSPECT].[PROSPECTMANAGERFUNDRAISERID],
[PROSPECT].[PROSPECTMANAGERSTARTDATE]
from
dbo.[PROSPECT]
inner join
dbo.[RESEARCHGROUPMEMBER] RGM on RGM.CONSTITUENTID = [PROSPECT].[ID]
where RGM.[RESEARCHGROUPID] = @ID and
[PROSPECT].[PROSPECTMANAGERFUNDRAISERID] is not null and
@OVERWRITEEXISTINGPROSPECTMANAGER = 1;
update
dbo.[PROSPECT]
set
[PROSPECTMANAGERFUNDRAISERID] = @PROSPECTMANAGERFUNDRAISERID,
[PROSPECTMANAGERSTARTDATE] = @NEWMANAGERSTARTDATE,
[PROSPECTMANAGERENDDATE] = null,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
from
dbo.[PROSPECT] P
inner join
dbo.[RESEARCHGROUPMEMBER] RGM on RGM.[CONSTITUENTID] = P.[ID]
where
RGM.[RESEARCHGROUPID] = @ID and
(P.[PROSPECTMANAGERFUNDRAISERID] is null or @OVERWRITEEXISTINGPROSPECTMANAGER = 1);
insert into dbo.[PROSPECT] (
[ID],
[PROSPECTMANAGERFUNDRAISERID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
RGM.[CONSTITUENTID],
@PROSPECTMANAGERFUNDRAISERID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.[RESEARCHGROUPMEMBER] RGM
left join
dbo.[PROSPECT] P on P.[ID] = RGM.[CONSTITUENTID]
where
RGM.[RESEARCHGROUPID] = @ID and
P.[ID] is null;
--JamesWill WI185347 2012-01-09 When overwriting existing prospect managers, update the prospect manager history with the change
insert into dbo.[PROSPECTMANAGERHISTORY] (
[ID],
[PROSPECTID],
[FUNDRAISERID],
[DATEFROM],
[DATETO],
[DATEADDED],
[DATECHANGED],
[ADDEDBYID],
[CHANGEDBYID]
)
select
newid(),
[CURRENT].[PROSPECTID],
[CURRENT].[CURRENTMANAGER],
[CURRENT].[MANAGERSTARTDATE],
@PREVIOUSMANAGERENDDATE,
@CURRENTDATE,
@CURRENTDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
from
@CURRENTPROSPECTMANAGERS [CURRENT]
where @OVERWRITEEXISTINGPROSPECTMANAGER = 1; --Because @CURRENTPROSPECTMANAGERS uses this when it gets its data, the where clause is redundant. But it makes it clearer what's happening.
update
dbo.[INTERACTION]
set
[FUNDRAISERID] = @PROSPECTMANAGERFUNDRAISERID,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
from
dbo.[INTERACTION] I
inner join
dbo.[PROSPECTPLAN] PP on PP.[ID] = I.[PROSPECTPLANID]
inner join
dbo.[PROSPECT] P on P.[ID] = PP.[PROSPECTID]
inner join
dbo.[RESEARCHGROUPMEMBER] RGM on RGM.[CONSTITUENTID] = P.[ID]
left outer join
dbo.[PLANOUTLINESTEP] SI on SI.[ID] = I.[PLANOUTLINESTEPID]
where
I.[FUNDRAISERID] is null and
P.[PROSPECTMANAGERFUNDRAISERID] = @PROSPECTMANAGERFUNDRAISERID and
SI.[FUNDRAISERROLECODE] = 0 and
RGM.[RESEARCHGROUPID] = @ID;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
end else begin
update
dbo.[PROSPECT]
set
[PROSPECTMANAGERFUNDRAISERID] = @PROSPECTMANAGERFUNDRAISERID,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
from
dbo.[PROSPECT] P
inner join
dbo.[RESEARCHGROUPMEMBER] RGM on RGM.[CONSTITUENTID] = P.[ID]
where
RGM.[RESEARCHGROUPID] = @ID and
(P.[PROSPECTMANAGERFUNDRAISERID] is null or @OVERWRITEEXISTINGPROSPECTMANAGER = 1);
insert into dbo.[PROSPECT] (
[ID],
[PROSPECTMANAGERFUNDRAISERID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
RGM.[CONSTITUENTID],
@PROSPECTMANAGERFUNDRAISERID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.[RESEARCHGROUPMEMBER] RGM
left join
dbo.[PROSPECT] P on P.[ID] = RGM.[CONSTITUENTID]
where
RGM.[RESEARCHGROUPID] = @ID and
P.[ID] is null;
end
return 0;