USP_PROGRAMEVENTSTAFFRESOURCES_INSERTSTAFFRESOURCES

Inserts program event staff resources.

Parameters

Parameter Parameter Type Mode Description
@STAFFRESOURCES xml IN
@EVENTS xml IN
@PROGRAMID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_PROGRAMEVENTSTAFFRESOURCES_INSERTSTAFFRESOURCES
            (
                @STAFFRESOURCES 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 @PROGRAMNAME nvarchar(100);
                select @PROGRAMNAME = NAME
                from dbo.PROGRAM
                where ID = @PROGRAMID


                declare @JOBS table (JOBID uniqueidentifier, VOLUNTEERTYPEID uniqueidentifier, QUANTITYNEEDED integer, ISPERTICKETITEM integer,
                                    FILLEDBYCODE integer, PROGRAMID uniqueidentifier);
                insert into @JOBS
                select
                    newid(),
                    T.resources.value('(VOLUNTEERTYPEID)[1]', 'uniqueidentifier') as VOLUNTEERTYPEID,
                    T.resources.value('(QUANTITYNEEDED)[1]', 'integer') as QUANTITYNEEDED,
                    T.resources.value('(ISPERTICKETITEM)[1]', 'integer') as ISPERTICKETITEM,
                    T.resources.value('(FILLEDBYCODE)[1]', 'tinyint') as FILLEDBYCODE,
                    @PROGRAMID
                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(resources)
                where ((T.resources.value('(JOBID)[1]', 'uniqueidentifier') is null) or 
                    (T.resources.value('(JOBID)[1]', 'uniqueidentifier') = '00000000-0000-0000-0000-000000000000'))
                    and not exists (select 1 from dbo.PROGRAMSTAFFRESOURCE
                                    where PROGRAMSTAFFRESOURCE.VOLUNTEERTYPEID = T.resources.value('(VOLUNTEERTYPEID)[1]', 'uniqueidentifier'))
                    and not exists (select 1 from dbo.JOB 
                                    inner join dbo.VOLUNTEERTYPE on VOLUNTEERTYPE.ID = T.resources.value('(VOLUNTEERTYPEID)[1]', 'uniqueidentifier')
                                    where JOB.NAME = (left(@PROGRAMNAME + ' - ' + VOLUNTEERTYPE.NAME, 100)))

                insert into dbo.JOB (ID, NAME, VOLUNTEERTYPEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                select
                    jobs.JOBID,
                    left(PROGRAM.NAME + ' - ' + VOLUNTEERTYPE.NAME, 100) as NAME,                        
                    jobs.VOLUNTEERTYPEID,
                    @CHANGEAGENTID as ADDEDBYID,
                    @CHANGEAGENTID as CHANGEDBYID,
                    @CURRENTDATE as DATEADDED,
                    @CURRENTDATE as DATECHANGED
                from @JOBS jobs
                inner join dbo.PROGRAM on jobs.PROGRAMID = PROGRAM.ID
                inner join dbo.VOLUNTEERTYPE on jobs.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID

                insert into @JOBS
                select
                    T.resources.value('(JOBID)[1]', 'uniqueidentifier') as JOBID,
                    T.resources.value('(VOLUNTEERTYPEID)[1]', 'uniqueidentifier') as VOLUNTEERTYPEID,
                    T.resources.value('(QUANTITYNEEDED)[1]', 'integer') as QUANTITYNEEDED,
                    T.resources.value('(ISPERTICKETITEM)[1]', 'integer') as ISPERTICKETITEM,
                    T.resources.value('(FILLEDBYCODE)[1]', 'tinyint') as FILLEDBYCODE,
                    @PROGRAMID
                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(resources)
                where not exists (select 1 from @JOBS jobs where jobs.VOLUNTEERTYPEID = T.resources.value('(VOLUNTEERTYPEID)[1]', 'uniqueidentifier'))

                declare @idoc int;
                exec sp_xml_preparedocument @idoc OUTPUT, @EVENTS;    

                insert into dbo.EVENTSTAFFRESOURCE
                (
                    ID, 
                    EVENTID, 
                    VOLUNTEERTYPEID,
                    JOBID,
                    QUANTITYNEEDED, 
                    FILLEDBYCODE, 
                    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                )
                select
                    newid(),
                    EVENTID,
                    jobs.VOLUNTEERTYPEID,
                    jobs.JOBID,
                    jobs.QUANTITYNEEDED,
                    jobs.FILLEDBYCODE,
                    @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                from @JOBS jobs
                inner join openxml (@idoc,'/EVENTS/ITEM', 2)
                with
                    (EVENTID uniqueidentifier,
                    PROGRAMID uniqueidentifier,
                    ISCONFLICT bit) P
                 on  jobs.PROGRAMID = P.PROGRAMID
                where ISCONFLICT = 0;

                with STAFFCONFLICTS_CTE as
                (
                    select 
                        T.resources.value('(VOLUNTEERTYPEID)[1]', 'uniqueidentifier') as VOLUNTEERTYPEID,
                        T.resources.value('(QUANTITYNEEDED)[1]', 'integer') as QUANTITYNEEDED,
                        T.resources.value('(ISPERTICKETITEM)[1]', 'integer') as ISPERTICKETITEM,
                        T.resources.value('(FILLEDBYCODE)[1]', 'tinyint') as FILLEDBYCODE,
                        case when T.resources.value('(JOBID)[1]', 'uniqueidentifier') = '00000000-0000-0000-0000-000000000000'
                        then null
                        else T.resources.value('(JOBID)[1]', 'uniqueidentifier')
                        end as JOBID,
                        @PROGRAMID as PROGRAMID
                    from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(resources)
                )
                insert into dbo.EVENTSTAFFRESOURCE
                (
                    ID, 
                    EVENTCONFLICTID, 
                    VOLUNTEERTYPEID, 
                    QUANTITYNEEDED, 
                    FILLEDBYCODE, 
                    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                )
                select
                    newid(),
                    CONFLICTID,
                    SCTE.VOLUNTEERTYPEID,
                    SCTE.QUANTITYNEEDED,
                    SCTE.FILLEDBYCODE,
                    @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                from STAFFCONFLICTS_CTE SCTE
                inner join openxml (@idoc,'/EVENTS/ITEM', 2)
                with
                    (CONFLICTID uniqueidentifier,
                    PROGRAMID uniqueidentifier,
                    ISCONFLICT bit) P
                 on  SCTE.PROGRAMID = P.PROGRAMID
                where ISCONFLICT = 1

                exec sp_xml_removedocument @idoc                

            end