USP_REVENUEBATCHREGISTRANT_GETREGISTRATIONSANDREGISTRANTMAPPINGS
Returns a registrant's registrations and guests.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@MAINEVENTID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@PACKAGEREGISTRATIONS | xml | INOUT | |
@SINGLEEVENTREGISTRATIONS | xml | INOUT | |
@REGISTRANTMAPPINGS | xml | INOUT | |
@BATCHID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUEBATCHREGISTRANT_GETREGISTRATIONSANDREGISTRANTMAPPINGS
(
@MAINEVENTID uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@PACKAGEREGISTRATIONS xml = null output,
@SINGLEEVENTREGISTRATIONS xml = null output,
@REGISTRANTMAPPINGS xml = null output,
@BATCHID uniqueidentifier = null
)
with execute as caller
as
set nocount on;
--Breaks the registrant registrations down into groups that are mapped to the same set
--registrant packages.
--Sql Server is randomly throwing fatal exception errors parsing this as XML
--Storing as a table to work around issue.
declare @PACKAGEREGISTRATIONSTABLE table
(
[PACKAGEREGISTRATIONID] uniqueidentifier,
[PACKAGEREGISTRATIONPACKAGEID] uniqueidentifier,
[QUANTITY] int,
[AMOUNT] money,
[RECEIPTAMOUNT] money,
[PACKAGEREGISTRANTREGISTRATIONS] xml
);
with [PACKAGEREGISTRATIONS]
as
(
select
row_number() over (partition by BATCHREVENUEREGISTRANTPACKAGE.ID order by BATCHREVENUEREGISTRANT.EVENTID) [ROWNUMBER],
BATCHREVENUEREGISTRANTPACKAGE.ID [REGISTRANTPACKAGEID],
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID [REGISTRANTREGISTRATIONMAPID],
BATCHREVENUEREGISTRANTREGISTRATION.ID [REGISTRANTREGISTRATIONID],
BATCHREVENUEREGISTRANTPACKAGE.REGISTRATIONPACKAGEID,
BATCHREVENUEREGISTRANTREGISTRATION.QUANTITY
from
dbo.BATCHREVENUEREGISTRANTPACKAGE
inner join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANTPACKAGE.ID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
left join dbo.BATCHREVENUEREGISTRANT on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID = BATCHREVENUEREGISTRANT.ID
left join dbo.REGISTRATIONPACKAGE on BATCHREVENUEREGISTRANTPACKAGE.REGISTRATIONPACKAGEID = REGISTRATIONPACKAGE.ID
left join dbo.EVENT RELATEDEVENTS on RELATEDEVENTS.ID = REGISTRATIONPACKAGE.EVENTID --JamesWill WI147843 2011-07-06 Pull in multi-level event packages
where
BATCHREVENUEREGISTRANT.BATCHID = @BATCHID ----JamesWill WI147843 2011-07-06 Limit the search for packages to this batch
and
(
BATCHREVENUEREGISTRANTPACKAGE.CONSTITUENTID = @CONSTITUENTID
or BATCHREVENUEREGISTRANTPACKAGE.GUESTOFCONSTITUENTID = @CONSTITUENTID
)
and
( --JamesWill WI147843 2011-07-06 Search for multi-level event packages
RELATEDEVENTS.MAINEVENTID = @MAINEVENTID
or RELATEDEVENTS.ID = @MAINEVENTID
)
)
insert into
@PACKAGEREGISTRATIONSTABLE(
[PACKAGEREGISTRATIONID],
[PACKAGEREGISTRATIONPACKAGEID],
[QUANTITY],
[AMOUNT],
[RECEIPTAMOUNT],
[PACKAGEREGISTRANTREGISTRATIONS])
select
newid() [PACKAGEREGISTRATIONID],
[PACKAGEREGISTRATIONS].REGISTRATIONPACKAGEID [PACKAGEREGISTRATIONPACKAGEID],
[PACKAGEREGISTRATIONS].QUANTITY,
[REGISTRANTREGISTRATIONSAGGREGATE].AMOUNT,
[REGISTRANTREGISTRATIONSAGGREGATE].RECEIPTAMOUNT,
(
select
BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID [PACKAGEEVENTPRICEID],
BATCHREVENUEREGISTRANTREGISTRATION.ID [PACKAGEREGISTRANTREGISTRATIONID],
BATCHREVENUEREGISTRANTREGISTRATION.AMOUNT,
BATCHREVENUEREGISTRANTREGISTRATION.RECEIPTAMOUNT,
EVENT.NAME [EVENTNAME]
from
(
select top (1)
[PACKAGEREGISTRANTREGISTRATIONS].REGISTRANTREGISTRATIONID,
[PACKAGEREGISTRANTREGISTRATIONS].REGISTRANTPACKAGEID,
[PACKAGEREGISTRANTREGISTRATIONS].REGISTRATIONPACKAGEID
from
[PACKAGEREGISTRATIONS] [PACKAGEREGISTRANTREGISTRATIONS]
where
[PACKAGEREGISTRATIONS].REGISTRANTREGISTRATIONID = [PACKAGEREGISTRANTREGISTRATIONS].REGISTRANTREGISTRATIONID
) [FIRSTREGISTRANTPACKAGE]
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on [FIRSTREGISTRANTPACKAGE].REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
left join dbo.EVENTPRICE on BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
left join dbo.EVENT on EVENTPRICE.EVENTID = EVENT.ID
left join dbo.REGISTRATIONPACKAGEPRICE on
BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = REGISTRATIONPACKAGEPRICE.EVENTPRICEID
and [FIRSTREGISTRANTPACKAGE].REGISTRATIONPACKAGEID = REGISTRATIONPACKAGEPRICE.REGISTRATIONPACKAGEID
where
REGISTRATIONPACKAGEPRICE.ID is not null
order by
EVENT.NAME
for xml path ('ITEM'), type
)
from
[PACKAGEREGISTRATIONS]
cross apply
(
select
sum(BATCHREVENUEREGISTRANTREGISTRATION.AMOUNT) [AMOUNT],
sum(BATCHREVENUEREGISTRANTREGISTRATION.RECEIPTAMOUNT) [RECEIPTAMOUNT]
from
(
select top (1)
[PACKAGEREGISTRANTREGISTRATIONS].REGISTRANTREGISTRATIONID,
[PACKAGEREGISTRANTREGISTRATIONS].REGISTRANTPACKAGEID,
[PACKAGEREGISTRANTREGISTRATIONS].REGISTRATIONPACKAGEID
from
[PACKAGEREGISTRATIONS] [PACKAGEREGISTRANTREGISTRATIONS]
where
[PACKAGEREGISTRATIONS].REGISTRANTREGISTRATIONID = [PACKAGEREGISTRANTREGISTRATIONS].REGISTRANTREGISTRATIONID
) [FIRSTREGISTRANTPACKAGE]
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on [FIRSTREGISTRANTPACKAGE].REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
left join dbo.REGISTRATIONPACKAGEPRICE on
BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = REGISTRATIONPACKAGEPRICE.EVENTPRICEID
and [FIRSTREGISTRANTPACKAGE].REGISTRATIONPACKAGEID = REGISTRATIONPACKAGEPRICE.REGISTRATIONPACKAGEID
where
REGISTRATIONPACKAGEPRICE.ID is not null
) [REGISTRANTREGISTRATIONSAGGREGATE]
where
PACKAGEREGISTRATIONS.ROWNUMBER = 1
group by
PACKAGEREGISTRATIONS.REGISTRANTREGISTRATIONID,
PACKAGEREGISTRATIONS.REGISTRATIONPACKAGEID,
PACKAGEREGISTRATIONS.QUANTITY,
[REGISTRANTREGISTRATIONSAGGREGATE].AMOUNT,
[REGISTRANTREGISTRATIONSAGGREGATE].RECEIPTAMOUNT;
select
@PACKAGEREGISTRATIONS =
(select
[PACKAGEREGISTRATIONID],
[PACKAGEREGISTRATIONPACKAGEID],
QUANTITY,
AMOUNT,
RECEIPTAMOUNT,
PACKAGEREGISTRANTREGISTRATIONS
from @PACKAGEREGISTRATIONSTABLE
for xml path ('ITEM'), root ('PACKAGEREGISTRATIONS'), type);
with [SINGLEEVENTREGISTRATIONS]
as
(
select
BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID [SINGLEEVENTREGISTRATIONEVENTPRICEID],
BATCHREVENUEREGISTRANTREGISTRATION.QUANTITY,
BATCHREVENUEREGISTRANTREGISTRATION.AMOUNT,
BATCHREVENUEREGISTRANTREGISTRATION.RECEIPTAMOUNT,
BATCHREVENUEREGISTRANTREGISTRATION.ID [SINGLEEVENTREGISTRANTREGISTRATIONID],
BATCHREVENUEREGISTRANTREGISTRATION.REGISTRANTID
from
dbo.BATCHREVENUEREGISTRANTREGISTRATION
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANTREGISTRATION.ID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID
left join dbo.BATCHREVENUEREGISTRANTPACKAGE on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTPACKAGE.ID
left join dbo.EVENTPRICE on BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
left join dbo.REGISTRATIONPACKAGEPRICE on
BATCHREVENUEREGISTRANTPACKAGE.REGISTRATIONPACKAGEID = REGISTRATIONPACKAGEPRICE.REGISTRATIONPACKAGEID
and BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = REGISTRATIONPACKAGEPRICE.EVENTPRICEID
where
REGISTRATIONPACKAGEPRICE.ID is null
group by
BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID,
BATCHREVENUEREGISTRANTREGISTRATION.QUANTITY,
BATCHREVENUEREGISTRANTREGISTRATION.AMOUNT,
BATCHREVENUEREGISTRANTREGISTRATION.RECEIPTAMOUNT,
BATCHREVENUEREGISTRANTREGISTRATION.ID,
BATCHREVENUEREGISTRANTREGISTRATION.REGISTRANTID
)
select
@SINGLEEVENTREGISTRATIONS =
(
select
newid() [SINGLEEVENTREGISTRATIONID],
BATCHREVENUEREGISTRANT.EVENTID [SINGLEEVENTREGISTRATIONEVENTID],
[SINGLEEVENTREGISTRATIONS].[SINGLEEVENTREGISTRATIONEVENTPRICEID],
[SINGLEEVENTREGISTRATIONS].[QUANTITY],
[SINGLEEVENTREGISTRATIONS].[AMOUNT],
[SINGLEEVENTREGISTRATIONS].[RECEIPTAMOUNT],
[SINGLEEVENTREGISTRATIONS].[SINGLEEVENTREGISTRANTREGISTRATIONID]
from
[SINGLEEVENTREGISTRATIONS]
left join dbo.BATCHREVENUEREGISTRANT on [SINGLEEVENTREGISTRATIONS].REGISTRANTID = BATCHREVENUEREGISTRANT.ID
left join dbo.EVENT on BATCHREVENUEREGISTRANT.EVENTID = EVENT.ID
where
BATCHREVENUEREGISTRANT.CONSTITUENTID = @CONSTITUENTID
and
(
EVENT.ID = @MAINEVENTID
or
EVENT.MAINEVENTID = @MAINEVENTID
)
and BATCHREVENUEREGISTRANT.BATCHID = @BATCHID
for xml path ('ITEM'), root ('SINGLEEVENTREGISTRATIONS'), type
);
declare @UNKNOWNGUESTWELLKNOWNGUID uniqueidentifier;
set @UNKNOWNGUESTWELLKNOWNGUID = 'C776DAB5-65B2-4258-ADAE-AE396D28E251'; --Well-known GUID for unknown guest
declare @CONSTITUENTRECORDTYPEID uniqueidentifier
set @CONSTITUENTRECORDTYPEID=dbo.UFN_RECORDTYPE_GETIDBYNAME('Constituent');
--There is a bug in SQL Server that causes error message 6611: "The XML data type is damaged." to
--occur if FOR XML is combined with multiple calls to nodes(). By incrementally adding registrations
--to a table variable, we avoid the error. See "Bug: #50000918 (SQL Hotfix)." on MSDN.
declare @REGISTRANTMAPPINGSITEM table
(
[ID] uniqueidentifier default newid(),
[REGISTRANTPACKAGEID] uniqueidentifier,
[REGISTRATIONPACKAGEID] uniqueidentifier,
[EVENTID] uniqueidentifier,
[EVENTPRICEID] uniqueidentifier,
[REGISTRANTID] uniqueidentifier,
[REGISTRATIONSCOLLECTIONID] uniqueidentifier,
[SINGLEEVENTREGISTRANTREGISTRATIONMAPID] uniqueidentifier,
[NAME] nvarchar(250),
[GUESTCONSTITUENTID] uniqueidentifier,
[WAIVEREGISTRATIONFEE] bit,
[REGISTRANTREGISTRATIONMAPS] xml,
[REGISTRANTWAIVEBENEFITS] xml,
[PREFERENCES] xml,
[BATCHREVENUEREGISTRANTID] uniqueidentifier
);
--Registrant mappings linked to packages
insert into @REGISTRANTMAPPINGSITEM
(
[REGISTRANTPACKAGEID],
[REGISTRATIONPACKAGEID],
[EVENTID],
[EVENTPRICEID],
[REGISTRANTID],
[REGISTRATIONSCOLLECTIONID],
[SINGLEEVENTREGISTRANTREGISTRATIONMAPID],
[NAME],
[GUESTCONSTITUENTID],
[WAIVEREGISTRATIONFEE],
[BATCHREVENUEREGISTRANTID]
)
select
BATCHREVENUEREGISTRANTPACKAGE.ID [REGISTRANTPACKAGEID],
REGISTRATIONPACKAGE.ID [REGISTRATIONPACKAGEID],
null [EVENTID],
null [EVENTPRICEID],
null [REGISTRANTID], --REGISTRANTID is only used for additional guests
[PACKAGESFIRSTREGISTRATION].PACKAGEREGISTRATIONID [REGISTRATIONSCOLLECTIONID],
null [SINGLEEVENTREGISTRANTREGISTRATIONMAPID],
REGISTRATIONPACKAGE.NAME,
coalesce(
BATCHREVENUEREGISTRANT.CONSTITUENTID,
@UNKNOWNGUESTWELLKNOWNGUID
) [GUESTCONSTITUENTID],
case
when
[PACKAGESFIRSTREGISTRATION].AMOUNT = 0 --TODO: What if the other registrations have amount > 0
and
dbo.UFN_REGISTRATIONPACKAGE_GETAMOUNT(REGISTRATIONPACKAGE.ID) > 0
then
1
else
0
end [WAIVEREGISTRATIONFEE],
BATCHREVENUEREGISTRANT.ID
from
dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
left join dbo.BATCHREVENUEREGISTRANT on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID = BATCHREVENUEREGISTRANT.ID
left join @PACKAGEREGISTRATIONSTABLE [PACKAGESFIRSTREGISTRATION] on
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = PACKAGEREGISTRANTREGISTRATIONS.value('/ITEM[1]/PACKAGEREGISTRANTREGISTRATIONID[1]', 'uniqueidentifier')
left join dbo.BATCHREVENUEREGISTRANTPACKAGE on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTPACKAGE.ID
left join dbo.REGISTRATIONPACKAGE on BATCHREVENUEREGISTRANTPACKAGE.REGISTRATIONPACKAGEID = REGISTRATIONPACKAGE.ID
where
PACKAGEREGISTRANTREGISTRATIONS.value('/ITEM[1]/PACKAGEREGISTRANTREGISTRATIONID[1]', 'uniqueidentifier') is not null;
--Registrant mappings not linked to packages
insert into @REGISTRANTMAPPINGSITEM
(
[REGISTRANTPACKAGEID],
[REGISTRATIONPACKAGEID],
[EVENTID],
[EVENTPRICEID],
[REGISTRANTID],
[REGISTRATIONSCOLLECTIONID],
[SINGLEEVENTREGISTRANTREGISTRATIONMAPID],
[NAME],
[GUESTCONSTITUENTID],
[WAIVEREGISTRATIONFEE],
[BATCHREVENUEREGISTRANTID]
)
select
null [REGISTRANTPACKAGEID],
null [REGISTRATIONPACKAGEID],
EVENT.ID [EVENTID],
EVENTPRICE.ID [EVENTPRICEID],
null [REGISTRANTID], --REGISTRANTID is only used for additional guests
[SINGLEEVENTREGISTRATION].c.value('SINGLEEVENTREGISTRATIONID[1]', 'uniqueidentifier') [REGISTRATIONSCOLLECTIONID],
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID [SINGLEEVENTREGISTRANTREGISTRATIONMAPID], --Store registrant registration map ID here temporarily
(EVENT.NAME + ' (' + EVENTREGISTRATIONTYPE.DESCRIPTION + ')') [NAME], --TODO: Internationalize
coalesce(
BATCHREVENUEREGISTRANT.CONSTITUENTID,
@UNKNOWNGUESTWELLKNOWNGUID
) [GUESTCONSTITUENTID],
case
when
[SINGLEEVENTREGISTRATION].c.value('AMOUNT[1]', 'money') = 0
and
EVENTPRICE.AMOUNT > 0
then
1
else
0
end [WAIVEREGISTRATIONFEE],
BATCHREVENUEREGISTRANT.ID
from
dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
left join dbo.BATCHREVENUEREGISTRANT on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID = BATCHREVENUEREGISTRANT.ID
left join @SINGLEEVENTREGISTRATIONS.nodes('/SINGLEEVENTREGISTRATIONS/ITEM') [SINGLEEVENTREGISTRATION](c) on
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = [SINGLEEVENTREGISTRATION].c.value('SINGLEEVENTREGISTRANTREGISTRATIONID[1]', 'uniqueidentifier')
left join dbo.EVENT on [SINGLEEVENTREGISTRATION].c.value('SINGLEEVENTREGISTRATIONEVENTID[1]', 'uniqueidentifier') = EVENT.ID
left join dbo.EVENTPRICE on [SINGLEEVENTREGISTRATION].c.value('SINGLEEVENTREGISTRATIONEVENTPRICEID[1]', 'uniqueidentifier') = EVENTPRICE.ID
left join dbo.EVENTREGISTRATIONTYPE on EVENTPRICE.EVENTREGISTRATIONTYPEID = EVENTREGISTRATIONTYPE.ID
where
[SINGLEEVENTREGISTRATION].c is not null;
--Additional guests not linked to registrant mappings
insert into @REGISTRANTMAPPINGSITEM
(
[REGISTRANTPACKAGEID],
[REGISTRATIONPACKAGEID],
[EVENTID],
[EVENTPRICEID],
[REGISTRANTID],
[REGISTRATIONSCOLLECTIONID],
[SINGLEEVENTREGISTRANTREGISTRATIONMAPID],
[NAME],
[GUESTCONSTITUENTID],
[WAIVEREGISTRATIONFEE],
[BATCHREVENUEREGISTRANTID]
)
select
null [REGISTRANTPACKAGEID],
null [REGISTRATIONPACKAGEID],
BATCHREVENUEREGISTRANT.EVENTID [EVENTID],
null [EVENTPRICEID],
BATCHREVENUEREGISTRANT.ID [REGISTRANTID], --Use REGISTRANTID for these additional guests
null [REGISTRATIONSCOLLECTIONID],
null [SINGLEEVENTREGISTRANTREGISTRATIONMAPID],
EVENT.NAME,
coalesce(
BATCHREVENUEREGISTRANT.CONSTITUENTID,
@UNKNOWNGUESTWELLKNOWNGUID
) [GUESTCONSTITUENTID],
0 [WAIVEREGISTRATIONFEE],
BATCHREVENUEREGISTRANT.ID
from
dbo.BATCHREVENUEREGISTRANT
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANT.ID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID
left join dbo.BATCHREVENUEREGISTRANT [HOST] on BATCHREVENUEREGISTRANT.GUESTOFREGISTRANTID = [HOST].ID
left join dbo.EVENT on BATCHREVENUEREGISTRANT.EVENTID = EVENT.ID
where
[HOST].CONSTITUENTID = @CONSTITUENTID
and
(
EVENT.ID = @MAINEVENTID
or
EVENT.MAINEVENTID = @MAINEVENTID
)
and [HOST].BATCHID = @BATCHID
and
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is null;
with [FIRSTREGISTRANTMAPPINGBYREGISTRANT]
as
(
select
[REGISTRANTMAPPINGSBYREGISTRANT].[ID],
[REGISTRANTMAPPINGSBYREGISTRANT].[REGISTRANTID]
from
(
select
row_number() over
(
partition by
[REGISTRANTMAPPINGSITEMREGISTRANT].[REGISTRANTID]
order by
case
when [REGISTRANTMAPPINGSITEM].[REGISTRATIONPACKAGEID] is null then 1
else 0
end,
[REGISTRANTMAPPINGSITEM].[NAME]
) [ROW],
[REGISTRANTMAPPINGSITEM].[ID],
[REGISTRANTMAPPINGSITEMREGISTRANT].[REGISTRANTID]
from
@REGISTRANTMAPPINGSITEM [REGISTRANTMAPPINGSITEM]
outer apply
(
select
[REGISTRANTREGISTRATIONMAPSUNION].[EVENTID],
[REGISTRANTREGISTRATIONMAPSUNION].[REGISTRANTID],
[REGISTRANTREGISTRATIONMAPSUNION].[REGISTRANTREGISTRATIONMAPID]
from
(
--For additional guests (REGISTRANTID is only used for additional guests)
select
BATCHREVENUEREGISTRANT.EVENTID,
BATCHREVENUEREGISTRANT.ID [REGISTRANTID],
null [REGISTRANTREGISTRATIONMAPID]
from
dbo.BATCHREVENUEREGISTRANT
where
BATCHREVENUEREGISTRANT.ID = [REGISTRANTMAPPINGSITEM].[REGISTRANTID]
union all
--For guests mapped to registrations
select
EVENTPRICE.EVENTID,
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID,
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID [REGISTRANTREGISTRATIONMAPID]
from
dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
left join dbo.EVENTPRICE on BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
where
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = [REGISTRANTMAPPINGSITEM].[REGISTRANTPACKAGEID]
or
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID = [REGISTRANTMAPPINGSITEM].[SINGLEEVENTREGISTRANTREGISTRATIONMAPID]
) [REGISTRANTREGISTRATIONMAPSUNION]
) [REGISTRANTMAPPINGSITEMREGISTRANT]
) [REGISTRANTMAPPINGSBYREGISTRANT]
where
[REGISTRANTMAPPINGSBYREGISTRANT].[ROW] = 1
)
update @REGISTRANTMAPPINGSITEM
set
[REGISTRANTREGISTRATIONMAPS] =
(
select
[REGISTRANTREGISTRATIONMAPSUNION].[EVENTID],
[REGISTRANTREGISTRATIONMAPSUNION].[REGISTRANTID],
[REGISTRANTREGISTRATIONMAPSUNION].[REGISTRANTREGISTRATIONMAPID],
[REGISTRANTREGISTRATIONMAPSUNION].[CONSTITUENTID],
[REGISTRANTREGISTRATIONMAPSUNION].[CONSTITUENTNAME]
from
(
--For additional guests not mapped to registrant mappings (REGISTRANTID is only used for additional guests)
select
BATCHREVENUEREGISTRANT.EVENTID,
BATCHREVENUEREGISTRANT.ID [REGISTRANTID],
null [REGISTRANTREGISTRATIONMAPID],
BATCHREVENUEREGISTRANT.CONSTITUENTID [CONSTITUENTID],
coalesce(CONSTITUENT_NF.NAME, BATCHREVENUECONSTITUENT.NAME) [CONSTITUENTNAME]
from
dbo.BATCHREVENUEREGISTRANT
outer apply
dbo.UFN_CONSTITUENT_DISPLAYNAME(BATCHREVENUEREGISTRANT.CONSTITUENTID) CONSTITUENT_NF
left join
dbo.BATCHREVENUECONSTITUENT on BATCHREVENUEREGISTRANT.CONSTITUENTID = BATCHREVENUECONSTITUENT.ID
where
BATCHREVENUEREGISTRANT.ID = [REGISTRANTMAPPINGSITEM].[REGISTRANTID]
union all
--For guests mapped to registrations
select
EVENTPRICE.EVENTID,
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID,
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID [REGISTRANTREGISTRATIONMAPID],
coalesce(BATCHREVENUEREGISTRANT.CONSTITUENTID, @UNKNOWNGUESTWELLKNOWNGUID), --The constituent may have been changed on one of the registrations in a package
coalesce(CONSTITUENT_NF.NAME, BATCHREVENUECONSTITUENT.NAME)
from
dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
left join dbo.EVENTPRICE on BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
left join dbo.BATCHREVENUEREGISTRANTPACKAGE on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTPACKAGE.ID
left join dbo.REGISTRATIONPACKAGEPRICE on
BATCHREVENUEREGISTRANTPACKAGE.REGISTRATIONPACKAGEID = REGISTRATIONPACKAGEPRICE.REGISTRATIONPACKAGEID
and BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = REGISTRATIONPACKAGEPRICE.EVENTPRICEID
left join dbo.BATCHREVENUEREGISTRANT on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID = BATCHREVENUEREGISTRANT.ID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(BATCHREVENUEREGISTRANT.CONSTITUENTID) CONSTITUENT_NF
left join dbo.BATCHREVENUECONSTITUENT on BATCHREVENUEREGISTRANT.CONSTITUENTID = BATCHREVENUECONSTITUENT.ID
where
(
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = [REGISTRANTMAPPINGSITEM].[REGISTRANTPACKAGEID]
and
REGISTRATIONPACKAGEPRICE.ID is not null
)
or
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID = [REGISTRANTMAPPINGSITEM].[SINGLEEVENTREGISTRANTREGISTRATIONMAPID]
) [REGISTRANTREGISTRATIONMAPSUNION]
for xml path ('ITEM'), root('REGISTRANTREGISTRATIONMAPS'), type
),
[REGISTRANTWAIVEBENEFITS] =
(
select
BATCHREVENUEREGISTRANT.EVENTID,
BATCHREVENUEREGISTRANT.BENEFITSWAIVED [WAIVEBENEFITS]
from
dbo.BATCHREVENUEREGISTRANT
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANT.ID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
left join dbo.BATCHREVENUEREGISTRANTPACKAGE on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTPACKAGE.ID
left join dbo.REGISTRATIONPACKAGEPRICE on
BATCHREVENUEREGISTRANTPACKAGE.REGISTRATIONPACKAGEID = REGISTRATIONPACKAGEPRICE.REGISTRATIONPACKAGEID
and BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = REGISTRATIONPACKAGEPRICE.EVENTPRICEID
where
(
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = [REGISTRANTMAPPINGSITEM].[REGISTRANTPACKAGEID]
and
REGISTRATIONPACKAGEPRICE.ID is not null
)
or
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID = [REGISTRANTMAPPINGSITEM].[SINGLEEVENTREGISTRANTREGISTRATIONMAPID]
or
(
--For additional guests not mapped to registrant mappings (REGISTRANTID is only used for additional guests)
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is null
and
BATCHREVENUEREGISTRANT.ID = [REGISTRANTMAPPINGSITEM].[REGISTRANTID]
)
for xml path ('ITEM'), root('REGISTRANTWAIVEBENEFITS'), type
),
[PREFERENCES] =
(
--TODO: Change this to be based on each constituent ID since constituents may have been changed on one of the registrations in the package
select
BATCHREVENUEREGISTRANTPREFERENCE.ID [REGISTRANTPREFERENCEID],
EVENTPREFERENCE.EVENTPREFERENCEGROUPID,
BATCHREVENUEREGISTRANTPREFERENCE.EVENTPREFERENCEID
from
dbo.BATCHREVENUEREGISTRANT
inner join dbo.BATCHREVENUEREGISTRANTPREFERENCE on BATCHREVENUEREGISTRANT.ID = BATCHREVENUEREGISTRANTPREFERENCE.REGISTRANTID
left join dbo.BATCHREVENUEREGISTRANTPREFERENCEMAP on BATCHREVENUEREGISTRANTPREFERENCE.ID = BATCHREVENUEREGISTRANTPREFERENCEMAP.ID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANTPREFERENCEMAP.REGISTRANTREGISTRATIONMAPID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
left join dbo.BATCHREVENUEREGISTRANTPACKAGE on BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTPACKAGE.ID
left join dbo.REGISTRATIONPACKAGEPRICE on
BATCHREVENUEREGISTRANTPACKAGE.REGISTRATIONPACKAGEID = REGISTRATIONPACKAGEPRICE.REGISTRATIONPACKAGEID
and BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID = REGISTRATIONPACKAGEPRICE.EVENTPRICEID
left join dbo.EVENTPREFERENCE on BATCHREVENUEREGISTRANTPREFERENCE.EVENTPREFERENCEID = EVENTPREFERENCE.ID
where
(
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTPACKAGEID = [REGISTRANTMAPPINGSITEM].[REGISTRANTPACKAGEID]
and
REGISTRATIONPACKAGEPRICE.ID is not null
)
or
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID = [REGISTRANTMAPPINGSITEM].[SINGLEEVENTREGISTRANTREGISTRATIONMAPID]
or
(
--Additional guests not mapped to registrant mappings
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is null
and
BATCHREVENUEREGISTRANT.ID = [REGISTRANTMAPPINGSITEM].[REGISTRANTID]
)
or
(
--Unknown guests that are additional gusts not mapped to registrant mappings
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is null
and
[REGISTRANTMAPPINGSITEM].[REGISTRANTID] is null
and
exists(select 1 from [FIRSTREGISTRANTMAPPINGBYREGISTRANT] where [FIRSTREGISTRANTMAPPINGBYREGISTRANT].[REGISTRANTID] = BATCHREVENUEREGISTRANT.ID and [FIRSTREGISTRANTMAPPINGBYREGISTRANT].[ID] = [REGISTRANTMAPPINGSITEM].[ID])
)
for xml path ('ITEM'), root ('PREFERENCES'), type
)
from
@REGISTRANTMAPPINGSITEM [REGISTRANTMAPPINGSITEM];
select
@REGISTRANTMAPPINGS =
(
select
[REGISTRANTMAPPINGSITEM].[REGISTRANTPACKAGEID],
[REGISTRANTMAPPINGSITEM].[REGISTRATIONPACKAGEID],
[REGISTRANTMAPPINGSITEM].[EVENTID],
[REGISTRANTMAPPINGSITEM].[EVENTPRICEID],
[REGISTRANTMAPPINGSITEM].[REGISTRATIONSCOLLECTIONID],
[REGISTRANTMAPPINGSITEM].[REGISTRANTREGISTRATIONMAPS] as '*',
[REGISTRANTMAPPINGSITEM].[REGISTRANTWAIVEBENEFITS] as '*',
[REGISTRANTMAPPINGSITEM].[NAME],
[REGISTRANTMAPPINGSITEM].[GUESTCONSTITUENTID],
[REGISTRANTMAPPINGSITEM].[WAIVEREGISTRATIONFEE],
[REGISTRANTMAPPINGSITEM].[BATCHREVENUEREGISTRANTID],
--TODO: Change this to be based on all of the registrations since the first registration may have a $0 amount for the package
(
select
[REGISTRANTREGISTRATIONMAPITEM].[EVENTID],
TEAMFUNDRAISER.GOAL [TEAMFUNDRAISERGOAL],
APPEAL.BASECURRENCYID [TEAMFUNDRAISERCURRENCYID],
(
select
TEAMFUNDRAISINGTEAMMEMBER.ID [TEAMFUNDRAISINGTEAMMEMBERID],
TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID,
case
when TEAMFUNDRAISINGTEAMCAPTAIN.ID is null then 0
else 1
end [ISTEAMCAPTAIN]
from
dbo.TEAMFUNDRAISINGTEAMMEMBER
left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN on
TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAMCAPTAIN.TEAMFUNDRAISINGTEAMID
and TEAMFUNDRAISER.CONSTITUENTID = TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID
where
TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID = TEAMFUNDRAISER.ID
order by
TEAMFUNDRAISINGTEAMMEMBER.DATECHANGED desc
for xml path ('ITEM'), root ('TEAMFUNDRAISINGTEAMS'), type
)
from
(
select
T.c.value('(EVENTID)[1]', 'uniqueidentifier') as 'EVENTID',
T.c.value('(CONSTITUENTID)[1]', 'uniqueidentifier') as 'CONSTITUENTID'
from
[REGISTRANTMAPPINGSITEM].[REGISTRANTREGISTRATIONMAPS].nodes('/REGISTRANTREGISTRATIONMAPS/ITEM') T(c)
) [REGISTRANTREGISTRATIONMAPITEM]
inner join dbo.EVENT on [REGISTRANTREGISTRATIONMAPITEM].[EVENTID] = EVENT.ID
inner join dbo.TEAMFUNDRAISER on
[REGISTRANTREGISTRATIONMAPITEM].[CONSTITUENTID] = TEAMFUNDRAISER.CONSTITUENTID
and EVENT.APPEALID = TEAMFUNDRAISER.APPEALID
left join dbo.APPEAL on APPEAL.ID = TEAMFUNDRAISER.APPEALID
for xml path ('ITEM'), root('TEAMFUNDRAISING'), type
),
[REGISTRANTMAPPINGSITEM].[PREFERENCES] as '*'
from
@REGISTRANTMAPPINGSITEM [REGISTRANTMAPPINGSITEM]
for xml path ('ITEM'), root ('REGISTRANTMAPPINGS'), type
);
return 0;