TR_ITINERARYITEMSTAFFRESOURCE_INSERT_JOBOCCURRENCE
Definition
Copy
CREATE trigger [dbo].[TR_ITINERARYITEMSTAFFRESOURCE_INSERT_JOBOCCURRENCE]
on [dbo].[ITINERARYITEMSTAFFRESOURCE]
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. */
declare @JOBMAP TABLE
(
ITINERARYITEMSTAFFRESOURCEID uniqueidentifier,
JOBOCCURRENCEID uniqueidentifier,
CHANGEAGENTID uniqueidentifier
)
insert into @JOBMAP
(ITINERARYITEMSTAFFRESOURCEID, JOBOCCURRENCEID, CHANGEAGENTID)
select ID, newid(), inserted.CHANGEDBYID
from inserted
where (inserted.JOBOCCURRENCEID is null) and
(inserted.FILLEDBYCODE = 0) and
(not inserted.JOBID is null)
/* 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,
NEWITINERARYITEMSTAFFRESOURCE.JOBID,
left(JOB.NAME, 30),
NEWITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED,
0 as TYPECODE,
ITINERARYITEM.STARTDATE,
ITINERARYITEM.ENDDATE,
'0000' as STARTMONTHDAY,
'0000' as ENDMONTHDAY,
ITINERARYITEM.STARTTIME,
ITINERARYITEM.ENDTIME,
NEWITINERARYITEMSTAFFRESOURCE.ADDEDBYID,
NEWITINERARYITEMSTAFFRESOURCE.CHANGEDBYID,
@CURRENTDATE as DATEADDED,
@CURRENTDATE as DATECHANGED
from inserted as NEWITINERARYITEMSTAFFRESOURCE
inner join dbo.JOB
on NEWITINERARYITEMSTAFFRESOURCE.JOBID = JOB.ID
inner join dbo.ITINERARYITEM
on ITINERARYITEM.ID = NEWITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID
inner join @JOBMAP as JOBMAP
on JOBMAP.ITINERARYITEMSTAFFRESOURCEID = NEWITINERARYITEMSTAFFRESOURCE.ID
/* Now update the ITINERARYITEMSTAFFRESOURCE table with the correct JOBOCCURRENCEIDs */
update dbo.ITINERARYITEMSTAFFRESOURCE
set ITINERARYITEMSTAFFRESOURCE.JOBOCCURRENCEID = JOBMAP.JOBOCCURRENCEID,
ITINERARYITEMSTAFFRESOURCE.CHANGEDBYID = JOBMAP.CHANGEAGENTID,
ITINERARYITEMSTAFFRESOURCE.DATECHANGED = @CURRENTDATE
from dbo.ITINERARYITEMSTAFFRESOURCE
inner join @JOBMAP as JOBMAP
on JOBMAP.ITINERARYITEMSTAFFRESOURCEID = ITINERARYITEMSTAFFRESOURCE.ID
end