UFN_GROUPSALESCAPACITY_CAPACITYREMAINING
Determines the total capacity used for group sales events in a given time frame.
Return
Return Type |
---|
int |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DATE | date | IN | |
@IGNOREITINERARY | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_GROUPSALESCAPACITY_CAPACITYREMAINING
(
@DATE date,
@IGNOREITINERARY uniqueidentifier = null
)
returns int
as
begin
declare @CAPACITYREMAINING int;
with ITINERARY_CTE as (
select
ITINERARY.ID
from dbo.ITINERARY
inner join dbo.RESERVATION on
RESERVATION.ID = ITINERARY.RESERVATIONID
inner join dbo.SALESORDER on
SALESORDER.ID = RESERVATION.ID
where
(SALESORDER.STATUSCODE <> 5)
and (@IGNOREITINERARY is null or @IGNOREITINERARY <> ITINERARY.ID)
-- Since reservations can only be for 5 days, this allows sql server to narrow
-- the reservations it looks at instead of scanning entire tables.
and RESERVATION.ARRIVALDATE between dateadd(day, -5, @DATE) and dateadd(day, 5, @DATE)
and (
@DATE between
isnull((select min(STARTDATE) from dbo.ITINERARYITEM where ITINERARYID = ITINERARY.ID), RESERVATION.ARRIVALDATE) and
isnull((select max(ENDDATE) from dbo.ITINERARYITEM where ITINERARYID = ITINERARY.ID), RESERVATION.ARRIVALDATE)
)
)
select
@CAPACITYREMAINING = isnull(sum(ITINERARYATTENDEE.QUANTITY), 0)
from ITINERARY_CTE
inner join dbo.ITINERARYATTENDEE on
ITINERARYATTENDEE.ITINERARYID = ITINERARY_CTE.ID
declare @MAXIMUMCAPACITY int;
select top 1 @MAXIMUMCAPACITY = isnull(MAXIMUMCAPACITY, 0)
from dbo.GROUPSALESDEFAULT
set @CAPACITYREMAINING = @MAXIMUMCAPACITY - @CAPACITYREMAINING;
if @CAPACITYREMAINING < 0
set @CAPACITYREMAINING = 0;
return @CAPACITYREMAINING;
end