UFN_ONLINEPROGRAMEVENTONSALE_BYPROGRAM_CORE_2

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@PROGRAMID uniqueidentifier IN
@STARTDATETIME datetime IN
@ENDDATETIME datetime IN
@NAME nvarchar(150) IN
@EXCLUDEDATE date IN
@LIMITROWS int IN
@MAXROWS int IN
@EXCLUDEOFFSALE bit IN

Definition

Copy


create function dbo.UFN_ONLINEPROGRAMEVENTONSALE_BYPROGRAM_CORE_2(
    @PROGRAMID uniqueidentifier = null,
    @STARTDATETIME datetime = null,
    @ENDDATETIME datetime = null,
    @NAME nvarchar(150) = null,
    @EXCLUDEDATE date = null,
    @LIMITROWS int = 0,
    @MAXROWS int = 0,
    @EXCLUDEOFFSALE bit = 0
)
returns @result table (
    [ID] uniqueidentifier,
    [NAME] nvarchar(100),
    [STARTDATE] date,
    [STARTTIME] dbo.UDT_HOURMINUTE,
    [ENDTIME] dbo.UDT_HOURMINUTE,
    [URL] nvarchar(1024)
)
with execute as caller
as begin
    declare @SALESMETHODID uniqueidentifier = [dbo].[UFN_SALESMETHOD_GETIDFROMTYPECODE] (2)
    declare @BBNCURL nvarchar(1024) = replace(dbo.UFN_BBNC_URL(), 'http://', 'https://');

    declare @PROGRAMHASPRICES bit = 0
    select @PROGRAMHASPRICES = case --If program has prices, then event will.  If not, we have to check that event has custom prices.

        when exists (select 1 from dbo.[PROGRAMPRICE] where [PROGRAMID] = @PROGRAMID) then 1
        else 0
    end

    --preserving original functionality of USP_DATALIST_ONLINEPROGRAMEVENTONSALE_BYPROGRAM while letting the ..._NOMAX version work

    if ISNULL(@LIMITROWS, 0) = 0 set @MAXROWS = 2147483647
    if @LIMITROWS > 0 and @MAXROWS > @LIMITROWS
        set @MAXROWS = @LIMITROWS

    declare @CURRENTDATETIMEWITHOFFSET datetimeoffset = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(sysutcdatetime(), 1)
    declare @STARTDATETIMEWITHOFFSET as datetimeoffset = TODATETIMEOFFSET(@STARTDATETIME, DATEPART(tz, SYSDATETIMEOFFSET()))
    declare @ENDDATETIMEWITHOFFSET as datetimeoffset = TODATETIMEOFFSET(@ENDDATETIME, DATEPART(tz, SYSDATETIMEOFFSET()))

    declare @CURRENTDATE date = @CURRENTDATETIMEWITHOFFSET

    --Do not show undeliverable events

    declare @HASUNRESTRICTEDDELIVERY bit = 0
    declare @EARLIESTVALIDEVENTDATETIMEWITHOFFSET datetimeoffset = null
    select @HASUNRESTRICTEDDELIVERY = [HASUNRESTRICTEDDELIVERY], @EARLIESTVALIDEVENTDATETIMEWITHOFFSET = [EARLIESTVALIDEVENTDATETIMEWITHOFFSET]
    from dbo.UFN_DELIVERYMETHOD_INFO_BYSALESMETHODID(@SALESMETHODID)

    insert into @result
    select top(@MAXROWS)
        [EVENT].[ID], 
        [EVENT].[NAME],
        [EVENT].[STARTDATE],
        [EVENT].[STARTTIME],
        [EVENT].[ENDTIME],
        [ONLINEINFO].[URL]
    from dbo.[PROGRAM]
    inner join dbo.[EVENT]
        on 
            [PROGRAM].[ID] = @PROGRAMID and
            [PROGRAM].[ID] = [EVENT].[PROGRAMID] and
            [PROGRAM].[ISACTIVE] = 1 and
            [EVENT].[STARTDATETIMEWITHOFFSET] >= @STARTDATETIMEWITHOFFSET and 
            [EVENT].[STARTDATETIMEWITHOFFSET] <= @ENDDATETIMEWITHOFFSET and
            (@EXCLUDEDATE is null or [EVENT].[STARTDATE] <> @EXCLUDEDATE) and 
            (@NAME is null or [EVENT].[NAME] like @NAME escape '\')
    left join dbo.[MICROSITEPAGE]
        on [EVENT].[ID] = [MICROSITEPAGE].[OBJECTID]
    left join dbo.VanityUrl
        on MICROSITEPAGE.SITEPAGESID = VanityURL.PageID
    outer apply (
        select 
            case when MICROSITEPAGE.SITEPAGESID is not null then 1 else 0 end as [ISAPPROVED],
            @BBNCURL + [VanityURL].[VanityURL] as [URL]
        where 
            MICROSITEPAGE.EXCLUDED = 0 and
            PROGRAM.ISPREREGISTERED = 1 --Only need to return URLs for preregistered events

    ) as [ONLINEINFO]
    inner join dbo.[EVENTSALESMETHOD]
        on 
            [EVENT].[ID] = [EVENTSALESMETHOD].[EVENTID] and 
            [EVENTSALESMETHOD].[SALESMETHODID] = @SALESMETHODID and
            [EVENTSALESMETHOD].[ONSALEDATETIMEWITHOFFSET] <= @CURRENTDATETIMEWITHOFFSET and
            ([PROGRAM].[ISPREREGISTERED] = 0 or [ONLINEINFO].[ISAPPROVED] = 1)
    left join dbo.[PROGRAMSALESMETHOD]
        on 
            [EVENT].[PROGRAMID] = [PROGRAMSALESMETHOD].[PROGRAMID] and 
            [PROGRAMSALESMETHOD].[SALESMETHODID] = @SALESMETHODID
    cross apply (
        select
            case 
                when [PROGRAMSALESMETHOD].[ONSALEENDTYPECODE] is not null then
                    case [PROGRAMSALESMETHOD].[ONSALEENDTYPECODE] 
                        when 0 then [EVENT].[STARTDATETIMEWITHOFFSET]
                        when 1 then dateadd(mi, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIMEWITHOFFSET])
                        when 2 then dateadd(hh, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIMEWITHOFFSET])
                        when 3 then dateadd(mi, [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIMEWITHOFFSET])
                    end
                else [EVENT].[STARTDATETIMEWITHOFFSET]
            end as [TIME]
    ) [EVENTOFFSALESDATETIMEWITHOFFSET]
    where
        (
            @PROGRAMHASPRICES = 1 or
            exists (
                select 1
                from dbo.[PROGRAMEVENTPRICE]
                where [EVENTID] = [EVENT].[ID]
            )
        ) and
        (
            @HASUNRESTRICTEDDELIVERY = 1 or
            ([EVENT].[STARTDATETIMEWITHOFFSET] > @EARLIESTVALIDEVENTDATETIMEWITHOFFSET)
        ) and
        (
            @EXCLUDEOFFSALE = 0 or
            [EVENTOFFSALESDATETIMEWITHOFFSET].[TIME] > @CURRENTDATETIMEWITHOFFSET
        )
    order by [EVENT].[STARTDATE], [EVENT].[STARTTIME], [EVENT].[ENDTIME]

    return
end