Copy Code Trigger Definition

                
                    CREATE trigger [dbo].[TR_ITINERARYSTAFFRESOURCE_INSERT_JOBOCCURRENCE] 
                        on [dbo].[ITINERARYSTAFFRESOURCE] 
                        after insert not for replication
                    as begin
                        /* Before a row is inserted here the job needs to exist.
                          This trigger merely makes sure that there are proper job occurences for this job. */

                        /* We need some data for the inserts that are going to follow. */
                        declare @CURRENTDATE datetime;
                        set @CURRENTDATE = GetDate();
                        
                        /* Create a map of JOBOCCURRENCEIDs to ITINERARYITEMSTAFFRESOURCEIDs 
                            so we can set the JOBOCCURRENCEID on the ITINERARYITEMSTAFFRESOURCE.
                            Make sure that we only create a mapping for itineraries where we will add a job occurrence. */
                        declare @JOBMAP TABLE
                        (
                            ITINERARYSTAFFRESOURCEID uniqueidentifier,
                            JOBOCCURRENCEID uniqueidentifier,
                            CHANGEAGENTID uniqueidentifier
                        )
                        
                        insert into @JOBMAP
                            (ITINERARYSTAFFRESOURCEID, JOBOCCURRENCEID, CHANGEAGENTID)
                        select NEWITINERARYSTAFFRESOURCE.ID, newid(), NEWITINERARYSTAFFRESOURCE.CHANGEDBYID
                        from inserted as NEWITINERARYSTAFFRESOURCE
                            inner join dbo.ITINERARY
                                on (ITINERARY.ID = NEWITINERARYSTAFFRESOURCE.ITINERARYID) and 
                                    (not ITINERARY.STARTDATETIME is null) and 
                                    (not ITINERARY.ENDDATETIME is null)                        
                        where (NEWITINERARYSTAFFRESOURCE.JOBOCCURRENCEID is null) and
                                (NEWITINERARYSTAFFRESOURCE.FILLEDBYCODE = 0)
                        
                        /* Now insert some new job occurences */
                        insert into dbo.JOBOCCURRENCE 
                            (ID, 
                            JOBID, 
                            DESCRIPTION, 
                            VOLUNTEERSNEEDED,
                            TYPECODE, 
                            STARTDATE, 
                            ENDDATE, 
                            STARTMONTHDAY, 
                            ENDMONTHDAY, 
                            STARTTIME, 
                            ENDTIME,
                            ADDEDBYID, 
                            CHANGEDBYID, 
                            DATEADDED, 
                            DATECHANGED)
                        select
                            JOBMAP.JOBOCCURRENCEID,
                            NEWITINERARYSTAFFRESOURCE.JOBID,
                            left(JOB.NAME, 30),
                            NEWITINERARYSTAFFRESOURCE.QUANTITYNEEDED,
                            0 as TYPECODE,
                            dbo.UFN_DATE_GETEARLIESTTIME(ITINERARY.STARTDATETIME),
                            dbo.UFN_DATE_GETEARLIESTTIME(ITINERARY.ENDDATETIME),
                            '0000' as STARTMONTHDAY,
                            '0000' as ENDMONTHDAY,
                            dbo.UFN_HOURMINUTE_GETFROMDATE(ITINERARY.STARTDATETIME),
                            dbo.UFN_HOURMINUTE_GETFROMDATE(ITINERARY.ENDDATETIME),
                            NEWITINERARYSTAFFRESOURCE.ADDEDBYID,
                            NEWITINERARYSTAFFRESOURCE.CHANGEDBYID,
                            @CURRENTDATE as DATEADDED,
                            @CURRENTDATE as DATECHANGED
                        from inserted as NEWITINERARYSTAFFRESOURCE
                            inner join dbo.JOB
                                on NEWITINERARYSTAFFRESOURCE.JOBID = JOB.ID
                            inner join dbo.ITINERARY
                                on (ITINERARY.ID = NEWITINERARYSTAFFRESOURCE.ITINERARYID) and 
                                    (not ITINERARY.STARTDATETIME is null) and 
                                    (not ITINERARY.ENDDATETIME is null)
                            inner join @JOBMAP as JOBMAP
                                on JOBMAP.ITINERARYSTAFFRESOURCEID = NEWITINERARYSTAFFRESOURCE.ID
                        
                        /* Now update the ITINERARYSTAFFRESOURCE table with the correct JOBOCCURRENCEIDs */
                        update dbo.ITINERARYSTAFFRESOURCE
                            set ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID = JOBMAP.JOBOCCURRENCEID,
                                ITINERARYSTAFFRESOURCE.CHANGEDBYID = JOBMAP.CHANGEAGENTID,
                                ITINERARYSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
                        from dbo.ITINERARYSTAFFRESOURCE
                            inner join @JOBMAP as JOBMAP
                                on JOBMAP.ITINERARYSTAFFRESOURCEID = ITINERARYSTAFFRESOURCE.ID
                        
                    end