USP_REPORT_PROGRAMREGISTRANTS
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROGRAMID | uniqueidentifier | IN | |
@FROMDATE | date | IN | |
@TODATE | date | IN | |
@SORTTYPE | tinyint | IN | |
@EVENTID | uniqueidentifier | IN | |
@REGISTRATIONSECTIONSTOINCLUDE | xml | IN |
Definition
Copy
create procedure dbo.USP_REPORT_PROGRAMREGISTRANTS
(
@PROGRAMID uniqueidentifier = null,
@FROMDATE date = null,
@TODATE date = null,
@SORTTYPE tinyint = 0,
@EVENTID uniqueidentifier = null ,
@REGISTRATIONSECTIONSTOINCLUDE xml = null
)
as
set nocount on;
select
case when @SORTTYPE = 1
then dbo.UFN_NAMEFORMAT_08(CONSTITUENT.ID, CONSTITUENT.KEYNAME, CONSTITUENT.FIRSTNAME, CONSTITUENT.MIDDLENAME, null, null, null, null, null, null, null)
else isnull(CONSTITUENT.NAME, '')
end as REGISTRANTNAME,
REGISTRANT.ATTENDED as ATTENDED,
case when ORDERTOTALS.BALANCE > 0
then 0
else
1
end as ORDERPAID,
(select dbo.UDA_BUILDLIST(PREFERENCE.NAME) from
(
select EVENTPREFERENCE.NAME
from dbo.EVENTPREFERENCE
inner join dbo.REGISTRANTPREFERENCE
on REGISTRANTPREFERENCE.EVENTPREFERENCEID = EVENTPREFERENCE.ID
inner join dbo.REGISTRANT REG
on REG.ID = REGISTRANTPREFERENCE.REGISTRANTID
where REG.ID = REGISTRANT.ID
) as [PREFERENCE]
) as PREFERENCES,
REGISTRANT.NOTES as NOTES,
EVENT.NAME as EVENTNAME,
(select count (REG2.ID) from dbo.REGISTRANT REG2
inner join dbo.SALESORDERITEMTICKETREGISTRANT S on REG2.ID = S.REGISTRANTID -- this inner join filters out registrants without tickets (in case 'willnotattend' is not marked)
where REG2.EVENTID = REGISTRANT.EVENTID and REG2.WILLNOTATTEND = 0 and REG2.ISCANCELLED = 0) as REGISTRANTCOUNT,
(select count (ID) from dbo.REGISTRANT REG3 where REG3.EVENTID = REGISTRANT.EVENTID and REG3.ATTENDED = 1 and REG3.ISCANCELLED = 0) as ATTENDEDCOUNT,
REGISTRANT.EVENTID as EVENTID,
dbo.UFN_HOURMINUTE_DISPLAYTIME(EVENT.STARTTIME) as STARTTIME,
dbo.UFN_HOURMINUTE_DISPLAYTIME(EVENT.ENDTIME) as ENDTIME,
EVENT.STARTDATETIME as STARTDATE,
dbo.UFN_EVENT_GETLOCATIONNAME(EVENT.ID) as LOCATIONS,
(select dbo.UDA_BUILDLIST(RESTRICTION.NAME) from
(
select EVENTRESTRICTIONOPTION.NAME
from dbo.EVENTRESTRICTIONOPTION
inner join dbo.CONSTITUENTRESTRICTIONOPTION
on CONSTITUENTRESTRICTIONOPTION.EVENTRESTRICTIONOPTIONID = EVENTRESTRICTIONOPTION.ID
where CONSTITUENTRESTRICTIONOPTION.CONSTITUENTID = REGISTRANT.CONSTITUENTID
) as [RESTRICTION]
) as RESTRICTIONS,
case when @SORTTYPE = 1
then dbo.UFN_REGISTRANT_GETHOSTNAME_LFM(REGISTRANT.ID, REGISTRANT.GUESTOFREGISTRANTID)
else dbo.UFN_REGISTRANT_GETHOSTNAME(REGISTRANT.ID, REGISTRANT.GUESTOFREGISTRANTID)
end as HOST,
REGISTRANT.ISCANCELLED as CANCELLED,
REGISTRANT.ID as REGISTRANTID,
(
select
dbo.UDA_BUILDLISTWITHDELIMITER(REGINFO.VALUE, ',')
from dbo.UFN_REPORT_REGISTRANTREGISTRATIONINFORMATION(REGISTRANT.ID, @REGISTRATIONSECTIONSTOINCLUDE) REGINFO
) as REGISTRATIONINFORMATION,
coalesce(PHONE.NUMBER, '') as PHONE,
coalesce(EMAILADDRESS.EMAILADDRESS, '') as EMAIL,
case
when EVENT.HASCUSTOMREGISTRATIONINFORMATION = 1 then
case
when exists (
select 1
from dbo.PROGRAMEVENTREGISTRATIONSECTION
inner join dbo.PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION
on PROGRAMEVENTREGISTRATIONSECTION.ID = PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.PROGRAMEVENTREGISTRATIONSECTIONID
where PROGRAMEVENTREGISTRATIONSECTION.EVENTID = EVENT.ID
) then 1
else 0
end
else
case
when exists (
select 1
from dbo.PROGRAMEVENTREGISTRATIONSECTION
inner join dbo.PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION
on PROGRAMEVENTREGISTRATIONSECTION.ID = PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.PROGRAMEVENTREGISTRATIONSECTIONID
where PROGRAMEVENTREGISTRATIONSECTION.PROGRAMID = PROGRAM.ID
) then 1
else 0
end
end as HASREGISTRATIONINFORMATION
from dbo.REGISTRANT
inner join dbo.EVENT on EVENT.ID = REGISTRANT.EVENTID
inner join dbo.PROGRAM on PROGRAM.ID = EVENT.PROGRAMID
inner join dbo.SALESORDERITEMTICKETREGISTRANT on REGISTRANT.ID = SALESORDERITEMTICKETREGISTRANT.REGISTRANTID
inner join dbo.SALESORDERITEM on SALESORDERITEMTICKETREGISTRANT.SALESORDERITEMTICKETID = SALESORDERITEM.ID
left outer join dbo.CONSTITUENT on CONSTITUENT.ID = REGISTRANT.CONSTITUENTID
left outer join dbo.PHONE on CONSTITUENT.ID = PHONE.CONSTITUENTID and PHONE.ISPRIMARY = 1
left outer join dbo.EMAILADDRESS on CONSTITUENT.ID = EMAILADDRESS.CONSTITUENTID and EMAILADDRESS.ISPRIMARY = 1
outer apply dbo.UFN_SALESORDER_TOTALS(SALESORDERITEM.SALESORDERID) as ORDERTOTALS
where (@EVENTID is null and ((PROGRAM.ID = @PROGRAMID) or (@PROGRAMID is null))
and EVENT.STARTDATE between @FROMDATE and @TODATE
and REGISTRANT.WILLNOTATTEND = 0
and PROGRAM.ISACTIVE = 1)
or (@EVENTID = EVENT.ID
and REGISTRANT.WILLNOTATTEND = 0)
order by STARTDATE