USP_DATAFORMTEMPLATE_EDIT_RESERVATION_MOVE

The save procedure used by the edit dataform template "Reservation Move Edit Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NEWVISITDATE date IN New visit date
@IGNOREITINERARYRESOURCECONFLICTS bit IN Ignore itinerary resource conflicts
@EXCEEDCAPACITY bit IN Exceed capacity available

Definition

Copy

                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_RESERVATION_MOVE
                (
                    @ID uniqueidentifier,
                    @CHANGEAGENTID uniqueidentifier = null,
                    @NEWVISITDATE date,
                    @IGNOREITINERARYRESOURCECONFLICTS bit,
                    @EXCEEDCAPACITY bit
                )
                as

                    set nocount on;

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

                    declare @CURRENTDATE datetime
                    set @CURRENTDATE = getdate()

                    begin try

                        declare @STATUSCODE tinyint;

                        select @STATUSCODE = SALESORDER.STATUSCODE
                        from dbo.SALESORDER
                        where ID = @ID

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

                        declare @DEPOSITREQUIRED bit
                        declare @SECURITYDEPOSITREQUIRED bit
                        declare @CONTRACTREQUIRED bit
                        declare @FINALCOUNTREQUIRED bit

                        declare @DEPOSITDUEDATE date
            declare @SECURITYDEPOSITDUEDATE date
                        declare @FINALDUEDATE date
                        declare @CONTRACTDUEDATE date
                        declare @FINALCOUNTDUEDATE date
                        declare @ARRIVALDATE date

                        select
                            @DEPOSITREQUIRED = DEPOSITREQUIRED,
              @SECURITYDEPOSITREQUIRED = SECURITYDEPOSITREQUIRED,
                            @CONTRACTREQUIRED = CONTRACTREQUIRED,
                            @FINALCOUNTREQUIRED = FINALCOUNTREQUIRED,

                            @DEPOSITDUEDATE = DEPOSITDUEDATE,
              @SECURITYDEPOSITDUEDATE = SECURITYDEPOSITDUEDATE,
                            @FINALDUEDATE = FINALDUEDATE,
                            @CONTRACTDUEDATE = CONTRACTDUEDATE,
                            @FINALCOUNTDUEDATE = FINALCOUNTDUEDATE,
                            @ARRIVALDATE = ARRIVALDATE
                        from dbo.RESERVATION
                        where ID = @ID

                        declare @CURRENTDATEEARLIEST date = @CURRENTDATE;

                        if @NEWVISITDATE < @CURRENTDATEEARLIEST
                            raiserror('BBERR_MOVETOLATER', 13, 1);    

                        if @NEWVISITDATE = @ARRIVALDATE
                            raiserror('BBERR_SAMEDATE',13,1);

                        if @DEPOSITREQUIRED = 1
                        begin
                            declare @DEPOSITDUEDATEDIFFERENCE smallint

                            set @DEPOSITDUEDATEDIFFERENCE = datediff(day, @ARRIVALDATE, @DEPOSITDUEDATE)

                            set @DEPOSITDUEDATE = dateadd(day, @DEPOSITDUEDATEDIFFERENCE, @NEWVISITDATE)

                            if @DEPOSITDUEDATE < @CURRENTDATEEARLIEST
                                set @DEPOSITDUEDATE = @CURRENTDATEEARLIEST
                        end

                        if @SECURITYDEPOSITREQUIRED = 1
                        begin
                            declare @SECURITYDEPOSITDUEDATEDIFFERENCE smallint

                            set @SECURITYDEPOSITDUEDATEDIFFERENCE = datediff(day, @ARRIVALDATE, @SECURITYDEPOSITDUEDATE)

                            set @SECURITYDEPOSITDUEDATE = dateadd(day, @SECURITYDEPOSITDUEDATEDIFFERENCE, @NEWVISITDATE)

                            if @SECURITYDEPOSITDUEDATE < @CURRENTDATEEARLIEST
                                set @SECURITYDEPOSITDUEDATE = @CURRENTDATEEARLIEST
                        end

            if @CONTRACTREQUIRED = 1
                        begin
                            declare @CONTRACTDUEDATEDIFFERENCE smallint

                            set @CONTRACTDUEDATEDIFFERENCE = datediff(day, @ARRIVALDATE, @CONTRACTDUEDATE)

                            set @CONTRACTDUEDATE = dateadd(day, @CONTRACTDUEDATEDIFFERENCE, @NEWVISITDATE)

                            if @CONTRACTDUEDATE < @CURRENTDATEEARLIEST
                                set @CONTRACTDUEDATE = @CURRENTDATEEARLIEST
                        end

                        if @FINALCOUNTREQUIRED = 1
                        begin
                            declare @FINALCOUNTDUEDATEDIFFERENCE smallint

                            set @FINALCOUNTDUEDATEDIFFERENCE = datediff(day, @ARRIVALDATE, @FINALCOUNTDUEDATE)

                            set @FINALCOUNTDUEDATE = dateadd(day, @FINALCOUNTDUEDATEDIFFERENCE, @NEWVISITDATE)

                            if @FINALCOUNTDUEDATE < @CURRENTDATEEARLIEST
                                set @FINALCOUNTDUEDATE = @CURRENTDATEEARLIEST
                        end

                        declare @FINALDUEDATEDIFFERENCE smallint

                        set @FINALDUEDATEDIFFERENCE = datediff(day, @ARRIVALDATE, @FINALDUEDATE)

                        set @FINALDUEDATE = dateadd(day, @FINALDUEDATEDIFFERENCE, @NEWVISITDATE)

                        if @FINALDUEDATE < @CURRENTDATEEARLIEST
                            set @FINALDUEDATE = @CURRENTDATEEARLIEST

                        update dbo.RESERVATION set
                            ARRIVALDATE = @NEWVISITDATE,
                            DEPOSITDUEDATE = @DEPOSITDUEDATE,
              SECURITYDEPOSITDUEDATE = @SECURITYDEPOSITDUEDATE,
                            CONTRACTDUEDATE = @CONTRACTDUEDATE,
                            FINALCOUNTDUEDATE = @FINALCOUNTDUEDATE,
                            FINALDUEDATE = @FINALDUEDATE,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where
                            ID = @ID

                        -- Validate that the attendee count is not greater than the capacity available
                        if (select top 1 coalesce(MAXIMUMCAPACITY,0) from dbo.GROUPSALESDEFAULT) > 0 and @EXCEEDCAPACITY = 0
                        begin            
                            declare @NUMBEROFDAYS int;
                            declare @CAPACITYNEEDED int;
                            declare @I int = 0;

                            select @NUMBEROFDAYS = datediff(day, STARTDATETIME, ENDDATETIME) + 1
                            from dbo.RESERVATION
                            where RESERVATION.ID = @ID;

                            set @CAPACITYNEEDED = dbo.UFN_RESERVATION_TOTALVISITORCOUNT(@ID);

                            while @I < @NUMBEROFDAYS
                            begin
                                if @CAPACITYNEEDED > dbo.UFN_GROUPSALESCAPACITY_CAPACITYREMAININGWITHOUTRESERVATION(dateadd(day, @I, @NEWVISITDATE), @ID)
                                    raiserror('ERR_EXCEEDSCAPACITY', 13, 1);

                                set @I = @I + 1;
                            end
                        end 

                        exec dbo.USP_RESERVATION_RECREATEITINERARIES @ID, @ARRIVALDATE, @NEWVISITDATE, @IGNOREITINERARYRESOURCECONFLICTS, @CHANGEAGENTID, @CURRENTDATE;

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

                return 0;