USP_FAFREGISTRANTREGISTRATION_DELETE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@HASREFUND | bit | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@REGISTRATIONOPTIONID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_FAFREGISTRANTREGISTRATION_DELETE
(
@ID uniqueidentifier, -- registrant ID
@CHANGEAGENTID uniqueidentifier,
@HASREFUND bit = 0,
@CONSTITUENTID uniqueidentifier = null, -- constituent id to promote if promotion is required
@REGISTRATIONOPTIONID uniqueidentifier = null
)
as begin
--check deletion rules, if any
declare @ORIGINALCONSTITUENTID uniqueidentifier,
@ORIGINALCONSTITUENTREGISTRATIONOPTIONID uniqueidentifier,
@GROUPCONSTITUENTID uniqueidentifier,
@PARENTGROUPCONSTITUENTID uniqueidentifier,
@ORGANIZATIONCONSTITUENTID uniqueidentifier,
@PARENTGROUPID uniqueidentifier,
@PROMOTEREQUIRED bit ,
@CANPROMOTE bit,
@FRIENDLYPARAMID uniqueidentifier,
@VANITYURLID int,
@FRIENDLYGROUPPARAMID uniqueidentifier,
@GROUPVANITYURLID int,
@CURRENTDATE datetime = getdate(),
@ROLECODE tinyint,
@TEAMFUNDRAISINGTEAMID uniqueidentifier,
@EVENTID uniqueidentifier,
@REGOPTIONFEE decimal
declare @FINANCIALTRANSACTIONID uniqueidentifier,
@FINANCIALTRANSACTIONLINEITEMID uniqueidentifier,
@BASECURRENCYID uniqueidentifier, /* will use currency later */
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@REGAMOUNT decimal
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
select @ORIGINALCONSTITUENTID=R.CONSTITUENTID,
@ORIGINALCONSTITUENTREGISTRATIONOPTIONID = RR.EVENTPRICEID,
@EVENTID=R.EVENTID,
@ORGANIZATIONCONSTITUENTID=RX.ORGANIZATIONCONSTITUENTID,
@FRIENDLYPARAMID = FRURL.ID,
@VANITYURLID = VURL.ID,
@REGAMOUNT = RR.AMOUNT
from dbo.REGISTRANT R (nolock)
join dbo.REGISTRANTREGISTRATION RR (nolock) on R.ID = RR.REGISTRANTID
join dbo.REGISTRANTEXTENSION RX (nolock) on R.ID = RX.REGISTRANTID
-- get vanity url if exists
left join dbo.FAFFRIENDLYURLPARAMS FRURL on R.ID = FRURL.PARTICIPANTID and FRURL.PAGETYPE = 0 -- participant page URL
left join dbo.VanityURL VURL on FRURL.SEQUENCEID = VURL.RealmID and VURL.RealmTypeID = 7
where R.ID = @ID
;WITH myGroup AS
(
select count(TFTM2.TEAMFUNDRAISINGTEAMID) as MEMBERSCNT,
TX.TEAMFUNDRAISINGTEAMID AS GROUPID, TX.TEAMCONSTITUENTID as GROUPCONSTITUENTID, TX.TYPECODE,
PTFT.ID as PARENTGROUPID, PTX.TEAMCONSTITUENTID AS PARENTGROUPCONSTITUENTID,
FRURL.ID as FRIENDLYGROUPPARAMID,
VURL.ID as GROUPVANITYURLID,
case when TFTC.ID is not null then 1 else 0 end as ISCAPTAIN
from dbo.REGISTRANT R (nolock)
join dbo.TEAMFUNDRAISER TF (nolock) on R.CONSTITUENTID = TF.CONSTITUENTID
join dbo.TEAMFUNDRAISINGTEAMMEMBER TFTM (nolock) on TF.ID = TFTM.TEAMFUNDRAISERID
join dbo.TEAMEXTENSION TX (nolock) on TX.TEAMFUNDRAISINGTEAMID = TFTM.TEAMFUNDRAISINGTEAMID and TX.EVENTID = R.EVENTID
join dbo.TEAMFUNDRAISINGTEAM TFT (nolock) on TFT.ID = TX.TEAMFUNDRAISINGTEAMID
left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN TFTC (nolock) on TFTC.CONSTITUENTID = R.CONSTITUENTID and TFTC.TEAMFUNDRAISINGTEAMID = TX.TEAMFUNDRAISINGTEAMID
-- get group parent group info
left join dbo.TEAMFUNDRAISINGTEAM PTFT (nolock) on PTFT.ID = TFT.PARENTTEAMID
left join dbo.TEAMEXTENSION PTX (nolock) on PTX.TEAMFUNDRAISINGTEAMID = PTFT.ID
-- get members of current group
left join dbo.TEAMFUNDRAISINGTEAMMEMBER TFTM2 (nolock) on TFTM2.TEAMFUNDRAISINGTEAMID = TFTM.TEAMFUNDRAISINGTEAMID
-- get vanity url if exists
left join dbo.FAFFRIENDLYURLPARAMS FRURL on TX.TEAMFUNDRAISINGTEAMID = FRURL.PARTICIPANTID and FRURL.PAGETYPE = TX.TYPECODE
left join dbo.VanityURL VURL on FRURL.SEQUENCEID = VURL.RealmID and VURL.RealmTypeID = 7
where R.ID = @ID
group by TX.TEAMFUNDRAISINGTEAMID, TX.TEAMCONSTITUENTID, TX.TYPECODE, PTFT.ID, PTX.TEAMCONSTITUENTID, FRURL.ID, VURL.ID, TFTC.ID
)
select @CANPROMOTE = case when MEMBERSCNT > 1 then 1 else 0 end,
@TEAMFUNDRAISINGTEAMID = isnull(@TEAMFUNDRAISINGTEAMID, GROUPID), -- take GroupID if @TEAMFUNDRAISINGTEAMID is not passed in
@PROMOTEREQUIRED = case when ISCAPTAIN = 1 and (select COUNT(TFTC.ID) from dbo.TEAMFUNDRAISINGTEAMCAPTAIN TFTC (nolock) where TFTC.TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID) < 2 then 1 else 0 end,
@GROUPCONSTITUENTID=GROUPCONSTITUENTID,
@PARENTGROUPID=PARENTGROUPID,
@PARENTGROUPCONSTITUENTID=PARENTGROUPCONSTITUENTID,
@FRIENDLYGROUPPARAMID = FRIENDLYGROUPPARAMID,
@GROUPVANITYURLID = GROUPVANITYURLID,
@ROLECODE = case when TYPECODE in (1,3) then TYPECODE when TYPECODE = 2 then 0 end -- rolecode = 1:team leader; 3: householdleader; 0: company leader
from myGroup
-- /* promote this constituent */
if @PROMOTEREQUIRED = 1
begin
if @CANPROMOTE = 1 and @CONSTITUENTID is not null
begin
update dbo.TEAMFUNDRAISINGTEAMCAPTAIN set
CONSTITUENTID = @CONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where CONSTITUENTID = @ORIGINALCONSTITUENTID and TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID
--- reassign org const to newly selected registrant
update RX set
ORGANIZATIONCONSTITUENTID = isnull(ORGANIZATIONCONSTITUENTID, @ORGANIZATIONCONSTITUENTID),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.REGISTRANTEXTENSION RX
join dbo.REGISTRANT R on RX.REGISTRANTID = R.ID
where R.CONSTITUENTID=@CONSTITUENTID and R.EVENTID=@EVENTID
select @REGOPTIONFEE=AMOUNT from dbo.EVENTPRICE where ID=@REGISTRATIONOPTIONID
-- update registration option
merge into dbo.REGISTRANTREGISTRATION as Target
using
(
select RR.ID from dbo.REGISTRANTREGISTRATION RR (nolock)
join dbo.REGISTRANT R (nolock) on RR.REGISTRANTID = R.ID
where R.CONSTITUENTID = @CONSTITUENTID
and R.EVENTID = @EVENTID
) as source on source.ID = Target.ID
when matched then
update set
EVENTPRICEID = isnull(@REGISTRATIONOPTIONID,EVENTPRICEID),
AMOUNT = case when @REGOPTIONFEE = 0 then AMOUNT else @REGOPTIONFEE end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE;
end
else if @CANPROMOTE = 0 -- no promotion but check if this group is a parent of any group
begin
-- no need to delete captain/member/fundraiser since registrant delete will take care of it
-- /* move group credit to parent or event if this group will be deleted */
merge into dbo.REVENUERECOGNITION as Target
using
(
select RR.ID
from dbo.REVENUE_EXT R
join dbo.EVENT E on R.APPEALID = E.APPEALID
join dbo.EVENTEXTENSION EX on EX.EVENTID = E.ID
join dbo.FINANCIALTRANSACTIONLINEITEM RS on R.ID = RS.FINANCIALTRANSACTIONID
join dbo.REVENUERECOGNITION RR on RS.ID = RR.REVENUESPLITID
where RR.CONSTITUENTID =@GROUPCONSTITUENTID and EX.EVENTID = @EVENTID
) as source on Target.ID = source.ID
when matched and (@PARENTGROUPCONSTITUENTID is not null) then
update set
CONSTITUENTID = @PARENTGROUPCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
when matched then
delete;
if exists (select ID from dbo.TEAMFUNDRAISINGTEAM where PARENTTEAMID = @TEAMFUNDRAISINGTEAMID and @PARENTGROUPID is not null )
begin
declare @groupidtomerge uniqueidentifier
declare grpCursor cursor local fast_forward for
select ID from TEAMFUNDRAISINGTEAM where PARENTTEAMID = @TEAMFUNDRAISINGTEAMID
open grpCursor fetch next from grpCursor into @groupidtomerge
while @@fetch_status = 0
begin
exec dbo.USP_DATAFORMTEMPLATE_EDIT_FAFGROUPMERGE
@ID=@groupidtomerge,
@CHANGEAGENTID=@CHANGEAGENTID,
@GROUPTOMERGEID=@groupidtomerge,
@GROUPTOKEEPID=@PARENTGROUPID
fetch next from grpCursor into @groupidtomerge
end
close grpCursor
deallocate grpCursor
end
else
begin
update dbo.TEAMFUNDRAISINGTEAM set
PARENTTEAMID = null,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where PARENTTEAMID = @TEAMFUNDRAISINGTEAMID
end
-- /* release friendly URL used by this group */
if @FRIENDLYGROUPPARAMID is not null
begin
delete from dbo.FAFFRIENDLYURLPARAMS where ID = @FRIENDLYGROUPPARAMID
delete from dbo.VanityURL where ID = @GROUPVANITYURLID
end
exec dbo.USP_TEAMFUNDRAISINGTEAM_DELETE @ID=@TEAMFUNDRAISINGTEAMID, @CHANGEAGENTID=@CHANGEAGENTID
set @GROUPCONSTITUENTID = null -- reset so recognition will go to parent group or to event.
end
end
--/* remove registration payment */
if @HASREFUND = 1
begin
select @FINANCIALTRANSACTIONID=FTLI.FINANCIALTRANSACTIONID, @FINANCIALTRANSACTIONLINEITEMID=FTLI.ID, @REGAMOUNT = FTLI.TRANSACTIONAMOUNT,
@BASECURRENCYID = R.BASECURRENCYID,
@TRANSACTIONCURRENCYID = R.TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID = R.BASEEXCHANGERATEID,
@EXCHANGERATE =
case
when R.BASEEXCHANGERATEID is not null
then CE.RATE
when R.TRANSACTIONCURRENCYID = R.BASECURRENCYID
then 1
else 0
end
from dbo.EVENTREGISTRANTPAYMENT ERP (nolock)
join dbo.FINANCIALTRANSACTIONLINEITEM FTLI (nolock) on ERP.PAYMENTID = FTLI.ID
join dbo.REVENUE R (nolock) on FTLI.FINANCIALTRANSACTIONID = R.ID
left join dbo.CURRENCYEXCHANGERATE CE (nolock) on CE.ID = R.BASEEXCHANGERATEID
where ERP.REGISTRANTID = @ID
delete dbo.EVENTREGISTRANTPAYMENT where REGISTRANTID = @ID and PAYMENTID = @FINANCIALTRANSACTIONLINEITEMID
if (select Count(FT.ID) from dbo.FINANCIALTRANSACTIONLINEITEM FT where FT.FINANCIALTRANSACTIONID = @FINANCIALTRANSACTIONID ) > 1
begin
delete from dbo.FINANCIALTRANSACTIONLINEITEM where ID = @FINANCIALTRANSACTIONLINEITEMID
update dbo.FINANCIALTRANSACTION set
TRANSACTIONAMOUNT = TRANSACTIONAMOUNT - @REGAMOUNT,
BASEAMOUNT = BASEAMOUNT - @REGAMOUNT,
ORGAMOUNT = ORGAMOUNT - @REGAMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @FINANCIALTRANSACTIONID
end
else if exists(select ID from dbo.REVENUEPOSTED where ID=@FINANCIALTRANSACTIONID)
exec dbo.USP_REVENUETRANSACTION_DELETEPOSTED @FINANCIALTRANSACTIONID, @CHANGEAGENTID
else
exec dbo.USP_REVENUETRANSACTION_DELETE @FINANCIALTRANSACTIONID, @CHANGEAGENTID
end
else
delete dbo.EVENTREGISTRANTPAYMENT where REGISTRANTID = @ID
--/* free up friendly URL */
if @FRIENDLYPARAMID is not null
begin
delete from dbo.FAFFRIENDLYURLPARAMS where ID = @FRIENDLYPARAMID
delete from dbo.VanityURL where ID = @VANITYURLID
end
--/* finally move credits */
merge into dbo.REVENUERECOGNITION as Target
using
(
select RR.ID
from dbo.REVENUE_EXT R
join dbo.EVENT E on R.APPEALID = E.APPEALID
join dbo.EVENTEXTENSION EX on EX.EVENTID = E.ID
join dbo.FINANCIALTRANSACTIONLINEITEM RS on R.ID = RS.FINANCIALTRANSACTIONID
join dbo.REVENUERECOGNITION RR on RS.ID = RR.REVENUESPLITID
where RR.CONSTITUENTID = @ORIGINALCONSTITUENTID and EX.EVENTID = @EVENTID
) as source on Target.ID = source.ID
when matched and (@GROUPCONSTITUENTID is not null or @PARENTGROUPCONSTITUENTID is not null) then
update set
CONSTITUENTID = isnull(@GROUPCONSTITUENTID,@PARENTGROUPCONSTITUENTID),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
when matched then
delete;
-- update this new leader's address book (members and general donations donors)
-- or update other leaders' address book to include the new general donors (generated by this registration delete)
--if @PROMOTEREQUIRED = 1 and @CANPROMOTE = 1 and @CONSTITUENTID is not null
-- exec dbo.USP_ADDRESSBOOKFAF_BULKADD_CONTACTBYGROUP @GROUPID=@TEAMFUNDRAISINGTEAMID, @CHANGEAGENTID=@CHANGEAGENTID, @REGISTRANTCONSTITUENTID=@CONSTITUENTID, @ROLECODE=@ROLECODE
--else
if (select COUNT(ID) from dbo.TEAMFUNDRAISINGTEAMCAPTAIN (nolock) where TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID ) > 0
begin
declare @leaderConstituentID uniqueidentifier
declare leaderCursor cursor local fast_forward for
select CONSTITUENTID from dbo.TEAMFUNDRAISINGTEAMCAPTAIN where TEAMFUNDRAISINGTEAMID = @TEAMFUNDRAISINGTEAMID
open leaderCursor fetch next from leaderCursor into @leaderConstituentID
while @@fetch_status = 0
begin
exec dbo.USP_ADDRESSBOOKFAF_BULKADD_CONTACTBYGROUP
@GROUPID=@TEAMFUNDRAISINGTEAMID,
@CHANGEAGENTID=@CHANGEAGENTID,
@REGISTRANTCONSTITUENTID=@leaderConstituentID,
@ROLECODE=@ROLECODE
fetch next from leaderCursor into @leaderConstituentID
end
close leaderCursor
deallocate leaderCursor
end
--/* free up a registration slot */
merge into dbo.FAFREGISTRATIONTYPE as Target
using
(
select FRT.ID, FRT.USEDQUANTITY
from dbo.REGISTRANTREGISTRATION RR (nolock)
join dbo.EVENTPRICE EP (nolock) on EP.ID = RR.EVENTPRICEID
join dbo.FAFREGISTRATIONTYPE FRT (nolock) on EP.ID = FRT.EVENTPRICEID
where RR.REGISTRANTID = @ID
) as Source on Source.ID = Target.ID
when matched then
update set USEDQUANTITY = source.USEDQUANTITY - 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE;
/* change subscription */
delete from dbo.NotificationSubscription
where UserID in (select CLIENTUSERID from dbo.UFN_CLIENTUSERS_GETIDLISTBYCONSTITUENTID(@ORIGINALCONSTITUENTID))
and NotificationID in (select NCNOTIFICATIONID from dbo.EVENTEMAILTEMPLATE where EVENTID = @EVENTID)
exec dbo.USP_FAFNOTIFICATION_SUBSCRIPTION_ADDUPDATE @CONSTITUENTID=@CONSTITUENTID, @EVENTID=@EVENTID, @ROLECODE=@ROLECODE
insert into dbo.REGISTRATIONDELETEHISTORY(REGISTRANTID, REGISTRATIONAMOUNT, CONSTITUENTID, EVENTID, EVENTPRICEID, REVENUESPLITID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, isnull(@REGAMOUNT, 0), @ORIGINALCONSTITUENTID, @EVENTID, @ORIGINALCONSTITUENTREGISTRATIONOPTIONID, @FINANCIALTRANSACTIONLINEITEMID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE)
/*finally, delete this registrant */
exec dbo.USP_REGISTRANT_DELETE @ID, @CHANGEAGENTID
return 0;
end