USP_ITINERARYITEMDAILYADMISSION_ADD
Adds a daily admission program to an itinerary.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@ITINERARYID | uniqueidentifier | IN | |
@PROGRAMID | uniqueidentifier | IN | |
@STARTDATE | date | IN | |
@STARTTIME | UDT_HOURMINUTE | IN | |
@ENDTIME | UDT_HOURMINUTE | IN | |
@NOTES | nvarchar(500) | IN | |
@RESOURCES | xml | IN | |
@IGNORECONFLICTS | bit | IN | |
@STAFFRESOURCES | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_ITINERARYITEMDAILYADMISSION_ADD
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@ITINERARYID uniqueidentifier,
@PROGRAMID uniqueidentifier = null,
@STARTDATE date = null,
@STARTTIME dbo.UDT_HOURMINUTE = null,
@ENDTIME dbo.UDT_HOURMINUTE = null,
@NOTES nvarchar(500) = '',
@RESOURCES xml = null,
@IGNORECONFLICTS bit = 0,
@STAFFRESOURCES xml = null
)
as
begin
set nocount on;
if @ID is null
set @ID = newid()
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @CURRENTDATE is null
set @CURRENTDATE = getdate()
if @IGNORECONFLICTS = 0
begin
declare @OLDITINERARYSTART datetime;
declare @OLDITINERARYEND datetime;
declare @ITINERARYSTART datetime;
declare @ITINERARYEND datetime;
declare @ITINERARYITEMSTART datetime;
declare @ITINERARYITEMEND datetime;
declare @CHECKITINERARYCONFLICTS bit = 0;
set @ITINERARYITEMSTART = dbo.UFN_DATE_ADDHOURMINUTE(@STARTDATE, @STARTTIME);
set @ITINERARYITEMEND = dbo.UFN_DATE_ADDHOURMINUTE(@STARTDATE, @ENDTIME);
select
@OLDITINERARYSTART = ITINERARY.STARTDATETIME,
@OLDITINERARYEND = ITINERARY.ENDDATETIME
from dbo.ITINERARY
where ID = @ITINERARYID
select
@ITINERARYSTART = min(STARTDATETIME),
@ITINERARYEND = max(ENDDATETIME)
from
(
select
@ITINERARYITEMSTART as STARTDATETIME,
@ITINERARYITEMEND as ENDDATETIME
union all
select
ITINERARYITEM.STARTDATETIME as STARTDATETIME,
ITINERARYITEM.ENDDATETIME as ENDDATETIME
from dbo.ITINERARYITEM
where
ITINERARYID = @ITINERARYID and
ID <> @ID
) T
if @OLDITINERARYSTART is null or @OLDITINERARYSTART <> @ITINERARYSTART or
@OLDITINERARYEND is null or @OLDITINERARYEND <> @ITINERARYEND
set @CHECKITINERARYCONFLICTS = 1
if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
(
@ITINERARYITEMSTART, @ITINERARYITEMEND,
null, @RESOURCES, null,
null, @ITINERARYID, @ID,
0, -- Ignore Super Record
0, -- Ignore Record
1, -- Ignore Sub Record
0 -- Ignore All Sub Records of Record
) = 1
begin
raiserror('BBERR_RESOURCECONFLICTSEXIST', 13, 1);
return 1;
end
if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
(
@ITINERARYITEMSTART, @ITINERARYITEMEND,
null, null, @STAFFRESOURCES,
null, @ITINERARYID, @ID,
0, -- Ignore Super Record
0, -- Ignore Record
1, -- Ignore Sub Record
0 -- Ignore All Sub Records of Record
) = 1
begin
raiserror('BBERR_STAFFRESOURCECONFLICTSEXIST', 13, 1);
return 1;
end
-- If itinerary times changing, need to check on conflicts
if @CHECKITINERARYCONFLICTS = 1
begin
declare @ITINERARYRESOURCES xml
set @ITINERARYRESOURCES = dbo.UFN_ITINERARYRESOURCE_GETRESOURCES_TOITEMLISTXML(@ITINERARYID);
declare @ITINERARYSTAFFRESOURCES xml
set @ITINERARYSTAFFRESOURCES = dbo.UFN_ITINERARY_GETSTAFFRESOURCES_TOITEMLISTXML(@ITINERARYID);
if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
(
@ITINERARYSTART, @ITINERARYEND,
null, @ITINERARYRESOURCES, @ITINERARYSTAFFRESOURCES,
null, @ITINERARYID, @ID,
0, -- Ignore Super Record
1, -- Ignore Record
1, -- Ignore Sub Record
0 -- Ignore All Sub Records of Record
) = 1
begin
raiserror('BBERR_ITINERARYRESOURCECONFLICTSEXIST', 13, 1);
return 1;
end
end
end
begin try
declare @ORDERID uniqueidentifier;
declare @ARRIVALDATE datetime;
declare @ARRIVALTIME dbo.UDT_HOURMINUTE;
declare @DAILYADMISSIONDATE datetime;
declare @ISFLATRATE bit = 0
declare @STATUSCODE tinyint;
select @ORDERID = RESERVATION.ID,
@ARRIVALDATE = ARRIVALDATE,
@ARRIVALTIME = ARRIVALTIME,
@ISFLATRATE = case when PRICINGCODE = 1 then 1 else 0 end,
@STATUSCODE = SALESORDER.STATUSCODE
from dbo.RESERVATION
inner join dbo.ITINERARY on ITINERARY.RESERVATIONID = RESERVATION.ID
inner join dbo.SALESORDER on RESERVATION.ID = SALESORDER.ID
where ITINERARY.ID = @ITINERARYID
if @STATUSCODE in (1, 5)
raiserror('BBERR_INVALIDSTATUS', 13, 1);
set @ARRIVALDATE = dbo.UFN_DATE_ADDHOURMINUTE(@ARRIVALDATE, @ARRIVALTIME);
declare @DESCRIPTION nvarchar(100);
select @DESCRIPTION = PROGRAM.NAME from dbo.PROGRAM where PROGRAM.ID = @PROGRAMID;
if datediff(day, @ARRIVALDATE, @STARTDATE) > 4
raiserror('BBERR_OUTSIDEDATERANGE', 13, 1)
if not exists
(
select 1 from dbo.ITINERARYITEM
where
ITINERARYITEM.ITINERARYID = @ITINERARYID and
ITINERARYITEM.ITEMTYPECODE = 1 and
PROGRAMID = @PROGRAMID and
STARTDATE = @STARTDATE
)
begin
declare @ORDERITEMS table
(
ID uniqueidentifier,
QUANTITY decimal(20,4),
PRICETYPE nvarchar(100),
PRICETYPECODEID uniqueidentifier,
PRICE money,
PRICINGSTRUCTURECODE tinyint
);
insert into @ORDERITEMS
select
newid(),
IT.QUANTITY,
dbo.UFN_PRICETYPECODE_GETDESCRIPTION(IT.PRICETYPECODEID) as PRICETYPE,
IT.PRICETYPECODEID,
PP.FACEPRICE,
0
from dbo.ITINERARYATTENDEE IT
inner join dbo.PROGRAMPRICE PP on PP.PRICETYPECODEID = IT.PRICETYPECODEID
inner join dbo.PRICETYPECODE PTC on PTC.ID = PP.PRICETYPECODEID
where PP.PROGRAMID = @PROGRAMID and
IT.ITINERARYID = @ITINERARYID and
not exists (select 1
from dbo.SALESMETHODEXCLUDEDPRICETYPE
inner join dbo.SALESMETHOD on SALESMETHOD.ID = SALESMETHODEXCLUDEDPRICETYPE.SALESMETHODID
where SALESMETHOD.TYPECODE = 3 and
SALESMETHODEXCLUDEDPRICETYPE.PRICETYPECODEID = PP.PRICETYPECODEID)
if exists
(
select ITINERARYATTENDEE.PRICETYPECODEID
from dbo.ITINERARYATTENDEE
where ITINERARYATTENDEE.ITINERARYID = @ITINERARYID and
PRICETYPECODEID not in (select PRICETYPECODEID from @ORDERITEMS)
)
begin
raiserror('BBERR_INVALIDPRICETYPE', 13, 1);
end
update dbo.SALESORDERITEM set
SALESORDERITEM.QUANTITY = SALESORDERITEM.QUANTITY + ITEMS.QUANTITY,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from @ORDERITEMS items
where
SALESORDERID = @ORDERID and
SALESORDERITEM.ID in
(
select ID from dbo.SALESORDERITEMTICKET
where PROGRAMID = @PROGRAMID and
SALESORDERITEMTICKET.PRICETYPECODEID = ITEMS.PRICETYPECODEID
)
-- Set items to be flat rate if the reservation is flat rate and the program is included
if @ISFLATRATE = 1
begin
update @ORDERITEMS set PRICINGSTRUCTURECODE = 1
where dbo.UFN_RESERVATIONRATESCALE_ISPROGRAMINCLUDED(@ORDERID,@PROGRAMID) = 1
end
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
DESCRIPTION,
QUANTITY,
PRICE,
PRICINGSTRUCTURECODE,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
ITEMS.ID,
@ORDERID,
0,
@DESCRIPTION + ' - ' + ITEMS.PRICETYPE,
ITEMS.QUANTITY,
ITEMS.PRICE,
ITEMS.PRICINGSTRUCTURECODE,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @ORDERITEMS ITEMS
where
not exists
(
select 1 from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMTICKET on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
where
SALESORDERID = @ORDERID and
PROGRAMID = @PROGRAMID and
SALESORDERITEMTICKET.PRICETYPECODEID = ITEMS.PRICETYPECODEID
);
insert into dbo.SALESORDERITEMTICKET
(
ID,
PROGRAMID,
PROGRAMNAME,
PROGRAMCATEGORYNAME,
PRICETYPECODEID,
PRICE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
ITEMS.ID,
@PROGRAMID,
coalesce((select [NAME] from dbo.[PROGRAM] where [ID] = @PROGRAMID),''),
coalesce((
select [PROGRAMCATEGORYCODE].[DESCRIPTION]
from dbo.[PROGRAM]
inner join dbo.[PROGRAMCATEGORYCODE]
on [PROGRAM].[PROGRAMCATEGORYCODEID] = [PROGRAMCATEGORYCODE].[ID]
where [PROGRAM].[ID] = @PROGRAMID
),''),
ITEMS.PRICETYPECODEID,
ITEMS.PRICE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @ORDERITEMS ITEMS
where
ITEMS.ID in
( select ID from dbo.SALESORDERITEM where SALESORDERID = @ORDERID )
end
if @ENDTIME = '0000'
begin
set @ENDTIME = '2359'
end
insert into dbo.ITINERARYITEM
(
ID,
STARTTIME,
ENDTIME,
NOTES,
PROGRAMID,
ITINERARYID,
NAME,
ITEMTYPECODE,
STARTDATE,
ENDDATE,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values
(
@ID,
@STARTTIME,
@ENDTIME,
@NOTES,
@PROGRAMID,
@ITINERARYID,
@DESCRIPTION,
1,
@STARTDATE,
@STARTDATE,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
)
-- Need to create the job, the job occurrence will be created using the trigger
exec dbo.USP_RESOURCE_PROCESS @RESOURCES output, @CHANGEAGENTID, 0;
exec dbo.USP_STAFFRESOURCE_PROCESS @STAFFRESOURCES output, @CHANGEAGENTID, 0, 0, 0;
exec dbo.USP_ITINERARYITEMRESOURCE_GETRESOURCES_ADDFROMXML @ID, @RESOURCES, @CHANGEAGENTID;
exec dbo.USP_ITINERARYITEM_GETSTAFFRESOURCES_ADDFROMXML @ID, @STAFFRESOURCES, @CHANGEAGENTID;
exec dbo.USP_ITINERARY_CHECKPERTICKETRESOURCES @ITINERARYID;
exec dbo.USP_ITINERARY_RESOURCES_SALESORDERSYNC @ITINERARYID, @ORDERID, @CHANGEAGENTID
exec dbo.USP_ITINERARY_STAFFRESOURCES_SALESORDERSYNC @ITINERARYID, @ORDERID, @CHANGEAGENTID
exec dbo.USP_ITINERARYITEM_RESOURCES_SALESORDERSYNC @ID, @ORDERID, @CHANGEAGENTID
exec dbo.USP_ITINERARYITEM_STAFFRESOURCES_SALESORDERSYNC @ID, @ORDERID, @CHANGEAGENTID
if @ISFLATRATE = 1
begin
exec dbo.USP_RESERVATION_UPDATEFLATRATEPERTICKETPRICE @ORDERID, null, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_RESERVATION_DISTRIBUTEAPPLICATIONS @ORDERID, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_SALESORDER_CALCULATEFEES @ORDERID, @CHANGEAGENTID;
exec dbo.USP_RESERVATION_CALCULATEFLATRATEFEES @ORDERID, @CHANGEAGENTID;
--exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ORDERID, @CHANGEAGENTID;
--exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_CALCULATETAXES @ORDERID, @CHANGEAGENTID;
exec dbo.USP_RESERVATIONRATESCALE_UPDATETAXES @ORDERID, @CHANGEAGENTID, @CURRENTDATE;
end
else
begin
exec dbo.USP_SALESORDER_CALCULATEFEES @ORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @ORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @ORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_CALCULATETAXES @ORDERID, @CHANGEAGENTID;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;
end