USP_STAFFRESOURCE_CREATEJOBS
Creates the jobs needed given a set of itinerary item staff resources.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STAFFRESOURCES | xml | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_STAFFRESOURCE_CREATEJOBS
(
@STAFFRESOURCES xml output,
@CHANGEAGENTID uniqueidentifier = null
)
as begin
set nocount on;
-- Setup the save information
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
-- First turn the xml into a temp table so we can create the jobs
declare @STAFFRESOURCESTABLE table
(
FILLEDBYCODE tinyint,
ID uniqueidentifier,
JOBDESCRIPTION nvarchar(255),
JOBID uniqueidentifier,
JOBNAME nvarchar(100),
QUANTITYNEEDED int,
VOLUNTEERTYPEID uniqueidentifier
)
insert into @STAFFRESOURCESTABLE
(FILLEDBYCODE, ID, JOBDESCRIPTION, JOBID, JOBNAME, QUANTITYNEEDED, VOLUNTEERTYPEID)
select T.c.value('(FILLEDBYCODE)[1]','tinyint') AS 'FILLEDBYCODE',
T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
T.c.value('(JOBDESCRIPTION)[1]','nvarchar(255)') AS 'JOBDESCRIPTION',
T.c.value('(JOBID)[1]','uniqueidentifier') AS 'JOBID',
T.c.value('(JOBNAME)[1]','nvarchar(100)') AS 'JOBNAME',
T.c.value('(QUANTITYNEEDED)[1]','int') AS 'QUANTITYNEEDED',
T.c.value('(VOLUNTEERTYPEID)[1]','uniqueidentifier') AS 'VOLUNTEERTYPEID'
from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
/* find any jobs that match by name and volunteer type first */
update @STAFFRESOURCESTABLE
set JOBID = JOB.ID
from dbo.JOB
inner join @STAFFRESOURCESTABLE as STAFFRESOURCESTABLE
on STAFFRESOURCESTABLE.JOBNAME = JOB.NAME and
STAFFRESOURCESTABLE.VOLUNTEERTYPEID = JOB.VOLUNTEERTYPEID
where ((JOBID is null) or (JOBID = '00000000-0000-0000-0000-000000000000')) and (FILLEDBYCODE = 0)
/* Finally check that there is only one new job that is going to be created per job name and volunteer type combo */
update @STAFFRESOURCESTABLE
set JOBDESCRIPTION = TOPJOBNAME.JOBDESCRIPTION
from @STAFFRESOURCESTABLE as STAFFRESOURCESTABLE
inner join (select DISTINCTJOBDESCRIPTION.JOBNAME,
DISTINCTJOBDESCRIPTION.VOLUNTEERTYPEID,
(select top 1 TOPJOBDESCRIPTION.JOBDESCRIPTION
from @STAFFRESOURCESTABLE as TOPJOBDESCRIPTION
where (TOPJOBDESCRIPTION.JOBNAME = DISTINCTJOBDESCRIPTION.JOBNAME) and
(TOPJOBDESCRIPTION.VOLUNTEERTYPEID = DISTINCTJOBDESCRIPTION.VOLUNTEERTYPEID)) as JOBDESCRIPTION
from @STAFFRESOURCESTABLE as DISTINCTJOBDESCRIPTION) as TOPJOBNAME
on TOPJOBNAME.JOBNAME = STAFFRESOURCESTABLE.JOBNAME and TOPJOBNAME.VOLUNTEERTYPEID = STAFFRESOURCESTABLE.VOLUNTEERTYPEID
where ((STAFFRESOURCESTABLE.JOBID is null) or (STAFFRESOURCESTABLE.JOBID = '00000000-0000-0000-0000-000000000000')) and (STAFFRESOURCESTABLE.FILLEDBYCODE = 0)
declare @DISTINCTJOB table
(
JOBID uniqueidentifier,
JOBNAME nvarchar(100),
JOBDESCRIPTION nvarchar(255)
);
insert into @DISTINCTJOB
(JOBNAME, JOBDESCRIPTION)
select distinct JOBNAME, JOBDESCRIPTION
from @STAFFRESOURCESTABLE as STAFFRESOURCESTABLE
where ((STAFFRESOURCESTABLE.JOBID is null) or (STAFFRESOURCESTABLE.JOBID = '00000000-0000-0000-0000-000000000000')) and (STAFFRESOURCESTABLE.FILLEDBYCODE = 0)
update @DISTINCTJOB
set JOBID = NEWID();
update @STAFFRESOURCESTABLE
set JOBID = DISTINCTJOB.JOBID
from @STAFFRESOURCESTABLE as STAFFRESOURCESTABLE
inner join @DISTINCTJOB as DISTINCTJOB
on STAFFRESOURCESTABLE.JOBNAME = DISTINCTJOB.JOBNAME and STAFFRESOURCESTABLE.JOBDESCRIPTION = DISTINCTJOB.JOBDESCRIPTION;
-- Now create the jobs needed
insert into dbo.JOB
(ID,
NAME,
DESCRIPTION,
VOLUNTEERTYPEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select distinct STAFFRESOURCESTABLE.JOBID,
STAFFRESOURCESTABLE.JOBNAME,
STAFFRESOURCESTABLE.JOBDESCRIPTION,
STAFFRESOURCESTABLE.VOLUNTEERTYPEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @STAFFRESOURCESTABLE as STAFFRESOURCESTABLE
left outer join dbo.JOB
on STAFFRESOURCESTABLE.JOBID = JOB.ID
where (JOB.ID is null) and (STAFFRESOURCESTABLE.FILLEDBYCODE = 0);
-- Now recreate the XML from the temp table and setup the return value
set @STAFFRESOURCES = (select [FILLEDBYCODE], [ID], [JOBDESCRIPTION], [JOBID], [JOBNAME], [QUANTITYNEEDED], [VOLUNTEERTYPEID]
from @STAFFRESOURCESTABLE
for xml raw('ITEM'),type,elements,root('STAFFRESOURCES'),BINARY BASE64)
end