UFN_PROGRAMEVENT_AVAILABILITYONDATE
Returns program event availability on a specific date.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROGRAMID | uniqueidentifier | IN | |
@DATE | datetime | IN | |
@EVENTDATE | date | IN | |
@SALESMETHODID | uniqueidentifier | IN | |
@FILTERNOTONSALE | bit | IN | |
@FILTERNOCAPACITY | bit | IN | |
@INCLUDEFUTUREEVENTS | bit | IN | |
@MAXROWS | int | IN | |
@PRICETYPECODEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_PROGRAMEVENT_AVAILABILITYONDATE
(
@PROGRAMID uniqueidentifier,
@DATE datetime,
@EVENTDATE date,
@SALESMETHODID uniqueidentifier,
@FILTERNOTONSALE bit = 1,
@FILTERNOCAPACITY bit = 1,
@INCLUDEFUTUREEVENTS bit = 0,
@MAXROWS integer = 0,
@PRICETYPECODEID uniqueidentifier
)
returns table
as return
select top(@MAXROWS)
[EVENT].[ID] as [EVENTID],
TICKETCOUNTS.AVAILABILITY,
[ONSALE].[ISONSALE],
[EVENT].[STARTDATE],
[EVENT].[STARTTIME],
[EVENT].[ENDDATE],
[EVENT].[ENDTIME]
from dbo.[EVENT]
inner join dbo.[PROGRAM]
on [EVENT].[PROGRAMID] = [PROGRAM].[ID]
cross apply (
select
case
when @DATE < [EVENTSALESMETHOD].[ONSALEDATETIME] then 0
when [PROGRAMSALESMETHOD].[ID] is null and @DATE >= [EVENT].[STARTDATETIME] then 0
when
@DATE >= case [PROGRAMSALESMETHOD].[ONSALEENDTYPECODE]
when 0 then [EVENT].[STARTDATETIME]
when 1 then dateadd(mi, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIME])
when 2 then dateadd(hh, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIME])
when 3 then dateadd(mi, [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIME])
end
then 0
else 1
end as [ISONSALE]
from dbo.[EVENTSALESMETHOD]
left join dbo.[PROGRAMSALESMETHOD]
on
[PROGRAM].[ID] = [PROGRAMSALESMETHOD].[PROGRAMID] and
[PROGRAMSALESMETHOD].[SALESMETHODID] = @SALESMETHODID
where
[EVENTSALESMETHOD].[SALESMETHODID] = @SALESMETHODID and
[EVENT].[ID] = [EVENTSALESMETHOD].[EVENTID]
) as [ONSALE]
inner join
dbo.V_PROGRAMEVENT_TICKETCOUNTS as TICKETCOUNTS on TICKETCOUNTS.ID = EVENT.ID
where
[PROGRAM].[ISACTIVE] = 1 and
(
(@INCLUDEFUTUREEVENTS = 0 and [EVENT].[STARTDATE] = @EVENTDATE) or
(@INCLUDEFUTUREEVENTS = 1 and [EVENT].[STARTDATE] >= @EVENTDATE)
) and
[EVENT].[PROGRAMID] = @PROGRAMID and
(@FILTERNOTONSALE = 0 or [ONSALE].[ISONSALE] = 1) and
(@FILTERNOCAPACITY = 0 or TICKETCOUNTS.AVAILABILITY > 0) and
(
@PRICETYPECODEID is null or
exists (
select 1
from dbo.[PROGRAMPRICE]
where
[PROGRAM].[ID] = [PROGRAMPRICE].[PROGRAMID] and
not exists(select 1 from dbo.[PROGRAMEVENTPRICE] where [EVENTID] = [EVENT].[ID]) and
[PROGRAMPRICE].[PRICETYPECODEID] = @PRICETYPECODEID
union all
select 1
from dbo.[PROGRAMEVENTPRICE]
where
[EVENT].[ID] = [PROGRAMEVENTPRICE].[EVENTID] and
[PROGRAMEVENTPRICE].[PRICETYPECODEID] = @PRICETYPECODEID
)
)
order by
[EVENT].[STARTDATE],
[EVENT].[STARTTIME];