UFN_SALESORDER_PROGRAMTICKETSELECT_DATETIMEOFFSET
Returns the list of programs available for sale with time zone awareness.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SALESMETHODID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@DATESELECTTYPE | tinyint | IN | |
@STARTDATETIMEWITHOFFSET | datetimeoffset | IN | |
@ENDDATETIMEWITHOFFSET | datetimeoffset | IN | |
@NAME | nvarchar(512) | IN | |
@SHOWPAST | bit | IN | |
@CURRENTDATETIMEWITHOFFSET | datetimeoffset | IN |
Definition
Copy
CREATE function dbo.UFN_SALESORDER_PROGRAMTICKETSELECT_DATETIMEOFFSET
(
@SALESMETHODID uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@DATESELECTTYPE tinyint = null,
@STARTDATETIMEWITHOFFSET datetimeoffset = null,
@ENDDATETIMEWITHOFFSET datetimeoffset = null,
@NAME nvarchar(512) = null,
@SHOWPAST bit = null,
@CURRENTDATETIMEWITHOFFSET datetimeoffset = 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],
null as [EVENTSTARTDATETIMEWITHOFFSET]
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 valid price options
exists (
select [COMBINATIONPRICETYPE].[ID]
from dbo.[COMBINATIONPRICETYPE]
cross apply (
select 1 as [HAS]
where not exists (
select 1
from dbo.[SALESMETHODEXCLUDEDPRICETYPE]
where
[SALESMETHODID] = @SALESMETHODID and
[PRICETYPECODEID] = [COMBINATIONPRICETYPE].PRICETYPECODEID
)
) as [VALIDPRICETYPES]
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_DATETIMEOFFSET(COMBINATION.ID, @SALESMETHODID, @DATESELECTTYPE, @STARTDATETIMEWITHOFFSET, @ENDDATETIMEWITHOFFSET, @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],
null as [EVENTSTARTDATETIMEWITHOFFSET]
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 valid price options
select [PROGRAMPRICE].[ID]
from dbo.[PROGRAMPRICE]
cross apply (
select 1 as [HAS]
where not exists (
select 1
from dbo.[SALESMETHODEXCLUDEDPRICETYPE]
where
[SALESMETHODID] = @SALESMETHODID and
[PRICETYPECODEID] = [PROGRAMPRICE].PRICETYPECODEID
)
) as [VALIDPRICETYPES]
where [PROGRAMID] = [PROGRAM].[ID]
) and
(
@DATESELECTTYPE = 0 or
@STARTDATETIMEWITHOFFSET <= @ENDDATETIMEWITHOFFSET
)
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],
[AVAILABLE].[EVENTSTATUSCODE],
[EVENT].[STARTDATETIMEWITHOFFSET] as [EVENTSTARTDATETIMEWITHOFFSET]
from dbo.[EVENT]
inner join dbo.[PROGRAM]
on [EVENT].[PROGRAMID] = [PROGRAM].[ID]
left join dbo.[PROGRAMCATEGORYCODE] on [PROGRAM].[PROGRAMCATEGORYCODEID] = [PROGRAMCATEGORYCODE].[ID]
inner join dbo.UFN_EVENT_GETAVAILABILITYWITHEVENTS_BYDATE(
@DATESELECTTYPE,
@STARTDATETIMEWITHOFFSET,
@ENDDATETIMEWITHOFFSET,
@CURRENTDATETIMEWITHOFFSET,
@SALESMETHODID,@SHOWPAST,
cast(@STARTDATETIMEWITHOFFSET as date),
cast(@ENDDATETIMEWITHOFFSET as date),
cast(@CURRENTDATETIMEWITHOFFSET as datetime)
) as AVAILABLE on EVENT.ID = AVAILABLE.EVENTID
where
[PROGRAM].[ISACTIVE] = 1 and
(
@NAME is null or
[EVENT].[NAME] like @NAME escape '\' or
[PROGRAM].[NAME] like @NAME escape '\'
) and
exists ( --Has valid prices types
select 1
from (
select
EVENT.ID as ID,
EVENT.PROGRAMID as PROGRAMID
) as [EVENTS]
outer apply (
select [PRICETYPECODEID]
from dbo.[PROGRAMEVENTPRICE]
where [PROGRAMEVENTPRICE].[EVENTID] = [EVENTS].[ID]
) as [EVENTPRICES]
outer apply (
select [PRICETYPECODEID]
from dbo.[PROGRAMPRICE]
where
[EVENTPRICES].[PRICETYPECODEID] is null and
[PROGRAMPRICE].[PROGRAMID] = [EVENTS].[PROGRAMID]
) as [PROGRAMPRICES]
cross apply (
select isnull([PROGRAMPRICES].[PRICETYPECODEID],[EVENTPRICES].[PRICETYPECODEID]) as [PRICETYPECODEID]
) as [PRICECOALESCE]
cross apply (
select 1 as [HAS]
where not exists (
select 1
from dbo.[SALESMETHODEXCLUDEDPRICETYPE]
where
[SALESMETHODID] = @SALESMETHODID and
[PRICETYPECODEID] = [PRICECOALESCE].PRICETYPECODEID
)
) as [VALIDPRICETYPES]
where [PRICECOALESCE].PRICETYPECODEID is not null
)