USP_DATAFORMTEMPLATE_ADD_TRACKFROMITINERARY

The save procedure used by the add dataform template "Track From Itinerary Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@ITINERARYID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NAME nvarchar(100) IN Name
@DESCRIPTION nvarchar(255) IN Description

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_TRACKFROMITINERARY
                    (
                        @ID uniqueidentifier = null output,
                        @ITINERARYID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @NAME nvarchar(100) = null,
                        @DESCRIPTION nvarchar(255) = ''
                    )
                    as
                        set nocount on;

                        if @ID is null
                            set @ID = newid();

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

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

                        declare @ARRIVALDATE datetime;

                        select
                            @ARRIVALDATE = RESERVATION.ARRIVALDATE
                        from
                            dbo.RESERVATION
                        inner join
                            dbo.ITINERARY on RESERVATION.ID = ITINERARY.RESERVATIONID
                        where
                            ITINERARY.ID = @ITINERARYID;

                        begin try
                            insert into dbo.TRACK
                            (
                                ID,
                                NAME,
                                [DESCRIPTION],
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            values
                            (
                                @ID,
                                @NAME,
                                @DESCRIPTION,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            );

                            -- Track resources

                            insert into dbo.TRACKRESOURCE
                            (
                                ID,
                                TRACKID,
                                RESOURCEID,
                                QUANTITYNEEDED,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                newid(),
                                @ID,
                                RESOURCEID,
                                QUANTITYNEEDED,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                dbo.ITINERARYRESOURCE
                            where
                                ITINERARYRESOURCE.ITINERARYID = @ITINERARYID

                            -- Track staff resources

                            insert into dbo.TRACKSTAFFRESOURCE
                            (
                                ID,
                                TRACKID,
                                VOLUNTEERTYPEID,
                                QUANTITYNEEDED,
                                FILLEDBYCODE,
                                JOBID,
                                JOBNAME,
                                JOBDESCRIPTION,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                newid(),
                                @ID,
                                ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID,
                                case when VOLUNTEERTYPE.CAPACITYPERRESOURCE > 0 then 0 else ITINERARYSTAFFRESOURCE.QUANTITYNEEDED end,
                                ITINERARYSTAFFRESOURCE.FILLEDBYCODE,
                                ITINERARYSTAFFRESOURCE.JOBID,
                                coalesce(JOB.NAME, ''),
                                coalesce(JOB.DESCRIPTION, ''),
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from dbo.ITINERARYSTAFFRESOURCE
                                left outer join dbo.JOB
                                    on ITINERARYSTAFFRESOURCE.JOBID = JOB.ID
                                inner join dbo.VOLUNTEERTYPE
                                    on VOLUNTEERTYPE.ID = ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID
                            where ITINERARYSTAFFRESOURCE.ITINERARYID = @ITINERARYID

                            -- build a map between track item and itinerary item ids

                            declare @ITEMIDMAP TABLE
                            (
                                TRACKITEMID uniqueidentifier,
                                ITINERARYITEMID uniqueidentifier
                            )

                            insert into @ITEMIDMAP
                            (
                                TRACKITEMID,
                                ITINERARYITEMID
                            )
                            select
                                newid(),
                                ID
                            from
                                dbo.ITINERARYITEM
                            where
                                ITINERARYITEM.ITINERARYID = @ITINERARYID

                            insert into dbo.TRACKITEM
                            (
                                ID,
                                TRACKID,
                                NAME,
                                PROGRAMID,
                                EVENTLOCATIONID,
                                STARTDAY,
                                STARTTIME,
                                ENDDAY,
                                ENDTIME,
                                BLOCKEVENT,
                                NOTES,
                                TYPECODE,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                ITEMIDMAP.TRACKITEMID,
                                @ID,
                                ITINERARYITEM.NAME,
                                isnull(ITINERARYITEM.PROGRAMID, EVENT.PROGRAMID),
                                ITINERARYITEM.EVENTLOCATIONID,
                                datediff(day, @ARRIVALDATE, ITINERARYITEM.STARTDATE),
                                ITINERARYITEM.STARTTIME,
                                datediff(day, @ARRIVALDATE, ITINERARYITEM.ENDDATE),
                                ITINERARYITEM.ENDTIME,
                                ITINERARYITEM.BLOCKEVENT,
                                ITINERARYITEM.NOTES,
                                ITINERARYITEM.ITEMTYPECODE,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from
                                dbo.ITINERARYITEM
                            inner join
                                @ITEMIDMAP ITEMIDMAP on dbo.ITINERARYITEM.ID = ITEMIDMAP.ITINERARYITEMID
                            left outer join
                                dbo.EVENT on ITINERARYITEM.EVENTID = EVENT.ID
                            where
                                ITINERARYITEM.ITINERARYID = @ITINERARYID and
                                ITINERARYITEM.ITEMTYPECODE <> 3;

                            -- Track item resources

                            insert into dbo.TRACKITEMRESOURCE
                            (
                                ID,
                                TRACKITEMID,
                                RESOURCEID,
                                QUANTITYNEEDED,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                newid(),
                                ITEMIDMAP.TRACKITEMID,
                                RESOURCEID,
                                QUANTITYNEEDED,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from dbo.ITINERARYITEMRESOURCE
                                inner join @ITEMIDMAP ITEMIDMAP 
                                    on dbo.ITINERARYITEMRESOURCE.ITINERARYITEMID = ITEMIDMAP.ITINERARYITEMID
                                inner join dbo.ITINERARYITEM
                                    on ITINERARYITEM.ID = ITEMIDMAP.ITINERARYITEMID
                            where ITINERARYITEM.ITEMTYPECODE <> 3;    

                            -- Track item staff resources

                            insert into dbo.TRACKITEMSTAFFRESOURCE
                            (
                                ID,
                                TRACKITEMID,
                                VOLUNTEERTYPEID,
                                QUANTITYNEEDED,
                                FILLEDBYCODE,
                                JOBID,
                                JOBNAME,
                                JOBDESCRIPTION,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                            )
                            select
                                newid(),
                                ITEMIDMAP.TRACKITEMID,
                                ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID,
                                case when VOLUNTEERTYPE.CAPACITYPERRESOURCE > 0 then 0 else ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED end,
                                ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE,
                                ITINERARYITEMSTAFFRESOURCE.JOBID,
                                coalesce(JOB.NAME, ''),
                                coalesce(JOB.DESCRIPTION, ''),
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from dbo.ITINERARYITEMSTAFFRESOURCE
                                left outer join dbo.JOB
                                    on ITINERARYITEMSTAFFRESOURCE.JOBID = JOB.ID
                                inner join @ITEMIDMAP ITEMIDMAP 
                                    on dbo.ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITEMIDMAP.ITINERARYITEMID
                                inner join dbo.ITINERARYITEM
                                    on ITINERARYITEM.ID = ITEMIDMAP.ITINERARYITEMID
                                inner join dbo.VOLUNTEERTYPE
                                    on VOLUNTEERTYPE.ID = ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID
                            where ITINERARYITEM.ITEMTYPECODE <> 3;    

                        end try

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

                        return 0;