USP_OPPORTUNITYSOLICITOR_UPDATEFROMXML
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@OPPORTUNITYID | uniqueidentifier | IN | |
@XML | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
create procedure dbo.USP_OPPORTUNITYSOLICITOR_UPDATEFROMXML
(
@OPPORTUNITYID uniqueidentifier,
@XML xml,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
declare @TEMPTBL table
(
OPPORTUNITYSOLICITORID uniqueidentifier,
PLANFUNDRAISERID uniqueidentifier,
FUNDRAISERROLE tinyint,
FUNDRAISERSELECTED bit
)
insert into @TEMPTBL
select
ID,
PLANFUNDRAISERID,
FUNDRAISERTYPECODE,
FUNDRAISERSELECTED
from
dbo.UFN_OPPORTUNITY_GETSOLICITORS_FROMITEMLISTXML(@XML)
declare @CONTEXTCACHE varbinary(128) = context_info();
set context_info @CHANGEAGENTID;
--Remove any solicitors that were not included to be selected
delete from
dbo.OPPORTUNITYSOLICITOR
where
OPPORTUNITYSOLICITOR.OPPORTUNITYID = @OPPORTUNITYID and
OPPORTUNITYSOLICITOR.ID not in
(
select
OPPORTUNITYSOLICITORID
from
@TEMPTBL
);
--Remove any solicitors who were explicitly unselected
delete
dbo.OPPORTUNITYSOLICITOR
from
@TEMPTBL TEMP
inner join
dbo.OPPORTUNITYSOLICITOR on OPPORTUNITYSOLICITOR.ID = TEMP.OPPORTUNITYSOLICITORID
where
TEMP.FUNDRAISERSELECTED = 0;
if not @CONTEXTCACHE is null
set context_info @CONTEXTCACHE;
--Add selected solicitors who were not previously selected
insert into dbo.OPPORTUNITYSOLICITOR
(
OPPORTUNITYID,
FUNDRAISERTYPECODE,
SECONDARYSOLICITORID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@OPPORTUNITYID,
TEMP.FUNDRAISERROLE,
TEMP.PLANFUNDRAISERID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@TEMPTBL TEMP
left join
dbo.OPPORTUNITYSOLICITOR on OPPORTUNITYSOLICITOR.ID = TEMP.OPPORTUNITYSOLICITORID
where
OPPORTUNITYSOLICITOR.ID is null and
TEMP.FUNDRAISERSELECTED = 1;
return;