USP_RESERVATION_COMPLETEORDER_IMPLEMENTATION

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


create procedure dbo.USP_RESERVATION_COMPLETEORDER_IMPLEMENTATION (
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null
)
as
    set nocount on;

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

    declare @CURRENTDATE datetime = getdate();

    begin try
        declare @ORDERSTATUS tinyint;
        declare @CONSTITUENTID uniqueidentifier;
        declare @ARRIVALDATE date;
        declare @ARRIVALTIME dbo.UDT_HOURMINUTE;
        declare @PRICINGCODE tinyint;

        select
            @ORDERSTATUS = SALESORDER.STATUSCODE,
            @CONSTITUENTID = SALESORDER.CONSTITUENTID,
            @ARRIVALDATE = RESERVATION.ARRIVALDATE,
            @ARRIVALTIME = RESERVATION.ARRIVALTIME,
            @PRICINGCODE = RESERVATION.PRICINGCODE
        from
            dbo.SALESORDER
        inner join
            dbo.RESERVATION on RESERVATION.ID = SALESORDER.ID
        where
            SALESORDER.ID = @ID;

        if @ORDERSTATUS in (1, 5) begin
            raiserror('BBERR_INVALIDSTATUS', 13, 1);
        end

        if @PRICINGCODE = 1 /* Flat rate */ and dbo.UFN_RESERVATIONRATESCALE_ISAPPLIED(@ID) = 0 begin
            raiserror('BBERR_RESERVATIONNOTAPPLIED', 13, 1);
        end

        declare @TRANSACTIONDATE datetime = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEFROMUTC(getutcdate());

        if cast(@TRANSACTIONDATE as date) <> @ARRIVALDATE begin
            if len(@ARRIVALTIME) > 0 begin
                set @TRANSACTIONDATE = dbo.UFN_DATE_ADDHOURMINUTE(@ARRIVALDATE, @ARRIVALTIME);
            end
            else begin
                declare @RESERVATIONSTARTDATETIME datetime = dbo.UFN_RESERVATION_STARTDATETIME(@ID);

                if cast(@RESERVATIONSTARTDATETIME as date) = @ARRIVALDATE begin
                    set @TRANSACTIONDATE = @RESERVATIONSTARTDATETIME;
                end
                else begin
                    set @TRANSACTIONDATE = @ARRIVALDATE;
                end
            end
        end

        update dbo.SALESORDER set
            TRANSACTIONDATE = @TRANSACTIONDATE,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where ID = @ID;

        --mark the order as complete

        exec dbo.USP_SALESORDER_COMPLETEORDER @ID, @TRANSACTIONDATE, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
        exec dbo.USP_RESERVATIONSTATUSHISTORY_ADD @ID, @CHANGEAGENTID, 1;
    end try

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

    return 0;