USP_DATAFORMTEMPLATE_EDIT_ITINERARYITEMSTAFFRESOURCESCHEDULE

The save procedure used by the edit dataform template "ItineraryItemStaffResourceSchedule Edit Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@ASSIGNEDSTAFF xml IN

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_ITINERARYITEMSTAFFRESOURCESCHEDULE(
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @ASSIGNEDSTAFF xml
                    )
                    as

                        set nocount on;

                        if @CHANGEAGENTID is null  
                            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                        declare @CURRENTDATE datetime;
                        set @CURRENTDATE = getdate();

                        begin try
                            declare @STATUSCODE tinyint;

                            select @STATUSCODE = SALESORDER.STATUSCODE
                            from dbo.SALESORDER
                            inner join dbo.ITINERARY on ITINERARY.RESERVATIONID = SALESORDER.ID
                            inner join dbo.ITINERARYITEM on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                            where ITINERARYITEM.ID = @ID

                            if @STATUSCODE in (1, 5)
                                raiserror('BBERR_INVALIDSTATUS', 13, 1);

                            declare @ASSIGNEDSTAFFTABLE table
                            (
                                FILLEDBYCODE tinyint,
                                JOBOCCURRENCEID uniqueidentifier,
                                VOLUNTEERASSIGNMENTID uniqueidentifier,
                                VOLUNTEERID uniqueidentifier,
                                DATE datetime,
                                ITINERARYITEMSTAFFRESOURCEID uniqueidentifier,
                                ITINERARYITEMSTAFFRESOURCEASSIGNMENTID uniqueidentifier,
                                CONSTITUENTID uniqueidentifier
                            );

                            insert into @ASSIGNEDSTAFFTABLE
                            (
                                FILLEDBYCODE, 
                                JOBOCCURRENCEID, 
                                VOLUNTEERASSIGNMENTID, 
                                VOLUNTEERID, 
                                DATE
                                ITINERARYITEMSTAFFRESOURCEID,
                                ITINERARYITEMSTAFFRESOURCEASSIGNMENTID,
                                CONSTITUENTID
                            )
                            select 
                                T.c.value('(FILLEDBYCODE)[1]','tinyint') AS 'FILLEDBYCODE',
                                T.c.value('(JOBOCCURRENCEID)[1]','uniqueidentifier') AS 'JOBOCCURRENCEID',
                                T.c.value('(VOLUNTEERASSIGNMENTID)[1]','uniqueidentifier') AS 'VOLUNTEERASSIGNMENTID',
                                T.c.value('(VOLUNTEERID)[1]','uniqueidentifier') AS 'VOLUNTEERID',
                                T.c.value('(DATE)[1]','datetime') AS 'DATE',
                                T.c.value('(ITINERARYITEMSTAFFRESOURCEID)[1]','uniqueidentifier') AS 'ITINERARYITEMSTAFFRESOURCEID',
                                T.c.value('(ITINERARYITEMSTAFFRESOURCEASSIGNMENTID)[1]','uniqueidentifier') AS 'ITINERARYITEMSTAFFRESOURCEASSIGNMENTID',
                                T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') AS 'CONSTITUENTID'
                            from @ASSIGNEDSTAFF.nodes('/ASSIGNEDSTAFF/ITEM') T(c);

                            update @ASSIGNEDSTAFFTABLE set 
                                JOBOCCURRENCEID = case when JOBOCCURRENCEID = '00000000-0000-0000-0000-000000000000'then null else JOBOCCURRENCEID end,
                                VOLUNTEERASSIGNMENTID = case when VOLUNTEERASSIGNMENTID = '00000000-0000-0000-0000-000000000000' then null else VOLUNTEERASSIGNMENTID end,
                                VOLUNTEERID = case when VOLUNTEERID = '00000000-0000-0000-0000-000000000000' then null else VOLUNTEERID end,
                                ITINERARYITEMSTAFFRESOURCEASSIGNMENTID = case when ITINERARYITEMSTAFFRESOURCEASSIGNMENTID = '00000000-0000-0000-0000-000000000000' then null else ITINERARYITEMSTAFFRESOURCEASSIGNMENTID end,
                                CONSTITUENTID = case when CONSTITUENTID = '00000000-0000-0000-0000-000000000000' then null else CONSTITUENTID end;

                            /* First delete any records that no longer have a constituent associated with them */
                            /* Need to setup the context cache first so that the delete audit will work */

                            declare @contextCache varbinary(128);
                            declare @e int;

                            set @contextCache = CONTEXT_INFO();

                            /* set CONTEXT_INFO to @CHANGEAGENTID */
                            if not @CHANGEAGENTID is null
                                set CONTEXT_INFO @CHANGEAGENTID;

                            /* First delete from the volunteer assignments */
                            delete from dbo.VOLUNTEERASSIGNMENT
                            where 
                                exists 
                                (
                                    select ASSIGNEDSTAFFTABLE.VOLUNTEERASSIGNMENTID
                                    from @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE
                                    where 
                                        VOLUNTEERASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.VOLUNTEERASSIGNMENTID and
                                        ASSIGNEDSTAFFTABLE.VOLUNTEERID is null and
                                        ASSIGNEDSTAFFTABLE.FILLEDBYCODE = 0
                                );

                            /* Second delete the itinerary item staff resource assignments */
                            delete from dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
                            where 
                                exists 
                                (
                                    select ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEASSIGNMENTID
                                    from @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE
                                    where 
                                        ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEASSIGNMENTID and
                                        ASSIGNEDSTAFFTABLE.CONSTITUENTID is null and
                                        ASSIGNEDSTAFFTABLE.FILLEDBYCODE != 0
                                );

                            select @e=@@error;

                            /* reset CONTEXT_INFO to previous value  */
                            if not @contextCache is null
                                set CONTEXT_INFO @contextCache;

                            if @e <> 0
                                return 2;

                            /* make sure that we create volunteer and volunteer records for those that need them */
                            exec dbo.USP_STAFFRESOURCE_PROCESSVOLUNTEERS @ASSIGNEDSTAFF, @CHANGEAGENTID;

                            /* Update any existing records to have the correct people assigned. */

                            /* First volunteers */
                            update dbo.VOLUNTEERASSIGNMENT set 
                                VOLUNTEERID = ASSIGNEDSTAFFTABLE.VOLUNTEERID,
                                DATE = ASSIGNEDSTAFFTABLE.DATE,
                                JOBOCCURRENCEID = ASSIGNEDSTAFFTABLE.JOBOCCURRENCEID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            from dbo.VOLUNTEERASSIGNMENT
                            inner join @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE on 
                                VOLUNTEERASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.VOLUNTEERASSIGNMENTID
                            where 
                                ASSIGNEDSTAFFTABLE.VOLUNTEERID is not null and
                                ASSIGNEDSTAFFTABLE.FILLEDBYCODE = 0;

                            /* Second staff and board */
                            update dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT set 
                                CONSTITUENTID = ASSIGNEDSTAFFTABLE.CONSTITUENTID,
                                ITINERARYITEMSTAFFRESOURCEID = ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            from dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
                            inner join @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE on 
                                ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEASSIGNMENTID
                            where 
                                ASSIGNEDSTAFFTABLE.CONSTITUENTID is not null and
                                ASSIGNEDSTAFFTABLE.FILLEDBYCODE != 0;

                            /* Finally add any new records for volunteers, staff, or board. */

                            /* First add the volunteers */
                            insert into dbo.VOLUNTEERASSIGNMENT
                            (
                                ID,
                                VOLUNTEERID, 
                                JOBOCCURRENCEID, 
                                DATE
                                ADDEDBYID, 
                                CHANGEDBYID, 
                                DATEADDED, 
                                DATECHANGED
                            )
                            select 
                                coalesce(ASSIGNEDSTAFFTABLE.VOLUNTEERASSIGNMENTID, newid()),
                                ASSIGNEDSTAFFTABLE.VOLUNTEERID,
                                ASSIGNEDSTAFFTABLE.JOBOCCURRENCEID,
                                ASSIGNEDSTAFFTABLE.DATE,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE
                            where 
                                ASSIGNEDSTAFFTABLE.VOLUNTEERID is not null and
                                ASSIGNEDSTAFFTABLE.FILLEDBYCODE = 0 and
                                (
                                    ASSIGNEDSTAFFTABLE.VOLUNTEERASSIGNMENTID is null or
                                    not exists 
                                    (
                                        select VOLUNTEERASSIGNMENT.ID
                                        from dbo.VOLUNTEERASSIGNMENT
                                        where VOLUNTEERASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.VOLUNTEERASSIGNMENTID
                                    )

                                );

                            /* Second add the staff/board */
                            insert into dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
                            (
                                ID,
                                CONSTITUENTID, 
                                ITINERARYITEMSTAFFRESOURCEID, 
                                ADDEDBYID, 
                                CHANGEDBYID, 
                                DATEADDED, 
                                DATECHANGED
                            )
                            select 
                                coalesce(ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEASSIGNMENTID, newid()),
                                ASSIGNEDSTAFFTABLE.CONSTITUENTID,
                                ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE
                            where 
                                ASSIGNEDSTAFFTABLE.CONSTITUENTID is not null and
                                ASSIGNEDSTAFFTABLE.FILLEDBYCODE != 0 and
                                (
                                    ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEASSIGNMENTID is null or
                                    not exists 
                                    (
                                        select ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ID
                                        from dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
                                        where ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.ITINERARYITEMSTAFFRESOURCEASSIGNMENTID
                                    )
                                );

                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR;
                            return 1;
                        end catch

                        return 0;