USP_ITINERARYITEMCUSTOMITEM_EDIT
Allows the user to edit an existing custom item on an itinerary.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@ITINERARYID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@NAME | nvarchar(100) | IN | |
@STARTDATE | date | IN | |
@ENDDATE | date | IN | |
@STARTTIME | UDT_HOURMINUTE | IN | |
@ENDTIME | UDT_HOURMINUTE | IN | |
@NOTES | nvarchar(500) | IN | |
@LOCATIONID | uniqueidentifier | IN | |
@MARKLOCATIONBUSY | bit | IN | |
@RESOURCES | xml | IN | |
@IGNORECONFLICTS | bit | IN | |
@STAFFRESOURCES | xml | IN | |
@LOCATIONPRICE | money | IN |
Definition
Copy
CREATE procedure dbo.USP_ITINERARYITEMCUSTOMITEM_EDIT
(
@ID uniqueidentifier,
@ITINERARYID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@NAME nvarchar(100),
@STARTDATE date,
@ENDDATE date,
@STARTTIME dbo.UDT_HOURMINUTE,
@ENDTIME dbo.UDT_HOURMINUTE,
@NOTES nvarchar(500),
@LOCATIONID uniqueidentifier,
@MARKLOCATIONBUSY bit,
@RESOURCES xml,
@IGNORECONFLICTS bit,
@STAFFRESOURCES xml = null,
@LOCATIONPRICE money = 0.0
)
as
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()
begin try
declare @ARRIVALDATE datetime;
declare @ARRIVALTIME UDT_HOURMINUTE;
declare @STARTDATETIME datetime;
declare @ENDDATETIME datetime;
declare @MAXDATE datetime;
declare @ISFLATRATE bit = 0;
declare @STATUSCODE tinyint;
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(@ENDDATE, @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 @LOCATIONID is not null
begin
declare @LOCATIONS xml = '<LOCATIONS><ITEM><EVENTLOCATIONID>' + convert(nvarchar(36), @LOCATIONID) + '</EVENTLOCATIONID></ITEM></LOCATIONS>'
if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
(
@ITINERARYITEMSTART, @ITINERARYITEMEND,
@LOCATIONS, null, 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_LOCATIONCONFLICTSEXIST', 13, 1);
return 1;
end
end
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
select
@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 RESERVATION.ID = ITINERARY.RESERVATIONID
inner join dbo.SALESORDER on SALESORDER.ID = RESERVATION.ID
where ITINERARY.ID = @ITINERARYID
if @STATUSCODE in (1, 5)
raiserror('BBERR_INVALIDSTATUS', 13, 1);
set @STARTDATETIME = dbo.UFN_DATE_ADDHOURMINUTE(@STARTDATE, @STARTTIME);
set @ENDDATETIME = dbo.UFN_DATE_ADDHOURMINUTE(@ENDDATE, @ENDTIME);
if dbo.UFN_DATE_ADDHOURMINUTE(@ARRIVALDATE, @ARRIVALTIME) > @STARTDATETIME
raiserror('BBERR_INVALIDDATE', 13, 1)
set @MAXDATE = dateadd(d, 4, dbo.UFN_DATE_GETLATESTTIME(@ARRIVALDATE))
if @STARTDATETIME > @MAXDATE or @ENDDATETIME > @MAXDATE
raiserror('BBERR_OUTSIDEDATERANGE', 13, 1)
declare @EDATE datetime;
declare @SDATE datetime;
set @EDATE = dbo.UFN_DATE_ADDHOURMINUTE(@ENDDATE, @ENDTIME);
set @SDATE = dbo.UFN_DATE_ADDHOURMINUTE(@STARTDATE, @STARTTIME);
if @ENDTIME = '0000'
begin
set @ENDTIME = '2359'
end
update dbo.ITINERARYITEM set
NAME = @NAME,
STARTTIME = @STARTTIME,
ENDTIME = @ENDTIME,
NOTES = @NOTES,
BLOCKEVENT = @MARKLOCATIONBUSY,
EVENTLOCATIONID = @LOCATIONID,
STARTDATE = @STARTDATE,
ENDDATE = @ENDDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
declare @ORDERID uniqueidentifier
select @ORDERID = RESERVATION.ID
from dbo.RESERVATION
inner join dbo.ITINERARY on ITINERARY.RESERVATIONID = RESERVATION.ID
inner join dbo.ITINERARYITEM on ITINERARY.ID = ITINERARYITEM.ITINERARYID
where ITINERARYITEM.ID = @ID
declare @SALESORDERITEMID uniqueidentifier
select
@SALESORDERITEMID = SALESORDERITEMID
from dbo.ITINERARYITEMLOCATION
where
ITINERARYITEMLOCATION.ID = @ID
if @LOCATIONID is not null
begin
declare @EVENTLOCATIONNAME nvarchar(100)
select
@EVENTLOCATIONNAME = NAME
from dbo.EVENTLOCATION
where ID = @LOCATIONID
if @SALESORDERITEMID is not null
begin
update dbo.SALESORDERITEM set
FLATRATEPRICE = @LOCATIONPRICE,
DESCRIPTION = @NAME + ' - ' + coalesce(@EVENTLOCATIONNAME,''),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.EVENTLOCATION
where
EVENTLOCATION.ID = @LOCATIONID and
SALESORDERITEM.ID = @SALESORDERITEMID and
(
FLATRATEPRICE <> @LOCATIONPRICE or
DESCRIPTION <> @NAME + ' - ' + coalesce(@EVENTLOCATIONNAME,'')
)
update dbo.SALESORDERITEMFACILITY set
EVENTLOCATIONID = @LOCATIONID,
EVENTLOCATIONNAME = @EVENTLOCATIONNAME,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
SALESORDERITEMFACILITY.ID = @SALESORDERITEMID and
EVENTLOCATIONID <> @LOCATIONID
end
else
begin
set @SALESORDERITEMID = newid()
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
DESCRIPTION,
QUANTITY,
FLATRATEPRICE,
PRICINGSTRUCTURECODE,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values
(
@SALESORDERITEMID,
@ORDERID,
7,
@NAME + ' - ' + coalesce(@EVENTLOCATIONNAME, ''),
1,
@LOCATIONPRICE,
2,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
)
insert into dbo.SALESORDERITEMFACILITY
(
ID,
EVENTLOCATIONID,
EVENTLOCATIONNAME,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values
(
@SALESORDERITEMID,
@LOCATIONID,
@EVENTLOCATIONNAME,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
)
insert into dbo.ITINERARYITEMLOCATION
(
ID,
SALESORDERITEMID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values
(
@ID,
@SALESORDERITEMID,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
)
end
end
else if @SALESORDERITEMID is not null
begin
exec dbo.USP_SALESORDERITEM_DELETE @SALESORDERITEMID, @CHANGEAGENTID;
end
-- 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_UPDATEFROMXML @ID, @RESOURCES, @CHANGEAGENTID, @CURRENTDATE
exec dbo.USP_ITINERARYITEM_GETSTAFFRESOURCES_UPDATEFROMXML @ID, @STAFFRESOURCES, @CHANGEAGENTID, @CURRENTDATE
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
exec dbo.USP_RESERVATION_DISTRIBUTEAPPLICATIONS @ORDERID, @CHANGEAGENTID, @CURRENTDATE;
-- Generate taxes last
exec dbo.USP_SALESORDER_CALCULATETAXES @ORDERID, @CHANGEAGENTID;
if @ISFLATRATE = 1
exec dbo.USP_RESERVATIONRATESCALE_UPDATETAXES @ORDERID, @CHANGEAGENTID, @CURRENTDATE;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0