USP_SIMPLEDATALIST_SCHEDULEDPROGRAM_BYDATE
Lists the scheduled programs in the system for a specific date.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DATE | datetime | IN | Sale date |
@EVENTDATE | date | IN | Event date |
@SALESMETHODTYPECODE | tinyint | IN | Sales method type |
Definition
Copy
CREATE procedure dbo.USP_SIMPLEDATALIST_SCHEDULEDPROGRAM_BYDATE (
@DATE datetime, -- Currently being passed in as the client's datetime
@EVENTDATE date,
@SALESMETHODTYPECODE tinyint = 0
) as
set nocount on;
declare @SALESMETHODID uniqueidentifier = null;
select @SALESMETHODID = [ID]
from dbo.[SALESMETHOD]
where [TYPECODE] = @SALESMETHODTYPECODE;
-- Inlining on sales logic for performance
declare @EVENTSONSALE table (
ID uniqueidentifier,
PROGRAMID uniqueidentifier,
PROGRAMNAME nvarchar(100)
);
insert into @EVENTSONSALE
select
EVENT.ID,
PROGRAM.ID,
PROGRAM.NAME
from
dbo.EVENT
inner join
dbo.PROGRAM on PROGRAM.ID = EVENT.PROGRAMID
inner join
dbo.EVENTSALESMETHOD on EVENTSALESMETHOD.EVENTID = EVENT.ID and EVENTSALESMETHOD.SALESMETHODID = @SALESMETHODID
left outer join
dbo.PROGRAMSALESMETHOD on PROGRAMSALESMETHOD.PROGRAMID = EVENT.PROGRAMID and PROGRAMSALESMETHOD.SALESMETHODID = @SALESMETHODID
where
EVENT.STARTDATE = @EVENTDATE
and EVENT.ISACTIVE = 1
and PROGRAM.ISACTIVE = 1
and (
@DATE >= EVENTSALESMETHOD.ONSALEDATETIME
and (
((PROGRAMSALESMETHOD.ONSALEENDTYPECODE is null or PROGRAMSALESMETHOD.ONSALEENDTYPECODE = 0) and @DATE < EVENT.STARTDATETIME) -- Event start time
or (PROGRAMSALESMETHOD.ONSALEENDTYPECODE = 1 and -PROGRAMSALESMETHOD.ONSALEENDINTERVAL > datediff(minute, EVENT.STARTDATETIME, @DATE)) -- Minutes before start
or (PROGRAMSALESMETHOD.ONSALEENDTYPECODE = 2 and cast(-PROGRAMSALESMETHOD.ONSALEENDINTERVAL as bigint) * 60 > datediff(minute, EVENT.STARTDATETIME, @DATE)) -- Hours before start
or (PROGRAMSALESMETHOD.ONSALEENDTYPECODE = 3 and PROGRAMSALESMETHOD.ONSALEENDINTERVAL > datediff(minute, EVENT.STARTDATETIME, @DATE)) -- Minutes after start
)
);
-- Doing a separate join on the ticket counts view after events have been
-- filtered by date keeps from having sales order item tables scanned
select distinct
EVENTSONSALE.PROGRAMID as VALUE,
EVENTSONSALE.PROGRAMNAME as LABEL
from
@EVENTSONSALE as EVENTSONSALE
inner join
dbo.V_PROGRAMEVENT_TICKETCOUNTS as TICKETCOUNTS on TICKETCOUNTS.ID = EVENTSONSALE.ID
where
TICKETCOUNTS.AVAILABILITY > 0
order by
EVENTSONSALE.PROGRAMNAME;
return 0;