USP_PROGRAMEVENTRESOURCES_INSERTRESOURCES
Inserts event resources.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RESOURCES | xml | IN | |
@EVENTS | xml | IN | |
@PROGRAMID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_PROGRAMEVENTRESOURCES_INSERTRESOURCES
(
@RESOURCES xml,
@EVENTS xml,
@PROGRAMID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null
)
as
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
declare @idoc int;
exec sp_xml_preparedocument @idoc OUTPUT, @EVENTS;
with RESOURCES_CTE as
(
select
T.resources.value('(RESOURCEID)[1]', 'uniqueidentifier') as RESOURCEID,
T.resources.value('(QUANTITYNEEDED)[1]', 'integer') as QUANTITYNEEDED,
T.resources.value('(ISPERTICKETITEM)[1]', 'integer') as ISPERTICKETITEM,
RESOURCE.PERTICKETQUANTITY as PERTICKETQUANTITY,
@PROGRAMID as PROGRAMID
from @RESOURCES.nodes('/RESOURCES/ITEM') T(resources)
inner join dbo.RESOURCE
on T.resources.value('(RESOURCEID)[1]', 'uniqueidentifier') = RESOURCE.ID
)
insert into dbo.EVENTRESOURCE
(
ID,
EVENTID,
RESOURCEID,
QUANTITYNEEDED,
PERTICKETQUANTITY,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
newid(),
EVENTID,
RCTE.RESOURCEID,
RCTE.QUANTITYNEEDED,
RCTE.PERTICKETQUANTITY,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from RESOURCES_CTE RCTE
inner join openxml (@idoc,'/EVENTS/ITEM', 2)
with
(EVENTID uniqueidentifier,
PROGRAMID uniqueidentifier,
ISCONFLICT bit) P
on RCTE.PROGRAMID = P.PROGRAMID
where ISCONFLICT = 0
declare @COUNT int;
select @COUNT = count(1)
from @EVENTS.nodes('/EVENTS/ITEM') T(events);
with RESOURCESCOUNTS_CTE as
(
select
sum(QUANTITYNEEDED) as QUANTITIES,
RESOURCEID as RESID
from dbo.EVENTRESOURCE
inner join @EVENTS.nodes('/EVENTS/ITEM') T(events)
on T.events.value('(EVENTID)[1]', 'uniqueidentifier') = EVENTRESOURCE.EVENTID
group by RESOURCEID
)
update dbo.RESOURCE
set QUANTITY = RESOURCE.QUANTITY - RCCTE.QUANTITIES,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.RESOURCE
inner join RESOURCESCOUNTS_CTE RCCTE
on RCCTE.RESID = RESOURCE.ID
where RESOURCE.ISPERTICKETITEM = 0
and RESOURCE.TYPECODE = 1;
-- insert conflicts now
with RESOURCES_CTE as
(
select
T.resources.value('(RESOURCEID)[1]', 'uniqueidentifier') as RESOURCEID,
T.resources.value('(QUANTITYNEEDED)[1]', 'integer') as QUANTITYNEEDED,
T.resources.value('(ISPERTICKETITEM)[1]', 'integer') as ISPERTICKETITEM,
RESOURCE.PERTICKETQUANTITY as PERTICKETQUANTITY,
@PROGRAMID as PROGRAMID
from @RESOURCES.nodes('/RESOURCES/ITEM') T(resources)
inner join dbo.RESOURCE
on T.resources.value('(RESOURCEID)[1]', 'uniqueidentifier') = RESOURCE.ID
)
insert into dbo.EVENTRESOURCE
(
ID,
EVENTCONFLICTID,
RESOURCEID,
QUANTITYNEEDED,
PERTICKETQUANTITY,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
newid(),
CONFLICTID,
RCTE.RESOURCEID,
RCTE.QUANTITYNEEDED,
RCTE.PERTICKETQUANTITY,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from RESOURCES_CTE RCTE
inner join openxml (@idoc,'/EVENTS/ITEM', 2)
with
(CONFLICTID uniqueidentifier,
PROGRAMID uniqueidentifier,
ISCONFLICT bit) P
on RCTE.PROGRAMID = P.PROGRAMID
where ISCONFLICT = 1
exec sp_xml_removedocument @idoc
end