TR_ITINERARYITEM_DELETE_ITINERARYSTAFFRESOURCEUPDATE
Definition
Copy
CREATE trigger [dbo].[TR_ITINERARYITEM_DELETE_ITINERARYSTAFFRESOURCEUPDATE]
on [dbo].[ITINERARYITEM]
after delete not for replication
as begin
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
(
RECORDID uniqueidentifier,
JOBOCCURRENCEID uniqueidentifier,
ITINERARYID uniqueidentifier,
CHANGEDBYID uniqueidentifier
)
/* First items that have changed the itinerary such that it no longer has any items. */
insert into @JOBMAP
(RECORDID, JOBOCCURRENCEID, ITINERARYID, CHANGEDBYID)
select ITINERARYSTAFFRESOURCE.ID, ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID, ITINERARY.ID, deleted.CHANGEDBYID
from deleted
inner join ITINERARY
on deleted.ITINERARYID = ITINERARY.ID
inner join dbo.ITINERARYSTAFFRESOURCE
on ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
where ((ITINERARY.STARTDATETIME is null) and (ITINERARY.ENDDATETIME is null))
/* Update the itinerary staff resource records to have a null JOBOCCURRENCEID */
update dbo.ITINERARYSTAFFRESOURCE
set JOBOCCURRENCEID = null,
CHANGEDBYID = JOBMAP.CHANGEDBYID,
DATECHANGED = @CURRENTDATE
from dbo.ITINERARYSTAFFRESOURCE
inner join @JOBMAP as JOBMAP
on ITINERARYSTAFFRESOURCE.ID = JOBMAP.RECORDID
/* now delete the job occurences */
delete from dbo.JOBOCCURRENCE
from @JOBMAP as JOBMAP
where JOBOCCURRENCE.ID = JOBMAP.JOBOCCURRENCEID
/* Now we need to handle items where the removal has changed the start or end date/time of the itinerary */
delete from @JOBMAP;
insert into @JOBMAP
(RECORDID, JOBOCCURRENCEID, ITINERARYID, CHANGEDBYID)
select ITINERARYSTAFFRESOURCE.ID, ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID, ITINERARY.ID, deleted.CHANGEDBYID
from deleted
inner join ITINERARY
on deleted.ITINERARYID = ITINERARY.ID
inner join dbo.ITINERARYSTAFFRESOURCE
on ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
where ((ITINERARY.STARTDATETIME > deleted.STARTDATETIME) or
(ITINERARY.ENDDATETIME < deleted.ENDDATETIME))
/* Update the job occurrences with the new start and end date/time */
update dbo.JOBOCCURRENCE
set STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(ITINERARY.STARTDATETIME),
ENDDATE = dbo.UFN_DATE_GETEARLIESTTIME(ITINERARY.ENDDATETIME),
STARTTIME = dbo.UFN_HOURMINUTE_GETFROMDATE(ITINERARY.STARTDATETIME),
ENDTIME = dbo.UFN_HOURMINUTE_GETFROMDATE(ITINERARY.ENDDATETIME),
CHANGEDBYID = JOBMAP.CHANGEDBYID,
DATECHANGED = @CURRENTDATE
from dbo.JOBOCCURRENCE
inner join @JOBMAP as JOBMAP
on JOBOCCURRENCE.ID = JOBMAP.JOBOCCURRENCEID
inner join dbo.ITINERARY
on JOBMAP.ITINERARYID = ITINERARY.ID
where (STARTDATE <> dbo.UFN_DATE_GETEARLIESTTIME(ITINERARY.STARTDATETIME)) or
(ENDDATE <> dbo.UFN_DATE_GETEARLIESTTIME(ITINERARY.ENDDATETIME)) or
(STARTTIME <> dbo.UFN_HOURMINUTE_GETFROMDATE(ITINERARY.STARTDATETIME)) or
(ENDTIME <> dbo.UFN_HOURMINUTE_GETFROMDATE(ITINERARY.ENDDATETIME))
end