USP_DATALIST_RESERVATIONEVENTCONFLICTBYDATETIME

Returns all of the event conflicts for a given start datetime, end datetime, locations, and resources on a reservation.

Parameters

Parameter Parameter Type Mode Description
@RESERVATIONID uniqueidentifier IN
@RESOURCES xml IN Resources
@STAFFRESOURCES xml IN Staffing resources
@IGNORESUPERRECORDID uniqueidentifier IN
@FORMTYPE tinyint IN
@DATEOFFSET int IN

Definition

Copy


                CREATE procedure dbo.USP_DATALIST_RESERVATIONEVENTCONFLICTBYDATETIME
                (
                    @RESERVATIONID uniqueidentifier,
                    @RESOURCES xml,
                    @STAFFRESOURCES xml,
                    @IGNORESUPERRECORDID uniqueidentifier = null,
                    @FORMTYPE tinyint = 0,
                    @DATEOFFSET integer = 0
                )
                as
                set nocount on;

                    declare @CONFLICTITEMS table
                    (
                        EVENTID uniqueidentifier,
                        ITINERARYITEMID uniqueidentifier,
                        ITINERARYID uniqueidentifier,
                        LOCATIONID uniqueidentifier,
                        RESOURCEID uniqueidentifier,
                        VOLUNTEERTYPEID uniqueidentifier,
                        QUANTITYNEEDED int
                    )

                    declare @OFFSETRESOURCES xml;
                    declare @OFFSETSTAFFRESOURCES xml;

                    -- add offset to xml collections to pass in for check against the whole reservation.

                    -- Because we are sending in multiple level items(itinerary, itinerary item, etc)

                    -- Conflicts will behave differently and return all items in conflict for Conflicts With:

                    if @FORMTYPE = 0 or @FORMTYPE = 1 -- Reservation Copy, Reservation Move

                    begin
                        set @OFFSETRESOURCES = 
                        (
                            select
                                ID,
                                ITINERARYID,
                                ITINERARYITEMID,
                                QUANTITYNEEDED,
                                RESOURCEID,
                                ISPERTICKETITEM,
                                STARTDATETIME,
                                ENDDATETIME
                            from
                            (
                                -- All itinerary resources

                                select 
                                    ITINERARYRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    null as ITINERARYITEMID,
                                    case RESOURCE.ISPERTICKETITEM
                                        when 0 then
                                            ITINERARYRESOURCE.QUANTITYNEEDED
                                        else
                                            dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2(
                                            COALESCE(
                                            (
                                                select sum(ITINERARYATTENDEE.QUANTITY) 
                                                from dbo.ITINERARYATTENDEE 
                                                where ITINERARYATTENDEE.ITINERARYID = ITINERARY.ID
                                            ),0
                                            * ITINERARYRESOURCE.PERTICKETQUANTITY, 
                                            ITINERARYRESOURCE.PERTICKETDIVISOR
                                            )
                                    end as QUANTITYNEEDED,
                                    ITINERARYRESOURCE.RESOURCEID,
                                    RESOURCE.ISPERTICKETITEM,
                                    dateadd(d, @DATEOFFSET, ITINERARY.STARTDATETIME) as STARTDATETIME,
                                    dateadd(d, @DATEOFFSET, ITINERARY.ENDDATETIME) as ENDDATETIME
                                from dbo.ITINERARYRESOURCE
                                inner join dbo.RESOURCE    on ITINERARYRESOURCE.RESOURCEID = RESOURCE.ID
                                inner join dbo.ITINERARY on ITINERARYRESOURCE.ITINERARYID = ITINERARY.ID
                                left outer join dbo.GROUPTYPEREQUIREDRESOURCE on 
                                    (ITINERARYRESOURCE.RESOURCEID = GROUPTYPEREQUIREDRESOURCE.RESOURCEID) and
                                    (ITINERARY.GROUPSALESGROUPTYPECODEID = GROUPTYPEREQUIREDRESOURCE.GROUPSALESGROUPTYPECODEID)
                                where 
                                    ITINERARY.RESERVATIONID = @RESERVATIONID

                                union all

                                -- All itinerary item resources

                                select 
                                    ITINERARYITEMRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    ITINERARYITEM.ID as ITINERARYITEMID,
                                    case RESOURCE.ISPERTICKETITEM
                                        when 0 then
                                            ITINERARYITEMRESOURCE.QUANTITYNEEDED
                                        else
                                            dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2(
                                            COALESCE(
                                            (
                                                select sum(ITINERARYATTENDEE.QUANTITY) 
                                                from dbo.ITINERARYATTENDEE 
                                                where ITINERARYATTENDEE.ITINERARYID = ITINERARY.ID
                                            ),0
                                            * ITINERARYITEMRESOURCE.PERTICKETQUANTITY, 
                                            ITINERARYITEMRESOURCE.PERTICKETDIVISOR
                                            )
                                    end as QUANTITYNEEDED,
                                    ITINERARYITEMRESOURCE.RESOURCEID,
                                    RESOURCE.ISPERTICKETITEM,
                                    dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARYITEM_STARTDATETIME(ITINERARYITEM.ID)) as STARTDATETIME,
                                    dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARYITEM_ENDDATETIME(ITINERARYITEM.ID)) as ENDDATETIME
                                from dbo.ITINERARYITEMRESOURCE
                                inner join dbo.RESOURCE on ITINERARYITEMRESOURCE.RESOURCEID = RESOURCE.ID
                                inner join dbo.ITINERARYITEM on ITINERARYITEMRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                                inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                                where 
                                    ITINERARY.RESERVATIONID = @RESERVATIONID    
                            ) [OFFSETRESOURCES]
                            for xml raw('ITEM'),type,elements,root('OFFSETRESOURCES'),binary base64
                        );

                        set @OFFSETSTAFFRESOURCES = 
                        (
                            select
                                ID,
                                ITINERARYID,
                                ITINERARYITEMID,
                                QUANTITYNEEDED,
                                VOLUNTEERTYPEID,
                                FILLEDBYCODE,
                                STARTDATETIME,
                                ENDDATETIME
                            from
                            (
                                select 
                                    ITINERARYSTAFFRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    null as ITINERARYITEMID,
                                    ITINERARYSTAFFRESOURCE.QUANTITYNEEDED,
                                    ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID,
                                    ITINERARYSTAFFRESOURCE.FILLEDBYCODE,
                                    dateadd(d, @DATEOFFSET, ITINERARY.STARTDATETIME) as STARTDATETIME,
                                    dateadd(d, @DATEOFFSET, ITINERARY.ENDDATETIME) as ENDDATETIME
                                from dbo.ITINERARYSTAFFRESOURCE
                                inner join dbo.ITINERARY on ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
                                left outer join dbo.JOB on ITINERARYSTAFFRESOURCE.JOBID = JOB.ID
                                left outer join dbo.GROUPTYPEREQUIREDSTAFFRESOURCE on 
                                    (ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = GROUPTYPEREQUIREDSTAFFRESOURCE.VOLUNTEERTYPEID) and
                                    (ITINERARYSTAFFRESOURCE.JOBID = GROUPTYPEREQUIREDSTAFFRESOURCE.JOBID) and
                                    (ITINERARYSTAFFRESOURCE.FILLEDBYCODE = GROUPTYPEREQUIREDSTAFFRESOURCE.FILLEDBYCODE) and
                                    (ITINERARY.GROUPSALESGROUPTYPECODEID = GROUPTYPEREQUIREDSTAFFRESOURCE.GROUPSALESGROUPTYPECODEID)
                                left outer join dbo.VOLUNTEERTYPE on
                                    ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
                                where 
                                    ITINERARY.RESERVATIONID = @RESERVATIONID

                                union all

                                select 
                                    ITINERARYITEMSTAFFRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    ITINERARYITEM.ID as ITINERARYITEMID,
                                    ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED,
                                    ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID,
                                    ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE,
                                    dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARYITEM_STARTDATETIME(ITINERARYITEM.ID)) as STARTDATETIME,
                                    dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARYITEM_ENDDATETIME(ITINERARYITEM.ID)) as ENDDATETIME
                                from dbo.ITINERARYITEMSTAFFRESOURCE
                                inner join dbo.ITINERARYITEM on ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                                inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                                left outer join dbo.JOB    on ITINERARYITEMSTAFFRESOURCE.JOBID = JOB.ID
                                left outer join dbo.VOLUNTEERTYPE on
                                    ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
                                where 
                                    ITINERARY.RESERVATIONID = @RESERVATIONID
                            ) [OFFSETSTAFFRESOURCES]
                            for xml raw('ITEM'),type,elements,root('OFFSETSTAFFRESOURCES'),binary base64                    
                        );
                    end
                    if @FORMTYPE = 2
                    begin
                        set @OFFSETRESOURCES = 
                        (
                            select
                                ID,
                                ITINERARYID,
                                ITINERARYITEMID,
                                QUANTITYNEEDED,
                                RESOURCEID,
                                STARTDATETIME,
                                ENDDATETIME
                            from
                            (
                                -- All itinerary resources

                                select 
                                    ITINERARYRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    null as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    ITINERARYRESOURCE.RESOURCEID,
                                    ITINERARY.STARTDATETIME as STARTDATETIME,
                                    ITINERARY.ENDDATETIME as ENDDATETIME
                                from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                                inner join dbo.ITINERARYRESOURCE on
                                    ITINERARYRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.RESOURCE    on ITINERARYRESOURCE.RESOURCEID = RESOURCE.ID
                                inner join dbo.ITINERARY on ITINERARYRESOURCE.ITINERARYID = ITINERARY.ID
                                where
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0 or
                                    RESOURCE.ISPERTICKETITEM = 1

                                union all

                                -- All itinerary item resources

                                select 
                                    ITINERARYITEMRESOURCE.ID AS ID,
                                    ITINERARYITEM.ITINERARYID as ITINERARYID,
                                    ITINERARYITEM.ID as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    ITINERARYITEMRESOURCE.RESOURCEID,
                                    ITINERARYITEM.STARTDATETIME as STARTDATETIME,
                                    ITINERARYITEM.ENDDATETIME as ENDDATETIME
                                from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                                inner join dbo.ITINERARYITEMRESOURCE on
                                    ITINERARYITEMRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.RESOURCE on ITINERARYITEMRESOURCE.RESOURCEID = RESOURCE.ID
                                inner join dbo.ITINERARYITEM on ITINERARYITEMRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                                where
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0 or
                                    RESOURCE.ISPERTICKETITEM = 1

                            ) [OFFSETRESOURCES]
                            for xml raw('ITEM'),type,elements,root('OFFSETRESOURCES'),binary base64
                        );

                        set @OFFSETSTAFFRESOURCES = 
                        (
                            select
                                ID,
                                ITINERARYID,
                                ITINERARYITEMID,
                                QUANTITYNEEDED,
                                VOLUNTEERTYPEID,
                                FILLEDBYCODE,
                                STARTDATETIME,
                                ENDDATETIME
                            from
                            (
                                select 
                                    ITINERARYSTAFFRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    null as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID,
                                    ITINERARYSTAFFRESOURCE.FILLEDBYCODE,
                                    ITINERARY.STARTDATETIME as STARTDATETIME,
                                    ITINERARY.ENDDATETIME as ENDDATETIME
                                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                                inner join dbo.ITINERARYSTAFFRESOURCE on
                                    ITINERARYSTAFFRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.ITINERARY on ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
                                where
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0

                                union all

                                select 
                                    ITINERARYITEMSTAFFRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    ITINERARYITEM.ID as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID,
                                    ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE,
                                    ITINERARYITEM.STARTDATETIME as STARTDATETIME,
                                    ITINERARYITEM.ENDDATETIME as ENDDATETIME
                                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                                inner join dbo.ITINERARYITEMSTAFFRESOURCE on
                                    ITINERARYITEMSTAFFRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.ITINERARYITEM on ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                                inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                                where
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0

                            ) [OFFSETSTAFFRESOURCES]
                            for xml raw('ITEM'),type,elements,root('OFFSETSTAFFRESOURCES'),binary base64                    
                        );                    
                    end
                    if @FORMTYPE = 3
                    begin
                        set @OFFSETRESOURCES = 
                        (
                            select
                                ID,
                                ITINERARYID,
                                ITINERARYITEMID,
                                QUANTITYNEEDED,
                                RESOURCEID,
                                STARTDATETIME,
                                ENDDATETIME
                            from
                            (
                                -- All itinerary resources

                                -- Special case for adding Group Type Resources

                                select 
                                    ITINERARYRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    null as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    RESOURCE.ID as RESOURCEID,
                                    ITINERARY.STARTDATETIME as STARTDATETIME,
                                    ITINERARY.ENDDATETIME as ENDDATETIME
                                from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                                left join dbo.ITINERARYRESOURCE on
                                    ITINERARYRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.RESOURCE    on
                                    RESOURCE.ID = T.c.value('(RESOURCEID)[1]','uniqueidentifier')
                                inner join dbo.ITINERARY on
                                    ITINERARY.ID = T.c.value('(ITINERARYID)[1]','uniqueidentifier')
                                where
                                    (
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is null or
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = '00000000-0000-0000-0000-000000000000'
                                    ) and
                                    (
                                        T.c.value('(QUANTITYNEEDED)[1]','int') > 0 or
                                        RESOURCE.ISPERTICKETITEM = 1
                                    )

                                union all

                                -- All itinerary item resources

                                select 
                                    ITINERARYITEMRESOURCE.ID AS ID,
                                    ITINERARYITEM.ITINERARYID as ITINERARYID,
                                    ITINERARYITEM.ID as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    ITINERARYITEMRESOURCE.RESOURCEID,
                                    ITINERARYITEM.STARTDATETIME as STARTDATETIME,
                                    ITINERARYITEM.ENDDATETIME as ENDDATETIME
                                from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                                inner join dbo.ITINERARYITEMRESOURCE on
                                    ITINERARYITEMRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.RESOURCE on ITINERARYITEMRESOURCE.RESOURCEID = RESOURCE.ID
                                inner join dbo.ITINERARYITEM on ITINERARYITEMRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                                where
                                    (
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is not null and
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') <> '00000000-0000-0000-0000-000000000000'
                                    ) and
                                    (
                                        T.c.value('(QUANTITYNEEDED)[1]','int') > 0 or
                                        RESOURCE.ISPERTICKETITEM = 1
                                    )

                            ) [OFFSETRESOURCES]
                            for xml raw('ITEM'),type,elements,root('OFFSETRESOURCES'),binary base64
                        );

                        set @OFFSETSTAFFRESOURCES = 
                        (
                            select
                                ID,
                                ITINERARYID,
                                ITINERARYITEMID,
                                QUANTITYNEEDED,
                                VOLUNTEERTYPEID,
                                FILLEDBYCODE,
                                STARTDATETIME,
                                ENDDATETIME
                            from
                            (
                                -- Special case for adding Group Type Staff Resources

                                select 
                                    ITINERARYSTAFFRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    null as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    VOLUNTEERTYPE.ID as VOLUNTEERTYPEID,
                                    0 as FILLEDBYCODE, -- Only passing in Volunteers for Conflict Checking

                                    ITINERARY.STARTDATETIME as STARTDATETIME,
                                    ITINERARY.ENDDATETIME as ENDDATETIME
                                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                                left join dbo.ITINERARYSTAFFRESOURCE on
                                    ITINERARYSTAFFRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.VOLUNTEERTYPE on
                                    VOLUNTEERTYPE.ID = T.c.value('(VOLUNTEERTYPEID)[1]','uniqueidentifier')
                                inner join dbo.ITINERARY on
                                    ITINERARY.ID = T.c.value('(ITINERARYID)[1]','uniqueidentifier')
                                where
                                    (
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is null or
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = '00000000-0000-0000-0000-000000000000'
                                    ) and
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0

                                union all

                                select 
                                    ITINERARYITEMSTAFFRESOURCE.ID AS ID,
                                    ITINERARY.ID as ITINERARYID,
                                    ITINERARYITEM.ID as ITINERARYITEMID,
                                    T.c.value('(QUANTITYNEEDED)[1]','int') as QUANTITYNEEDED,
                                    ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID,
                                    ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE,
                                    ITINERARYITEM.STARTDATETIME as STARTDATETIME,
                                    ITINERARYITEM.ENDDATETIME as ENDDATETIME
                                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                                inner join dbo.ITINERARYITEMSTAFFRESOURCE on
                                    ITINERARYITEMSTAFFRESOURCE.ID = T.c.value('(ID)[1]','uniqueidentifier')
                                inner join dbo.ITINERARYITEM on ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                                inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                                where
                                    (
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is not null and
                                        T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') <> '00000000-0000-0000-0000-000000000000'
                                    ) and
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0

                            ) [OFFSETSTAFFRESOURCES]
                            for xml raw('ITEM'),type,elements,root('OFFSETSTAFFRESOURCES'),binary base64                    
                        );                    
                    end

                    declare @ITINERARYID uniqueidentifier;
                    declare @ITINERARYITEMID uniqueidentifier;

                    declare itineraries_cursor cursor LOCAL FAST_FORWARD for
                        select distinct
                                T.c.value('(ITINERARYID)[1]','uniqueidentifier') as ITINERARYID
                        from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                        where
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = '00000000-0000-0000-0000-000000000000'
                            or
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is null

                        union

                        select distinct
                                T.c.value('(ITINERARYID)[1]','uniqueidentifier') as ITINERARYID
                        from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                        where
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = '00000000-0000-0000-0000-000000000000'
                            or
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is null

                    OPEN itineraries_cursor

                    FETCH NEXT FROM itineraries_cursor
                    INTO @ITINERARYID

                    while @@FETCH_STATUS = 0

                    begin

                        insert into @CONFLICTITEMS
                        select 
                            EVENTID,
                            ITINERARYITEMID,
                            ITINERARYID,
                            LOCATIONID,
                            RESOURCEID,
                            VOLUNTEERTYPEID,
                            QUANTITYNEEDED
                        from dbo.UFN_CONFLICTCHECK_GETCONFLICTITEMS
                        (
                            dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARY_STARTDATETIME(@ITINERARYID)), 
                            dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARY_ENDDATETIME(@ITINERARYID)), 
                            null
                            (
                                select
                                    T.c.value('(QUANTITYNEEDED)[1]','int') AS 'QUANTITYNEEDED',
                                    T.c.value('(RESOURCEID)[1]','uniqueidentifier') AS 'RESOURCEID'
                                from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                                where
                                    T.c.value('(ITINERARYID)[1]','uniqueidentifier') = @ITINERARYID and
                                    (T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = '00000000-0000-0000-0000-000000000000' or T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is null) and
                                    (
                                        T.c.value('(QUANTITYNEEDED)[1]','int') > 0 or
                                        T.c.value('(ISPERTICKETITEM)[1]','bit') = 1
                                    )                                        
                                for xml raw('ITEM'),type,elements,root('RESOURCES'),binary base64
                            ),
                            (
                                select
                                    T.c.value('(QUANTITYNEEDED)[1]','int') AS 'QUANTITYNEEDED',
                                    T.c.value('(VOLUNTEERTYPEID)[1]','uniqueidentifier') AS 'VOLUNTEERTYPEID',
                                    T.c.value('(FILLEDBYCODE)[1]','tinyint') AS 'FILLEDBYCODE'
                                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                                where
                                    T.c.value('(ITINERARYID)[1]','uniqueidentifier') = @ITINERARYID and
                                    (T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = '00000000-0000-0000-0000-000000000000' or T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is null) and
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0
                                for xml raw('ITEM'),type,elements,root('STAFFRESOURCES'),binary base64
                            ),
                            @IGNORESUPERRECORDID,
                            @ITINERARYID
                            null,
                            case when @FORMTYPE = 0 or @FORMTYPE = 3 then 0 else 1 end, -- Ignore super record unless copy or itinerary edit

                            case when @FORMTYPE = 0 then 0 else 1 end, -- Ignore record if not copy

                            case when @FORMTYPE = 0 then 0 else 1 end, -- Ignore subrecord is not copy

                            case when @FORMTYPE = 0 then 0 else 1 end, -- Ignore all subrecords of record if not copy

                            @OFFSETRESOURCES,
                            @OFFSETSTAFFRESOURCES
                        )

                    FETCH NEXT FROM itineraries_cursor
                    INTO @ITINERARYID                                                                
                    end

                    close itineraries_cursor
                    deallocate itineraries_cursor


                    set @ITINERARYID = null    

                    declare items_cursor cursor LOCAL FAST_FORWARD for
                        select distinct
                            T.c.value('(ITINERARYID)[1]','uniqueidentifier') AS 'ITINERARYID',
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') AS 'ITINERARYITEMID'
                        from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                        where
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') <> '00000000-0000-0000-0000-000000000000'
                            or
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is not null

                        union

                        select distinct
                            T.c.value('(ITINERARYID)[1]','uniqueidentifier') AS 'ITINERARYID',
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') AS 'ITINERARYITEMID'
                        from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                        where
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') <> '00000000-0000-0000-0000-000000000000'
                            or
                            T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') is not null

                    OPEN items_cursor

                    FETCH NEXT FROM items_cursor
                    INTO @ITINERARYID, @ITINERARYITEMID

                    while @@FETCH_STATUS = 0
                    begin
                        insert into @CONFLICTITEMS
                        select 
                            EVENTID,
                            ITINERARYITEMID,
                            ITINERARYID,
                            LOCATIONID,
                            RESOURCEID,
                            VOLUNTEERTYPEID,
                            QUANTITYNEEDED
                        from dbo.UFN_CONFLICTCHECK_GETCONFLICTITEMS
                        (
                            dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARYITEM_STARTDATETIME(@ITINERARYITEMID)), 
                            dateadd(d, @DATEOFFSET, dbo.UFN_ITINERARYITEM_ENDDATETIME(@ITINERARYITEMID)), 
                            null
                            (
                                select
                                    T.c.value('(QUANTITYNEEDED)[1]','int') AS 'QUANTITYNEEDED',
                                    T.c.value('(RESOURCEID)[1]','uniqueidentifier') AS 'RESOURCEID'
                                from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
                                where
                                    T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = @ITINERARYITEMID    and
                                    (
                                        T.c.value('(QUANTITYNEEDED)[1]','int') > 0 or
                                        T.c.value('(ISPERTICKETITEM)[1]','bit') = 1
                                    )                                                                                
                                for xml raw('ITEM'),type,elements,root('RESOURCES'),binary base64
                            ),
                            (
                                select
                                    T.c.value('(QUANTITYNEEDED)[1]','int') AS 'QUANTITYNEEDED',
                                    T.c.value('(VOLUNTEERTYPEID)[1]','uniqueidentifier') AS 'VOLUNTEERTYPEID',
                                    T.c.value('(FILLEDBYCODE)[1]','tinyint') AS 'FILLEDBYCODE'
                                from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(c)
                                where
                                    T.c.value('(ITINERARYITEMID)[1]','uniqueidentifier') = @ITINERARYITEMID and
                                    T.c.value('(QUANTITYNEEDED)[1]','int') > 0                
                                for xml raw('ITEM'),type,elements,root('STAFFRESOURCES'),binary base64
                            ),
                            @IGNORESUPERRECORDID,
                            @ITINERARYID
                            @ITINERARYITEMID,
                            case when @FORMTYPE = 0 or @FORMTYPE = 3 then 0 else 1 end, -- Ignore super record unless copy reservation or itinerary edit

                            case when @FORMTYPE = 0 then 0 else 1 end, -- Ignore record, won't matter if ignoring super record

                            case when @FORMTYPE = 0 then 0 else 1 end, -- Ignore subrecord, won't matter if ignoring super record

                            case when @FORMTYPE = 0 then 0 else 1 end, -- Ignore all subrecords of record, won't matter if ignoring super record

                            @OFFSETRESOURCES,
                            @OFFSETSTAFFRESOURCES
                        )                                                                        

                    FETCH NEXT FROM items_cursor
                    INTO @ITINERARYID, @ITINERARYITEMID
                    end

                    close items_cursor
                    deallocate items_cursor

                    declare @CONFLICTITEMSXML xml
                    set @CONFLICTITEMSXML = 
                    (
                        select
                            EVENTID,
                            ITINERARYITEMID,
                            ITINERARYID,
                            LOCATIONID,
                            RESOURCEID,
                            VOLUNTEERTYPEID,
                            QUANTITYNEEDED
                        from @CONFLICTITEMS
                        for xml raw('ITEM'),type,elements,root('CONFLICTITEMS'),binary base64    
                    );

                    select distinct
                        RECORDID,
                        PAGEID,
                        PROGRAMID,
                        NAME,
                        STARTDATE,
                        ENDDATE,
                        STARTTIME,
                        ENDTIME,
                        LOCATIONS,
                        RESOURCES,
                        STAFFRESOURCES,
                        ISLOCATIONCONFLICT,
                        ISRESOURCECONFLICT,
                        ISSTAFFRESOURCECONFLICT,
                        SUBRECORDID,
                        LOCATIONSINCONFLICT,
                        RESOURCESINCONFLICT,
                        STAFFRESOURCESINCONFLICT,
                        RECORDTYPE,
                        DISTINCTLOCATIONSINCONFLICT,
                        DISTINCTRESOURCESINCONFLICT,
                        DISTINCTSTAFFRESOURCESINCONFLICT
                    from dbo.UFN_CONFLICTCHECK_GETCONFLICTINFOFROMITEMS(@CONFLICTITEMSXML);