USP_PROSPECTPLAN_STEPSWITHCHILDREN_UPDATEFROMXML
Updates a prospect plan's steps along with the steps additional fundraisers.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROSPECTPLANID | uniqueidentifier | IN | |
@STEPS | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_PROSPECTPLAN_STEPSWITHCHILDREN_UPDATEFROMXML
(
@PROSPECTPLANID uniqueidentifier,
@STEPS xml,
@CHANGEAGENTID uniqueidentifier = null
)
as
set nocount on;
declare @contextCache varbinary(128);
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
/* cache current context information */
set @contextCache = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
declare @PROSPECTID uniqueidentifier;
select @PROSPECTID = PROSPECTID from dbo.PROSPECTPLAN where ID = @PROSPECTPLANID;
set @STEPS=
(
select
@PROSPECTID CONSTITUENTID,
F_STEPS.ACTUALDATE,
F_STEPS.EXPECTEDDATE,
F_ID.FUNDRAISERID,
-- Set the ID to a value known in this SP so the additional fundraisers can be inserted/updated as well
case
when F_STEPS.ID is null then newid()
else F_STEPS.ID
end ID,
F_STEPS.OBJECTIVE,
F_STEPS.PROSPECTPLANSTATUSCODEID,
coalesce(F_STEPS.STATUSCODE, 0) as STATUSCODE,
F_STEPS.PLANOUTLINESTEPID,
F_STEPS.INTERACTIONTYPECODEID,
F_STEPS.INTERACTIONSUBCATEGORYID,
-- Have to perform the query so that the xml generated by this query isn't <ADDITIONALFUNDRAISERS><ADDITIONALFUNDRAISERS><ITEM>...
-- which would then break UFN_PROSPECTPLAN_STEPSWITHCHILDREN_FROMITEMLISTXML the next time it's called
case
when F_STEPS.ADDITIONALFUNDRAISERS is null then null
else F_STEPS.ADDITIONALFUNDRAISERS.query('(ADDITIONALFUNDRAISERS/ITEM)')
end as ADDITIONALFUNDRAISERS,
case
when F_STEPS.PARTICIPANTS is null then null
else F_STEPS.PARTICIPANTS.query('(PARTICIPANTS/ITEM)')
end as PARTICIPANTS,
coalesce(F_STEPS.COMMENT, '') as COMMENT,
coalesce(F_STEPS.EXPECTEDSTARTTIME,'') as EXPECTEDSTARTTIME,
coalesce(F_STEPS.EXPECTEDENDTIME, '') as EXPECTEDENDTIME,
F_STEPS.TIMEZONEENTRYID,
F_STEPS.ISALLDAYEVENT,
coalesce(F_STEPS.ACTUALSTARTTIME,'') as ACTUALSTARTTIME,
coalesce(F_STEPS.ACTUALENDTIME,'') as ACTUALENDTIME,
case
-- No location has been specified. Use the existing location on the step.
when F_STEPS.LOCATIONID is null then coalesce(F_STEPS.LOCATION,'')
else dbo.UFN_INTERACTION_GETSINGLELINELOCATION(F_STEPS.LOCATIONID, F_STEPS.OTHERLOCATION)
end as LOCATION,
F_STEPS.LOCATIONID,
F_STEPS.OTHERLOCATION
from dbo.UFN_PROSPECTPLAN_STEPSWITHCHILDREN_FROMITEMLISTXML(@STEPS) F_STEPS
cross apply dbo.UFN_PROSPECTPLAN_GETFUNDRAISERID_FROM_OWNERID(F_STEPS.FUNDRAISERID , @PROSPECTPLANID) F_ID
for xml raw('ITEM'), type, elements, root('STEPS'), binary base64
);
-- Clear current additional fundraisers for the steps in @STEPS. If the values weren't cleared and
-- the new owner was in the additional fundraisers table but was removed, a constraint would be violated.
delete from dbo.INTERACTIONADDITIONALFUNDRAISER
where INTERACTIONID in (select ID from dbo.UFN_PROSPECTPLAN_STEPSWITHCHILDREN_FROMITEMLISTXML(@STEPS));
exec dbo.USP_PROSPECTPLAN_STEPS_2_UPDATEFROMXML @PROSPECTPLANID, @STEPS, @CHANGEAGENTID;
-- Take care of the additional solicitors for each step
declare @INTERACTIONID uniqueidentifier, @INTERACTIONTYPECODEID uniqueidentifier, @ADDITIONALFUNDRAISERS xml, @PARTICIPANTS xml
declare STEPCURSOR cursor local fast_forward for
select
ID,
INTERACTIONTYPECODEID,
ADDITIONALFUNDRAISERS,
PARTICIPANTS
from dbo.UFN_PROSPECTPLAN_STEPSWITHCHILDREN_FROMITEMLISTXML(@STEPS);
open STEPCURSOR;
fetch next from STEPCURSOR into @INTERACTIONID, @INTERACTIONTYPECODEID, @ADDITIONALFUNDRAISERS, @PARTICIPANTS;
while @@FETCH_STATUS = 0
begin
exec dbo.USP_INTERACTION_ADDITIONALFUNDRAISERS_UPDATEFROMXML @INTERACTIONID, @ADDITIONALFUNDRAISERS, @CHANGEAGENTID;
-- Clear participants if the step is no longer an interaction
if @INTERACTIONTYPECODEID is null
delete from dbo.INTERACTIONPARTICIPANT where INTERACTIONID = @INTERACTIONID;
else
exec dbo.USP_INTERACTION_PARTICIPANTS_UPDATEFROMXML @INTERACTIONID, @PARTICIPANTS, @CHANGEAGENTID;
fetch next from STEPCURSOR into @INTERACTIONID, @INTERACTIONTYPECODEID, @ADDITIONALFUNDRAISERS, @PARTICIPANTS;
end
close STEPCURSOR;
deallocate STEPCURSOR;
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache;