USP_KPI_PROGRAM_DAILYATTENDANCE_VALUE

Parameters

Parameter Parameter Type Mode Description
@VALUE int INOUT
@ASOFDATE datetime IN
@PROGRAMSELECTIONID uniqueidentifier IN
@PROGRAMCATEGORYCODEID uniqueidentifier IN
@DATEFRAMENUMBER int IN
@DATEFRAMEINTERVAL tinyint IN
@EVENTTIMEFRAMESTART UDT_HOURMINUTE IN
@EVENTTIMEFRAMEEND UDT_HOURMINUTE IN
@INCLUDEDAILYADMISSION bit IN
@INCLUDESCHEDULEDEVENT bit IN

Definition

Copy


                    CREATE procedure dbo.USP_KPI_PROGRAM_DAILYATTENDANCE_VALUE
                    (
                        @VALUE integer output
                        @ASOFDATE datetime
                        @PROGRAMSELECTIONID uniqueidentifier = null,
                        @PROGRAMCATEGORYCODEID uniqueidentifier = null,
                        @DATEFRAMENUMBER integer,
                        @DATEFRAMEINTERVAL tinyint,
                        @EVENTTIMEFRAMESTART dbo.UDT_HOURMINUTE,
                        @EVENTTIMEFRAMEEND dbo.UDT_HOURMINUTE,
                        @INCLUDEDAILYADMISSION bit,
                        @INCLUDESCHEDULEDEVENT bit
                    )
                    as
                        set nocount on;

                        declare @CURRENTDATE datetime = dbo.UFN_DATE_GETLATESTTIME(getdate())
                        if @ASOFDATE is not null
                            set @CURRENTDATE = dbo.UFN_DATE_GETLATESTTIME(@ASOFDATE)

                        declare @STARTDATE datetime = null
                        set @STARTDATE = case @DATEFRAMEINTERVAL
                            when 0 then dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day, -1 * @DATEFRAMENUMBER, @CURRENTDATE))
                            when 1 then dbo.UFN_DATE_GETEARLIESTTIME(dateadd(week, -1 * @DATEFRAMENUMBER, @CURRENTDATE))
                            when 2 then dbo.UFN_DATE_GETEARLIESTTIME(dateadd(month, -1 * @DATEFRAMENUMBER, @CURRENTDATE))
                            when 3 then dbo.UFN_DATE_GETEARLIESTTIME(dateadd(year, -1 * @DATEFRAMENUMBER, @CURRENTDATE))
                        end

                        --Attendance

                        select @VALUE = coalesce(sum([SALESORDERITEM].[QUANTITY]),0)
                        from dbo.[SALESORDERITEMTICKET]
                        inner join dbo.[SALESORDERITEM]
                            on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID]
                        inner join dbo.[SALESORDER]
                            on [SALESORDERITEM].[SALESORDERID] = [SALESORDER].[ID]
                        left join dbo.[EVENT]
                            on [SALESORDERITEMTICKET].[EVENTID] = [EVENT].[ID]
                        left join dbo.[SALESORDERITEMITEMDISCOUNT]
                            on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEMITEMDISCOUNT].[SALESORDERITEMID]
                        inner join dbo.[PROGRAM]
                            on [SALESORDERITEMTICKET].[PROGRAMID] = [PROGRAM].[ID] or
                                [EVENT].[PROGRAMID] = [PROGRAM].[ID]
                        left join dbo.[RESERVATION]
                            on [SALESORDER].[ID] = [RESERVATION].[ID]
                        where 
                            ( 
                                @PROGRAMSELECTIONID is null or
                                [PROGRAM].[ID] in (select [ID] from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@PROGRAMSELECTIONID))
                            ) and
                            (
                                @PROGRAMCATEGORYCODEID is null or
                                [PROGRAM].[PROGRAMCATEGORYCODEID] = @PROGRAMCATEGORYCODEID
                            ) and
                            (
                                (--Scheduled event

                                    [PROGRAM].[ISDAILYADMISSION] = 0 and
                                    @INCLUDESCHEDULEDEVENT = 1 and
                                    [EVENT].[STARTDATE] between @STARTDATE and @CURRENTDATE and
                                    [EVENT].[STARTTIME] between @EVENTTIMEFRAMESTART and @EVENTTIMEFRAMEEND
                                ) or
                                (--Daily admission

                                    [PROGRAM].[ISDAILYADMISSION] = 1 and
                                    @INCLUDEDAILYADMISSION = 1 and
                                    (
                                        (--Daily, Advance, Online sales

                                            [SALESORDER].[SALESMETHODTYPECODE] in (0,1,2) and
                                            [SALESORDER].[TRANSACTIONDATE] between @STARTDATE and @CURRENTDATE and
                                            [SALESORDER].[STATUSCODE] = 1
                                        ) or
                                        (--Group sales

                                            [SALESORDER].[SALESMETHODTYPECODE] = 3 and
                                            [RESERVATION].[ARRIVALDATE] between @STARTDATE and @CURRENTDATE and
                                            [SALESORDER].[STATUSCODE] in (1,3)
                                        )
                                    )
                                )
                            )