USP_RESERVATION_DISTRIBUTEFEEAPPLICATIONS

Distributes dollar amounts to sales order items for all of the fee applications on a Reservation.

Parameters

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

Definition

Copy


        CREATE procedure dbo.USP_RESERVATION_DISTRIBUTEFEEAPPLICATIONS
        (
            @ID uniqueidentifier,
            @CHANGEAGENTID uniqueidentifier = null,
            @CURRENTDATE datetime = null
        )
        as
        begin

            set nocount on;

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

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

            exec dbo.USP_RESERVATIONRATESCALE_UPDATEAUTOMATICFEEAPPLICATIONS @ID, @CHANGEAGENTID, @CURRENTDATE;

            declare @FEES table
            (
                FEEID uniqueidentifier,
                FEECOUNT smallint,
                AMOUNT money,
                NEEDSOFFSET bit
            )


            insert into @FEES (FEEID, FEECOUNT)
            select
                FEEID,
                count(FEEID)
            from dbo.SALESORDERITEM
            inner join dbo.SALESORDERITEMFEE on
                SALESORDERITEMFEE.ID = SALESORDERITEM.ID
            where
                SALESORDERID = @ID
            group by FEEID

            update @FEES set
                AMOUNT = round(RRSA.[AMOUNT] / [@FEES].FEECOUNT , 2),
                NEEDSOFFSET = case
                                when round(RRSA.[AMOUNT] / [@FEES].FEECOUNT, 2) * [@FEES].FEECOUNT <> RRSA.[AMOUNT]
                                    then 1
                                else 0 end
            from dbo.RESERVATIONRATESCALEAPPLICATION RRSA
            inner join dbo.RESERVATIONRATESCALE RRS on
                RRSA.RESERVATIONRATESCALEID = RRS.ID
            where
                RRS.ID = @ID and
                [@FEES].FEEID = RRSA.FEEID

            update dbo.SALESORDERITEM set
                FLATRATEPRICE = isnull([@FEES].AMOUNT,0.0),
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
            from dbo.SALESORDERITEMFEE
            inner join @FEES on
                SALESORDERITEMFEE.FEEID = [@FEES].FEEID
            where
                SALESORDERID = @ID and
                SALESORDERITEMFEE.ID = SALESORDERITEM.ID and
                PRICINGSTRUCTURECODE = 1 and
                FLATRATEPRICE <> isnull([@FEES].AMOUNT,0.0)

            if exists (select 1 from @FEES where NEEDSOFFSET = 1)
            begin
                declare @OFFSETITEMS table
                (
                    ID uniqueidentifier,
                    FEEID uniqueidentifier,
                    OFFSET money
                )

                insert into @OFFSETITEMS (FEEID, OFFSET)
                select
                    RRSA.FEEID,
                    RRSA.[AMOUNT] - ( round(RRSA.[AMOUNT] / [@FEES].FEECOUNT , 2) * [@FEES].FEECOUNT )
                from @FEES
                inner join dbo.RESERVATIONRATESCALEAPPLICATION RRSA on
                    RRSA.FEEID = [@FEES].FEEID
                inner join dbo.RESERVATIONRATESCALE RRS on
                    RRSA.RESERVATIONRATESCALEID = RRS.ID
                where
                    RRS.ID = @ID and
                    NEEDSOFFSET = 1

                -- Grab the any sales order item that contains the program to be the offset    

                update @OFFSETITEMS set
                    ID = (
                            select top(1) SALESORDERITEM.ID
                            from dbo.SALESORDERITEM
                            inner join dbo.SALESORDERITEMFEE on
                                SALESORDERITEM.ID = SALESORDERITEMFEE.ID
                            where
                                SALESORDERID = @ID and
                                SALESORDERITEMFEE.FEEID = [@OFFSETITEMS].FEEID
                        )

                update dbo.SALESORDERITEM set
                    FLATRATEPRICE = FLATRATEPRICE + isnull(OFFSET,0.0),
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                from @OFFSETITEMS
                where 
                    SALESORDERITEM.ID = [@OFFSETITEMS].ID

            end

        end