TR_ITINERARYRESOURCE_UPDATE_RESOURCE_UPDATE
Definition
Copy
CREATE trigger [dbo].[TR_ITINERARYRESOURCE_UPDATE_RESOURCE_UPDATE] on [dbo].[ITINERARYRESOURCE] after update not for replication
as begin
declare @CURRENTDATE datetime;
set @CURRENTDATE = GetDate();
declare @CHANGEAGENTID uniqueidentifier;
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
-- Consider that the resourceId for the record may change, in addition to the per-ticket quantity or per-event quantity
-- Update per-event consumable resources
-- Update per-ticket consumable itinerary resources
update dbo.RESOURCE
set [QUANTITY] = [RESOURCE].[QUANTITY] - qty,
CHANGEDBYID = COALESCE(inserted.CHANGEDBYID, @CHANGEAGENTID),
DATECHANGED = @CURRENTDATE
from (
select
COALESCE(inserted.ID, deleted.ID) as RECORDID,
[RESOURCE].ID,
sum(
case [RESOURCE].ISPERTICKETITEM
when 0 then
COALESCE(inserted.QUANTITYNEEDED, 0) - COALESCE(deleted.QUANTITYNEEDED, 0)
else
dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2((COALESCE(inserted.PERTICKETQUANTITY, 0) * COALESCE(insertedITINERARYATTENDEE.QUANTITY, 0)), COALESCE(inserted.PERTICKETDIVISOR, 1))
- dbo.UFN_RESOURCE_CALCULATEPERTICKETQUANTITY_2((COALESCE(deleted.PERTICKETQUANTITY, 0) * COALESCE(deletedITINERARYATTENDEE.QUANTITY, 0)), COALESCE(deleted.PERTICKETDIVISOR, 1))
end
) as qty
from dbo.RESOURCE
full outer join inserted on RESOURCE.ID = inserted.RESOURCEID
full outer join deleted on RESOURCE.ID = deleted.RESOURCEID
left join dbo.ITINERARYATTENDEE insertedITINERARYATTENDEE on inserted.ITINERARYID = insertedITINERARYATTENDEE.ITINERARYID
left join dbo.ITINERARYATTENDEE deletedITINERARYATTENDEE on deleted.ITINERARYID = deletedITINERARYATTENDEE.ITINERARYID
where [RESOURCE].TYPECODE = 1
and (inserted.RESOURCEID is not null or deleted.RESOURCEID is not null)
group by [RESOURCE].ID, COALESCE(inserted.ID, deleted.ID)) as VT
inner join inserted on VT.RECORDID = inserted.ID
where [RESOURCE].ID = VT.ID and VT.qty <> 0
end