USP_DATALIST_MICROSITEPROGRAMMINGEVENTS

Lists the programs and events.

Parameters

Parameter Parameter Type Mode Description
@ACTIVEONLY bit IN Only show active events
@NAMELIKE nvarchar(512) IN Event name
@DATESELECTTYPE tinyint IN Date
@STARTDATE datetime IN From
@ENDDATE datetime IN To

Definition

Copy


CREATE procedure dbo.USP_DATALIST_MICROSITEPROGRAMMINGEVENTS
    (
        @ACTIVEONLY bit = 0,
        @NAMELIKE nvarchar(512) = null,
        @DATESELECTTYPE tinyint = 0,
        @STARTDATE datetime = null,
        @ENDDATE datetime = null
    ) as
    set nocount on;

    --@DATESELECTTYPE

    --2    All dates

    --0    Next 10 days

    --1    Today

    --4    Date range

    --3    Specific date  

    --5    Next 30 days


    if @NAMELIKE = ''
        set @NAMELIKE = null;
    set @NAMELIKE = '%' + replace(replace(@NAMELIKE, '*', '%'), '?', '_') + '%';

    if @ACTIVEONLY is null
        set @ACTIVEONLY = 0

    declare @CURRENTDATETIMEOFFSET datetimeoffset = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(sysutcdatetime(), 1)

       if @DATESELECTTYPE is null set @DATESELECTTYPE = 0;

    set @STARTDATE = case @DATESELECTTYPE
        when 1 then dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATETIMEOFFSET)
        when 0 then dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATETIMEOFFSET)
        when 3 then dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE)
        when 4 then dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE)
        when 5 then @CURRENTDATETIMEOFFSET
    end;
    if (@STARTDATE < @CURRENTDATETIMEOFFSET) set @STARTDATE = @CURRENTDATETIMEOFFSET;

    set @ENDDATE = case @DATESELECTTYPE
        when 1 then dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATETIMEOFFSET)
        when 0 then dbo.UFN_DATE_GETLATESTTIME(dateadd(DAY, 10, @CURRENTDATETIMEOFFSET))
        when 3 then dbo.UFN_DATE_GETLATESTTIME(@STARTDATE)
        when 4 then dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)
        when 5 then dbo.UFN_DATE_GETLATESTTIME(dateadd(Day, 30, @CURRENTDATETIMEOFFSET))
    end;

    declare @STARTDATETIMEOFFSET as datetimeoffset = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(@STARTDATE, 0);
  declare @ENDDATETIMEOFFSET as datetimeoffset = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(@ENDDATE, 0);        

    declare @ONLINESALESMETHOD uniqueidentifier = dbo.UFN_SALESMETHOD_GETIDFROMTYPECODE(2);--2 = online


    with EVENT_CTE (ID, NAME, STARTDATE, STARTTIME, STARTDATETIME, PARENTID, ISACTIVE, ISDAILYADMISSION, ONLINE, ISLIVE, PROGRAMNAME, EVENT_MICROSITEEMAILTEMPLATEID, HASACTIVEEMAILTEMPLATE) as (
        select 
            E.ID,
            E.NAME,
            E.STARTDATE,
            E.STARTTIME,
            E.STARTDATETIME,
            E.PROGRAMID as PARENTID,
            P.ISACTIVE,
            0 as ISDAILYADMISSION,
            case when EVENTSALESMETHOD.ID is null then 0 else 1 end as ONLINE,
            [LIVESTATUS].[ISLIVE],
            P.NAME,
            EVENT_MICROSITEEMAILTEMPLATE.ID as EVENT_MICROSITEEMAILTEMPLATEID,
            EVENT_MICROSITEEMAILTEMPLATE.ACTIVE as HASACTIVEEMAILTEMPLATE
        from dbo.[EVENT] as E
        inner join dbo.PROGRAM as P
            on 
                (E.PROGRAMID = P.ID) and
                (P.ISPREREGISTERED = 0) and
                (E.ENDDATETIMEWITHOFFSET > @CURRENTDATETIMEOFFSET) and
                (
                    (@DATESELECTTYPE = 2) or 
                    (STARTDATETIMEWITHOFFSET between @STARTDATETIMEOFFSET and @ENDDATETIMEOFFSET) or 
                    (@STARTDATETIMEOFFSET between STARTDATETIMEWITHOFFSET and ENDDATETIMEWITHOFFSET)
                ) and
                (@NAMELIKE is null or E.NAME like @NAMELIKE escape '\')
        left outer join dbo.EVENTSALESMETHOD
            on 
                (E.ID = EVENTSALESMETHOD.EVENTID) and 
                (EVENTSALESMETHOD.SALESMETHODID = @ONLINESALESMETHOD )
        left outer join dbo.EVENT_MICROSITEEMAILTEMPLATE
            on E.ID = EVENT_MICROSITEEMAILTEMPLATE.EVENTID
        cross apply (
            select case 
                when 
                        (EVENTSALESMETHOD.SALESMETHODID = @ONLINESALESMETHOD)--(@CURRENTDATETIMEOFFSET between EVENTSALESMETHOD.ONSALEDATETIMEWITHOFFSET and E.ENDDATETIMEWITHOFFSET)

                        and (P.ISACTIVE = 1) -- observe this

                    and (E.ISACTIVE = 1) -- future-proofing

                    then 1
                else 0
            end as ISLIVE
        ) as [LIVESTATUS]
        where (@ACTIVEONLY = 0 or [LIVESTATUS].[ISLIVE] = 1)
    )            

    select 
        PROGRAM.ID as ID,
        PROGRAM.NAME,
        null as STARTDATE,
        null as STARTTIME,
        null as STARTDATETIME,
        null as PARENTID,
        PROGRAM.ISACTIVE,
        PROGRAM.ISDAILYADMISSION,
        case when PROGRAMSALESMETHOD.ID is null then 0 else 1 end as ONLINE,
          case
            when PROGRAM.ISDAILYADMISSION = 0 then 
                case 
                    when exists (select 1 from EVENT_CTE where (PROGRAM.ID = EVENT_CTE.PARENTID) and (EVENT_CTE.ISLIVE = 1))
                        then PROGRAM.ISACTIVE
                    else 0
                end
            else case when PROGRAMSALESMETHOD.ID is null then 0 else PROGRAM.ISACTIVE end
        end as ISLIVE,
        PROGRAM.NAME as PROGRAMNAME,
        PROGRAM_MICROSITEEMAILTEMPLATE.ID as MICROSITEEMAILTEMPLATEID,
        coalesce(PROGRAM_MICROSITEEMAILTEMPLATE.ACTIVE, 0) as HASACTIVEEMAILTEMPLATE
    from dbo.PROGRAM
    left outer join dbo.PROGRAMSALESMETHOD
        on 
            PROGRAM.ID = PROGRAMSALESMETHOD.PROGRAMID and
            PROGRAMSALESMETHOD.SALESMETHODID = @ONLINESALESMETHOD 
    left outer join dbo.PROGRAM_MICROSITEEMAILTEMPLATE
        on PROGRAM.ID = PROGRAM_MICROSITEEMAILTEMPLATE.PROGRAMID
    where     
        (PROGRAM.ISPREREGISTERED = 0) and
        (@NAMELIKE is null or PROGRAM.NAME like @NAMELIKE escape '\') and
        (@ACTIVEONLY = 0 or PROGRAM.ISACTIVE = 1) and
        (
            (PROGRAM.ISDAILYADMISSION = 1) or 
            exists(select 1 from EVENT_CTE where PROGRAM.ID = EVENT_CTE.PARENTID)
        )

    union all    
    select 
        ID, 
        NAME, 
        STARTDATE, 
        STARTTIME, 
        STARTDATETIME, 
        PARENTID, 
        ISACTIVE, 
        ISDAILYADMISSION, 
        ONLINE, 
        ISLIVE,
        PROGRAMNAME,
        EVENT_MICROSITEEMAILTEMPLATEID as MICROSITEEMAILTEMPLATEID,
        coalesce(HASACTIVEEMAILTEMPLATE, 0) as HASACTIVEACKNOWLEDGEMENTEMAIL
    from EVENT_CTE
    order by ISDAILYADMISSION desc, PROGRAMNAME, PARENTID, NAME, STARTDATETIME