USP_REPORT_SCHEDULEDTICKETDETAIL

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN
@USERNAME nvarchar(100) IN
@SORTBY tinyint IN

Definition

Copy

create procedure dbo.USP_REPORT_SCHEDULEDTICKETDETAIL
(
    @EVENTID uniqueidentifier,
    @USERNAME nvarchar(100),
    @SORTBY tinyint = 0  -- allows the user to sort by full name when 0, last name (keyname) when 1
)
as  

set nocount on

declare @APPUSERID uniqueidentifier;
select @APPUSERID = ID from dbo.APPUSER where USERNAME = @USERNAME

declare @CURRDATE datetime = getdate()

-- These security checks deactivate links to pages that the user
-- has been denied. This is merely a convenience, not the actual security.
-- Therefore it has been designed to 'fail open', i.e. show the links
-- if the user is not found.
declare @GRANTEDADVANCESALES bit = 1;
declare @GRANTEDORDERPAGE bit = 1;
declare @GRANTEDCONSTITUENTPAGE bit = 1;
declare @GRANTEDRESERVATIONPAGE bit = 1;

if not @APPUSERID is null and not dbo.UFN_APPUSER_ISSYSADMIN(@APPUSERID) = 1
begin
    select @GRANTEDADVANCESALES = dbo.UFN_SECURITY_APPUSER_GRANTED_DATALIST_IN_SYSTEMROLE(@APPUSERID, 'BCE1D740-D4FB-4DFC-A047-B7B487366EC0')
    select @GRANTEDORDERPAGE = dbo.UFN_SECURITY_APPUSER_GRANTED_PAGEEXPRESSIONFORM_IN_SYSTEMROLE(@APPUSERID, '256be822-d0b4-45dd-a42a-8f4eb054a4ad')
    select @GRANTEDCONSTITUENTPAGE = dbo.UFN_SECURITY_APPUSER_GRANTED_PAGEEXPRESSIONFORM_IN_SYSTEMROLE(@APPUSERID, '88159265-2B7E-4c7b-82A2-119D01ECD40F')
    select @GRANTEDRESERVATIONPAGE = dbo.UFN_SECURITY_APPUSER_GRANTED_PAGEEXPRESSIONFORM_IN_SYSTEMROLE(@APPUSERID, '4ac8ed9d-413a-4ca3-98d3-10680a2b0151')
end;

with TICKETDETAIL_CTE as
(
    select distinct
        CONSTITUENT.ID as ID,
        CONSTITUENT.NAME as NAME,
        CONSTITUENT.KEYNAME as KEYNAME,
        CONSTITUENT.KEYNAMEPREFIX as KEYNAMEPREFIX,
        CONSTITUENT.DISPLAYNAME as DISPLAYNAME,
        CONSTITUENT.FIRSTNAME as FIRSTNAME,
        CONSTITUENT.MIDDLENAME as MIDDLENAME,
        CONSTITUENT.ISORGANIZATION as ISORGANIZATION,
        CONSTITUENT.ISGROUP as ISGROUP,
        case
            when CONSTITUENT.ID is null then 
                '---'
            when MEMBER.ID is null then 
                'No'
            else 
                'Yes'
        end as MEMBER,
        PRICETYPECODE.[DESCRIPTION] + ' - ' + 
            case
                when TICKET.EVENTID is null then 
                    cast(cast(sum(SALESORDERITEM.QUANTITY) as int) as varchar)
                else 
                    cast(coalesce(count(TICKET.ID), 0) as varchar)
            end as TICKETS,
        SALESORDER.SEQUENCEID as ORDERNUMBER,
        case
            when TOTALS.BALANCE <= 0 
            then 
                'Yes'
            else 
                'No'
        end as ORDERPAID,
        case
            when @GRANTEDCONSTITUENTPAGE = 1 then 
                'http://www.blackbaud.com/CONSTITUENTID?CONSTITUENTID=' + CONVERT(nvarchar(36), CONSTITUENT.ID)
            else 
                null
        end as CONSTITUENTURL,
        @USERNAME as USERNAME,
        SALESORDER.ID as SALESORDERID,
        SALESORDER.SALESMETHODTYPECODE as SALESMETHODTYPECODE,
        SALESORDER.STATUSCODE as STATUSCODE
    from 
        dbo.[EVENT]
    inner join 
        dbo.SALESORDERITEMTICKET on SALESORDERITEMTICKET.EVENTID = [EVENT].ID
    inner join 
        dbo.SALESORDERITEM on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
    inner join 
        dbo.SALESORDER on SALESORDERITEM.SALESORDERID = SALESORDER.ID
    inner join 
        dbo.PRICETYPECODE on SALESORDERITEMTICKET.PRICETYPECODEID = PRICETYPECODE.ID
    left outer join 
        dbo.TICKET on TICKET.SALESORDERITEMTICKETID = SALESORDERITEMTICKET.ID
    left outer join 
        dbo.CONSTITUENT on SALESORDER.CONSTITUENTID = CONSTITUENT.ID
    left outer join 
        dbo.MEMBER on MEMBER.CONSTITUENTID = CONSTITUENT.ID and MEMBER.ISDROPPED = 0 and 0 = (select STATUSCODE from dbo.MEMBERSHIP where ID = MEMBER.MEMBERSHIPID)
    left outer join 
        dbo.SALESORDERRESERVEDITEM on SALESORDERITEM.ID = SALESORDERRESERVEDITEM.ID
    outer apply
        dbo.UFN_SALESORDER_TOTALS(SALESORDER.ID) as TOTALS
    where 
        [EVENT].ID = @EVENTID 
        and not [EVENT].PROGRAMID is null 
        and (TICKET.STATUSCODE in (0, 1) or TICKET.ID is null)
        and not SALESORDER.STATUSCODE = 5
        and (
            SALESORDER.STATUSCODE in (1,7) or --Unresolved, Complete Online Orders can still have reserved items
            SALESORDERRESERVEDITEM.EXPIRATIONDATE is null or 
            SALESORDERRESERVEDITEM.EXPIRATIONDATE >= @CURRDATE
        )
    group by 
        CONSTITUENT.NAME, 
        PRICETYPECODE.[DESCRIPTION], 
        SALESORDER.SEQUENCEID, 
        TICKET.EVENTID,
        SALESORDER.ID, 
        CONSTITUENT.ID, 
        MEMBER.ID, 
        SALESORDER.SALESMETHODTYPECODE, 
        SALESORDER.STATUSCODE, 
        CONSTITUENT.NAME,
        CONSTITUENT.KEYNAME,
        CONSTITUENT.KEYNAMEPREFIX,
        CONSTITUENT.DISPLAYNAME,
        CONSTITUENT.FIRSTNAME,
        CONSTITUENT.MIDDLENAME,
        CONSTITUENT.ISORGANIZATION,
        CONSTITUENT.ISGROUP,
        TOTALS.BALANCE
)

select
    case
        when TICKETDETAIL_CTE.KEYNAME is null then
            'Anonymous'
        when @SORTBY = 1 then
            case TICKETDETAIL_CTE.ISORGANIZATION 
                when 1 then
                    case TICKETDETAIL_CTE.KEYNAMEPREFIX 
                        when '' then 
                            TICKETDETAIL_CTE.KEYNAME 
                        else 
                            TICKETDETAIL_CTE.KEYNAME + ', ' + TICKETDETAIL_CTE.KEYNAMEPREFIX 
                    end
                else
                    case TICKETDETAIL_CTE.ISGROUP 
                        when 1 then
                            case TICKETDETAIL_CTE.DISPLAYNAME 
                                when '' then 
                                    TICKETDETAIL_CTE.KEYNAME 
                                else 
                                    TICKETDETAIL_CTE.DISPLAYNAME 
                            end
                        else
                            dbo.UFN_NAMEFORMAT_08(TICKETDETAIL_CTE.ID, TICKETDETAIL_CTE.KEYNAME, TICKETDETAIL_CTE.FIRSTNAME, TICKETDETAIL_CTE.MIDDLENAME, 
                                null, null, null, null, null, null, null)
                    end
            end
        else
            TICKETDETAIL_CTE.NAME
    end as NAME,
    MEMBER,
    TICKETS,
    ORDERNUMBER,
    ORDERPAID,
    case
        when not STATUSCODE in (1, 6)
            then null
        when SALESMETHODTYPECODE = 3 and @GRANTEDRESERVATIONPAGE = 1 
            then 'http://www.blackbaud.com/RESERVATIONID?RESERVATIONID=' + CONVERT(nvarchar(36), SALESORDERID)
        when @GRANTEDORDERPAGE = 1 and (SALESMETHODTYPECODE in (0, 2) or 
            (SALESMETHODTYPECODE = 1 and (STATUSCODE = 1 or @GRANTEDADVANCESALES = 1)) or
            (SALESMETHODTYPECODE = 3 and STATUSCODE = 1) )
            then 
                case when ORDERPAID = 'Yes'
                then 
                    'http://www.blackbaud.com/SALESORDERID?SALESORDERID=' + CONVERT(nvarchar(36), SALESORDERID) 
                else 
                    'http://www.blackbaud.com/ADVANCESALESORDERID?SALESORDERID=' + CONVERT(nvarchar(36), SALESORDERID)
                end
        else null
    end as SALESORDERURL,
    CONSTITUENTURL,
    USERNAME
from 
    TICKETDETAIL_CTE
order by 
    NAME