UFN_EVENT_GETAVAILABILITYWITHEVENTS_BYDATE
Returns all events and their availability filtered by a date range.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DATESELECTTYPE | tinyint | IN | |
@STARTDATETIMEWITHOFFSET | datetimeoffset | IN | |
@ENDDATETIMEWITHOFFSET | datetimeoffset | IN | |
@CURRENTDATETIMEWITHOFFSET | datetimeoffset | IN | |
@SALESMETHODID | uniqueidentifier | IN | |
@SHOWPAST | bit | IN | |
@STARTDATE | date | IN | |
@ENDDATE | date | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE function dbo.UFN_EVENT_GETAVAILABILITYWITHEVENTS_BYDATE
(
@DATESELECTTYPE tinyint = 0,
@STARTDATETIMEWITHOFFSET datetimeoffset = null,
@ENDDATETIMEWITHOFFSET datetimeoffset = null,
@CURRENTDATETIMEWITHOFFSET datetimeoffset = null,
@SALESMETHODID uniqueidentifier = null,
@SHOWPAST bit = null,
@STARTDATE date,
@ENDDATE date,
@CURRENTDATE datetime
)
returns table
as return
with ORDERED_CTE
as
(
select
SALESORDERITEMTICKET.EVENTID,
sum(SALESORDERITEM.QUANTITY) as ORDEREDQUANTITY
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMTICKET on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
inner join dbo.SALESORDER on SALESORDERITEM.SALESORDERID = SALESORDER.ID
where SALESORDER.STATUSCODE not in (1, 5) -- exclude complete and cancelled
group by SALESORDERITEMTICKET.EVENTID
),
TICKET_CTE as
(
select
EVENTID,
count(ID) as TICKETQUANTITY
from dbo.TICKET
where
TICKET.STATUSCODE in (0,1)
group by EVENTID
),
EXPIRED_CTE as
(
select SALESORDERITEMTICKET.EVENTID,
sum(SALESORDERITEM.QUANTITY) as EXPIREDQUANTITY
from dbo.SALESORDERRESERVEDITEM
inner join dbo.SALESORDERITEMTICKET
on SALESORDERITEMTICKET.ID = SALESORDERRESERVEDITEM.ID
inner join dbo.SALESORDERITEM
on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
inner join dbo.SALESORDER
on SALESORDERITEM.SALESORDERID = SALESORDER.ID
where
EXPIRATIONDATE <= @CURRENTDATE and
SALESORDER.STATUSCODE <> 7
group by SALESORDERITEMTICKET.EVENTID
)
select
EVENT.ID as EVENTID,
EVENT.CAPACITY -
(
coalesce(TICKET_CTE.TICKETQUANTITY,0)
+ coalesce(ORDERED_CTE.ORDEREDQUANTITY,0)
- coalesce(EXPIRED_CTE.EXPIREDQUANTITY, 0)
) as QUANTITY,
[EVENTSTATUSCODE].[CODE] as [EVENTSTATUSCODE],
case
when (@CURRENTDATETIMEWITHOFFSET between [EVENTONSALESDATETIMEWITHOFFSET].[TIME] and [EVENTOFFSALESDATETIMEWITHOFFSET].[TIME]) then 1
else 0
end AVAILABLEFORSALE
from dbo.EVENT
inner join dbo.EVENTSALESMETHOD
on
[EVENT].ID = EVENTSALESMETHOD.EVENTID and
[EVENTSALESMETHOD].[SALESMETHODID] = @SALESMETHODID and
[EVENTSALESMETHOD].[ONSALEDATETIMEWITHOFFSET] <= @CURRENTDATETIMEWITHOFFSET and
(
@DATESELECTTYPE = 0
or EVENT.STARTDATE between @STARTDATE and @ENDDATE
)
left join dbo.PROGRAMSALESMETHOD
on
[EVENT].PROGRAMID = PROGRAMSALESMETHOD.PROGRAMID and
[PROGRAMSALESMETHOD].[SALESMETHODID] = @SALESMETHODID
cross apply (
select
case
when [PROGRAMSALESMETHOD].[ONSALETYPECODE] is not null then
case [PROGRAMSALESMETHOD].[ONSALETYPECODE]
when 0 then [EVENT].DATEADDED -- Immediately available
when 1 then [PROGRAMSALESMETHOD].ONSALEDATE
when 2 then dateadd(dd, -1 * [PROGRAMSALESMETHOD].[ONSALETIMEBEFORE], [EVENT].[STARTDATETIMEWITHOFFSET])
when 3 then dateadd(ww, -1 * [PROGRAMSALESMETHOD].[ONSALETIMEBEFORE], [EVENT].[STARTDATETIMEWITHOFFSET])
when 4 then dateadd(mm, -1 * [PROGRAMSALESMETHOD].[ONSALETIMEBEFORE], [EVENT].[STARTDATETIMEWITHOFFSET])
end
else [EVENT].DATEADDED
end as [TIME]
) [EVENTONSALESDATETIMEWITHOFFSET]
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]
cross apply (
select
case
when (@CURRENTDATETIMEWITHOFFSET between [EVENT].[STARTDATETIMEWITHOFFSET] and [EVENTOFFSALESDATETIMEWITHOFFSET].[TIME])
then 1 --In progress event
when @CURRENTDATETIMEWITHOFFSET < [EVENTOFFSALESDATETIMEWITHOFFSET].[TIME] then 0 --Future Event
else 2 --Past Event
end as [CODE]
) as [EVENTSTATUSCODE]
left join TICKET_CTE on
TICKET_CTE.EVENTID = EVENT.ID
left join ORDERED_CTE on
ORDERED_CTE.EVENTID = EVENT.ID
left join EXPIRED_CTE on
EXPIRED_CTE.EVENTID = EVENT.ID
where
(@SHOWPAST = 1) or
[EVENTSTATUSCODE].[CODE] in (0,1)