USP_DATAFORMTEMPLATE_EDIT_ITINERARYITEMSTAFFRESOURCESTAFFBOARDSCHEDULE

The save procedure used by the edit dataform template "Itinerary Item Staff Resource Staff Board Schedule 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_ITINERARYITEMSTAFFRESOURCESTAFFBOARDSCHEDULE
                (
                    @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
                        inner join dbo.ITINERARYITEMSTAFFRESOURCE on
                            ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
                        where 
                            ITINERARYITEMSTAFFRESOURCE.ID = @ID

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

                        declare @ASSIGNEDSTAFFTABLE table
                        (
                            ID uniqueidentifier,
                            CONSTITUENTID uniqueidentifier
                        );

                        insert into @ASSIGNEDSTAFFTABLE
                        (
                            ID, 
                            CONSTITUENTID
                        )
                        select 
                            T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
                            T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') AS 'CONSTITUENTID'
                        from @ASSIGNEDSTAFF.nodes('/ASSIGNEDSTAFF/ITEM') T(c);

                        update @ASSIGNEDSTAFFTABLE set 
                            ID = case when ID = '00000000-0000-0000-0000-000000000000' then null else ID 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;

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

                        select @e=@@error;

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

                        if @e <> 0
                            return 2;

                        /* Update any existing records to have the correct people assigned. */
                        update dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT set 
                            CONSTITUENTID = ASSIGNEDSTAFFTABLE.CONSTITUENTID,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        from @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE
                        where
                            ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.ID and
                            ASSIGNEDSTAFFTABLE.CONSTITUENTID is not null;

                        /* Finally add any new records for staff, or board. */
                        insert into dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
                        (
                            ID,
                            CONSTITUENTID, 
                            ITINERARYITEMSTAFFRESOURCEID, 
                            ADDEDBYID, 
                            CHANGEDBYID, 
                            DATEADDED, 
                            DATECHANGED
                        )
                        select 
                            coalesce(ASSIGNEDSTAFFTABLE.ID, newid()),
                            ASSIGNEDSTAFFTABLE.CONSTITUENTID,
                            @ID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                        from @ASSIGNEDSTAFFTABLE as ASSIGNEDSTAFFTABLE
                        where 
                            ASSIGNEDSTAFFTABLE.CONSTITUENTID is not null and
                            (
                                ASSIGNEDSTAFFTABLE.ID is null or
                                not exists 
                                (
                                    select 1 from dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
                                    where ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ID = ASSIGNEDSTAFFTABLE.ID
                                )
                            );

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

                    return 0;