USP_RECORDOPERATION_RESERVATIONDELETE

Executes the "Reservation: Delete" 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_RECORDOPERATION_RESERVATIONDELETE
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier
)
as
    set nocount on;

    declare @STATUSCODE tinyint;

    begin try

        select @STATUSCODE = SALESORDER.STATUSCODE
        from dbo.SALESORDER
        inner join dbo.RESERVATION on SALESORDER.ID = RESERVATION.ID
        where RESERVATION.ID = @ID

        if @STATUSCODE <> 5
            raiserror('BBERR_INVALIDSTATUS', 13, 1);

        if @CHANGEAGENTID is null  
            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

        if exists (select 1 from dbo.DOCUMENTPRINTINGHISTORY where SALESORDERID = @ID)
            raiserror('BBERR_RESERVATION_PAYMENTSPRINTED', 13, 1);

        declare @e int;
        declare @contextCache varbinary(128);

        set @contextCache = CONTEXT_INFO();

        if not @CHANGEAGENTID is null
            set CONTEXT_INFO @CHANGEAGENTID

        delete from dbo.DOCUMENTPRINTINGHISTORY
        where SALESORDERID = @ID

        -- Remove taxes before removing fees and tickets

        delete from dbo.SALESORDERITEMTAX
        where TAXITEMID in
        (select ID from dbo.SALESORDERITEM where SALESORDERID = @ID)

        -- Fees need to be deleted before the item they are linked to  

        delete from dbo.SALESORDERITEM
        where SALESORDERID = @ID and TYPECODE = 3;

        -- Drop the discounts

        delete from dbo.SALESORDERMANUALDISCOUNT
        where SALESORDERID = @ID;

        delete from dbo.SALESORDERITEMORDERDISCOUNTDETAIL 
        where SALESORDERITEMID in 
        (
            select ID
            from dbo.SALESORDERITEM
            where SALESORDERITEM.SALESORDERID = @ID
        )

        -- Drop auto apply discount information                    

        delete from dbo.SALESORDERITEMDISCOUNTOPTION
        where SALESORDERID = @ID;            

        delete from dbo.SALESORDERAVAILABLEDISCOUNTGROUPCOMBINATION
        where SALESORDERID = @ID;

        delete from dbo.SALESORDERDISCOUNTSCENARIOCOMBINATION
        where SALESORDERID = @ID;

        delete from dbo.SALESORDERITEMSCENARIOSDONE
        where SALESORDERID = @ID;

        -- Clear all facilities properly.

        exec dbo.USP_RESERVATION_REMOVEFACILITIES @ID;    

        -- Delete the attendees to trigger sync logic

        delete from dbo.ITINERARYATTENDEE
        from dbo.ITINERARYATTENDEE
            inner join dbo.ITINERARY on ITINERARYATTENDEE.ITINERARYID = ITINERARY.ID
        where ITINERARY.RESERVATIONID = @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    


        exec USP_SALESORDER_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;

    end try
    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch
    return 0;