USP_RESERVATION_UPDATEFLATRATE
Updates a reservation to add or remove flat rate based on the change.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@UPDATERATESCALE | bit | IN | |
@CALCULATEFEESDISCOUNTSANDTAXES | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_RESERVATION_UPDATEFLATRATE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@UPDATERATESCALE bit = 1,
@CALCULATEFEESDISCOUNTSANDTAXES bit = 1
)
as
begin
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate()
declare @ISFLATRATE bit = 0
select
@ISFLATRATE = PRICINGCODE
from dbo.RESERVATION
where ID = @ID
if @ISFLATRATE = 1
begin
declare @CURRENTRATESCALEPRICEID uniqueidentifier
-- Included to allow user to ignore rate scale change on check in.
if @UPDATERATESCALE = 0
select @CURRENTRATESCALEPRICEID = RESERVATIONRATESCALEPRICE.ID
from dbo.RESERVATIONRATESCALEPRICE
inner join dbo.RESERVATIONRATESCALE on
RESERVATIONRATESCALE.ID = RESERVATIONRATESCALEPRICE.RESERVATIONRATESCALEID
where
RESERVATIONRATESCALE.ID = @ID
and INUSE =1
else
begin
set @CURRENTRATESCALEPRICEID = dbo.UFN_RESERVATION_GETRATESCALEPRICE(@ID)
end
if not exists(select top(1) 1 from dbo.RESERVATIONRATESCALEAPPLICATION where RESERVATIONRATESCALEID = @ID)
begin
exec dbo.USP_RESERVATIONRATESCALE_CREATEAPPLICATIONS @ID, @CHANGEAGENTID, @CURRENTDATE, @UPDATERATESCALE;
end
else
begin
declare @INUSEPRICEID uniqueidentifier = null
declare @INUSEPRICE money = 0.0
select
@INUSEPRICEID = RRSP.ID,
@INUSEPRICE = AMOUNT
from dbo.RESERVATIONRATESCALEPRICE RRSP
inner join dbo.RESERVATIONRATESCALE on
RESERVATIONRATESCALE.ID = RRSP.RESERVATIONRATESCALEID
where
INUSE = 1 and
RESERVATIONRATESCALE.ID = @ID
if @INUSEPRICEID is null or (@INUSEPRICE = 0.0 and @INUSEPRICEID <> @CURRENTRATESCALEPRICEID)
begin
declare @e int;
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID
delete from dbo.RESERVATIONRATESCALEAPPLICATION
where RESERVATIONRATESCALEID = @ID
select @e=@@error;
if @e<>0 return -456; --always return non-zero sp result if an error occurs
exec dbo.USP_RESERVATIONRATESCALE_CREATEAPPLICATIONS @ID, @CHANGEAGENTID, @CURRENTDATE, @UPDATERATESCALE;
end
else if @INUSEPRICEID <> @CURRENTRATESCALEPRICEID
begin
-- Only want to update rate scale applications if the total price is changing
-- Because the user can customize prices
exec dbo.USP_RESERVATIONRATESCALE_RECREATEAPPLICATIONS @ID, @CHANGEAGENTID, @CURRENTDATE;
end
end
-- In use is primarily used to see if there is a difference between
-- rate scale prices for purposes of switching what is used based on group size.
update dbo.RESERVATIONRATESCALEPRICE set
INUSE = case when RESERVATIONRATESCALEPRICE.ID = @CURRENTRATESCALEPRICEID then 1
else 0 end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.RESERVATIONRATESCALE
where
RESERVATIONRATESCALE.ID = RESERVATIONRATESCALEPRICE.RESERVATIONRATESCALEID and
RESERVATIONRATESCALE.ID = @ID
declare @INCLUDEALLPROGRAMS bit
declare @INCLUDEALLFEES bit
select
@INCLUDEALLPROGRAMS = INCLUDEALLPROGRAMS,
@INCLUDEALLFEES = INCLUDEALLFEES
from dbo.RESERVATIONRATESCALE
where ID = @ID
-- Reset all sales order items to use normal pricing structure
-- If they are not included in programs
if @INCLUDEALLPROGRAMS = 0
begin
update dbo.SALESORDERITEM set
PRICINGSTRUCTURECODE = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.SALESORDERITEMTICKET
where
SALESORDERITEMTICKET.ID = SALESORDERITEM.ID and
SALESORDERITEM.SALESORDERID = @ID and
SALESORDERITEM.TYPECODE = 0 and
PRICINGSTRUCTURECODE = 1 and
dbo.UFN_RESERVATIONRATESCALE_ISEVENTINCLUDED(@ID,SALESORDERITEMTICKET.EVENTID) = 0 and
dbo.UFN_RESERVATIONRATESCALE_ISPROGRAMINCLUDED(@ID,SALESORDERITEMTICKET.PROGRAMID) = 0
end
-- Update all sales order item prices included in flat rate to use a different pricing structure
update dbo.SALESORDERITEM set
PRICINGSTRUCTURECODE = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.SALESORDERITEMTICKET
where
SALESORDERITEMTICKET.ID = SALESORDERITEM.ID and
SALESORDERID = @ID and
TYPECODE = 0 and
PRICINGSTRUCTURECODE = 0 and -- Keep our date changed field in check
(
@INCLUDEALLPROGRAMS = 1 or
dbo.UFN_RESERVATIONRATESCALE_ISEVENTINCLUDED(@ID,SALESORDERITEMTICKET.EVENTID) = 1 or
dbo.UFN_RESERVATIONRATESCALE_ISPROGRAMINCLUDED(@ID,SALESORDERITEMTICKET.PROGRAMID) = 1
)
-- If this flat rate uses per-ticket pricing, we need to update that
if @UPDATERATESCALE = 1
exec dbo.USP_RESERVATION_UPDATEFLATRATEPERTICKETPRICE @ID, @CURRENTRATESCALEPRICEID, @CHANGEAGENTID, @CURRENTDATE;
end
-- Regardless of whether we are looking at flat rate, we need to sync resources!
-- update Sales order items for the resources
exec dbo.USP_ITINERARY_RESOURCES_SALESORDERSYNC null, @ID, @CHANGEAGENTID
exec dbo.USP_ITINERARY_STAFFRESOURCES_SALESORDERSYNC null, @ID, @CHANGEAGENTID
-- call the bulk versions to update all itinerary item records
exec dbo.USP_ITINERARYITEMS_RESOURCES_SALESORDERSYNC null, @ID, @CHANGEAGENTID
exec dbo.USP_ITINERARYITEMS_STAFFRESOURCES_SALESORDERSYNC null, @ID, @CHANGEAGENTID
if @ISFLATRATE = 1
begin
-- Distribute applications across sales order items that are included in the flat rate
exec dbo.USP_RESERVATION_DISTRIBUTEAPPLICATIONS @ID, @CHANGEAGENTID, @CURRENTDATE;
if @CALCULATEFEESDISCOUNTSANDTAXES = 1
-- Calculate fees because some totals for sales order items may have changed
exec dbo.USP_SALESORDER_CALCULATEFEES @ID, @CHANGEAGENTID;
-- If they are not included in fees
if @INCLUDEALLFEES = 0
begin
update dbo.SALESORDERITEM set
PRICINGSTRUCTURECODE = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.SALESORDERITEMFEE
where
SALESORDERITEMFEE.ID = SALESORDERITEM.ID and
SALESORDERITEM.SALESORDERID = @ID and
SALESORDERITEM.TYPECODE = 3 and
PRICINGSTRUCTURECODE = 1 and
dbo.UFN_RESERVATIONRATESCALE_ISFEEINCLUDED(@ID,SALESORDERITEMFEE.FEEID) = 0
end
update dbo.SALESORDERITEM set
PRICINGSTRUCTURECODE = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.SALESORDERITEMFEE
where
SALESORDERITEMFEE.ID = SALESORDERITEM.ID and
SALESORDERID = @ID and
SALESORDERITEM.TYPECODE = 3 and
PRICINGSTRUCTURECODE = 0 and -- Keep our date changed field in check
(
@INCLUDEALLFEES = 1 or
dbo.UFN_RESERVATIONRATESCALE_ISFEEINCLUDED(@ID,SALESORDERITEMFEE.FEEID) = 1
)
exec dbo.USP_RESERVATION_DISTRIBUTEFEEAPPLICATIONS @ID, @CHANGEAGENTID, @CURRENTDATE;
if @CALCULATEFEESDISCOUNTSANDTAXES = 1
begin
--exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ID, @CHANGEAGENTID;
--exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ID, @CHANGEAGENTID;
-- Calculate taxes last
exec dbo.USP_SALESORDER_CALCULATETAXES @ID, @CHANGEAGENTID;
exec dbo.USP_RESERVATIONRATESCALE_UPDATETAXES @ID, @CHANGEAGENTID, @CURRENTDATE;
end
end
else
begin
update dbo.SALESORDERITEM set
PRICINGSTRUCTURECODE = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
SALESORDERITEM.SALESORDERID = @ID and
(
SALESORDERITEM.TYPECODE = 0 or
SALESORDERITEM.TYPECODE = 3 or
SALESORDERITEM.TYPECODE = 4
) and
PRICINGSTRUCTURECODE = 1
if exists(select top 1 1 from dbo.RESERVATIONRATESCALE where ID = @ID)
begin
exec dbo.USP_RESERVATIONRATESCALE_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
end
if @CALCULATEFEESDISCOUNTSANDTAXES = 1
begin
exec dbo.USP_SALESORDER_CALCULATEFEES @ID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_CALCULATETAXES @ID, @CHANGEAGENTID;
end
end
end