TR_PROGRAMSTAFFRESOURCE_INSERT_JOB

Definition

Copy


                    CREATE trigger [dbo].[TR_PROGRAMSTAFFRESOURCE_INSERT_JOB] on [dbo].[PROGRAMSTAFFRESOURCE] after insert not for replication
                        as begin
                            declare @CURRENTDATE datetime;                                        
                            set @CURRENTDATE = GetDate();

                            declare @CHANGEAGENTID uniqueidentifier;
                            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                            /* Update the null job fields with the corresponding jobs of any identical resource from the events */
                            update PROGRAMSTAFFRESOURCE
                                set PROGRAMSTAFFRESOURCE.JOBID = EVENTSTAFFRESOURCE.JOBID,
                                    PROGRAMSTAFFRESOURCE.CHANGEDBYID = COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID),
                                    PROGRAMSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
                                from inserted
                                    inner join EVENT on inserted.PROGRAMID = EVENT.PROGRAMID
                                    inner join EVENTSTAFFRESOURCE on EVENT.ID = EVENTSTAFFRESOURCE.EVENTID
                                where inserted.JOBID is null
                                    and inserted.ID = PROGRAMSTAFFRESOURCE.ID
                                    and inserted.VOLUNTEERTYPEID = EVENTSTAFFRESOURCE.VOLUNTEERTYPEID
                                    and EVENTSTAFFRESOURCE.JOBID is not null

                            /* Update the null job fields with the corresponding jobs of any existing jobs with the same name as those we would create */
                            update PROGRAMSTAFFRESOURCE
                                set PROGRAMSTAFFRESOURCE.JOBID = JOB.ID,
                                    PROGRAMSTAFFRESOURCE.CHANGEDBYID = COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID),
                                    PROGRAMSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
                                from inserted
                                    inner join PROGRAMSTAFFRESOURCE on inserted.ID = PROGRAMSTAFFRESOURCE.ID
                                    inner join JOB on inserted.VOLUNTEERTYPEID = JOB.VOLUNTEERTYPEID
                                    inner join dbo.PROGRAM on inserted.PROGRAMID = PROGRAM.ID
                                    inner join dbo.VOLUNTEERTYPE on inserted.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
                                where inserted.JOBID is null
                                    and PROGRAMSTAFFRESOURCE.JOBID is null
                                    and JOB.NAME = left(PROGRAM.NAME + ' - ' + VOLUNTEERTYPE.NAME, 100)

                            declare @JOBMAP TABLE
                            (
                                PROGRAMSTAFFRESOURCEID uniqueidentifier,
                                JOBID uniqueidentifier,
                                CHANGEAGENTID uniqueidentifier
                            )

                            insert into @JOBMAP (PROGRAMSTAFFRESOURCEID, JOBID, CHANGEAGENTID)
                                select inserted.ID, newid(), inserted.CHANGEDBYID
                                from inserted
                                    inner join PROGRAMSTAFFRESOURCE on inserted.ID = PROGRAMSTAFFRESOURCE.ID
                                where (PROGRAMSTAFFRESOURCE.JOBID is null) and (PROGRAMSTAFFRESOURCE.FILLEDBYCODE = 0)

                            insert into dbo.JOB (ID, NAME, VOLUNTEERTYPEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                select
                                    JM.JOBID,
                                    left(PROGRAM.NAME + ' - ' + VOLUNTEERTYPE.NAME, 100) as NAME,                        
                                    inserted.VOLUNTEERTYPEID,
                                    COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID) as ADDEDBYID,
                                    COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID) as CHANGEDBYID,
                                    @CURRENTDATE as DATEADDED,
                                    @CURRENTDATE as DATECHANGED
                                from inserted
                                    inner join dbo.PROGRAM on inserted.PROGRAMID = PROGRAM.ID
                                    inner join dbo.VOLUNTEERTYPE on inserted.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
                                    inner join @JOBMAP JM on inserted.ID = JM.PROGRAMSTAFFRESOURCEID

                            update PROGRAMSTAFFRESOURCE
                                set PROGRAMSTAFFRESOURCE.JOBID = JM.JOBID,
                                    PROGRAMSTAFFRESOURCE.CHANGEDBYID = JM.CHANGEAGENTID,
                                    PROGRAMSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
                                from @JOBMAP JM
                                where JM.PROGRAMSTAFFRESOURCEID = PROGRAMSTAFFRESOURCE.ID
                        end