TR_ITINERARYITEMRESOURCE_UPDATE_RESOURCE_UPDATE

Definition

Copy


                    CREATE trigger [dbo].[TR_ITINERARYITEMRESOURCE_UPDATE_RESOURCE_UPDATE] on [dbo].[ITINERARYITEMRESOURCE] 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.ITINERARYITEM insertedITINERARYITEM on inserted.ITINERARYITEMID = insertedITINERARYITEM.ID
                                    left join dbo.ITINERARYATTENDEE insertedITINERARYATTENDEE on insertedITINERARYITEM.ITINERARYID = insertedITINERARYATTENDEE.ITINERARYID
                                    left join dbo.ITINERARYITEM deletedITINERARYITEM on deleted.ITINERARYITEMID = deletedITINERARYITEM.ID
                                    left join dbo.ITINERARYATTENDEE deletedITINERARYATTENDEE on deletedITINERARYITEM.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