USP_ITINERARYITEMEVENT_EDIT

Allows the user to edit an existing event on an itinerary.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@ITINERARYID uniqueidentifier IN
@PROGRAMID uniqueidentifier IN
@EVENTID uniqueidentifier IN
@ITINERARYITEMSTARTTIME UDT_HOURMINUTE IN
@ITINERARYITEMENDTIME UDT_HOURMINUTE IN
@ITINERARYITEMSTARTDATE datetime IN
@ITINERARYITEMENDDATE datetime IN
@BLOCKEVENT bit IN
@NOTES nvarchar(500) IN
@RESOURCES xml IN
@IGNORECONFLICTS bit IN
@STAFFRESOURCES xml IN

Definition

Copy


        CREATE procedure dbo.USP_ITINERARYITEMEVENT_EDIT
        (
            @ID uniqueidentifier,
            @CHANGEAGENTID uniqueidentifier = null,
            @ITINERARYID uniqueidentifier,
            @PROGRAMID uniqueidentifier,
            @EVENTID uniqueidentifier,
            @ITINERARYITEMSTARTTIME dbo.UDT_HOURMINUTE,
            @ITINERARYITEMENDTIME dbo.UDT_HOURMINUTE,
            @ITINERARYITEMSTARTDATE datetime,
            @ITINERARYITEMENDDATE datetime,
            @BLOCKEVENT bit,
            @NOTES nvarchar(500),
            @RESOURCES xml,
            @IGNORECONFLICTS bit,
            @STAFFRESOURCES xml = null
        )
        as
        begin
            set nocount on;

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

            declare @ORDERID uniqueidentifier;
            declare @SALESMETHODID uniqueidentifier;
            declare @ARRIVALDATE datetime;
            declare @MAXDATE datetime;
            declare @ERRORMESSAGE nvarchar(500);
            declare @DESCRIPTION nvarchar(100);
            declare @EVENTSTARTTIME UDT_HOURMINUTE;
            declare @EVENTENDTIME UDT_HOURMINUTE;
            declare @CURRENTDATE datetime;
            declare @CREATENEWCONFLICT bit = 0;
            declare @ITEMSTARTDATETIME datetime;
            declare @ITEMENDDATETIME datetime;
            declare @EVENTSTARTDATE datetime;
            declare @EVENTENDDATE datetime;
            declare @ISFLATRATE bit = 0;
            declare @STATUSCODE tinyint;

            set @ITEMSTARTDATETIME = dbo.UFN_DATE_ADDHOURMINUTE(dbo.UFN_DATE_GETEARLIESTTIME(@ITINERARYITEMSTARTDATE),@ITINERARYITEMSTARTTIME)
            set @ITEMENDDATETIME = dbo.UFN_DATE_ADDHOURMINUTE(dbo.UFN_DATE_GETEARLIESTTIME(@ITINERARYITEMENDDATE),@ITINERARYITEMENDTIME)

            set @CURRENTDATE = getdate();
            set @SALESMETHODID = dbo.UFN_SALESMETHOD_GETIDFROMTYPECODE(3)    

            select 
                @ORDERID = RESERVATION.ID,
                @ARRIVALDATE = dbo.UFN_DATE_ADDHOURMINUTE(RESERVATION.ARRIVALDATE, RESERVATION.ARRIVALTIME),
                @ISFLATRATE = case when PRICINGCODE = 1 then 1 else 0 end,
                @STATUSCODE = SALESORDER.STATUSCODE
            from dbo.RESERVATION
            inner join dbo.ITINERARY on ITINERARY.RESERVATIONID = RESERVATION.ID
            inner join dbo.SALESORDER on SALESORDER.ID = RESERVATION.ID
            where ITINERARY.ID = @ITINERARYID

            if @STATUSCODE in (1, 5)
                raiserror('BBERR_INVALIDSTATUS', 13, 1)

            select 
                @DESCRIPTION = EVENT.NAME,
                @EVENTSTARTTIME = EVENT.STARTTIME,
                @EVENTENDTIME = EVENT.ENDTIME,
                @EVENTSTARTDATE = EVENT.STARTDATETIME,
                @EVENTENDDATE = EVENT.ENDDATETIME
            from dbo.EVENT where EVENT.ID = @EVENTID;    

            if @ITEMSTARTDATETIME not between @EVENTSTARTDATE and @EVENTENDDATE
                raiserror('BBERR_INVALIDTIMES', 13, 1);

            if @IGNORECONFLICTS = 0
            begin
                declare @OLDITINERARYSTART datetime;
                declare @OLDITINERARYEND datetime;
                declare @ITINERARYSTART datetime;
                declare @ITINERARYEND datetime;

                declare @CHECKITINERARYCONFLICTS bit = 0;

                select
                    @OLDITINERARYSTART = ITINERARY.STARTDATETIME,
                    @OLDITINERARYEND   = ITINERARY.ENDDATETIME
                from dbo.ITINERARY
                where ID = @ITINERARYID

                select
                    @ITINERARYSTART = min(STARTDATETIME),
                    @ITINERARYEND = max(ENDDATETIME)
                from
                (
                    select 
                        @ITEMSTARTDATETIME as STARTDATETIME,
                        @ITEMENDDATETIME as ENDDATETIME

                    union all

                    select 
                        ITINERARYITEM.STARTDATETIME as STARTDATETIME,
                        ITINERARYITEM.ENDDATETIME as ENDDATETIME
                    from dbo.ITINERARYITEM
                    where 
                        ITINERARYID = @ITINERARYID and
                        ID <> @ID
                ) T

                if @OLDITINERARYSTART is null or @OLDITINERARYSTART <> @ITINERARYSTART or
                    @OLDITINERARYEND is null or @OLDITINERARYEND <> @ITINERARYEND
                    set @CHECKITINERARYCONFLICTS = 1

                if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
                (
                    @ITEMSTARTDATETIME, @ITEMENDDATETIME
                    null, @RESOURCES, null,
                    null, @ITINERARYID, @ID,
                    0, -- Ignore Super Record 

                    0, -- Ignore Record

                    1, -- Ignore Sub Record

                    0 -- Ignore All Sub Records of Record

                ) = 1
                begin
                    raiserror('BBERR_RESOURCECONFLICTSEXIST', 13, 1);
                    return 1;
                end

                if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
                (
                    @ITEMSTARTDATETIME, @ITEMENDDATETIME
                    null, null, @STAFFRESOURCES,
                    null, @ITINERARYID, @ID,
                    0, -- Ignore Super Record 

                    0, -- Ignore Record

                    1, -- Ignore Sub Record

                    0 -- Ignore All Sub Records of Record

                ) = 1
                begin
                    raiserror('BBERR_STAFFRESOURCECONFLICTSEXIST', 13, 1);
                    return 1;
                end

                -- If itinerary times changing, need to check on conflicts

                if @CHECKITINERARYCONFLICTS = 1
                begin

                    declare @ITINERARYRESOURCES xml
                    set @ITINERARYRESOURCES = dbo.UFN_ITINERARYRESOURCE_GETRESOURCES_TOITEMLISTXML(@ITINERARYID);

                    declare @ITINERARYSTAFFRESOURCES xml
                    set @ITINERARYSTAFFRESOURCES = dbo.UFN_ITINERARY_GETSTAFFRESOURCES_TOITEMLISTXML(@ITINERARYID);

                    if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
                    (
                        @ITINERARYSTART, @ITINERARYEND
                        null, @ITINERARYRESOURCES, @ITINERARYSTAFFRESOURCES,
                        null, @ITINERARYID, @ID,
                        0, -- Ignore Super Record 

                        1, -- Ignore Record

                        1, -- Ignore Sub Record

                        0 -- Ignore All Sub Records of Record

                    ) = 1
                    begin
                        raiserror('BBERR_ITINERARYRESOURCECONFLICTSEXIST', 13, 1);
                        return 1;
                    end
                end
            end         

            if @ARRIVALDATE > dbo.UFN_DATE_ADDHOURMINUTE(@ITINERARYITEMSTARTDATE, @ITINERARYITEMSTARTTIME)
                raiserror('BBERR_INVALIDDATE', 13, 1)

            set @MAXDATE = dateadd(d, 4, dbo.UFN_DATE_GETLATESTTIME(@ARRIVALDATE))

            if @ITEMSTARTDATETIME > @MAXDATE or @ITEMENDDATETIME > @MAXDATE
                raiserror('BBERR_OUTSIDEDATERANGE', 13, 1)

            -- Need to check location block from custom item, also.

            if exists (select 1 from dbo.ITINERARYITEM 
                        inner join dbo.ITINERARY on ITINERARY.ID = ITINERARYITEM.ITINERARYID
                        inner join dbo.RESERVATION on ITINERARY.RESERVATIONID = RESERVATION.ID
                        inner join dbo.SALESORDER on RESERVATION.ID = SALESORDER.ID
                        where ITEMTYPECODE = 0 
                            and BLOCKEVENT = 1 
                            and EVENTID = @EVENTID 
                            and ITINERARY.RESERVATIONID <> @ORDERID
                            and ITINERARYITEM.ID <> @ID
                            and SALESORDER.STATUSCODE <> 5)
                raiserror('BBERR_EVENTEXISTSWITHBLOCK', 13, 1);

            if @BLOCKEVENT = 1 
                begin
                    -- CR63788 MDC - Block event changes should apply globally to the reservation.

                    -- Do not block events in the same reservation.

                    if exists (select 1 
                                from dbo.ITINERARYITEM 
                                inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
                                inner join dbo.RESERVATION on ITINERARY.RESERVATIONID = RESERVATION.ID
                                inner join dbo.SALESORDER on RESERVATION.ID = SALESORDER.ID
                                where ITEMTYPECODE = 0 
                                    and EVENTID = @EVENTID
                                    and ITINERARY.RESERVATIONID <> @ORDERID
                                    and ITINERARYITEM.ID <> @ID
                                    and SALESORDER.STATUSCODE <> 5
                                )
                        raiserror('BBERR_CANNOTBLOCK', 13, 1);
                end

            update dbo.ITINERARYITEM
                set BLOCKEVENT = @BLOCKEVENT,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
            where @EVENTID = EVENTID 
                and ITINERARYID in (select ID
                                    from dbo.ITINERARY
                                    where ITINERARY.RESERVATIONID = @ORDERID)
                and ITEMTYPECODE = 0

            if not exists (select 1 from dbo.ITINERARYITEM where EVENTID = @EVENTID and ITEMTYPECODE = 0 and ITINERARYID = @ITINERARYID)
            begin
                if not exists (select 1 from dbo.EVENT inner join dbo.PROGRAM on PROGRAM.ID = EVENT.PROGRAMID where EVENT.ID = @EVENTID and PROGRAM.ISACTIVE = 1 and EVENT.ISACTIVE = 1 and dbo.UFN_EVENT_ISONSALE(@EVENTID, @CURRENTDATE, 3) = 1)
                begin
                    raiserror('BBERR_INACTIVEPROGRAMEVENT', 13, 1);
                end 
            end

            begin try
                if not exists (select ID from dbo.ITINERARYITEM where ITINERARYID = @ITINERARYID and ITEMTYPECODE = 0 and EVENTID = @EVENTID)
                begin
                    if @CREATENEWCONFLICT = 0 --No tickets for an invalid item

                    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) 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 @e int;
                            declare @contextCache varbinary(128);

                            set @contextCache = CONTEXT_INFO();

                            if not @CHANGEAGENTID is null
                                set CONTEXT_INFO @CHANGEAGENTID        

                            delete from dbo.[SALESORDERITEM]
                            where ID in
                            (
                                select SALESORDERITEMFEE.ID from SALESORDERITEM
                                inner join dbo.SALESORDERITEMFEE on
                                    SALESORDERITEM.ID = SALESORDERITEMFEE.SALESORDERITEMID
                                where SALESORDERITEM.SALESORDERID = @ORDERID and 
                                    SALESORDERITEM.QUANTITY = 0
                            )

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

                            delete dbo.SALESORDERITEM
                            where SALESORDERITEM.QUANTITY = 0 and
                                SALESORDERITEM.SALESORDERID = @ORDERID

                            if not @contextCache is null
                                set CONTEXT_INFO @contextCache

                            select @e=@@error;

                            if @e <> 0
                                return 2;                    
                    end    

                    declare @ORDERITEMS table
                        (ID uniqueidentifier,
                        QUANTITY decimal(20,4),
                        PRICETYPECODEID uniqueidentifier,
                        PRICETYPE nvarchar(100),
                        PRICE money,
                        PRICINGSTRUCTURECODE tinyint);

                    if exists (select 1 from dbo.PROGRAMEVENTPRICE where EVENTID = @EVENTID)
                    begin                            
                        insert into @ORDERITEMS
                            select
                                newid(),
                                IT.QUANTITY,
                                PROGRAMEVENTPRICE.PRICETYPECODEID,
                                dbo.UFN_PRICETYPECODE_GETDESCRIPTION(PROGRAMEVENTPRICE.PRICETYPECODEID) as PRICETYPE,
                                PROGRAMEVENTPRICE.FACEPRICE,
                                0
                            from dbo.ITINERARYATTENDEE IT
                            inner join dbo.PROGRAMEVENTPRICE on @EVENTID = PROGRAMEVENTPRICE.EVENTID
                            inner join dbo.PRICETYPECODE on PRICETYPECODE.ID = PROGRAMEVENTPRICE.PRICETYPECODEID
                            where 
                                PROGRAMEVENTPRICE.EVENTID = @EVENTID and
                                IT.PRICETYPECODEID = PRICETYPECODE.ID and
                                IT.ITINERARYID = @ITINERARYID and
                                not exists (select 1 
                                            from dbo.SALESMETHODEXCLUDEDPRICETYPE 
                                            where SALESMETHODEXCLUDEDPRICETYPE.SALESMETHODID = @SALESMETHODID and
                                            SALESMETHODEXCLUDEDPRICETYPE.PRICETYPECODEID = PROGRAMEVENTPRICE.PRICETYPECODEID)

                    end
                    else
                    begin
                        -- Fix the program ID if we need to

                        if (@PROGRAMID is null)
                            select @PROGRAMID = EVENT.PROGRAMID from dbo.EVENT where EVENT.ID = @EVENTID;

                        insert into @ORDERITEMS
                        select
                            newid(),
                            IT.QUANTITY,
                            PROGRAMPRICE.PRICETYPECODEID,
                            dbo.UFN_PRICETYPECODE_GETDESCRIPTION(PROGRAMPRICE.PRICETYPECODEID) as PRICETYPE,
                            PROGRAMPRICE.FACEPRICE,
                            0
                        from dbo.ITINERARYATTENDEE IT
                        inner join dbo.PROGRAMPRICE on PROGRAMPRICE.PROGRAMID = @PROGRAMID
                        inner join dbo.PRICETYPECODE on PRICETYPECODE.ID = PROGRAMPRICE.PRICETYPECODEID
                        where 
                            PROGRAMPRICE.PROGRAMID = @PROGRAMID and
                            IT.PRICETYPECODEID = PRICETYPECODE.ID and
                            IT.ITINERARYID = @ITINERARYID and
                            not exists (select 1 
                                        from dbo.SALESMETHODEXCLUDEDPRICETYPE 
                                        where SALESMETHODEXCLUDEDPRICETYPE.SALESMETHODID = @SALESMETHODID and
                                        SALESMETHODEXCLUDEDPRICETYPE.PRICETYPECODEID = PROGRAMPRICE.PRICETYPECODEID)
                    end

                    if exists (
                        select PRICETYPECODEID
                        from dbo.ITINERARYATTENDEE
                        where 
                            ITINERARYID = @ITINERARYID and
                            PRICETYPECODEID not in (select PRICETYPECODEID from @ORDERITEMS)
                    )
                        raiserror('BBERR_INVALIDPRICETYPE', 13, 1);

                    declare @QUANTITY integer;
                    declare @TICKETSAVAILABLE integer;

                    select @QUANTITY = SUM(OI.QUANTITY)
                    from @ORDERITEMS OI

                    set @TICKETSAVAILABLE = dbo.UFN_EVENT_GETAVAILABILITY(@EVENTID);

                    if @QUANTITY > @TICKETSAVAILABLE
                    begin
                        declare @DIFFERENCE integer;

                        set @DIFFERENCE = @QUANTITY - @TICKETSAVAILABLE

                        set @ERRORMESSAGE = @DESCRIPTION + ' does not have enough capacity for this group. You can either reduce the group size by ' + 
                                    convert(nvarchar(10), @DIFFERENCE) + ' or choose a different event.' 

                        raiserror(@ERRORMESSAGE, 13, 1)
                    end

                    if @CREATENEWCONFLICT = 0 --No tickets for an invalid item

                    begin
                        update dbo.SALESORDERITEM set
                            SALESORDERITEM.QUANTITY = SALESORDERITEM.QUANTITY + ITEMS.QUANTITY,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        from @ORDERITEMS items
                        where 
                            SALESORDERID = @ORDERID and
                            SALESORDERITEM.ID in
                            ( 
                                select ID from dbo.SALESORDERITEMTICKET 
                                where EVENTID = @EVENTID and 
                                SALESORDERITEMTICKET.PRICETYPECODEID = ITEMS.PRICETYPECODEID
                            )

                        -- Set items to be flat rate if the reservation is flat rate and the program is included

                        if @ISFLATRATE = 1
                        begin
                            update @ORDERITEMS set PRICINGSTRUCTURECODE = 1
                            where dbo.UFN_RESERVATIONRATESCALE_ISEVENTINCLUDED(@ORDERID,@EVENTID) = 1
                        end

                        insert into dbo.SALESORDERITEM
                        (
                            ID, 
                            SALESORDERID, 
                            TYPECODE, 
                            DESCRIPTION, 
                            QUANTITY, 
                            PRICE, 
                            PRICINGSTRUCTURECODE,
                            ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                        )
                        select
                            ITEMS.ID, 
                            @ORDERID
                            0
                            @DESCRIPTION + ' - ' + ITEMS.PRICETYPE, 
                            ITEMS.QUANTITY, 
                            ITEMS.PRICE,
                            ITEMS.PRICINGSTRUCTURECODE,
                            @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                        from @ORDERITEMS ITEMS
                        where 
                            not exists
                            (
                                select 1 from dbo.SALESORDERITEM
                                inner join dbo.SALESORDERITEMTICKET on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
                                where 
                                    SALESORDERID = @ORDERID and
                                    EVENTID = @EVENTID and
                                    SALESORDERITEMTICKET.PRICETYPECODEID = ITEMS.PRICETYPECODEID
                            );

                        insert into dbo.SALESORDERITEMTICKET
                        (
                            ID,
                            EVENTID,
                            PROGRAMID,
                            PROGRAMNAME,
                            PROGRAMCATEGORYNAME,
                            PRICETYPECODEID,
                            PRICE,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED, 
                            DATECHANGED
                        )
                        select
                            ITEMS.ID, 
                            @EVENTID
                            (select PROGRAMID from dbo.EVENT where ID = @EVENTID),
                            coalesce((
                                select [PROGRAM].[NAME] 
                                from dbo.[EVENT]
                                inner join dbo.[PROGRAM]
                                    on [EVENT].[PROGRAMID] = [PROGRAM].[ID]
                                where [EVENT].[ID] = @EVENTID
                            ),''),
                            coalesce((
                                select [PROGRAMCATEGORYCODE].[DESCRIPTION]
                                from dbo.[EVENT]
                                inner join dbo.[PROGRAM]
                                    on [EVENT].[PROGRAMID] = [PROGRAM].[ID]
                                inner join dbo.[PROGRAMCATEGORYCODE]
                                    on [PROGRAM].[PROGRAMCATEGORYCODEID] = [PROGRAMCATEGORYCODE].[ID]
                                where [EVENT].[ID] = @EVENTID
                            ),''),
                            ITEMS.PRICETYPECODEID,
                            ITEMS.PRICE,
                            @CHANGEAGENTID
                            @CHANGEAGENTID
                            @CURRENTDATE
                            @CURRENTDATE
                        from @ORDERITEMS ITEMS
                        where
                            ITEMS.ID in
                            ( select ID from dbo.SALESORDERITEM where SALESORDERID = @ORDERID )

                    end    
                end

                update dbo.ITINERARYITEM set
                    NAME = @DESCRIPTION,
                    STARTTIME = @ITINERARYITEMSTARTTIME,
                    ENDTIME = @ITINERARYITEMENDTIME,
                    NOTES = @NOTES,
                    EVENTID = @EVENTID,
                    PROGRAMID = null,
                    ITEMTYPECODE = case @CREATENEWCONFLICT when 1 then 3 else 0 end,
                    INVALIDREASONCODE = case @CREATENEWCONFLICT when 1 then 10 else 0 end,
                    STARTDATE = @ITINERARYITEMSTARTDATE,
                    ENDDATE = @ITINERARYITEMENDDATE,
                    BLOCKEVENT = @BLOCKEVENT,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @ID;

                -- Need to create the job, the job occurrence will be created using the trigger

                exec dbo.USP_RESOURCE_PROCESS @RESOURCES output, @CHANGEAGENTID, 0;
                exec dbo.USP_STAFFRESOURCE_PROCESS @STAFFRESOURCES output, @CHANGEAGENTID, 0, 0, 0;
                exec dbo.USP_ITINERARYITEMRESOURCE_GETRESOURCES_UPDATEFROMXML @ID, @RESOURCES, @CHANGEAGENTID, @CURRENTDATE
                exec dbo.USP_ITINERARYITEM_GETSTAFFRESOURCES_UPDATEFROMXML @ID, @STAFFRESOURCES, @CHANGEAGENTID, @CURRENTDATE

                exec dbo.USP_ITINERARY_CHECKPERTICKETRESOURCES @ITINERARYID;
                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 = 1
                begin
                    exec dbo.USP_RESERVATION_UPDATEFLATRATEPERTICKETPRICE @ORDERID, null, @CHANGEAGENTID, @CURRENTDATE;
                    exec dbo.USP_RESERVATION_DISTRIBUTEAPPLICATIONS @ORDERID, @CHANGEAGENTID, @CURRENTDATE;
                    exec dbo.USP_SALESORDER_CALCULATEFEES @ORDERID, @CHANGEAGENTID;                
                    exec dbo.USP_RESERVATION_CALCULATEFLATRATEFEES @ORDERID, @CHANGEAGENTID;

                    --exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ORDERID, @CHANGEAGENTID;

                    --exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ORDERID, @CHANGEAGENTID;


                    -- Generate taxes last

                    exec dbo.USP_SALESORDER_CALCULATETAXES @ORDERID, @CHANGEAGENTID;
                    exec dbo.USP_RESERVATIONRATESCALE_UPDATETAXES @ORDERID, @CHANGEAGENTID, @CURRENTDATE;    
                end
                else
                begin
                    exec dbo.USP_SALESORDER_CALCULATEFEES @ORDERID, @CHANGEAGENTID;

                    exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ORDERID, @CHANGEAGENTID;
                    exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ORDERID, @CHANGEAGENTID;

                    -- Generate taxes last

                    exec dbo.USP_SALESORDER_CALCULATETAXES @ORDERID, @CHANGEAGENTID;                
                end

            end try

            begin catch
                exec dbo.USP_RAISE_ERROR
                return 1
            end catch

            return 0;
        end