USP_RESERVATIONRATESCALE_CREATEAPPLICATIONS

Creates applications for a rate scale on a reservation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@UPDATERATESCALE bit IN

Definition

Copy


        CREATE procedure dbo.USP_RESERVATIONRATESCALE_CREATEAPPLICATIONS
        (
            @ID uniqueidentifier,
            @CHANGEAGENTID uniqueidentifier = null,
            @CURRENTDATE datetime = null,
            @UPDATERATESCALE bit = 1
        )
        as
        begin

            set nocount on;

            if exists(select top(1) 1 from dbo.RESERVATIONRATESCALE where ID = @ID)
            begin

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

                if @CURRENTDATE is null
                    set @CURRENTDATE = getdate()

                declare @TOTALAMOUNT money
                declare @RATESCALEID uniqueidentifier

                if @UPDATERATESCALE = 0
                begin
                    select
                        @TOTALAMOUNT = RESERVATIONRATESCALEPRICE.AMOUNT,
                        @RATESCALEID = RESERVATIONRATESCALE.RATESCALEID
                    from dbo.RESERVATIONRATESCALEPRICE
                    inner join dbo.RESERVATIONRATESCALE on
                        RESERVATIONRATESCALE.ID = RESERVATIONRATESCALEPRICE.RESERVATIONRATESCALEID
                    where
                        RESERVATIONRATESCALE.ID = @ID
                        and RESERVATIONRATESCALEPRICE.INUSE = 1
                end
                else
                begin
                    declare @ITINERARYATTENDEECOUNT smallint
                    select 
                        @ITINERARYATTENDEECOUNT = isnull(sum(QUANTITY),0
                    from dbo.ITINERARYATTENDEE
                    inner join dbo.ITINERARY on
                        ITINERARY.ID = ITINERARYATTENDEE.ITINERARYID
                    inner join dbo.RESERVATION on
                        RESERVATION.ID = ITINERARY.RESERVATIONID
                    where
                        RESERVATION.ID = @ID

                    select
                        @TOTALAMOUNT = RESERVATIONRATESCALEPRICE.AMOUNT,
                        @RATESCALEID = RESERVATIONRATESCALE.RATESCALEID
                    from dbo.RESERVATIONRATESCALEPRICE
                    inner join dbo.RESERVATIONRATESCALE on
                        RESERVATIONRATESCALE.ID = RESERVATIONRATESCALEPRICE.RESERVATIONRATESCALEID
                    where
                        RESERVATIONRATESCALE.ID = @ID and
                        @ITINERARYATTENDEECOUNT >= GROUPMINIMUM and
                        (
                            @ITINERARYATTENDEECOUNT <= GROUPMAXIMUM or
                            GROUPMAXIMUM = -1
                        )
                end


                declare @RESERVATIONAPPLICATIONS table
                (
                    ID uniqueidentifier,
                    TYPECODE tinyint,
                    ITEMPERCENT decimal(5,2),
                    AMOUNT money,
                    PROGRAMID uniqueidentifier,
                    RESOURCEID uniqueidentifier,
                    VOLUNTEERTYPEID uniqueidentifier,
                    FEEID uniqueidentifier
                )
                insert into @RESERVATIONAPPLICATIONS
                select
                    newid(),
                    TYPECODE,
                    [PERCENT],
                    0.0,
                    PROGRAMID,
                    RESOURCEID,
                    VOLUNTEERTYPEID,
                    FEEID
                from dbo.RATESCALEAPPLICATION
                where 
                    RATESCALEAPPLICATION.RATESCALEID = @RATESCALEID

                update @RESERVATIONAPPLICATIONS set
                    AMOUNT = round((ITEMPERCENT * @TOTALAMOUNT)/100,2)

                declare @TOTALAPPLICATIONSAMOUNT money
                select
                    @TOTALAPPLICATIONSAMOUNT = sum(AMOUNT)
                from @RESERVATIONAPPLICATIONS

                if @TOTALAPPLICATIONSAMOUNT <> @TOTALAMOUNT -- Sometimes percentages will not match up to exact dollar amounts

                begin
                    declare @AMOUNTDIFFERENCE money
                    set @AMOUNTDIFFERENCE = @TOTALAMOUNT - @TOTALAPPLICATIONSAMOUNT

                    declare @TOPAPPLICATIONID uniqueidentifier
                    select top(1) @TOPAPPLICATIONID = ID from @RESERVATIONAPPLICATIONS 
                    where AMOUNT <> 0.0 and AMOUNT + @AMOUNTDIFFERENCE >= 0.0

                    update @RESERVATIONAPPLICATIONS set 
                        AMOUNT = AMOUNT + @AMOUNTDIFFERENCE
                    where ID = @TOPAPPLICATIONID
                end

                insert into dbo.RESERVATIONRATESCALEAPPLICATION
                ( 
                    ID, 
                    RESERVATIONRATESCALEID,
                    TYPECODE, 
                    AMOUNT, 
                    PROGRAMID, 
                    FEEID, 
                    RESOURCEID,
                    VOLUNTEERTYPEID,
                    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                )
                select
                    ID,
                    @ID,
                    TYPECODE,
                    AMOUNT,
                    PROGRAMID,
                    FEEID,
                    RESOURCEID,
                    VOLUNTEERTYPEID,
                    @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                from @RESERVATIONAPPLICATIONS    

            end
        end