USP_REVENUEBATCH_REGISTRANT_UNIFIEDUPDATE
Saves updates to a revenue batch registrant's registrations and guests.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SECURITYCONTEXTFORMINSTANCEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@EVENTID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@DATEPURCHASED | datetime | IN | |
@PACKAGEREGISTRATIONS | xml | IN | |
@PACKAGESPRICES | xml | IN | |
@SINGLEEVENTREGISTRATIONS | xml | IN | |
@WAIVEBENEFITS | bit | IN | |
@REGISTRANTMAPPINGS | xml | IN | |
@DELETEDREGISTRANTREGISTRATIONMAPS | xml | IN | |
@BATCHID | uniqueidentifier | IN | |
@ISWALKIN | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUEBATCH_REGISTRANT_UNIFIEDUPDATE
(
@ID uniqueidentifier = null output,
@CURRENTAPPUSERID uniqueidentifier = null,
@SECURITYCONTEXTFORMINSTANCEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@EVENTID uniqueidentifier,
@CONSTITUENTID uniqueidentifier,
@DATEPURCHASED datetime,
@PACKAGEREGISTRATIONS xml,
@PACKAGESPRICES xml,
@SINGLEEVENTREGISTRATIONS xml,
@WAIVEBENEFITS bit,
@REGISTRANTMAPPINGS xml,
@DELETEDREGISTRANTREGISTRATIONMAPS xml,
@BATCHID uniqueidentifier,
@ISWALKIN bit=0
)
with execute as caller
as
set nocount on;
--TommyVe 9/2/2009 We don't need to check constituent security when adding data
-- to revenue batch tables. Search list record security will generally prevent
-- access to restricted records. When committing the batch, record security will
-- be checked by dbo.USP_REGISTRANT_UNIFIEDUPDATE. I consulted with BryanZe before
-- making this change, if we wanted to check record security in this procedure
-- we would probably need to extend platform support for record security from
-- the context of batch.
--declare @ISADMIN bit;
--set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
--
--if @ISADMIN = 0
-- if dbo.UFN_SECURITY_APPUSER_GRANTED_FORM_FORCONSTIT(@CURRENTAPPUSERID, @SECURITYCONTEXTFORMINSTANCEID, @CONSTITUENTID) <> 1
-- begin
-- raiserror ('ERR_CONSTITUENT_RECORDSECURITY_PERMISSION_DENIED',13,1);
-- return 1;
-- end
if @ID is null
set @ID = newid();
declare @REGISTRANTEXISTSWITHID bit;
if exists(select BATCHREVENUEREGISTRANT.ID from dbo.BATCHREVENUEREGISTRANT where BATCHREVENUEREGISTRANT.ID = @ID)
set @REGISTRANTEXISTSWITHID = 1;
else
set @REGISTRANTEXISTSWITHID = 0;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set @CURRENTDATE = getdate();
declare @contextCache varbinary(128);
declare @UNKNOWNGUESTWELLKNOWNGUID uniqueidentifier;
set @UNKNOWNGUESTWELLKNOWNGUID = 'C776DAB5-65B2-4258-ADAE-AE396D28E251'; --Well-known GUID for unknown guest
declare @REGISTRANTWELLKNOWNGUID uniqueidentifier;
set @REGISTRANTWELLKNOWNGUID = '0F87025C-8FCA-4392-9780-45E4569DC331'; --Well-known GUID for registrant
--List the registrations that will be created or updated
declare @REGISTRATIONTOADDTABLE table
(
REGISTRATIONSCOLLECTIONID uniqueidentifier,
EVENTID uniqueidentifier,
EVENTPRICEID uniqueidentifier,
AMOUNT money,
RECEIPTAMOUNT money,
QUANTITY int,
DATEPURCHASED datetime,
REGISTRATIONPACKAGEID uniqueidentifier,
REGISTRANTREGISTRATIONID uniqueidentifier
);
insert into @REGISTRATIONTOADDTABLE
(
REGISTRATIONSCOLLECTIONID,
EVENTID,
EVENTPRICEID,
AMOUNT,
RECEIPTAMOUNT,
QUANTITY,
DATEPURCHASED,
REGISTRATIONPACKAGEID,
REGISTRANTREGISTRATIONID
)
select
SELECTEDPACKAGE.PACKAGEREGISTRATIONID,
EVENTPRICE.EVENTID,
PACKAGEPRICE.EVENTPRICEID,
coalesce(SELECTEDPACKAGEREGISTRANTREGISTRATION.AMOUNT, (EVENTPRICE.AMOUNT * SELECTEDPACKAGE.QUANTITY)),
coalesce(SELECTEDPACKAGEREGISTRANTREGISTRATION.RECEIPTAMOUNT, (EVENTPRICE.RECEIPTAMOUNT * SELECTEDPACKAGE.QUANTITY)),
SELECTEDPACKAGE.QUANTITY,
@DATEPURCHASED,
SELECTEDPACKAGE.PACKAGEREGISTRATIONPACKAGEID,
SELECTEDPACKAGEREGISTRANTREGISTRATION.PACKAGEREGISTRANTREGISTRATIONID
from
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(PACKAGEREGISTRATIONID)[1]','uniqueidentifier') AS 'PACKAGEREGISTRATIONID',
T.c.value('(PACKAGEREGISTRATIONPACKAGEID)[1]','uniqueidentifier') AS 'PACKAGEREGISTRATIONPACKAGEID',
T.c.value('(QUANTITY)[1]','int') AS 'QUANTITY',
T.c.query('(PACKAGEREGISTRANTREGISTRATIONS)[1]') AS 'PACKAGEREGISTRANTREGISTRATIONS'
FROM @PACKAGEREGISTRATIONS.nodes('/PACKAGEREGISTRATIONS/ITEM') T(c)
) SELECTEDPACKAGE
inner join dbo.UFN_REGISTRATIONPACKAGE_GETPACKAGESPRICES_FROMITEMLISTXML(@PACKAGESPRICES) PACKAGEPRICE on SELECTEDPACKAGE.PACKAGEREGISTRATIONPACKAGEID = PACKAGEPRICE.ID
inner join dbo.EVENTPRICE on PACKAGEPRICE.EVENTPRICEID = EVENTPRICE.ID
cross apply
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(PACKAGEREGISTRANTREGISTRATIONID)[1]','uniqueidentifier') AS 'PACKAGEREGISTRANTREGISTRATIONID',
T.c.value('(AMOUNT)[1]','money') AS 'AMOUNT',
T.c.value('(RECEIPTAMOUNT)[1]','money') AS 'RECEIPTAMOUNT'
FROM SELECTEDPACKAGE.PACKAGEREGISTRANTREGISTRATIONS.nodes('./PACKAGEREGISTRANTREGISTRATIONS/ITEM') T(c)
WHERE T.c.value('(PACKAGEEVENTPRICEID)[1]','uniqueidentifier') = PACKAGEPRICE.EVENTPRICEID
) SELECTEDPACKAGEREGISTRANTREGISTRATION;
insert into @REGISTRATIONTOADDTABLE
(
REGISTRATIONSCOLLECTIONID,
EVENTID,
EVENTPRICEID,
AMOUNT,
RECEIPTAMOUNT,
QUANTITY,
DATEPURCHASED,
REGISTRATIONPACKAGEID,
REGISTRANTREGISTRATIONID
)
select
SELECTEDREGISTRATION.SINGLEEVENTREGISTRATIONID,
EVENTPRICE.EVENTID,
SELECTEDREGISTRATION.EVENTPRICEID,
SELECTEDREGISTRATION.AMOUNT,
SELECTEDREGISTRATION.RECEIPTAMOUNT,
SELECTEDREGISTRATION.QUANTITY,
@DATEPURCHASED,
null,
SELECTEDREGISTRATION.SINGLEEVENTREGISTRANTREGISTRATIONID
from
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(SINGLEEVENTREGISTRATIONID)[1]','uniqueidentifier') AS 'SINGLEEVENTREGISTRATIONID',
T.c.value('(SINGLEEVENTREGISTRATIONEVENTPRICEID)[1]','uniqueidentifier') AS 'EVENTPRICEID',
T.c.value('(QUANTITY)[1]','int') AS 'QUANTITY',
T.c.value('(AMOUNT)[1]','money') AS 'AMOUNT',
T.c.value('(RECEIPTAMOUNT)[1]','money') AS 'RECEIPTAMOUNT',
T.c.value('(REGISTRATIONCOUNT)[1]','int') AS 'REGISTRATIONCOUNT',
T.c.value('(SINGLEEVENTREGISTRANTREGISTRATIONID)[1]','uniqueidentifier') AS 'SINGLEEVENTREGISTRANTREGISTRATIONID'
FROM @SINGLEEVENTREGISTRATIONS.nodes('/SINGLEEVENTREGISTRATIONS/ITEM') T(c)
) SELECTEDREGISTRATION
inner join dbo.EVENTPRICE on SELECTEDREGISTRATION.EVENTPRICEID = EVENTPRICE.ID;
--List the registration mappings
declare @REGISTRANTMAPPINGTABLE table
(
REGISTRANTPACKAGEID uniqueidentifier,
REGISTRATIONPACKAGEID uniqueidentifier,
EVENTID uniqueidentifier,
EVENTPRICEID uniqueidentifier,
REGISTRATIONSCOLLECTIONID uniqueidentifier,
REGISTRANTREGISTRATIONMAPS xml,
REGISTRANTWAIVEBENEFITS xml,
CONSTITUENTID uniqueidentifier,
DONOTMAPTOUNKNOWNGUEST bit, --For unmapped registrations, the user is not forced to map them to an unknown guest
TEAMFUNDRAISING xml,
PREFERENCES xml,
MAPPINGID uniqueidentifier default newid() --Used to connect preferences to unknown guest registrant IDs
);
insert into @REGISTRANTMAPPINGTABLE
(
REGISTRANTPACKAGEID,
REGISTRATIONPACKAGEID,
EVENTID,
EVENTPRICEID,
REGISTRATIONSCOLLECTIONID,
REGISTRANTREGISTRATIONMAPS,
REGISTRANTWAIVEBENEFITS,
CONSTITUENTID,
TEAMFUNDRAISING,
PREFERENCES,
DONOTMAPTOUNKNOWNGUEST
)
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(REGISTRANTPACKAGEID)[1]','uniqueidentifier') AS 'REGISTRANTPACKAGEID',
T.c.value('(REGISTRATIONPACKAGEID)[1]','uniqueidentifier') AS 'REGISTRATIONPACKAGEID',
T.c.value('(EVENTID)[1]','uniqueidentifier') AS 'EVENTID',
T.c.value('(EVENTPRICEID)[1]','uniqueidentifier') AS 'EVENTPRICEID',
T.c.value('(REGISTRATIONSCOLLECTIONID)[1]','uniqueidentifier') AS 'REGISTRATIONSCOLLECTIONID',
T.c.query('(REGISTRANTREGISTRATIONMAPS)[1]') AS 'REGISTRANTREGISTRATIONMAPS',
T.c.query('(REGISTRANTWAIVEBENEFITS)[1]') AS 'REGISTRANTWAIVEBENEFITS',
T.c.value('(GUESTCONSTITUENTID)[1]','uniqueidentifier') AS 'GUESTCONSTITUENTID',
T.c.query('(TEAMFUNDRAISING)[1]') AS 'TEAMFUNDRAISING',
T.c.query('(PREFERENCES)[1]') AS 'PREFERENCES',
case
when T.c.value('(GUESTCONSTITUENTID)[1]','uniqueidentifier') is null then 1
else 0
end
FROM @REGISTRANTMAPPINGS.nodes('/REGISTRANTMAPPINGS/ITEM') T(c);
--Replace the well-known GUIDs for registrant mapping with the actual IDs
update @REGISTRANTMAPPINGTABLE
set
CONSTITUENTID = @CONSTITUENTID
where
CONSTITUENTID = @REGISTRANTWELLKNOWNGUID ; --Well-known GUID for registrant
update @REGISTRANTMAPPINGTABLE
set
CONSTITUENTID = null
where
CONSTITUENTID = @UNKNOWNGUESTWELLKNOWNGUID; --Well-known GUID for unknown guest
--List the event-to-constituent mappings by expanding the package mappings
declare @REGISTRANTEVENTMAPPINGTABLE table
(
REGISTRANTID uniqueidentifier, --Used to keep track of unknown guests
MAPPINGID uniqueidentifier, --Used to map the registrant ID for unknown guests back to preferences in @REGISTRANTMAPPINGTABLE
EVENTID uniqueidentifier,
EVENTPRICEID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
REGISTRANTREGISTRATIONMAPID uniqueidentifier,
WAIVEBENEFITS bit,
REGISTRANTIDISNEWID bit,
OLDREGISTRANTID uniqueidentifier,
DONOTMAPTOUNKNOWNGUEST bit
);
insert into @REGISTRANTEVENTMAPPINGTABLE
(
REGISTRANTID,
MAPPINGID,
EVENTID,
EVENTPRICEID,
CONSTITUENTID,
REGISTRANTREGISTRATIONMAPID,
WAIVEBENEFITS,
DONOTMAPTOUNKNOWNGUEST
)
select
REGISTRANTREGISTRATIONMAPITEM.REGISTRANTID,
REGISTRANTMAPPING.MAPPINGID,
coalesce(EVENTPRICE.EVENTID, REGISTRANTMAPPING.EVENTID),
coalesce(EVENTPRICE.ID, REGISTRANTMAPPING.EVENTPRICEID),
case
--Override for registrant mappings that correspond to multiple constituents
when REGISTRANTREGISTRATIONMAPITEM.REGISTRANTID is not null and REGISTRANTREGISTRATIONMAPITEM.CONSTITUENTID = @UNKNOWNGUESTWELLKNOWNGUID
then null
when REGISTRANTMAPPING.REGISTRANTREGISTRATIONMAPS.exist('/REGISTRANTREGISTRATIONMAPS/ITEM') = 1
then REGISTRANTREGISTRATIONMAPITEM.CONSTITUENTID
else REGISTRANTMAPPING.CONSTITUENTID
end,
REGISTRANTREGISTRATIONMAPITEM.REGISTRANTREGISTRATIONMAPID,
coalesce(REGISTRANTWAIVEBENEFITSITEM.WAIVEBENEFITS, 0),
case
--Override for registrant mappings that correspond to multiple constituents
when REGISTRANTMAPPING.REGISTRANTREGISTRATIONMAPS.exist('/REGISTRANTREGISTRATIONMAPS/ITEM') = 1
then 1
else REGISTRANTMAPPING.DONOTMAPTOUNKNOWNGUEST
end
from
@REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
left join dbo.UFN_REGISTRATIONPACKAGE_GETPACKAGESPRICES_FROMITEMLISTXML(@PACKAGESPRICES) PACKAGEPRICE on REGISTRANTMAPPING.REGISTRATIONPACKAGEID = PACKAGEPRICE.ID
left join dbo.EVENTPRICE on PACKAGEPRICE.EVENTPRICEID = EVENTPRICE.ID
outer apply
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(REGISTRANTID)[1]', 'uniqueidentifier') AS 'REGISTRANTID',
T.c.value('(REGISTRANTREGISTRATIONMAPID)[1]', 'uniqueidentifier') AS 'REGISTRANTREGISTRATIONMAPID',
T.c.value('(CONSTITUENTID)[1]', 'uniqueidentifier') AS 'CONSTITUENTID'
FROM REGISTRANTMAPPING.REGISTRANTREGISTRATIONMAPS.nodes('/REGISTRANTREGISTRATIONMAPS/ITEM') T(c)
WHERE T.c.value('(EVENTID)[1]', 'uniqueidentifier') = EVENTPRICE.EVENTID
or T.c.value('(EVENTID)[1]', 'uniqueidentifier') = REGISTRANTMAPPING.EVENTID
) REGISTRANTREGISTRATIONMAPITEM
outer apply
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(WAIVEBENEFITS)[1]', 'bit') AS 'WAIVEBENEFITS'
FROM REGISTRANTMAPPING.REGISTRANTWAIVEBENEFITS.nodes('/REGISTRANTWAIVEBENEFITS/ITEM') T(c)
WHERE T.c.value('(EVENTID)[1]', 'uniqueidentifier') = EVENTPRICE.EVENTID
or T.c.value('(EVENTID)[1]', 'uniqueidentifier') = REGISTRANTMAPPING.EVENTID
) REGISTRANTWAIVEBENEFITSITEM;
--Generate a REGISTRANTID for unknown guests that are replacing guests that were loaded
update @REGISTRANTEVENTMAPPINGTABLE
set
REGISTRANTID = newid(),
REGISTRANTIDISNEWID = 1,
OLDREGISTRANTID = MAPPING.REGISTRANTID
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
left join dbo.BATCHREVENUEREGISTRANT [SOURCEREGISTRANT] on MAPPING.REGISTRANTID = [SOURCEREGISTRANT].ID
where
MAPPING.REGISTRANTID is not null
and MAPPING.CONSTITUENTID is null
and [SOURCEREGISTRANT].CONSTITUENTID is not null;
--Generate a REGISTRANTID for new unknown guests
update @REGISTRANTEVENTMAPPINGTABLE
set
REGISTRANTID = newid(),
REGISTRANTIDISNEWID = 1
from
@REGISTRANTEVENTMAPPINGTABLE
where
REGISTRANTID is null
and CONSTITUENTID is null
and DONOTMAPTOUNKNOWNGUEST = 0;
--If this is an add operation (not an edit) and there are no registrations then add the
--constituent to the main event
if not exists(select MAPPING.EVENTID from @REGISTRANTEVENTMAPPINGTABLE MAPPING)
and @REGISTRANTEXISTSWITHID = 0
begin
insert into dbo.BATCHREVENUEREGISTRANT
(
[ID],
[EVENTID],
[CONSTITUENTID],
[ATTENDED],
[WILLNOTATTEND],
[GUESTOFREGISTRANTID],
[BENEFITSWAIVED],
[BATCHID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[ISWALKIN]
)
values
(
@ID,
@EVENTID,
@CONSTITUENTID,
0, --Not attended by default
0, --Will attend
null,
@WAIVEBENEFITS,
@BATCHID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@ISWALKIN
);
end
--Add a registrant row for events with registrations
--Filter for existing registrant records, which would cause an error; adding
--a registrant to an event where they are already registered implies adding registrations.
--Existing registrants may already be marked with WILLNOTATTEND as false and
--that value will not be changed, those with WILLNOTATTEND set to true will be updated
--in the next statement.
--Use the passed in ID when adding a registrant to the passed in event.
if @REGISTRANTEXISTSWITHID = 0
insert into dbo.BATCHREVENUEREGISTRANT
(
[ID],
[EVENTID],
[CONSTITUENTID],
[ATTENDED],
[WILLNOTATTEND],
[GUESTOFREGISTRANTID],
[BENEFITSWAIVED],
[BATCHID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[ISWALKIN]
)
select distinct
@ID,
@EVENTID,
@CONSTITUENTID,
0, --Not attended
case
when exists
(
select
MAPPINGFORCONSTITUENT.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE MAPPINGFORCONSTITUENT
where
MAPPINGFORCONSTITUENT.EVENTID = MAPPING.EVENTID
and MAPPINGFORCONSTITUENT.CONSTITUENTID = @CONSTITUENTID
)
then
0 --Will attend (the registrant is mapped to a registration for this event)
else
1 --Will not attend
end, --CR261256-120706 by determining the correct WILLNOTATTEND value in this insert we avoid an unneeded row in the audit table
null,
case
when exists
(
select
WAIVEBENEFITSMAP.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE WAIVEBENEFITSMAP
where
WAIVEBENEFITSMAP.EVENTID = MAPPING.EVENTID
and WAIVEBENEFITSMAP.CONSTITUENTID = @CONSTITUENTID
and WAIVEBENEFITSMAP.WAIVEBENEFITS = 1
)
then
1 --Waive benefits, there is at least one waive benefits row
else
0 --Do not waive benefits
end,
@BATCHID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@ISWALKIN
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
left join dbo.BATCHREVENUEREGISTRANT on
MAPPING.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and @CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
where
BATCHREVENUEREGISTRANT.ID is null
and MAPPING.EVENTID = @EVENTID;
insert into dbo.BATCHREVENUEREGISTRANT
(
[EVENTID],
[CONSTITUENTID],
[ATTENDED],
[WILLNOTATTEND],
[GUESTOFREGISTRANTID],
[BENEFITSWAIVED],
[BATCHID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[ISWALKIN]
)
select distinct
MAPPING.EVENTID,
@CONSTITUENTID,
0, --Not attended
case
when exists
(
select
MAPPINGFORCONSTITUENT.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE MAPPINGFORCONSTITUENT
where
MAPPINGFORCONSTITUENT.EVENTID = MAPPING.EVENTID
and MAPPINGFORCONSTITUENT.CONSTITUENTID = @CONSTITUENTID
)
then
0 --Will attend (the registrant is mapped to a registration for this event)
else
1 --Will not attend
end, --CR261256-120706 by determining the correct WILLNOTATTEND value in this insert we avoid an unneeded row in the audit table
null,
case
when exists
(
select
WAIVEBENEFITSMAP.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE WAIVEBENEFITSMAP
where
WAIVEBENEFITSMAP.EVENTID = MAPPING.EVENTID
and WAIVEBENEFITSMAP.CONSTITUENTID = @CONSTITUENTID
and WAIVEBENEFITSMAP.WAIVEBENEFITS = 1
)
then
1 --Waive benefits, there is at least one waive benefits row
else
0 --Do not waive benefits
end,
@BATCHID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@ISWALKIN
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
left join dbo.BATCHREVENUEREGISTRANT on
MAPPING.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and @CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
where
BATCHREVENUEREGISTRANT.ID is null;
--Update the WILLNOTATTEND bit to 0 on events where the registrant is mapped to a
--registration and that registrant is currently marked as will not attend. Also update
--waive benefits flag at the same time.
-- Record ISWALKIN value as well if it has changed.
update dbo.BATCHREVENUEREGISTRANT
set
WILLNOTATTEND = case when BATCHREVENUEREGISTRANT.WILLNOTATTEND = 0 then 0 else MAPPING.WILLNOTATTEND end,
BENEFITSWAIVED = MAPPING.WAIVEBENEFITS,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
ISWALKIN = @ISWALKIN
from
(
select
MAPPINGAGGREGATE.EVENTID,
case
when exists
(
select
MAPPINGFORCONSTITUENT.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE MAPPINGFORCONSTITUENT
where
MAPPINGFORCONSTITUENT.EVENTID = MAPPINGAGGREGATE.EVENTID
and MAPPINGFORCONSTITUENT.CONSTITUENTID = @CONSTITUENTID
)
then
0 --Will attend (the registrant is mapped to a registration for this event)
else
1 --Will not attend
end [WILLNOTATTEND],
case
when exists
(
select
WAIVEBENEFITSMAP.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE WAIVEBENEFITSMAP
where
WAIVEBENEFITSMAP.EVENTID = MAPPINGAGGREGATE.EVENTID
and WAIVEBENEFITSMAP.CONSTITUENTID = @CONSTITUENTID
and WAIVEBENEFITSMAP.WAIVEBENEFITS = 1
)
then
1 --Waive benefits, there is at least one waive benefits row
else
0 --Do not waive benefits
end [WAIVEBENEFITS]
from
@REGISTRANTEVENTMAPPINGTABLE MAPPINGAGGREGATE
) MAPPING
inner join dbo.BATCHREVENUEREGISTRANT on
MAPPING.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and @CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
where
(
BATCHREVENUEREGISTRANT.WILLNOTATTEND = 1
and MAPPING.WILLNOTATTEND = 0
)
or BATCHREVENUEREGISTRANT.BENEFITSWAIVED <> MAPPING.WAIVEBENEFITS
or BATCHREVENUEREGISTRANT.ISWALKIN <> @ISWALKIN;
--Add a registrant row for the guests mapped to events (excluding unknown guests)
--Filter for existing registrant records where the guest is already a guest of the same constituent
--Allow errors where the guest is a guest of some other constituent for the same event, a
--constituent may only be a guest once per event
--Check record access security first --TommyVe 9/2/2009 Not checking record security
-- when adding rows to the batch table, see the comment at the top of this USP.
--if @ISADMIN = 0
-- if exists
-- (
-- select
-- 1
-- from
-- @REGISTRANTEVENTMAPPINGTABLE MAPPING
-- inner join dbo.BATCHREVENUEREGISTRANT HOSTREGISTRANT on
-- MAPPING.EVENTID = HOSTREGISTRANT.EVENTID
-- and @CONSTITUENTID = HOSTREGISTRANT.CONSTITUENTID
-- and @BATCHID = HOSTREGISTRANT.BATCHID
-- left join dbo.BATCHREVENUEREGISTRANT EXISTINGGUEST on
-- MAPPING.EVENTID = EXISTINGGUEST.EVENTID
-- and MAPPING.CONSTITUENTID = EXISTINGGUEST.CONSTITUENTID
-- and HOSTREGISTRANT.ID = EXISTINGGUEST.GUESTOFREGISTRANTID
-- where
-- MAPPING.CONSTITUENTID is not null
-- and MAPPING.CONSTITUENTID <> @CONSTITUENTID
-- and EXISTINGGUEST.ID is null
-- and dbo.UFN_SECURITY_APPUSER_GRANTED_FORM_FORCONSTIT(@CURRENTAPPUSERID, @SECURITYCONTEXTFORMINSTANCEID, MAPPING.CONSTITUENTID) <> 1
-- )
-- begin
-- raiserror ('ERR_GUESTCONSTITUENT_RECORDSECURITY_PERMISSION_DENIED',13,1);
-- return 1;
-- end
insert into dbo.BATCHREVENUEREGISTRANT
(
[EVENTID],
[CONSTITUENTID],
[ATTENDED],
[WILLNOTATTEND],
[GUESTOFREGISTRANTID],
[BENEFITSWAIVED],
[BATCHID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[ISWALKIN]
)
select distinct
MAPPING.EVENTID,
MAPPING.CONSTITUENTID,
0, --Not attended
0, --Will attend
HOSTREGISTRANT.ID,
case
when exists
(
select
WAIVEBENEFITSMAP.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE WAIVEBENEFITSMAP
where
WAIVEBENEFITSMAP.EVENTID = MAPPING.EVENTID
and WAIVEBENEFITSMAP.CONSTITUENTID = MAPPING.CONSTITUENTID
and WAIVEBENEFITSMAP.WAIVEBENEFITS = 1
)
then
1 --Waive benefits, there is at least one waive benefits row
else
0 --Do not waive benefits
end,
@BATCHID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@ISWALKIN
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
inner join dbo.BATCHREVENUEREGISTRANT HOSTREGISTRANT on
MAPPING.EVENTID = HOSTREGISTRANT.EVENTID
and @CONSTITUENTID = HOSTREGISTRANT.CONSTITUENTID
and @BATCHID = HOSTREGISTRANT.BATCHID
left join dbo.BATCHREVENUEREGISTRANT EXISTINGGUEST on
MAPPING.EVENTID = EXISTINGGUEST.EVENTID
and MAPPING.CONSTITUENTID = EXISTINGGUEST.CONSTITUENTID
and HOSTREGISTRANT.ID = EXISTINGGUEST.GUESTOFREGISTRANTID
where
MAPPING.CONSTITUENTID is not null
and MAPPING.CONSTITUENTID <> @CONSTITUENTID
and EXISTINGGUEST.ID is null;
--Add a registrant row for the new unknown guests mapped to events
insert into dbo.BATCHREVENUEREGISTRANT
(
[ID],
[EVENTID],
[CONSTITUENTID],
[ATTENDED],
[WILLNOTATTEND],
[GUESTOFREGISTRANTID],
[BENEFITSWAIVED],
[BATCHID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[ISWALKIN]
)
select
MAPPING.REGISTRANTID,
MAPPING.EVENTID,
null,
0, --Not attended
0, --Will attend
HOSTREGISTRANT.ID,
case
when exists
(
select
WAIVEBENEFITSMAP.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE WAIVEBENEFITSMAP
where
WAIVEBENEFITSMAP.EVENTID = MAPPING.EVENTID
and WAIVEBENEFITSMAP.REGISTRANTID = MAPPING.REGISTRANTID
and WAIVEBENEFITSMAP.WAIVEBENEFITS = 1
)
then
1 --Waive benefits, there is at least one waive benefits row
else
0 --Do not waive benefits
end,
@BATCHID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@ISWALKIN
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
inner join dbo.BATCHREVENUEREGISTRANT HOSTREGISTRANT on
MAPPING.EVENTID = HOSTREGISTRANT.EVENTID
and @CONSTITUENTID = HOSTREGISTRANT.CONSTITUENTID
and @BATCHID = HOSTREGISTRANT.BATCHID
where
MAPPING.CONSTITUENTID is null
and MAPPING.REGISTRANTIDISNEWID = 1;
-- TODO: include event setting and event groups
--Merge registrant records for guest that are now pointing to the same constituent.
--update dbo.EVENTSEATINGSEAT
--set
-- REGISTRANTID =
-- case
-- when MAPPING.CONSTITUENTID is null then MAPPING.REGISTRANTID
-- else [TARGETREGISTRANT].ID
-- end,
-- CHANGEDBYID = @CHANGEAGENTID,
-- DATECHANGED = @CURRENTDATE
--from
-- @REGISTRANTEVENTMAPPINGTABLE MAPPING
-- left join dbo.REGISTRANT [TARGETREGISTRANT] on MAPPING.CONSTITUENTID = [TARGETREGISTRANT].CONSTITUENTID and MAPPING.EVENTID = [TARGETREGISTRANT].EVENTID
-- left join dbo.REGISTRANT [SOURCEREGISTRANT] on coalesce(MAPPING.OLDREGISTRANTID, MAPPING.REGISTRANTID) = [SOURCEREGISTRANT].ID
-- left join dbo.EVENTSEATINGSEAT [TARGETREGISTRANTSEAT] on coalesce([TARGETREGISTRANT].ID, MAPPING.REGISTRANTID) = [TARGETREGISTRANTSEAT].REGISTRANTID
-- left join dbo.EVENTSEATINGSEAT on [SOURCEREGISTRANT].ID = EVENTSEATINGSEAT.REGISTRANTID
-- left join @REGISTRANTEVENTMAPPINGTABLE CURRENTLYMAPPEDREGISTRANTS on [SOURCEREGISTRANT].EVENTID = CURRENTLYMAPPEDREGISTRANTS.EVENTID and [SOURCEREGISTRANT].CONSTITUENTID = CURRENTLYMAPPEDREGISTRANTS.CONSTITUENTID
--where
-- [TARGETREGISTRANTSEAT].ID is null --If the target registrant already has a seat, don't change it
-- and
-- (
-- [SOURCEREGISTRANT].CONSTITUENTID <> MAPPING.CONSTITUENTID
-- or
-- ([SOURCEREGISTRANT].CONSTITUENTID is null and MAPPING.CONSTITUENTID is not null)
-- or
-- ([SOURCEREGISTRANT].CONSTITUENTID is not null and MAPPING.CONSTITUENTID is null)
-- )
-- and
-- CURRENTLYMAPPEDREGISTRANTS.EVENTID is null; --Don't change a constituent's seat if they are still a registrant
--update dbo.EVENTGROUPMEMBER
--set
-- REGISTRANTID =
-- case
-- when MAPPING.CONSTITUENTID is null then MAPPING.REGISTRANTID
-- else [TARGETREGISTRANT].ID
-- end,
-- CHANGEDBYID = @CHANGEAGENTID,
-- DATECHANGED = @CURRENTDATE
--from
-- @REGISTRANTEVENTMAPPINGTABLE MAPPING
-- left join dbo.REGISTRANT [TARGETREGISTRANT] on MAPPING.CONSTITUENTID = [TARGETREGISTRANT].CONSTITUENTID and MAPPING.EVENTID = [TARGETREGISTRANT].EVENTID
-- left join dbo.REGISTRANT [SOURCEREGISTRANT] on coalesce(MAPPING.OLDREGISTRANTID, MAPPING.REGISTRANTID) = [SOURCEREGISTRANT].ID
-- left join dbo.EVENTGROUPMEMBER [TARGETREGISTRANTGROUPMEMBER] on coalesce([TARGETREGISTRANT].ID, MAPPING.REGISTRANTID) = [TARGETREGISTRANTGROUPMEMBER].REGISTRANTID
-- left join dbo.EVENTGROUPMEMBER on [SOURCEREGISTRANT].ID = EVENTGROUPMEMBER.REGISTRANTID
-- left join @REGISTRANTEVENTMAPPINGTABLE CURRENTLYMAPPEDREGISTRANTS on [SOURCEREGISTRANT].EVENTID = CURRENTLYMAPPEDREGISTRANTS.EVENTID and [SOURCEREGISTRANT].CONSTITUENTID = CURRENTLYMAPPEDREGISTRANTS.CONSTITUENTID
--where
-- [TARGETREGISTRANTGROUPMEMBER].ID is null --If the target registrant already has a group membership, don't add another
-- and
-- (
-- [SOURCEREGISTRANT].CONSTITUENTID <> MAPPING.CONSTITUENTID
-- or
-- ([SOURCEREGISTRANT].CONSTITUENTID is null and MAPPING.CONSTITUENTID is not null)
-- or
-- ([SOURCEREGISTRANT].CONSTITUENTID is not null and MAPPING.CONSTITUENTID is null)
-- )
-- and
-- CURRENTLYMAPPEDREGISTRANTS.EVENTID is null; --Don't change a constituent's seat if they are still a registra
update dbo.BATCHREVENUEREGISTRANTPREFERENCE
set
REGISTRANTID =
case
when MAPPING.CONSTITUENTID is null then MAPPING.REGISTRANTID
else [TARGETREGISTRANT].ID
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
left join dbo.BATCHREVENUEREGISTRANT [TARGETREGISTRANT] on MAPPING.CONSTITUENTID = [TARGETREGISTRANT].CONSTITUENTID and MAPPING.EVENTID = [TARGETREGISTRANT].EVENTID and @BATCHID = [TARGETREGISTRANT].BATCHID
left join dbo.BATCHREVENUEREGISTRANT [SOURCEREGISTRANT] on coalesce(MAPPING.OLDREGISTRANTID, MAPPING.REGISTRANTID) = [SOURCEREGISTRANT].ID and @BATCHID = [SOURCEREGISTRANT].BATCHID
left join dbo.BATCHREVENUEREGISTRANTPREFERENCEMAP on [MAPPING].[REGISTRANTREGISTRATIONMAPID] = BATCHREVENUEREGISTRANTPREFERENCEMAP.REGISTRANTREGISTRATIONMAPID
left join dbo.BATCHREVENUEREGISTRANTPREFERENCE on BATCHREVENUEREGISTRANTPREFERENCEMAP.ID = BATCHREVENUEREGISTRANTPREFERENCE.ID
where
(
[SOURCEREGISTRANT].CONSTITUENTID <> MAPPING.CONSTITUENTID
or
([SOURCEREGISTRANT].CONSTITUENTID is null and MAPPING.CONSTITUENTID is not null)
or
([SOURCEREGISTRANT].CONSTITUENTID is not null and MAPPING.CONSTITUENTID is null)
);
update dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
set
REGISTRANTID =
case
when MAPPING.CONSTITUENTID is null then MAPPING.REGISTRANTID
else [TARGETREGISTRANT].ID
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
left join dbo.BATCHREVENUEREGISTRANT [TARGETREGISTRANT] on MAPPING.CONSTITUENTID = [TARGETREGISTRANT].CONSTITUENTID and MAPPING.EVENTID = [TARGETREGISTRANT].EVENTID and @BATCHID = [TARGETREGISTRANT].BATCHID
left join dbo.BATCHREVENUEREGISTRANT [SOURCEREGISTRANT] on coalesce(MAPPING.OLDREGISTRANTID, MAPPING.REGISTRANTID) = [SOURCEREGISTRANT].ID and @BATCHID = [SOURCEREGISTRANT].BATCHID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on [MAPPING].[REGISTRANTREGISTRATIONMAPID] = BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID
where
(
[SOURCEREGISTRANT].CONSTITUENTID <> MAPPING.CONSTITUENTID
or
([SOURCEREGISTRANT].CONSTITUENTID is null and MAPPING.CONSTITUENTID is not null)
or
([SOURCEREGISTRANT].CONSTITUENTID is not null and MAPPING.CONSTITUENTID is null)
);
--Set the CONTEXT_INFO for delete operations
/* cache current context information */
set @contextCache = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
set CONTEXT_INFO @CHANGEAGENTID;
--Remove registrant preferences mapped to deleted registrant mappings
delete from dbo.BATCHREVENUEREGISTRANTPREFERENCE
from
dbo.BATCHREVENUEREGISTRANTPREFERENCE
inner join dbo.BATCHREVENUEREGISTRANTPREFERENCEMAP on BATCHREVENUEREGISTRANTPREFERENCE.ID = BATCHREVENUEREGISTRANTPREFERENCEMAP.ID
inner join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANTPREFERENCEMAP.REGISTRANTREGISTRATIONMAPID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID
inner join @DELETEDREGISTRANTREGISTRATIONMAPS.nodes('/DELETEDREGISTRANTREGISTRATIONMAPS/ITEM') T(c) on
T.c.value('(REGISTRANTREGISTRATIONMAPID)[1]','uniqueidentifier') = BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID;
--Remove deleted registrant mappings
delete from dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
from
dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
inner join @DELETEDREGISTRANTREGISTRATIONMAPS.nodes('/DELETEDREGISTRANTREGISTRATIONMAPS/ITEM') T(c) on
T.c.value('(REGISTRANTREGISTRATIONMAPID)[1]','uniqueidentifier') = BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID;
--Remove registrant registrations where the quantity has been reduced to zero
delete from dbo.BATCHREVENUEREGISTRANTREGISTRATION
from
dbo.BATCHREVENUEREGISTRANTREGISTRATION
inner join @REGISTRATIONTOADDTABLE SELECTEDREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATION.ID = SELECTEDREGISTRATION.REGISTRANTREGISTRATIONID
where
SELECTEDREGISTRATION.QUANTITY = 0;
--Remove deleted registrants if those registrants do not have other reasons to remain
declare @OBSOLETEREGISTRANTS table
(
ID uniqueidentifier
);
--For guests' registrant registration maps that were deleted or changed to a different constituent,
--delete the original guest registrant records if those registrants are not tied to other existing
--or new registrant registration maps.
insert into @OBSOLETEREGISTRANTS (ID)
select
BATCHREVENUEREGISTRANT.ID
from
(
select
T.c.value('(REGISTRANTID)[1]','uniqueidentifier') [REGISTRANTID]
from
@DELETEDREGISTRANTREGISTRATIONMAPS.nodes('/DELETEDREGISTRANTREGISTRATIONMAPS/ITEM') T(c)
union all
select
BATCHREVENUEREGISTRANT.ID
from
@REGISTRANTEVENTMAPPINGTABLE MAPPING
inner join dbo.BATCHREVENUEREGISTRANT on coalesce(MAPPING.OLDREGISTRANTID, MAPPING.REGISTRANTID) = BATCHREVENUEREGISTRANT.ID
left join @REGISTRANTEVENTMAPPINGTABLE CURRENTLYMAPPEDREGISTRANTS on BATCHREVENUEREGISTRANT.EVENTID = CURRENTLYMAPPEDREGISTRANTS.EVENTID and BATCHREVENUEREGISTRANT.CONSTITUENTID = CURRENTLYMAPPEDREGISTRANTS.CONSTITUENTID
where
(
BATCHREVENUEREGISTRANT.CONSTITUENTID <> MAPPING.CONSTITUENTID
or
(BATCHREVENUEREGISTRANT.CONSTITUENTID is not null and MAPPING.CONSTITUENTID is null)
or
(BATCHREVENUEREGISTRANT.CONSTITUENTID is null and MAPPING.CONSTITUENTID is not null)
)
and
CURRENTLYMAPPEDREGISTRANTS.EVENTID is null
) [SELECTEDREGISTRANT]
inner join dbo.BATCHREVENUEREGISTRANT on [SELECTEDREGISTRANT].[REGISTRANTID] = BATCHREVENUEREGISTRANT.ID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANT.ID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID
left join @REGISTRANTEVENTMAPPINGTABLE REGISTRANTEVENTMAPPING on BATCHREVENUEREGISTRANT.CONSTITUENTID = REGISTRANTEVENTMAPPING.CONSTITUENTID
left join @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING on REGISTRANTEVENTMAPPING.MAPPINGID = REGISTRANTMAPPING.MAPPINGID
left join @REGISTRATIONTOADDTABLE SELECTEDREGISTRATION on
REGISTRANTMAPPING.REGISTRATIONSCOLLECTIONID = SELECTEDREGISTRATION.REGISTRATIONSCOLLECTIONID
and BATCHREVENUEREGISTRANT.EVENTID = SELECTEDREGISTRATION.EVENTID
where
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is null
and
SELECTEDREGISTRATION.REGISTRATIONSCOLLECTIONID is null
and
(
BATCHREVENUEREGISTRANT.CONSTITUENTID is null
or
BATCHREVENUEREGISTRANT.CONSTITUENTID <> @CONSTITUENTID
);
--For the registrant's records on sub events, delete them if all guests on the event are going
--to be deleted and the registrant has no existing or new registration mappings.
insert into @OBSOLETEREGISTRANTS (ID)
select
BATCHREVENUEREGISTRANT.ID
from
dbo.EVENT
inner join dbo.BATCHREVENUEREGISTRANT on EVENT.ID = BATCHREVENUEREGISTRANT.EVENTID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on BATCHREVENUEREGISTRANT.ID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID
left join @REGISTRANTEVENTMAPPINGTABLE REGISTRANTEVENTMAPPING on BATCHREVENUEREGISTRANT.CONSTITUENTID = REGISTRANTEVENTMAPPING.CONSTITUENTID
left join @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING on REGISTRANTEVENTMAPPING.MAPPINGID = REGISTRANTMAPPING.MAPPINGID
left join @REGISTRATIONTOADDTABLE SELECTEDREGISTRATION on
REGISTRANTMAPPING.REGISTRATIONSCOLLECTIONID = SELECTEDREGISTRATION.REGISTRATIONSCOLLECTIONID
and REGISTRANTEVENTMAPPING.EVENTID = SELECTEDREGISTRATION.EVENTID
left join
(
select
[GUEST].GUESTOFREGISTRANTID
from
dbo.BATCHREVENUEREGISTRANT [GUEST]
left join @OBSOLETEREGISTRANTS OBSOLETEREGISTRANTS on [GUEST].ID = OBSOLETEREGISTRANTS.ID
where
OBSOLETEREGISTRANTS.ID is null
) [REMAININGGUEST] on BATCHREVENUEREGISTRANT.ID = [REMAININGGUEST].GUESTOFREGISTRANTID
where
(
(
EVENT.ID = @EVENTID
and
EVENT.MAINEVENTID is not null
)
or
EVENT.MAINEVENTID = @EVENTID
)
and
BATCHREVENUEREGISTRANT.CONSTITUENTID = @CONSTITUENTID
and
BATCHREVENUEREGISTRANT.BATCHID = @BATCHID
and
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is null
and
SELECTEDREGISTRATION.REGISTRATIONSCOLLECTIONID is null
and
[REMAININGGUEST].[GUESTOFREGISTRANTID] is null
and
(@ID is null or BATCHREVENUEREGISTRANT.ID <> @ID);
-- TODO: include team fundraising
-- Delete any team fundraising information for the obsolete registrants if this is a team fundraising event
-- Deleting from TEAMFUNDRAISER cascade deletes from TEAMFUNDRAISINGTEAMMEMBER
--delete from
-- dbo.TEAMFUNDRAISER
--from
-- dbo.REGISTRANT
-- left join dbo.EVENT on REGISTRANT.EVENTID = EVENT.ID
-- left join dbo.TEAMFUNDRAISER on
-- REGISTRANT.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
-- and EVENT.APPEALID = TEAMFUNDRAISER.APPEALID
--where
-- REGISTRANT.ID in (select ID from @OBSOLETEREGISTRANTS OBSOLETEREGISTRANTS);
--delete from
-- dbo.TEAMFUNDRAISINGTEAMCAPTAIN
--from
-- dbo.REGISTRANT
-- left join dbo.EVENT on REGISTRANT.EVENTID = EVENT.ID
-- left join dbo.TEAMFUNDRAISINGTEAM on EVENT.APPEALID = TEAMFUNDRAISINGTEAM.APPEALID
-- left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN on
-- REGISTRANT.CONSTITUENTID = TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID
-- and TEAMFUNDRAISINGTEAM.ID = TEAMFUNDRAISINGTEAMCAPTAIN.TEAMFUNDRAISINGTEAMID
--where
-- REGISTRANT.ID in (select ID from @OBSOLETEREGISTRANTS OBSOLETEREGISTRANTS);
--delete from dbo.EVENTGROUPMEMBER
--where
-- EVENTGROUPMEMBER.REGISTRANTID in (select ID from @OBSOLETEREGISTRANTS OBSOLETEREGISTRANTS);
--update dbo.EVENTSEATINGSEAT set
-- EVENTSEATINGSEAT.REGISTRANTID = null,
-- CHANGEDBYID = @CHANGEAGENTID,
-- DATECHANGED = @CURRENTDATE
--where
-- EVENTSEATINGSEAT.REGISTRANTID in (select ID from @OBSOLETEREGISTRANTS OBSOLETEREGISTRANTS);
delete from dbo.BATCHREVENUEREGISTRANT
where
BATCHREVENUEREGISTRANT.ID in (select ID from @OBSOLETEREGISTRANTS OBSOLETEREGISTRANTS);
--Remove deleted packages
delete from dbo.BATCHREVENUEREGISTRANTPACKAGE
from
dbo.BATCHREVENUEREGISTRANTPACKAGE
inner join @DELETEDREGISTRANTREGISTRATIONMAPS.nodes('/DELETEDREGISTRANTREGISTRATIONMAPS/ITEM') T(c) on
T.c.value('(REGISTRANTPACKAGEID)[1]','uniqueidentifier') = BATCHREVENUEREGISTRANTPACKAGE.ID;
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache;
--Update existing registrants with the waive benefits flag
update dbo.BATCHREVENUEREGISTRANT
set
WILLNOTATTEND = 0,
BENEFITSWAIVED = coalesce(MAPPING.WAIVEBENEFITS, 0),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
(
select
MAPPINGAGGREGATE.REGISTRANTID,
MAPPINGAGGREGATE.EVENTID,
MAPPINGAGGREGATE.CONSTITUENTID,
(
select top (1)
1 --Waive benefits, if there is at least one waive benefits row
from
@REGISTRANTEVENTMAPPINGTABLE WAIVEBENEFITSMAP
where
(
WAIVEBENEFITSMAP.REGISTRANTID = MAPPINGAGGREGATE.REGISTRANTID
or
(
WAIVEBENEFITSMAP.EVENTID = MAPPINGAGGREGATE.EVENTID
and
WAIVEBENEFITSMAP.CONSTITUENTID = MAPPINGAGGREGATE.CONSTITUENTID
)
)
and
WAIVEBENEFITSMAP.WAIVEBENEFITS = 1
) [WAIVEBENEFITS]
from
@REGISTRANTEVENTMAPPINGTABLE MAPPINGAGGREGATE
) MAPPING
inner join dbo.BATCHREVENUEREGISTRANT on
MAPPING.REGISTRANTID = BATCHREVENUEREGISTRANT.ID
or
(
MAPPING.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and
MAPPING.CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and
@BATCHID = BATCHREVENUEREGISTRANT.BATCHID
)
where
BATCHREVENUEREGISTRANT.WILLNOTATTEND = 1
or BATCHREVENUEREGISTRANT.BENEFITSWAIVED <> coalesce(MAPPING.WAIVEBENEFITS, 0);
-- Update ISWALKIN
update dbo.BATCHREVENUEREGISTRANT
set
ISWALKIN = @ISWALKIN,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
(
select
MAPPINGAGGREGATE.REGISTRANTID,
MAPPINGAGGREGATE.EVENTID,
MAPPINGAGGREGATE.CONSTITUENTID
from
@REGISTRANTEVENTMAPPINGTABLE MAPPINGAGGREGATE
) MAPPING
inner join dbo.BATCHREVENUEREGISTRANT on
MAPPING.REGISTRANTID = BATCHREVENUEREGISTRANT.ID
or
(
MAPPING.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and
MAPPING.CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and
@BATCHID = BATCHREVENUEREGISTRANT.BATCHID
)
where
BATCHREVENUEREGISTRANT.ISWALKIN <> @ISWALKIN
--Add the packages
update @REGISTRANTMAPPINGTABLE
set
REGISTRANTPACKAGEID = newid()
where
REGISTRATIONPACKAGEID <> '00000000-0000-0000-0000-000000000000'
and REGISTRANTPACKAGEID = '00000000-0000-0000-0000-000000000000';
insert into dbo.BATCHREVENUEREGISTRANTPACKAGE
(
[ID],
[CONSTITUENTID],
[REGISTRATIONPACKAGEID],
[GUESTOFCONSTITUENTID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
REGISTRATIONMAPPING.REGISTRANTPACKAGEID,
REGISTRATIONMAPPING.CONSTITUENTID,
REGISTRATIONMAPPING.REGISTRATIONPACKAGEID,
case
when REGISTRATIONMAPPING.CONSTITUENTID = @CONSTITUENTID then null
else @CONSTITUENTID
end,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@REGISTRANTMAPPINGTABLE REGISTRATIONMAPPING
left join dbo.BATCHREVENUEREGISTRANTPACKAGE on REGISTRATIONMAPPING.REGISTRANTPACKAGEID = BATCHREVENUEREGISTRANTPACKAGE.ID
where
REGISTRATIONMAPPING.REGISTRATIONPACKAGEID <> '00000000-0000-0000-0000-000000000000'
and BATCHREVENUEREGISTRANTPACKAGE.ID is null;
--Note: Ignore DATEPURCHASED when determining whether or not to update the registrant registration row.
update dbo.BATCHREVENUEREGISTRANTREGISTRATION
set
EVENTPRICEID = SELECTEDREGISTRATION.EVENTPRICEID,
QUANTITY = SELECTEDREGISTRATION.QUANTITY,
AMOUNT = SELECTEDREGISTRATION.AMOUNT,
RECEIPTAMOUNT = SELECTEDREGISTRATION.RECEIPTAMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
dbo.BATCHREVENUEREGISTRANTREGISTRATION
inner join @REGISTRATIONTOADDTABLE SELECTEDREGISTRATION on BATCHREVENUEREGISTRANTREGISTRATION.ID = SELECTEDREGISTRATION.REGISTRANTREGISTRATIONID
where
BATCHREVENUEREGISTRANTREGISTRATION.EVENTPRICEID <> SELECTEDREGISTRATION.EVENTPRICEID
or BATCHREVENUEREGISTRANTREGISTRATION.QUANTITY <> SELECTEDREGISTRATION.QUANTITY
or BATCHREVENUEREGISTRANTREGISTRATION.AMOUNT <> SELECTEDREGISTRATION.AMOUNT
or BATCHREVENUEREGISTRANTREGISTRATION.RECEIPTAMOUNT <> SELECTEDREGISTRATION.RECEIPTAMOUNT;
update @REGISTRATIONTOADDTABLE
set
REGISTRANTREGISTRATIONID = newid()
where
REGISTRANTREGISTRATIONID is null;
--Add the registrations
insert into dbo.BATCHREVENUEREGISTRANTREGISTRATION
(
ID,
REGISTRANTID,
EVENTPRICEID,
QUANTITY,
AMOUNT,
RECEIPTAMOUNT,
DATEPURCHASED,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
SELECTEDREGISTRATION.REGISTRANTREGISTRATIONID,
BATCHREVENUEREGISTRANT.ID,
SELECTEDREGISTRATION.EVENTPRICEID,
SELECTEDREGISTRATION.QUANTITY,
SELECTEDREGISTRATION.AMOUNT,
SELECTEDREGISTRATION.RECEIPTAMOUNT,
SELECTEDREGISTRATION.DATEPURCHASED,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@REGISTRATIONTOADDTABLE SELECTEDREGISTRATION
inner join dbo.BATCHREVENUEREGISTRANT on
SELECTEDREGISTRATION.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and @CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATION on SELECTEDREGISTRATION.REGISTRANTREGISTRATIONID = BATCHREVENUEREGISTRANTREGISTRATION.ID
where
BATCHREVENUEREGISTRANTREGISTRATION.ID is null
and SELECTEDREGISTRATION.QUANTITY > 0;
--Add the registrant registration maps
update @REGISTRANTEVENTMAPPINGTABLE
set
REGISTRANTREGISTRATIONMAPID = newid()
where
REGISTRANTREGISTRATIONMAPID is null;
insert into dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
(
ID,
REGISTRANTREGISTRATIONID,
REGISTRANTID,
REGISTRANTPACKAGEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
MAPPING.REGISTRANTREGISTRATIONMAPID,
SELECTEDREGISTRATION.REGISTRANTREGISTRATIONID,
coalesce(BATCHREVENUEREGISTRANT.ID, UNKNOWNGUESTMAPPING.REGISTRANTID),
case
when REGISTRANTMAPPING.REGISTRANTPACKAGEID = '00000000-0000-0000-0000-000000000000'
then null
else
REGISTRANTMAPPING.REGISTRANTPACKAGEID
end,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
inner join @REGISTRATIONTOADDTABLE SELECTEDREGISTRATION on
REGISTRANTMAPPING.REGISTRATIONSCOLLECTIONID = SELECTEDREGISTRATION.REGISTRATIONSCOLLECTIONID
inner join @REGISTRANTEVENTMAPPINGTABLE MAPPING on
REGISTRANTMAPPING.MAPPINGID = MAPPING.MAPPINGID
and SELECTEDREGISTRATION.EVENTID = MAPPING.EVENTID
left join dbo.BATCHREVENUEREGISTRANT on
SELECTEDREGISTRATION.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and REGISTRANTMAPPING.CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and BATCHREVENUEREGISTRANT.BATCHID = @BATCHID
left join @REGISTRANTEVENTMAPPINGTABLE UNKNOWNGUESTMAPPING on
SELECTEDREGISTRATION.EVENTID = UNKNOWNGUESTMAPPING.EVENTID
and REGISTRANTMAPPING.MAPPINGID = UNKNOWNGUESTMAPPING.MAPPINGID
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on MAPPING.REGISTRANTREGISTRATIONMAPID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID
where
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is null
and SELECTEDREGISTRATION.QUANTITY > 0
and REGISTRANTMAPPING.DONOTMAPTOUNKNOWNGUEST = 0
and
(
REGISTRANTMAPPING.CONSTITUENTID is null
or
MAPPING.CONSTITUENTID = REGISTRANTMAPPING.CONSTITUENTID
);
--Update existing preferences
update dbo.BATCHREVENUEREGISTRANTPREFERENCE
set
REGISTRANTID = coalesce(BATCHREVENUEREGISTRANT.ID, MAPPING.REGISTRANTID), --Get registrant ID from MAPPING for unknown guests
EVENTPREFERENCEID = SELECTEDPREFERENCE.EVENTPREFERENCEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
@REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
cross apply
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(REGISTRANTPREFERENCEID)[1]', 'uniqueidentifier') AS 'REGISTRANTPREFERENCEID',
T.c.value('(EVENTPREFERENCEID)[1]', 'uniqueidentifier') AS 'EVENTPREFERENCEID'
FROM REGISTRANTMAPPING.PREFERENCES.nodes('/PREFERENCES/ITEM') T(c)
) SELECTEDPREFERENCE
inner join dbo.BATCHREVENUEREGISTRANTPREFERENCE on SELECTEDPREFERENCE.REGISTRANTPREFERENCEID = BATCHREVENUEREGISTRANTPREFERENCE.ID
inner join dbo.EVENTPREFERENCE on SELECTEDPREFERENCE.EVENTPREFERENCEID = EVENTPREFERENCE.ID
inner join dbo.EVENTPREFERENCEGROUP on EVENTPREFERENCE.EVENTPREFERENCEGROUPID = EVENTPREFERENCEGROUP.ID
left join dbo.BATCHREVENUEREGISTRANT on
EVENTPREFERENCEGROUP.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and REGISTRANTMAPPING.CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
left join @REGISTRANTEVENTMAPPINGTABLE MAPPING on
EVENTPREFERENCEGROUP.EVENTID = MAPPING.EVENTID
and REGISTRANTMAPPING.MAPPINGID = MAPPING.MAPPINGID
where
BATCHREVENUEREGISTRANTPREFERENCE.REGISTRANTID <> coalesce(BATCHREVENUEREGISTRANT.ID, MAPPING.REGISTRANTID)
or
BATCHREVENUEREGISTRANTPREFERENCE.EVENTPREFERENCEID <> SELECTEDPREFERENCE.EVENTPREFERENCEID;
--Delete cleared preferences
/* cache current context information */
set @contextCache = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
set CONTEXT_INFO @CHANGEAGENTID;
delete from dbo.BATCHREVENUEREGISTRANTPREFERENCE
from
@REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
cross apply
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(REGISTRANTPREFERENCEID)[1]', 'uniqueidentifier') AS 'REGISTRANTPREFERENCEID',
T.c.value('(EVENTPREFERENCEID)[1]', 'uniqueidentifier') AS 'EVENTPREFERENCEID'
FROM REGISTRANTMAPPING.PREFERENCES.nodes('/PREFERENCES/ITEM') T(c)
) SELECTEDPREFERENCE
inner join dbo.BATCHREVENUEREGISTRANTPREFERENCE on SELECTEDPREFERENCE.REGISTRANTPREFERENCEID = BATCHREVENUEREGISTRANTPREFERENCE.ID
where
SELECTEDPREFERENCE.EVENTPREFERENCEID = '00000000-0000-0000-0000-000000000000'
or SELECTEDPREFERENCE.EVENTPREFERENCEID is null;
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache;
--Add new preferences
declare @REGISTRANTPREFERENCETOADD table
(
ID uniqueidentifier default newid(),
REGISTRANTID uniqueidentifier,
EVENTPREFERENCEID uniqueidentifier,
REGISTRANTREGISTRATIONMAPID uniqueidentifier
);
insert into @REGISTRANTPREFERENCETOADD
(
REGISTRANTID,
EVENTPREFERENCEID,
REGISTRANTREGISTRATIONMAPID
)
select
coalesce(BATCHREVENUEREGISTRANT.ID, MAPPING.REGISTRANTID), --Get registrant ID from MAPPING for unknown guests
SELECTEDPREFERENCE.EVENTPREFERENCEID,
MAPPING.REGISTRANTREGISTRATIONMAPID
from
@REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
cross apply
(
--Directly selecting from collection field rather than using FROMITEMLISTXML function
SELECT
T.c.value('(REGISTRANTPREFERENCEID)[1]', 'uniqueidentifier') AS 'REGISTRANTPREFERENCEID',
T.c.value('(EVENTPREFERENCEID)[1]', 'uniqueidentifier') AS 'EVENTPREFERENCEID'
FROM REGISTRANTMAPPING.PREFERENCES.nodes('/PREFERENCES/ITEM') T(c)
) SELECTEDPREFERENCE
inner join dbo.EVENTPREFERENCE on SELECTEDPREFERENCE.EVENTPREFERENCEID = EVENTPREFERENCE.ID
inner join dbo.EVENTPREFERENCEGROUP on EVENTPREFERENCE.EVENTPREFERENCEGROUPID = EVENTPREFERENCEGROUP.ID
left join dbo.BATCHREVENUEREGISTRANT on
EVENTPREFERENCEGROUP.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and REGISTRANTMAPPING.CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
left join @REGISTRANTEVENTMAPPINGTABLE MAPPING on
EVENTPREFERENCEGROUP.EVENTID = MAPPING.EVENTID
and REGISTRANTMAPPING.MAPPINGID = MAPPING.MAPPINGID
left join dbo.BATCHREVENUEREGISTRANTPREFERENCE on SELECTEDPREFERENCE.REGISTRANTPREFERENCEID = BATCHREVENUEREGISTRANTPREFERENCE.ID
where
BATCHREVENUEREGISTRANTPREFERENCE.ID is null;
insert into dbo.BATCHREVENUEREGISTRANTPREFERENCE
(
ID,
REGISTRANTID,
EVENTPREFERENCEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
[PREFERENCETOADD].ID,
[PREFERENCETOADD].REGISTRANTID,
[PREFERENCETOADD].EVENTPREFERENCEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@REGISTRANTPREFERENCETOADD [PREFERENCETOADD];
insert into dbo.BATCHREVENUEREGISTRANTPREFERENCEMAP
(
ID,
REGISTRANTREGISTRATIONMAPID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
[PREFERENCETOADD].ID,
[PREFERENCETOADD].REGISTRANTREGISTRATIONMAPID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@REGISTRANTPREFERENCETOADD [PREFERENCETOADD]
left join dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP on [PREFERENCETOADD].REGISTRANTREGISTRATIONMAPID = BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID
where
BATCHREVENUEREGISTRANTREGISTRATIONMAP.ID is not null;
-- TODO: include team fundraising
--Team fundraising
--Deletes are only performed if the registrant record is deleted earlier in the procedure.
--Team membership can be added (possibly with a new captain record).
--Team fundraiser goals are updated as well.
--Add a team fundraiser record if there is a new team and no existing team fundraiser record
--insert into dbo.BATCHREVENUETEAMFUNDRAISER
--(
-- APPEALID,
-- CONSTITUENTID,
-- GOAL,
-- ADDEDBYID,
-- CHANGEDBYID,
-- DATEADDED,
-- DATECHANGED
--)
--select distinct
-- EVENT.APPEALID,
-- REGISTRANTMAPPING.CONSTITUENTID,
-- max(CONSTITUENTGOAL.TEAMFUNDRAISERGOAL),
-- @CHANGEAGENTID,
-- @CHANGEAGENTID,
-- @CURRENTDATE,
-- @CURRENTDATE
--from
-- @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
-- outer apply
-- (
-- --Directly selecting from collection field rather than using FROMITEMLISTXML function
-- SELECT
-- T.c.value('(../../EVENTID)[1]', 'uniqueidentifier') AS 'EVENTID'
-- FROM REGISTRANTMAPPING.TEAMFUNDRAISING.nodes('/TEAMFUNDRAISING/ITEM/TEAMFUNDRAISINGTEAMS/ITEM') T(c)
-- WHERE coalesce(T.c.value('(TEAMFUNDRAISINGTEAMMEMBERID)[1]', 'uniqueidentifier'), '00000000-0000-0000-0000-000000000000') = '00000000-0000-0000-0000-000000000000'
-- ) NEWTEAM
-- left join @REGISTRANTMAPPINGTABLE CONSTITUENTREGISTRANTMAPPING on REGISTRANTMAPPING.CONSTITUENTID = CONSTITUENTREGISTRANTMAPPING.CONSTITUENTID
-- outer apply
-- (
-- --Directly selecting from collection field rather than using FROMITEMLISTXML function
-- SELECT
-- T.c.value('(TEAMFUNDRAISERGOAL)[1]', 'money') AS 'TEAMFUNDRAISERGOAL'
-- FROM CONSTITUENTREGISTRANTMAPPING.TEAMFUNDRAISING.nodes('/TEAMFUNDRAISING/ITEM') T(c)
-- WHERE T.c.value('(EVENTID)[1]', 'uniqueidentifier') = NEWTEAM.EVENTID
-- ) CONSTITUENTGOAL --Pull goal from all registrant mappings for this constituent to avoid an extra update
-- left join dbo.EVENT on [NEWTEAM].[EVENTID] = EVENT.ID
-- left join dbo.TEAMFUNDRAISER on
-- REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
-- and EVENT.APPEALID = TEAMFUNDRAISER.APPEALID
-- left join @REGISTRANTMAPPINGTABLE REGISTRANTMAPPINGGOAL on REGISTRANTMAPPING.CONSTITUENTID = REGISTRANTMAPPINGGOAL.CONSTITUENTID
--where
-- EVENT.APPEALID is not null
-- and TEAMFUNDRAISER.ID is null
--group by
-- REGISTRANTMAPPING.CONSTITUENTID,
-- EVENT.APPEALID;
----Update any existing team fundraiser records with changed goals
--update dbo.TEAMFUNDRAISER set
-- GOAL = [TEAMFUNDRAISINGGOALDISTINCT].TEAMFUNDRAISERGOAL,
-- CHANGEDBYID = @CHANGEAGENTID,
-- DATECHANGED = @CURRENTDATE
--from
-- (
-- select distinct
-- REGISTRANTMAPPING.CONSTITUENTID,
-- EVENT.APPEALID,
-- max(TEAMFUNDRAISINGGOAL.TEAMFUNDRAISERGOAL) [TEAMFUNDRAISERGOAL]
-- from
-- @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
-- outer apply
-- (
-- --Directly selecting from collection field rather than using FROMITEMLISTXML function
-- SELECT
-- T.c.value('(EVENTID)[1]', 'uniqueidentifier') AS 'EVENTID',
-- T.c.value('(TEAMFUNDRAISERGOAL)[1]', 'money') AS 'TEAMFUNDRAISERGOAL'
-- FROM REGISTRANTMAPPING.TEAMFUNDRAISING.nodes('/TEAMFUNDRAISING/ITEM') T(c)
-- ) TEAMFUNDRAISINGGOAL
-- left join dbo.EVENT on [TEAMFUNDRAISINGGOAL].[EVENTID] = EVENT.ID
-- where
-- [TEAMFUNDRAISINGGOAL].[TEAMFUNDRAISERGOAL] is not null
-- group by
-- REGISTRANTMAPPING.CONSTITUENTID,
-- EVENT.APPEALID
-- ) [TEAMFUNDRAISINGGOALDISTINCT]
-- inner join dbo.TEAMFUNDRAISER on
-- [TEAMFUNDRAISINGGOALDISTINCT].[CONSTITUENTID] = TEAMFUNDRAISER.CONSTITUENTID
-- and [TEAMFUNDRAISINGGOALDISTINCT].[APPEALID] = TEAMFUNDRAISER.APPEALID
--where
-- [TEAMFUNDRAISINGGOALDISTINCT].TEAMFUNDRAISERGOAL is not null
-- and TEAMFUNDRAISER.GOAL <> [TEAMFUNDRAISINGGOALDISTINCT].TEAMFUNDRAISERGOAL;
----Add a team member record for new teams
--insert into dbo.BATCHREVENUETEAMFUNDRAISINGTEAMMEMBER
--(
-- TEAMFUNDRAISERID,
-- TEAMFUNDRAISINGTEAMID,
-- ADDEDBYID,
-- CHANGEDBYID,
-- DATEADDED,
-- DATECHANGED
--)
--select distinct
-- TEAMFUNDRAISER.ID,
-- case
-- when NEWTEAM.TEAMFUNDRAISINGTEAMID = '00000000-0000-0000-0000-000000000000' then null
-- else NEWTEAM.TEAMFUNDRAISINGTEAMID
-- end,
-- @CHANGEAGENTID,
-- @CHANGEAGENTID,
-- @CURRENTDATE,
-- @CURRENTDATE
--from
-- @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
-- cross apply
-- (
-- --Directly selecting from collection field rather than using FROMITEMLISTXML function
-- SELECT
-- T.c.value('(../../EVENTID)[1]', 'uniqueidentifier') AS 'EVENTID',
-- T.c.value('(TEAMFUNDRAISINGTEAMID)[1]', 'uniqueidentifier') AS 'TEAMFUNDRAISINGTEAMID'
-- FROM REGISTRANTMAPPING.TEAMFUNDRAISING.nodes('/TEAMFUNDRAISING/ITEM/TEAMFUNDRAISINGTEAMS/ITEM') T(c)
-- WHERE coalesce(T.c.value('(TEAMFUNDRAISINGTEAMMEMBERID)[1]', 'uniqueidentifier'), '00000000-0000-0000-0000-000000000000') = '00000000-0000-0000-0000-000000000000'
-- ) NEWTEAM
-- left join dbo.EVENT on [NEWTEAM].[EVENTID] = EVENT.ID
-- left join dbo.TEAMFUNDRAISER on
-- REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISER.CONSTITUENTID
-- and EVENT.APPEALID = TEAMFUNDRAISER.APPEALID
-- left join dbo.TEAMFUNDRAISINGTEAMMEMBER on
-- TEAMFUNDRAISER.ID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISERID
-- and
-- (
-- NEWTEAM.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID
-- or
-- (
-- TEAMFUNDRAISINGTEAMMEMBER.TEAMFUNDRAISINGTEAMID is null
-- and
-- coalesce(NEWTEAM.TEAMFUNDRAISINGTEAMID, '00000000-0000-0000-0000-000000000000') = '00000000-0000-0000-0000-000000000000'
-- )
-- )
--where
-- TEAMFUNDRAISINGTEAMMEMBER.ID is null;
----Add a team captain record for new teams where the is captain flag is true and the
----constituent is not already a captain on the team
--insert into dbo.BATCHREVENUETEAMFUNDRAISINGTEAMCAPTAIN
--(
-- TEAMFUNDRAISINGTEAMID,
-- CONSTITUENTID,
-- ADDEDBYID,
-- CHANGEDBYID,
-- DATEADDED,
-- DATECHANGED
--)
--select distinct
-- NEWTEAM.TEAMFUNDRAISINGTEAMID,
-- REGISTRANTMAPPING.CONSTITUENTID,
-- @CHANGEAGENTID,
-- @CHANGEAGENTID,
-- @CURRENTDATE,
-- @CURRENTDATE
--from
-- @REGISTRANTMAPPINGTABLE REGISTRANTMAPPING
-- cross apply
-- (
-- --Directly selecting from collection field rather than using FROMITEMLISTXML function
-- SELECT
-- T.c.value('(TEAMFUNDRAISINGTEAMID)[1]', 'uniqueidentifier') AS 'TEAMFUNDRAISINGTEAMID'
-- FROM REGISTRANTMAPPING.TEAMFUNDRAISING.nodes('/TEAMFUNDRAISING/ITEM/TEAMFUNDRAISINGTEAMS/ITEM') T(c)
-- WHERE
-- coalesce(T.c.value('(TEAMFUNDRAISINGTEAMMEMBERID)[1]', 'uniqueidentifier'), '00000000-0000-0000-0000-000000000000') = '00000000-0000-0000-0000-000000000000'
-- and coalesce(T.c.value('(TEAMFUNDRAISINGTEAMID)[1]', 'uniqueidentifier'), '00000000-0000-0000-0000-000000000000') <> '00000000-0000-0000-0000-000000000000'
-- and T.c.value('(ISTEAMCAPTAIN)[1]', 'bit') = 1
-- ) NEWTEAM
-- left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN on
-- REGISTRANTMAPPING.CONSTITUENTID = TEAMFUNDRAISINGTEAMCAPTAIN.CONSTITUENTID
-- and NEWTEAM.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAMCAPTAIN.TEAMFUNDRAISINGTEAMID
--where
-- TEAMFUNDRAISINGTEAMCAPTAIN.ID is nul
if @REGISTRANTEXISTSWITHID = 0
begin
--Only add benefits when called from an add form, not when called from an edit form
--TODO: Handle waive benefits
--Add the default benefits for the added registrations, give benefits to
--the registrant/guests when they are mapped and when the registration count is 1.
insert into dbo.BATCHREVENUEREGISTRANTBENEFIT
(
REGISTRANTID,
BENEFITID,
UNITVALUE,
QUANTITY,
TOTALVALUE,
DETAILS,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
coalesce(REGISTRANTEVENTMAPPING.REGISTRANTID, BATCHREVENUEREGISTRANT.ID),
EVENTPRICEBENEFIT.BENEFITID,
EVENTPRICEBENEFIT.UNITVALUE,
EVENTPRICEBENEFIT.QUANTITY,
(EVENTPRICEBENEFIT.UNITVALUE * EVENTPRICEBENEFIT.QUANTITY),
EVENTPRICEBENEFIT.DETAILS,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@REGISTRANTEVENTMAPPINGTABLE REGISTRANTEVENTMAPPING
inner join dbo.EVENTPRICEBENEFIT on REGISTRANTEVENTMAPPING.EVENTPRICEID = EVENTPRICEBENEFIT.EVENTPRICEID
left join dbo.EVENTPRICE on REGISTRANTEVENTMAPPING.EVENTPRICEID = EVENTPRICE.ID
left join dbo.EVENTREGISTRATIONTYPE on EVENTPRICE.EVENTREGISTRATIONTYPEID = EVENTREGISTRATIONTYPE.ID
left join dbo.BATCHREVENUEREGISTRANT on
REGISTRANTEVENTMAPPING.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and REGISTRANTEVENTMAPPING.CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
where
EVENTREGISTRATIONTYPE.REGISTRATIONCOUNT = 1;
--Benefits from registration options with high registration counts always
--go to the registrant so that they don't have to be divided among guests
insert into dbo.BATCHREVENUEREGISTRANTBENEFIT
(
REGISTRANTID,
BENEFITID,
UNITVALUE,
QUANTITY,
TOTALVALUE,
DETAILS,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
BATCHREVENUEREGISTRANT.ID,
EVENTPRICEBENEFIT.BENEFITID,
(SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.UNITVALUE),
(SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.QUANTITY),
((SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.UNITVALUE) * (SELECTEDREGISTRATION.QUANTITY * EVENTPRICEBENEFIT.QUANTITY)),
EVENTPRICEBENEFIT.DETAILS,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@REGISTRATIONTOADDTABLE SELECTEDREGISTRATION
inner join dbo.EVENTPRICEBENEFIT on SELECTEDREGISTRATION.EVENTPRICEID = EVENTPRICEBENEFIT.EVENTPRICEID
left join dbo.EVENTPRICE on SELECTEDREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
left join dbo.EVENTREGISTRATIONTYPE on EVENTPRICE.EVENTREGISTRATIONTYPEID = EVENTREGISTRATIONTYPE.ID
left join dbo.BATCHREVENUEREGISTRANT on
SELECTEDREGISTRATION.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
and @CONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
and @BATCHID = BATCHREVENUEREGISTRANT.BATCHID
where
EVENTREGISTRATIONTYPE.REGISTRATIONCOUNT > 1
and SELECTEDREGISTRATION.QUANTITY > 0;
end
--Multiple registrant rows can be created so always select and return the registrant ID for the current event
--If registrant did not register for main event return the registrant ID for a sub event.
--On an add form, the ID may be passed in, make sure a record exists.
if not exists
(
select
BATCHREVENUEREGISTRANT.ID
from
dbo.BATCHREVENUEREGISTRANT
where
BATCHREVENUEREGISTRANT.ID = @ID
)
set @ID = null;
if @ID is null
select
@ID = ID
from
dbo.BATCHREVENUEREGISTRANT
where
CONSTITUENTID = @CONSTITUENTID and
EVENTID = @EVENTID and
BATCHID = @BATCHID;
if @ID is null
select top(1)
@ID = BATCHREVENUEREGISTRANT.ID
from
dbo.BATCHREVENUEREGISTRANT
inner join dbo.EVENT on BATCHREVENUEREGISTRANT.EVENTID = EVENT.ID
where
BATCHREVENUEREGISTRANT.CONSTITUENTID = @CONSTITUENTID and
EVENT.MAINEVENTID = @EVENTID and
BATCHREVENUEREGISTRANT.BATCHID = @BATCHID
order by
EVENT.NAME;
if @ID is null
select top(1)
@ID = BATCHREVENUEREGISTRANT.ID
from
dbo.BATCHREVENUEREGISTRANT
inner join @REGISTRANTMAPPINGTABLE RMT on BATCHREVENUEREGISTRANT.EVENTID = RMT.EVENTID
inner join dbo.EVENT on RMT.EVENTID = EVENT.ID
where
BATCHREVENUEREGISTRANT.CONSTITUENTID = @CONSTITUENTID
and BATCHREVENUEREGISTRANT.BATCHID = @BATCHID
order by
EVENT.NAME;
return 0;