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