TR_ITINERARYSTAFFRESOURCE_INSERT_JOBOCCURRENCE
Definition
Copy
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