USP_DATAFORMTEMPLATE_VIEW_ITINERARYCALENDARSUMMARY
The load procedure used by the view dataform template "Itinerary Calendar Summary View"
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter used to load the fields defined on the form. |
@DATALOADED | bit | INOUT | Output parameter indicating whether or not data was actually loaded. |
@ARRIVALDATE | datetime | INOUT | Date |
@ARRIVALTIME | UDT_HOURMINUTE | INOUT | Time |
@ATTENDEES | xml | INOUT | Visitors |
@COST | money | INOUT | Cost |
@TRACKNAME | nvarchar(100) | INOUT | Track |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_ITINERARYCALENDARSUMMARY
(
@ID uniqueidentifier,
@DATALOADED bit = 0 output,
@ARRIVALDATE datetime = null output,
@ARRIVALTIME dbo.UDT_HOURMINUTE = null output,
@ATTENDEES xml = null output,
@COST money = null output, -- By design, cost is an expression of potential cost - not the sum of the actual sales order items
@TRACKNAME nvarchar(100) = null output
)
as
set nocount on;
-- be sure to set this, in case the select returns no rows
set @DATALOADED = 0;
declare @RESERVATIONID uniqueidentifier
select
@DATALOADED = 1,
@ARRIVALDATE = RESERVATION.ARRIVALDATE,
@ARRIVALTIME = RESERVATION.ARRIVALTIME,
@RESERVATIONID = RESERVATION.ID,
@TRACKNAME = TRACK.NAME
from
dbo.ITINERARY
inner join
dbo.RESERVATION on ITINERARY.RESERVATIONID = RESERVATION.ID
inner join
dbo.SALESORDER on RESERVATION.ID = SALESORDER.ID
left join
dbo.TRACK on TRACK.ID = ITINERARY.TRACKID
where
ITINERARY.ID = @ID;
if @DATALOADED= 1
begin
set @ATTENDEES =
(
select
QUANTITY,
dbo.UFN_PRICETYPECODE_GETDESCRIPTION(PRICETYPECODEID) as PRICETYPE,
PRICETYPECODEID as PRICETYPECODEID,
SEQUENCE
from
dbo.ITINERARYATTENDEE
where
ITINERARYATTENDEE.ITINERARYID = @ID
for xml raw('ITEM'),type,elements,root('ATTENDEES'),binary base64
);
with DISTINCTITEMS_CTE as
(
select
PROGRAMID,
EVENTID,
ITINERARYID
from
dbo.ITINERARYITEM
where
ITINERARYID = @ID
group by PROGRAMID, EVENTID, STARTDATE, ITINERARYID
)
select
@COST =
isnull
(
sum
(
case SALESORDERITEM.PRICINGSTRUCTURECODE
when 1 then 0
else
T.items.value('(QUANTITY)[1]','integer') * SALESORDERITEM.PRICE
end
), 0
)
from
dbo.SALESORDERITEM
inner join
dbo.SALESORDERITEMTICKET on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
inner join
dbo.ITINERARY on ITINERARY.RESERVATIONID = SALESORDERITEM.SALESORDERID
inner join
DISTINCTITEMS_CTE DI on DI.ITINERARYID = ITINERARY.ID
inner join
@ATTENDEES.nodes('/ATTENDEES/ITEM') T(items) on T.items.value('(PRICETYPECODEID)[1]', 'uniqueidentifier') = SALESORDERITEMTICKET.PRICETYPECODEID
where
SALESORDERITEM.SALESORDERID = @RESERVATIONID and
((DI.PROGRAMID = SALESORDERITEMTICKET.PROGRAMID and SALESORDERITEMTICKET.EVENTID is null) or DI.EVENTID = SALESORDERITEMTICKET.EVENTID)
declare @FEETABLE table
(
FEEAMOUNT decimal(10,3),
QUANTITY integer
);
with DISTINCTITEMS_CTE as
(
select
PROGRAMID,
EVENTID,
ITINERARYID
from
dbo.ITINERARYITEM
where
ITINERARYID = @ID
group by
PROGRAMID, EVENTID, STARTDATE, ITINERARYID
)
insert into @FEETABLE
(
FEEAMOUNT,
QUANTITY
)
select
case SALESORDERITEM.PRICINGSTRUCTURECODE
when 1 then 0
else
case FEE.TYPECODE
when 0 then FEE.AMOUNT
else (FEE.[PERCENT] * .01 * SALESORDERITEMTICKET.PRICE)
end
end as FEEAMOUNT,
T.items.value('(QUANTITY)[1]', 'integer') as QUANTITY
from
dbo.SALESORDERITEMFEE
inner join
dbo.FEE on SALESORDERITEMFEE.FEEID = FEE.ID
inner join
dbo.SALESORDERITEM on SALESORDERITEMFEE.SALESORDERITEMID = SALESORDERITEM.ID
inner join
dbo.SALESORDERITEMTICKET on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
inner join
dbo.RESERVATION on RESERVATION.ID = SALESORDERITEM.SALESORDERID
inner join
dbo.ITINERARY ON ITINERARY.RESERVATIONID = RESERVATION.ID
inner join
DISTINCTITEMS_CTE DI on DI.ITINERARYID = ITINERARY.ID
inner join
@ATTENDEES.nodes('/ATTENDEES/ITEM') T(items) on T.items.value('(PRICETYPECODEID)[1]', 'uniqueidentifier') = SALESORDERITEMTICKET.PRICETYPECODEID
where
SALESORDERITEMFEE.APPLIESTOCODE = 1
and SALESORDERITEM.SALESORDERID = @RESERVATIONID
and ITINERARY.ID = @ID
and ((DI.PROGRAMID = SALESORDERITEMTICKET.PROGRAMID and SALESORDERITEMTICKET.EVENTID is null) or DI.EVENTID = SALESORDERITEMTICKET.EVENTID)
declare @FEES money
select @FEES = isnull(SUM(FEEAMOUNT * QUANTITY), 0)
from @FEETABLE
-- Add resource costs to the total cost
declare @SUPPLYRESOURCECOST money
declare @ATTENDEECOUNT as integer
select @ATTENDEECOUNT =
COALESCE
(
(
select
sum(QUANTITY)
from
dbo.ITINERARYATTENDEE
where ITINERARYID = @ID
) ,0
)
declare @STARTDATETIME as datetime
select @STARTDATETIME = dbo.UFN_ITINERARY_STARTDATETIME(@ID)
declare @ENDDATETIME as datetime
select @ENDDATETIME = dbo.UFN_ITINERARY_ENDDATETIME(@ID)
declare @DURATION as decimal(20,4)
if (@ENDDATETIME is null or @STARTDATETIME is null)
set @DURATION = 0
else
select @DURATION = DATEDIFF(s, @STARTDATETIME, @ENDDATETIME) / (3600.0)
-- stolen from reservation page - resource section
select @SUPPLYRESOURCECOST = coalesce(sum(TOTAL), 0)
from
(
select
SALESORDERITEM.TOTAL as TOTAL
from
dbo.SALESORDERITEM
inner join
dbo.SALESORDERITEMITINERARYRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYRESOURCE.SALESORDERITEMID
inner join
dbo.ITINERARYRESOURCE on SALESORDERITEMITINERARYRESOURCE.ITINERARYRESOURCEID = ITINERARYRESOURCE.ID
inner join
dbo.RESOURCE on ITINERARYRESOURCE.RESOURCEID = RESOURCE.ID
outer apply (
select
sum(ITINERARYATTENDEE.QUANTITY) as QUANTITY
from
dbo.ITINERARYATTENDEE
where
ITINERARYATTENDEE.ITINERARYID = ITINERARYRESOURCE.ITINERARYID
) as ITINERARYATTENDEECOUNT
where
ITINERARYRESOURCE.ITINERARYID = @ID
and SALESORDERITEM.TYPECODE = 8
union all
select
SALESORDERITEM.TOTAL as TOTAL
from
dbo.SALESORDERITEM
inner join
dbo.SALESORDERITEMITINERARYITEMRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYITEMRESOURCE.SALESORDERITEMID
inner join
dbo.ITINERARYITEMRESOURCE on SALESORDERITEMITINERARYITEMRESOURCE.ITINERARYITEMRESOURCEID = ITINERARYITEMRESOURCE.ID
inner join
dbo.ITINERARYITEM on ITINERARYITEMRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
inner join
dbo.RESOURCE on ITINERARYITEMRESOURCE.RESOURCEID = RESOURCE.ID
outer apply (
select
sum(ITINERARYATTENDEE.QUANTITY) as QUANTITY
from
dbo.ITINERARYATTENDEE
where
ITINERARYATTENDEE.ITINERARYID = ITINERARYITEM.ITINERARYID
) as ITINERARYATTENDEECOUNT
where
ITINERARYITEM.ITINERARYID = @ID
and SALESORDERITEM.TYPECODE = 9
) AS T
declare @STAFFINGRESOURCECOST money
select @STAFFINGRESOURCECOST = coalesce(sum(TOTAL), 0)
from
(
select
SALESORDERITEM.TOTAL
from
dbo.SALESORDERITEM
inner join
dbo.SALESORDERITEMITINERARYSTAFFRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYSTAFFRESOURCE.SALESORDERITEMID
inner join
dbo.ITINERARYSTAFFRESOURCE on SALESORDERITEMITINERARYSTAFFRESOURCE.ITINERARYSTAFFRESOURCEID = ITINERARYSTAFFRESOURCE.ID
where
ITINERARYSTAFFRESOURCE.ITINERARYID = @ID
and SALESORDERITEM.TYPECODE = 10
union all
select
SALESORDERITEM.TOTAL
from
dbo.SALESORDERITEM
inner join
dbo.SALESORDERITEMITINERARYITEMSTAFFRESOURCE on SALESORDERITEM.ID = SALESORDERITEMITINERARYITEMSTAFFRESOURCE.SALESORDERITEMID
inner join
dbo.ITINERARYITEMSTAFFRESOURCE on SALESORDERITEMITINERARYITEMSTAFFRESOURCE.ITINERARYITEMSTAFFRESOURCEID = ITINERARYITEMSTAFFRESOURCE.ID
inner join
dbo.ITINERARYITEM on ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
where
ITINERARYITEM.ITINERARYID = @ID
and SALESORDERITEM.TYPECODE = 11
) as G
-- Add location costs to the total cost
declare @LOCATIONCOST money
select
@LOCATIONCOST = coalesce(sum(TOTAL),0)
from
dbo.SALESORDERITEM
inner join
dbo.ITINERARYITEMLOCATION on ITINERARYITEMLOCATION.SALESORDERITEMID = SALESORDERITEM.ID
inner join
dbo.ITINERARYITEM on ITINERARYITEMLOCATION.ID = ITINERARYITEM.ID
where
ITINERARYITEM.ITINERARYID = @ID and
SALESORDERITEM.SALESORDERID = @RESERVATIONID and
SALESORDERITEM.TYPECODE = 7
set @COST = @COST + @FEES + @SUPPLYRESOURCECOST + @STAFFINGRESOURCECOST + @LOCATIONCOST
end
return 0;