UFN_EVENT_ISONSALE

Returns whether the specified event is on-sale information for a given date

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN
@SALEDATE datetime IN
@SALESMETHODTYPECODE tinyint IN

Definition

Copy


        CREATE function dbo.UFN_EVENT_ISONSALE
        (
            @EVENTID uniqueidentifier,
            @SALEDATE datetime,
            @SALESMETHODTYPECODE tinyint
        )
        returns bit
        with execute as caller
        as begin
            declare @ONSALE bit = 0

            declare @ONSALEDATETIME datetime
            declare @SALESMETHODID uniqueidentifier
            declare @OFFSALE datetime

            set @SALESMETHODID = dbo.UFN_SALESMETHOD_GETIDFROMTYPECODE(@SALESMETHODTYPECODE)

            select
                @ONSALEDATETIME = EVENTSALESMETHOD.ONSALEDATETIME,
                @OFFSALE = case PROGRAMSALESMETHOD.ONSALEENDTYPECODE 
                            when 0 then [EVENT].[STARTDATETIME]
                            when 1 then dateadd(mi, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIME])
                            when 2 then dateadd(hh, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIME])
                            when 3 then dateadd(mi, [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIME])
                            end
            from
                dbo.EVENTSALESMETHOD
            inner join dbo.EVENT on EVENTSALESMETHOD.EVENTID = EVENT.ID
            left join dbo.PROGRAMSALESMETHOD on 
                EVENTSALESMETHOD.SALESMETHODID    = PROGRAMSALESMETHOD.SALESMETHODID and
                EVENT.PROGRAMID = PROGRAMSALESMETHOD.PROGRAMID
            where
                EVENTSALESMETHOD.SALESMETHODID = @SALESMETHODID and
                EVENTID = @EVENTID and
                (PROGRAMSALESMETHOD.SALESMETHODID is null or PROGRAMSALESMETHOD.SALESMETHODID = @SALESMETHODID)


            if @ONSALEDATETIME is not null
            begin
                if @ONSALEDATETIME <= @SALEDATE and (@OFFSALE is null or @SALEDATE <= @OFFSALE)
                    set @ONSALE = 1
            end

            return @ONSALE
        end