USP_ITINERARY_COPYFROMEXISTING
Copies the items from an existing itinerary into the selected itinerary.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@COPYITINERARYID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@IGNORECONFLICTS | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_ITINERARY_COPYFROMEXISTING
(
@ID uniqueidentifier,
@COPYITINERARYID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@IGNORECONFLICTS bit = 0
)
as
begin
declare @COPYRESERVATIONDATE datetime;
declare @RESERVATIONDATE datetime;
declare @RESERVATIONID uniqueidentifier
declare @COPYSTARTDATETIME datetime;
declare @COPYENDDATETIME datetime;
select
@COPYRESERVATIONDATE = ARRIVALDATE,
@COPYSTARTDATETIME = ITINERARY.STARTDATETIME,
@COPYENDDATETIME = ITINERARY.ENDDATETIME
from dbo.RESERVATION
inner join dbo.ITINERARY on
ITINERARY.RESERVATIONID = RESERVATION.ID
where
ITINERARY.ID = @COPYITINERARYID
select
@RESERVATIONDATE = ARRIVALDATE,
@RESERVATIONID = RESERVATION.ID
from dbo.RESERVATION
inner join dbo.ITINERARY on
ITINERARY.RESERVATIONID = RESERVATION.ID
where
ITINERARY.ID = @ID
/* Fix up the change agent ID incase we were passed null. */
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
/* Setup the current date */
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
/* First clear the itinerary */
exec dbo.USP_ITINERARY_CLEAR @ID, @RESERVATIONID, @CHANGEAGENTID;
/* Update existing required resources with the max of the existing qty and the new track qty */
update DESTINATION set
QUANTITYNEEDED = case
when (DESTINATION.QUANTITYNEEDED > SOURCE.QUANTITYNEEDED) then
DESTINATION.QUANTITYNEEDED
else SOURCE.QUANTITYNEEDED
end,
PRICE = COALESCE(RESOURCEPRICING.PRICE, 0),
PRICINGSTRUCTURECODE = COALESCE(RESOURCEPRICING.PRICINGSTRUCTURECODE,0),
PERTICKETQUANTITY = RESOURCE.PERTICKETQUANTITY,
PERTICKETDIVISOR = RESOURCE.PERTICKETDIVISOR,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.ITINERARYRESOURCE DESTINATION
inner join dbo.ITINERARYRESOURCE SOURCE on DESTINATION.RESOURCEID = SOURCE.RESOURCEID
inner join dbo.RESOURCE on SOURCE.RESOURCEID = RESOURCE.ID
left join dbo.RESOURCEPRICING on RESOURCE.ID = RESOURCEPRICING.ID
where
SOURCE.ITINERARYID = @COPYITINERARYID and
DESTINATION.ITINERARYID = @ID
-- Now add the itinerary resources
insert into dbo.ITINERARYRESOURCE
(
ITINERARYID,
RESOURCEID,
QUANTITYNEEDED,
PRICE,
PRICINGSTRUCTURECODE,
PERTICKETQUANTITY,
PERTICKETDIVISOR,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
@ID,
SOURCE.RESOURCEID,
SOURCE.QUANTITYNEEDED,
COALESCE(RESOURCEPRICING.PRICE, 0),
COALESCE(RESOURCEPRICING.PRICINGSTRUCTURECODE,0),
PERTICKETQUANTITY = RESOURCE.PERTICKETQUANTITY,
PERTICKETDIVISOR = RESOURCE.PERTICKETDIVISOR,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.ITINERARYRESOURCE SOURCE
inner join dbo.RESOURCE on SOURCE.RESOURCEID = RESOURCE.ID
left join dbo.RESOURCEPRICING on RESOURCE.ID = RESOURCEPRICING.ID
left join dbo.ITINERARYRESOURCE DESTINATION on DESTINATION.RESOURCEID = RESOURCE.ID and DESTINATION.ITINERARYID = @ID
where
SOURCE.ITINERARYID = @COPYITINERARYID and
DESTINATION.ID is null;
/* Get the total attendees for the itinerary */
declare @ATTENDEECOUNT decimal;
select @ATTENDEECOUNT = sum(ITINERARYATTENDEE.QUANTITY)
from dbo.ITINERARYATTENDEE
where ITINERARYATTENDEE.ITINERARYID = @ID;
update DESTINATION set
QUANTITYNEEDED = case
when VOLUNTEERTYPE.CAPACITYPERRESOURCE > 0 then
ceiling(@ATTENDEECOUNT / VOLUNTEERTYPE.CAPACITYPERRESOURCE)
else
case
when (DESTINATION.QUANTITYNEEDED > SOURCE.QUANTITYNEEDED) then
DESTINATION.QUANTITYNEEDED
else
SOURCE.QUANTITYNEEDED
end
end,
PRICE = COALESCE(VOLUNTEERTYPEPRICING.PRICE, 0),
PRICINGSTRUCTURECODE = COALESCE(VOLUNTEERTYPEPRICING.PRICINGSTRUCTURECODE,0),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.ITINERARYSTAFFRESOURCE DESTINATION
inner join dbo.ITINERARYSTAFFRESOURCE SOURCE on
DESTINATION.VOLUNTEERTYPEID = SOURCE.VOLUNTEERTYPEID and
(
(DESTINATION.JOBID is null and SOURCE.JOBID is null) or
DESTINATION.JOBID = SOURCE.JOBID
)
left join dbo.VOLUNTEERTYPEPRICING on SOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPEPRICING.ID
inner join dbo.VOLUNTEERTYPE on VOLUNTEERTYPE.ID = SOURCE.VOLUNTEERTYPEID
where
SOURCE.ITINERARYID = @COPYITINERARYID and
DESTINATION.ITINERARYID = @ID;
-- Now add the itinerary staffresources
insert into dbo.ITINERARYSTAFFRESOURCE
(
ITINERARYID,
VOLUNTEERTYPEID,
QUANTITYNEEDED,
FILLEDBYCODE,
JOBID,
PRICE,
PRICINGSTRUCTURECODE,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
@ID,
SOURCE.VOLUNTEERTYPEID,
case
when VOLUNTEERTYPE.CAPACITYPERRESOURCE > 0 then
ceiling(@ATTENDEECOUNT / VOLUNTEERTYPE.CAPACITYPERRESOURCE)
else SOURCE.QUANTITYNEEDED
end,
SOURCE.FILLEDBYCODE,
SOURCE.JOBID,
COALESCE(VOLUNTEERTYPEPRICING.PRICE, 0),
COALESCE(VOLUNTEERTYPEPRICING.PRICINGSTRUCTURECODE,0),
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.ITINERARYSTAFFRESOURCE SOURCE
left join dbo.VOLUNTEERTYPEPRICING on SOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPEPRICING.ID
inner join dbo.VOLUNTEERTYPE on VOLUNTEERTYPE.ID = SOURCE.VOLUNTEERTYPEID
left join dbo.ITINERARYSTAFFRESOURCE DESTINATION on
DESTINATION.VOLUNTEERTYPEID = SOURCE.VOLUNTEERTYPEID and
(
(DESTINATION.JOBID is null and SOURCE.JOBID is null) or
DESTINATION.JOBID = SOURCE.JOBID
) and
DESTINATION.ITINERARYID = @ID
where
SOURCE.ITINERARYID = @COPYITINERARYID and
DESTINATION.ID is null;
declare @ITEMS table
(
COPYITINERARYITEMID uniqueidentifier,
EVENTID uniqueidentifier,
PROGRAMID uniqueidentifier,
NAME nvarchar(100),
NOTES nvarchar(500),
BLOCKEVENT bit,
STARTTIME dbo.UDT_HOURMINUTE,
ENDTIME dbo.UDT_HOURMINUTE,
STARTDATE datetime,
ENDDATE datetime,
EVENTLOCATIONID uniqueidentifier,
ITEMTYPECODE tinyint
)
insert into @ITEMS
select
ITINERARYITEM.ID,
null,
case
when ITINERARYITEM.PROGRAMID is null then EVENT.PROGRAMID
else ITINERARYITEM.PROGRAMID
end,
ITINERARYITEM.NAME,
ITINERARYITEM.NOTES,
ITINERARYITEM.BLOCKEVENT,
ITINERARYITEM.STARTTIME,
ITINERARYITEM.ENDTIME,
dateadd(day,datediff(day,@COPYRESERVATIONDATE,ITINERARYITEM.STARTDATE),@RESERVATIONDATE),
dateadd(day,datediff(day,@COPYRESERVATIONDATE,ITINERARYITEM.ENDDATE),@RESERVATIONDATE),
ITINERARYITEM.EVENTLOCATIONID,
ITINERARYITEM.ITEMTYPECODE
from dbo.ITINERARYITEM
left join dbo.EVENT on
EVENT.ID = ITINERARYITEM.EVENTID
where
ITINERARYITEM.ITINERARYID = @COPYITINERARYID and
ITINERARYITEM.ITEMTYPECODE <> 3
declare @ITINERARYITEMS xml
set @ITINERARYITEMS =
(
select
COPYITINERARYITEMID,
EVENTID,
PROGRAMID,
NAME,
NOTES,
BLOCKEVENT,
STARTTIME,
ENDTIME,
STARTDATE,
ENDDATE,
EVENTLOCATIONID,
ITEMTYPECODE
from @ITEMS
for xml raw ('ITEM'), type, elements, root('ITINERARYITEMS'), BINARY BASE64
)
exec dbo.USP_ITINERARY_INSERTITEMS @ID, @ITINERARYITEMS, @CHANGEAGENTID, 0;
end