UFN_SALESORDER_PROGRAMTICKETSELECT
Returns the list of programs available for sale.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SALESMETHODID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@DATESELECTTYPE | tinyint | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@NAME | nvarchar(512) | IN | |
@SHOWPAST | bit | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE function dbo.UFN_SALESORDER_PROGRAMTICKETSELECT
(
@SALESMETHODID uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@DATESELECTTYPE tinyint = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@NAME nvarchar(512) = null,
@SHOWPAST bit = null,
@CURRENTDATE datetime = null
)
returns table
as return
--Combo
select
[COMBINATION].[ID],
null [PROGRAMID],
[COMBINATION].[NAME] as [NAME],
null as [AVAILABILITY],
null as [STARTDATE],
null as [STARTTIME],
null as [ENDTIME],
null as PROGRAMCATEGORY,
0 as [ISDAILYADMISSION],
1 as [ISCOMBINATION],
0 as [EVENTSTATUSCODE]
from dbo.[COMBINATION]
where
-- Combination level check
[COMBINATION].[ISACTIVE] = 1 and
dbo.UFN_COMBINATION_AVAILABLEFORORDER(COMBINATION.ID, @SALESMETHODID) = 1 and
-- Combination eligibility
dbo.UFN_COMBINATION_ELIGIBLEFORORDER(COMBINATION.ID, @CONSTITUENTID) = 1 and
-- Combination has price options
exists (
select [COMBINATIONPRICETYPE].[ID]
from dbo.[COMBINATIONPRICETYPE]
where [COMBINATIONPRICETYPE].[COMBINATIONID] = [COMBINATION].[ID]
) and
-- Combination Name filter
(
@NAME is null or
[COMBINATION].[NAME] like @NAME escape '\'
) and
-- Program group level check
-- Each program group has at least one available daily admission program or event
dbo.UFN_COMBINATION_PROGRAMSAVAILABLE(COMBINATION.ID, @SALESMETHODID, @DATESELECTTYPE, @STARTDATE, @ENDDATE, @SHOWPAST) = 1
union all
--Daily Admission
select
[PROGRAM].[ID],
null as [PROGRAMID],
[PROGRAM].[NAME] as [NAME],
null as [AVAILABILITY],
null as [STARTDATE],
null as [STARTTIME],
null as [ENDTIME],
[PROGRAMCATEGORYCODE].[DESCRIPTION] as PROGRAMCATEGORY,
[ISDAILYADMISSION],
0 as [ISCOMBINATION],
0 as [EVENTSTATUSCODE]
from dbo.[PROGRAM]
inner join dbo.[PROGRAMSALESMETHOD] on [PROGRAM].[ID] = [PROGRAMSALESMETHOD].[PROGRAMID]
left join dbo.[PROGRAMCATEGORYCODE] on [PROGRAM].[PROGRAMCATEGORYCODEID] = [PROGRAMCATEGORYCODE].[ID]
where
(
@NAME is null or
[PROGRAM].[NAME] like @NAME escape '\'
) and
[PROGRAM].[ISACTIVE] = 1 and
[PROGRAM].[ISDAILYADMISSION] = 1 and
[PROGRAMSALESMETHOD].[SALESMETHODID] = @SALESMETHODID
and exists ( --Has price options
select [PROGRAMPRICE].[ID]
from dbo.[PROGRAMPRICE]
where [PROGRAMID] = [PROGRAM].[ID]
) and
(
@DATESELECTTYPE = 0 or
@STARTDATE <= @ENDDATE
)
union all
--Scheduled programs
select
[EVENT].[ID],
[EVENT].[PROGRAMID] as [PROGRAMID],
[EVENT].[NAME],
AVAILABLE.QUANTITY as [AVAILABILITY],
[EVENT].[STARTDATE],
[EVENT].[STARTTIME],
[EVENT].[ENDTIME],
[PROGRAMCATEGORYCODE].[DESCRIPTION] as PROGRAMCATEGORY,
[ISDAILYADMISSION],
0 as [ISCOMBINATION],
case
when [PROGRAMSALESMETHOD].[ID] is null and @CURRENTDATE = [EVENT].[STARTDATETIME] then 1
when @CURRENTDATE between [EVENT].[STARTDATETIME] and 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 1
when [PROGRAMSALESMETHOD].[ID] is null and @CURRENTDATE >= [EVENT].[STARTDATETIME] then 2
when @CURRENTDATE >= 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 2
else 0
end as [EVENTSTATUSCODE]
from dbo.[EVENT]
inner join dbo.EVENTSALESMETHOD on [EVENT].ID = EVENTSALESMETHOD.EVENTID
left join dbo.PROGRAMSALESMETHOD
on
[EVENT].PROGRAMID = PROGRAMSALESMETHOD.PROGRAMID and
[PROGRAMSALESMETHOD].[SALESMETHODID] = @SALESMETHODID
inner join dbo.UFN_EVENT_GETAVAILABILITYWITHEVENTS() as AVAILABLE on EVENT.ID = AVAILABLE.EVENTID
inner join dbo.[PROGRAM] on [EVENT].[PROGRAMID] = [PROGRAM].[ID]
left join dbo.[PROGRAMCATEGORYCODE] on [PROGRAM].[PROGRAMCATEGORYCODEID] = [PROGRAMCATEGORYCODE].[ID]
where
[PROGRAM].[ISACTIVE] = 1
and [EVENTSALESMETHOD].[SALESMETHODID] = @SALESMETHODID
and @CURRENTDATE >= [EVENTSALESMETHOD].[ONSALEDATETIME]
and
(
@NAME is null or
[EVENT].[NAME] like @NAME escape '\' or
[PROGRAM].[NAME] like @NAME escape '\'
) and
(
(@DATESELECTTYPE = 0 and @SHOWPAST = 1)
or
((@DATESELECTTYPE = 0 and [EVENT].[STARTDATETIME] >= @CURRENTDATE)
or (@DATESELECTTYPE <> 0 and
(
([PROGRAMSALESMETHOD].[ID] is null and [EVENT].[STARTDATETIME] between @STARTDATE and @ENDDATE) or
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 between @STARTDATE and @ENDDATE or
(@STARTDATE between [EVENT].[STARTDATETIME] and 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))))
--Currently happening events should be shown even when our startdate parameter is just within the event's start and end times
)
and
exists ( --Has price options
select [PROGRAMPRICE].[ID]
from dbo.[PROGRAMPRICE]
where [PROGRAMID] = [EVENT].[PROGRAMID]
)