TR_EVENTSTAFFRESOURCE_INSERT_JOB
Definition
Copy
CREATE trigger [dbo].[TR_EVENTSTAFFRESOURCE_INSERT_JOB]
on [dbo].[EVENTSTAFFRESOURCE]
after insert, update not for replication
as begin
if (update(EVENTID))
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 program or peer events */
update EVENTSTAFFRESOURCE
set EVENTSTAFFRESOURCE.JOBID = PROGRAMSTAFFRESOURCE.JOBID,
EVENTSTAFFRESOURCE.CHANGEDBYID = COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID),
EVENTSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
from inserted
inner join EVENT on inserted.EVENTID = EVENT.ID
inner join PROGRAMSTAFFRESOURCE on EVENT.PROGRAMID = PROGRAMSTAFFRESOURCE.PROGRAMID
where inserted.JOBID is null
and inserted.ID = EVENTSTAFFRESOURCE.ID
and inserted.VOLUNTEERTYPEID = PROGRAMSTAFFRESOURCE.VOLUNTEERTYPEID
and PROGRAMSTAFFRESOURCE.JOBID is not null
update EVENTSTAFFRESOURCE
set EVENTSTAFFRESOURCE.JOBID = PEERRESOURCE.JOBID,
EVENTSTAFFRESOURCE.CHANGEDBYID = COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID),
EVENTSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
from inserted
inner join EVENTSTAFFRESOURCE on inserted.ID = EVENTSTAFFRESOURCE.ID
inner join EVENT on inserted.EVENTID = EVENT.ID
inner join EVENT PEEREVENT on EVENT.PROGRAMID = PEEREVENT.PROGRAMID
inner join EVENTSTAFFRESOURCE PEERRESOURCE on PEEREVENT.ID = PEERRESOURCE.EVENTID
where inserted.JOBID is null
and EVENTSTAFFRESOURCE.JOBID is null
and inserted.VOLUNTEERTYPEID = PEERRESOURCE.VOLUNTEERTYPEID
and PEERRESOURCE.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 EVENTSTAFFRESOURCE
set EVENTSTAFFRESOURCE.JOBID = JOB.ID,
EVENTSTAFFRESOURCE.CHANGEDBYID = COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID),
EVENTSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
from inserted
inner join EVENTSTAFFRESOURCE on inserted.ID = EVENTSTAFFRESOURCE.ID
inner join JOB on inserted.VOLUNTEERTYPEID = JOB.VOLUNTEERTYPEID
inner join dbo.EVENT on inserted.EVENTID = EVENT.ID
inner join dbo.PROGRAM on EVENT.PROGRAMID = PROGRAM.ID
inner join dbo.VOLUNTEERTYPE on inserted.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
where inserted.JOBID is null
and EVENTSTAFFRESOURCE.JOBID is null
and JOB.NAME = left(PROGRAM.NAME + ' - ' + VOLUNTEERTYPE.NAME, 100)
/* Create any new jobs requred */
declare @JOBMAP TABLE
(
EVENTSTAFFRESOURCEID uniqueidentifier,
JOBID uniqueidentifier,
CHANGEAGENTID uniqueidentifier
)
insert into @JOBMAP (EVENTSTAFFRESOURCEID, JOBID, CHANGEAGENTID)
select EVENTSTAFFRESOURCE.ID, newid(), inserted.CHANGEDBYID
from inserted
inner join EVENTSTAFFRESOURCE on inserted.ID = EVENTSTAFFRESOURCE.ID
where (EVENTSTAFFRESOURCE.JOBID is null) and (EVENTSTAFFRESOURCE.FILLEDBYCODE = 0) and (not EVENTSTAFFRESOURCE.EVENTID is null)
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.EVENT on inserted.EVENTID = EVENT.ID
inner join dbo.PROGRAM on EVENT.PROGRAMID = PROGRAM.ID
inner join dbo.VOLUNTEERTYPE on inserted.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
inner join @JOBMAP JM on inserted.ID = JM.EVENTSTAFFRESOURCEID
update EVENTSTAFFRESOURCE
set EVENTSTAFFRESOURCE.JOBID = JM.JOBID,
EVENTSTAFFRESOURCE.CHANGEDBYID = JM.CHANGEAGENTID,
EVENTSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
from @JOBMAP JM
where JM.EVENTSTAFFRESOURCEID = EVENTSTAFFRESOURCE.ID
/* Add the JobOccurence record, 1 per job per event */
insert into dbo.JOBOCCURRENCE (JOBID, DESCRIPTION, VOLUNTEERSNEEDED,
TYPECODE, STARTDATE, ENDDATE,
STARTMONTHDAY, ENDMONTHDAY, STARTTIME, ENDTIME,
EVENTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
EVENTSTAFFRESOURCE.JOBID,
left(VOLUNTEERTYPE.NAME, 30) as DESCRIPTION,
EVENTSTAFFRESOURCE.QUANTITYNEEDED,
0 as TYPECODE,
EVENT.STARTDATE,
EVENT.ENDDATE,
'0000' as STARTMONTHDAY,
'0000' as ENDMONTHDAY,
EVENT.STARTTIME,
EVENT.ENDTIME,
EVENT.ID,
COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID) as ADDEDBYID,
COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID) as CHANGEDBYID,
@CURRENTDATE as DATEADDED,
@CURRENTDATE as DATECHANGED
from inserted
inner join dbo.VOLUNTEERTYPE on inserted.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
inner join dbo.EVENTSTAFFRESOURCE on inserted.ID = EVENTSTAFFRESOURCE.ID
inner join dbo.[EVENT] on inserted.EVENTID = [EVENT].ID
left outer join dbo.JOBOCCURRENCE on inserted.EVENTID = JOBOCCURRENCE.EVENTID
and EVENTSTAFFRESOURCE.JOBID = JOBOCCURRENCE.JOBID
where JOBOCCURRENCE.ID is null and EVENTSTAFFRESOURCE.JOBID is not null
/* Update the JobOccurence field to allow us to backtrack later */
update EVENTSTAFFRESOURCE
set EVENTSTAFFRESOURCE.JOBOCCURRENCEID = JOBOCCURRENCE.ID,
EVENTSTAFFRESOURCE.CHANGEDBYID = COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID),
EVENTSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
from inserted
inner join EVENTSTAFFRESOURCE on inserted.ID = EVENTSTAFFRESOURCE.ID
inner join JOBOCCURRENCE on JOBOCCURRENCE.EVENTID = EVENTSTAFFRESOURCE.EVENTID and JOBOCCURRENCE.JOBID = EVENTSTAFFRESOURCE.JOBID
where EVENTSTAFFRESOURCE.JOBOCCURRENCEID is null
end
end