USP_ITINERARYITEM_DELETE
Executes the "Delete Itinerary Item" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | Input parameter indicating the ID of the record being deleted. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the delete. |
Definition
Copy
CREATE procedure dbo.USP_ITINERARYITEM_DELETE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate();
declare @PROGRAMID uniqueidentifier
declare @EVENTID uniqueidentifier
declare @ITINERARYID uniqueidentifier
declare @ORDERID uniqueidentifier
declare @STARTDATE datetime
declare @ISFLATRATE tinyint
declare @STATUSCODE tinyint
declare @ITEMTYPECODE tinyint
select
@PROGRAMID = PROGRAMID,
@EVENTID = EVENTID,
@ITINERARYID = ITINERARYID,
@STARTDATE = STARTDATE,
@ITEMTYPECODE = ITEMTYPECODE
from dbo.ITINERARYITEM
where ITINERARYITEM.ID = @ID
select
@ORDERID = RESERVATION.ID,
@ISFLATRATE = PRICINGCODE,
@STATUSCODE = STATUSCODE
from dbo.RESERVATION
inner join dbo.ITINERARY on ITINERARY.RESERVATIONID = RESERVATION.ID
inner join dbo.SALESORDER on RESERVATION.ID = SALESORDER.ID
where ITINERARY.ID = @ITINERARYID
if @STATUSCODE in (1, 5)
raiserror('BBERR_INVALIDSTATUS', 13, 1);
declare @e int;
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID
if
(
select count(*) from dbo.ITINERARYITEM
where
ITINERARYITEM.ITINERARYID = @ITINERARYID and
(PROGRAMID = @PROGRAMID or EVENTID = @EVENTID) and
@STARTDATE = STARTDATE
) = 1
begin
update dbo.[SALESORDERITEM]
set [SALESORDERITEM].[QUANTITY]= SALESORDERITEM.[QUANTITY] - ITINERARYATTENDEE.QUANTITY,
[SALESORDERITEM].CHANGEDBYID = @CHANGEAGENTID,
[SALESORDERITEM].DATECHANGED = @CURRENTDATE
from dbo.[SALESORDERITEM]
inner join dbo.SALESORDERITEMTICKET as SOIT on [SALESORDERITEM].ID = SOIT.ID
inner join dbo.ITINERARYITEM on (SOIT.EVENTID = ITINERARYITEM.EVENTID and ITINERARYITEM.PROGRAMID is null) or (SOIT.PROGRAMID = ITINERARYITEM.PROGRAMID and ITINERARYITEM.EVENTID is null)
inner join dbo.ITINERARYATTENDEE on ITINERARYATTENDEE.PRICETYPECODEID = SOIT.PRICETYPECODEID
where SALESORDERITEM.SALESORDERID = @ORDERID and ITINERARYITEM.ID = @ID and
ITINERARYATTENDEE.ITINERARYID = @ITINERARYID and ITINERARYITEM.ITEMTYPECODE <> 3
declare @ORDERTICKETSTODELETE dbo.UDT_GENERICID;
insert into @ORDERTICKETSTODELETE (ID)
select
SALESORDERITEM.ID
from
dbo.SALESORDERITEM
inner join
dbo.SALESORDERITEMTICKET on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
where
@ITEMTYPECODE <> 3
and SALESORDERITEM.SALESORDERID = @ORDERID
and (@PROGRAMID is null or SALESORDERITEMTICKET.PROGRAMID = @PROGRAMID)
and (@EVENTID is null or SALESORDERITEMTICKET.EVENTID = @EVENTID)
and SALESORDERITEM.QUANTITY = 0;
if @@rowcount > 0
begin
delete from dbo.[SALESORDERITEM]
where ID in
(
select SALESORDERITEMFEE.ID
from @ORDERTICKETSTODELETE as ORDERTICKETSTODELETE
inner join dbo.SALESORDERITEMFEE on SALESORDERITEMFEE.SALESORDERITEMID = ORDERTICKETSTODELETE.ID
)
delete from dbo.SALESORDERITEMORDERDISCOUNTDETAIL
where SALESORDERITEMID in (select ID from @ORDERTICKETSTODELETE)
delete dbo.SALESORDERITEM
where ID in (select ID from @ORDERTICKETSTODELETE)
end
end
-- Delete the Itinerary Item Resources to trigger the resource sync trigger
delete from ITINERARYITEMRESOURCE where ITINERARYITEMRESOURCE.ITINERARYITEMID = @ID
if not @contextCache is null
set CONTEXT_INFO @contextCache
select @e=@@error;
if @e<>0 return -456; --always return non-zero sp result if an error occurs
if @ISFLATRATE = 1
begin
exec dbo.USP_RESERVATION_UPDATEFLATRATEPERTICKETPRICE @ORDERID, null, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_RESERVATION_DISTRIBUTEAPPLICATIONS @ORDERID, @CHANGEAGENTID, @CURRENTDATE;
end
if @EVENTID is not null or @PROGRAMID is not null
begin
exec dbo.USP_SALESORDER_CALCULATEFEES @ORDERID, @CHANGEAGENTID;
exec dbo.USP_RESERVATION_CALCULATEFLATRATEFEES @ORDERID, @CHANGEAGENTID;
end
-- Delete the Itinerary Item Resources to trigger the resource sync trigger
delete from ITINERARYITEMRESOURCE where ITINERARYITEMRESOURCE.ITINERARYITEMID = @ID
declare @LOCATIONSALESORDERITEMID uniqueidentifier
if @ITEMTYPECODE = 2
begin
select
@LOCATIONSALESORDERITEMID = SALESORDERITEMID
from dbo.ITINERARYITEMLOCATION
where
ITINERARYITEMLOCATION.ID = @ID
end
exec USP_ITINERARYITEM_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID
if @ITEMTYPECODE = 2 and @LOCATIONSALESORDERITEMID is not null
exec dbo.USP_SALESORDERITEM_DELETEBYID_WITHCHANGEAGENTID @LOCATIONSALESORDERITEMID, @CHANGEAGENTID;
-- Recalculate as needed to handle changes in the itinerary's duration
exec dbo.USP_ITINERARY_RESOURCES_SALESORDERSYNC @ITINERARYID, @ORDERID, @CHANGEAGENTID
exec dbo.USP_ITINERARY_STAFFRESOURCES_SALESORDERSYNC @ITINERARYID, @ORDERID, @CHANGEAGENTID
exec dbo.USP_ITINERARYITEM_RESOURCES_SALESORDERSYNC @ID, @ORDERID, @CHANGEAGENTID
exec dbo.USP_ITINERARYITEM_STAFFRESOURCES_SALESORDERSYNC @ID, @ORDERID, @CHANGEAGENTID
if @ISFLATRATE = 0
begin
exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ORDERID, @CHANGEAGENTID;
end
-- Taxes must be calculated last (Items updated by sync may need updated tax values).
exec dbo.USP_SALESORDER_CALCULATETAXES @ORDERID, @CHANGEAGENTID;
if @ISFLATRATE = 1
exec dbo.USP_RESERVATIONRATESCALE_UPDATETAXES @ORDERID, @CHANGEAGENTID, @CURRENTDATE;
return 0;
end