USP_DATAFORMTEMPLATE_EDIT_MEMBERSHIPDUESBATCHDUPLICATECONSTITUENTAUTOMATCHWITHRULES
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@BILLTOCONSTITUENTID | uniqueidentifier | IN | |
@DOMANUALREVIEWFORAUTOMATCH | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MEMBERSHIPDUESBATCHDUPLICATECONSTITUENTAUTOMATCHWITHRULES
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@BILLTOCONSTITUENTID uniqueidentifier,
@DOMANUALREVIEWFORAUTOMATCH bit
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime = getdate();
declare @OLDBILLTOCONSTITUENTID uniqueidentifier;
select @OLDBILLTOCONSTITUENTID = BILLTOCONSTITUENTID
from dbo.BATCHMEMBERSHIPDUES
where ID = @ID;
begin try
update dbo.BATCHMEMBERSHIPDUES set
BILLTOCONSTITUENTID = @BILLTOCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
update dbo.BATCHMEMBERSHIPDUESMEMBER set
CONSTITUENTID = @BILLTOCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
BATCHMEMBERSHIPDUESID = @ID and
CONSTITUENTID = @OLDBILLTOCONSTITUENTID;
update dbo.BATCHMEMBERSHIPDUESMEMBERSHIPCARD set
CONSTITUENTID = @BILLTOCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
BATCHMEMBERSHIPDUESID = @ID and
CONSTITUENTID = @OLDBILLTOCONSTITUENTID;
-- Since constituent has changed, recognitions should be recalculated
declare @MEMBERSHIPPROGRAMID uniqueidentifier;
declare @MEMBERSHIPLEVELID uniqueidentifier;
declare @MEMBERSHIPLEVELTERMID uniqueidentifier;
declare @MEMBERSHIPTRANSACTIONTYPECODE tinyint;
declare @REVENUETYPECODE tinyint;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @EXCHANGERATE decimal(20,8);
declare @DISCOUNTTYPE uniqueidentifier;
declare @PROMOTIONCODE nvarchar(50);
declare @GIVENANONYMOUSLY bit;
select
@MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAMID,
@MEMBERSHIPLEVELID = MEMBERSHIPLEVELID,
@MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERMID,
@MEMBERSHIPTRANSACTIONTYPECODE = MEMBERSHIPTRANSACTIONTYPECODE,
@REVENUETYPECODE = REVENUETYPECODE,
@TRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID,
@BASECURRENCYID = BASECURRENCYID,
@EXCHANGERATE = EXCHANGERATE,
@DISCOUNTTYPE = MEMBERSHIPPROMOID,
@PROMOTIONCODE = PROMOTIONCODE,
@GIVENANONYMOUSLY = DONATIONGIVENANONYMOUSLY
from dbo.BATCHMEMBERSHIPDUES
where ID = @ID;
-- Adding or renewing, and paying in full
if ((@MEMBERSHIPTRANSACTIONTYPECODE = 0 or @MEMBERSHIPTRANSACTIONTYPECODE = 1 or @MEMBERSHIPTRANSACTIONTYPECODE = 3) and @REVENUETYPECODE = 0)
begin
declare @DEDUCTIBILITYCODE tinyint;
declare @DUESTREATEDASCONTRIBUTION bit;
select
@DEDUCTIBILITYCODE = DEDUCTIBILITYCODE,
@DUESTREATEDASCONTRIBUTION = DUESTREATEDASCONTRIBUTION
from dbo.MEMBERSHIPPROGRAM
where ID = @MEMBERSHIPPROGRAMID;
declare @LEVELRECEIPTAMOUNT money;
declare @OBTAINLEVELCODE tinyint;
declare @HASCONTRIBUTIONDESIGNATIONS bit;
select
@LEVELRECEIPTAMOUNT = RECEIPTAMOUNT,
@OBTAINLEVELCODE = OBTAINLEVELCODE,
@HASCONTRIBUTIONDESIGNATIONS =
case
when exists(select ID from dbo.MEMBERSHIPLEVELDESIGNATION where MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID) then 1
else 0
end
from dbo.MEMBERSHIPLEVEL
where ID = @MEMBERSHIPLEVELID;
if @OBTAINLEVELCODE = 0 and @DUESTREATEDASCONTRIBUTION = 1 and @HASCONTRIBUTIONDESIGNATIONS = 1
begin
declare @DATE date = getdate();
declare @MEMBERSHIPAMOUNT money;
select
@MEMBERSHIPAMOUNT = AMOUNT
from dbo.MEMBERSHIPLEVELTERM
where ID = @MEMBERSHIPLEVELTERMID
and LEVELID = @MEMBERSHIPLEVELID;
declare @PROMOTIONAMOUNT money = 0;
if @DISCOUNTTYPE is not null or len(coalesce(@PROMOTIONCODE, '')) > 0
begin
declare @PROMOTIONTYPECODE tinyint = 0;
declare @DISCOUNTCALCULATIONTYPECODE tinyint = 0;
declare @DISCOUNTAMOUNT money = 0;
declare @DISCOUNTPERCENT decimal = 0;
declare @APPLIEDDISCOUNTID uniqueidentifier;
if @DISCOUNTTYPE is not null
begin
select
@APPLIEDDISCOUNTID = MEMBERSHIPPROMO.ID,
@PROMOTIONTYPECODE = MEMBERSHIPPROMO.PROMOTIONTYPECODE,
@DISCOUNTCALCULATIONTYPECODE = MEMBERSHIPPROMO.DISCOUNTCALCULATIONTYPECODE,
@DISCOUNTAMOUNT = MEMBERSHIPPROMO.AMOUNT,
@DISCOUNTPERCENT = MEMBERSHIPPROMO.[PERCENT]
from dbo.MEMBERSHIPPROMO
inner join dbo.MEMBERSHIPPROMOAVAILABILITY
on MEMBERSHIPPROMO.ID = MEMBERSHIPPROMOAVAILABILITY.MEMBERSHIPPROMOID
where MEMBERSHIPPROMO.ID = @DISCOUNTTYPE
and MEMBERSHIPPROMOAVAILABILITY.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID;
end
else
begin
select
@APPLIEDDISCOUNTID = MEMBERSHIPPROMO.ID,
@PROMOTIONTYPECODE = PROMOTIONTYPECODE,
@DISCOUNTCALCULATIONTYPECODE = DISCOUNTCALCULATIONTYPECODE,
@DISCOUNTAMOUNT = AMOUNT,
@DISCOUNTPERCENT = [PERCENT]
from dbo.MEMBERSHIPPROMO
inner join dbo.MEMBERSHIPPROMOCODE
on MEMBERSHIPPROMO.ID = MEMBERSHIPPROMOCODE.MEMBERSHIPPROMOID
where MEMBERSHIPPROMOCODE.PROMOTIONALCODE = @PROMOTIONCODE
and (MEMBERSHIPPROMOCODE.VALIDFROM is null or MEMBERSHIPPROMOCODE.VALIDFROM <= dbo.UFN_DATE_GETEARLIESTTIME(@DATE))
and (MEMBERSHIPPROMOCODE.VALIDTO is null or MEMBERSHIPPROMOCODE.VALIDTO >= dbo.UFN_DATE_GETLATESTTIME(@DATE));
end
if @APPLIEDDISCOUNTID is null
set @PROMOTIONAMOUNT = 0;
else if @PROMOTIONTYPECODE = 0
begin
-- Discount
if @DISCOUNTCALCULATIONTYPECODE = 0
set @PROMOTIONAMOUNT = @DISCOUNTAMOUNT;
else
set @PROMOTIONAMOUNT = @MEMBERSHIPAMOUNT * (@DISCOUNTPERCENT / 100);
end
else
set @PROMOTIONAMOUNT = 0;
end
declare @BASETAXDEDUCTIBLEAMOUNT money;
set @BASETAXDEDUCTIBLEAMOUNT =
case @DEDUCTIBILITYCODE
when 0 then @MEMBERSHIPAMOUNT - @PROMOTIONAMOUNT
when 1 then @LEVELRECEIPTAMOUNT - @PROMOTIONAMOUNT
when 2 then 0
end;
if @BASETAXDEDUCTIBLEAMOUNT < 0
set @BASETAXDEDUCTIBLEAMOUNT = 0;
if @TRANSACTIONCURRENCYID <> @BASECURRENCYID
set @BASETAXDEDUCTIBLEAMOUNT = @BASETAXDEDUCTIBLEAMOUNT * @EXCHANGERATE;
declare @DESIGNATIONSTABLE table(DESIGNATIONID uniqueidentifier, AMOUNT money);
declare @MEMBERSHIPRECOGNITION xml;
insert into @DESIGNATIONSTABLE(DESIGNATIONID, AMOUNT)
select
MEMBERSHIPLEVELDESIGNATION.DESIGNATIONID,
case MEMBERSHIPLEVELDESIGNATION.[PERCENT]
when 0 then 0
else (MEMBERSHIPLEVELDESIGNATION.[PERCENT] / 100) * @BASETAXDEDUCTIBLEAMOUNT
end as AMOUNT
from dbo.MEMBERSHIPLEVELDESIGNATION
where MEMBERSHIPLEVELDESIGNATION.MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID;
set @MEMBERSHIPRECOGNITION = (
select
RECOGNITIONS.CONSTITUENTID,
RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
DESIGNATIONS.DESIGNATIONID,
@DATE as EFFECTIVEDATE,
RECOGNITIONS.AMOUNT,
@TRANSACTIONCURRENCYID as APPLICATIONCURRENCYID
from @DESIGNATIONSTABLE DESIGNATIONS
inner join dbo.DESIGNATION
on DESIGNATIONS.DESIGNATIONID = DESIGNATION.ID
outer apply dbo.UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS_2(@GIVENANONYMOUSLY, @BILLTOCONSTITUENTID, DESIGNATIONS.AMOUNT, @DATE, null, default, default) as RECOGNITIONS
left outer join dbo.REVENUERECOGNITIONTYPECODE
on RECOGNITIONS.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODE.ID
for xml raw('ITEM'),type,elements,root('MEMBERSHIPRECOGNITION'),BINARY BASE64
);
delete from dbo.BATCHMEMBERSHIPDUESMEMBERSHIPRECOGNITION
where BATCHMEMBERSHIPDUESID = @ID;
if @MEMBERSHIPRECOGNITION is not null
exec dbo.USP_MEMBERSHIPDUESBATCH_GETMEMBERSHIPRECOGNITIONS_ADDFROMXML @ID, @MEMBERSHIPRECOGNITION, null, null;
end
end
else
begin
update dbo.BATCHMEMBERSHIPDUESMEMBERSHIPRECOGNITION set
CONSTITUENTID = @BILLTOCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
BATCHMEMBERSHIPDUESID = @ID and
CONSTITUENTID = @OLDBILLTOCONSTITUENTID;
end
update dbo.BATCHMEMBERSHIPDUESDONATIONRECOGNITION set
CONSTITUENTID = @BILLTOCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
BATCHMEMBERSHIPDUESID = @ID and
CONSTITUENTID = @OLDBILLTOCONSTITUENTID;
update dbo.BATCHMEMBERSHIPDUESDONATIONSOLICITOR set
CONSTITUENTID = @BILLTOCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
BATCHMEMBERSHIPDUESID = @ID and
CONSTITUENTID = @OLDBILLTOCONSTITUENTID;
-- add solicit codes for matched constituent
insert into [dbo].[BATCHMEMBERSHIPDUESSOLICITCODE]
(
[ID],
[BATCHMEMBERSHIPDUESID],
[SOLICITCODEID],
[CONSTITUENTSOLICITCODEID],
[STARTDATE],
[ENDDATE],
[COMMENTS],
[SEQUENCE],
[CONSENTPREFERENCECODE],
[SOURCECODEID],
[SOURCEFILEPATH],
[PRIVACYPOLICYFILEPATH],
[SUPPORTINGINFORMATION],
[CONSENTSTATEMENT],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
newid() ID,
@ID [BATCHMEMBERSHIPDUESID],
[SOLICITCODEID],
[ID] [CONSTITUENTSOLICITCODEID],
[STARTDATE],
[ENDDATE],
[COMMENTS],
[SEQUENCE],
[CONSENTPREFERENCECODE],
[SOURCECODEID],
[SOURCEFILEPATH],
[PRIVACYPOLICYFILEPATH],
[SUPPORTINGINFORMATION],
[CONSENTSTATEMENT],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.CONSTITUENTSOLICITCODE
where [CONSTITUENTID] = @BILLTOCONSTITUENTID;
-- address the auto end date issues for consent based solicit codes
declare @SOLICITCODES xml = dbo.UFN_MEMBERSHIPDUESBATCH_GETSOLICITCODES_TOITEMLISTXML(@ID);
exec dbo.USP_MEMBERSHIPDUESBATCH_ADJUSTSOLICITCODEDATERANGES @BILLTOCONSTITUENTID, @SOLICITCODES, @CHANGEAGENTID;
declare @BBNCTRANID int = 0;
select
@BBNCTRANID = BATCHMEMBERSHIPDUESBBNCINFO.BBNCTRANID,
@MEMBERSHIPPROGRAMID = BATCHMEMBERSHIPDUES.MEMBERSHIPPROGRAMID
from dbo.BATCHMEMBERSHIPDUESBBNCINFO
inner join dbo.BATCHMEMBERSHIPDUES on BATCHMEMBERSHIPDUES.ID = BATCHMEMBERSHIPDUESBBNCINFO.BATCHMEMBERSHIPDUESID
where BATCHMEMBERSHIPDUESBBNCINFO.BATCHMEMBERSHIPDUESID = @ID;
if @BBNCTRANID > 0
begin
declare @EXISTINGMEMBERSHIPID uniqueidentifier;
select top 1
@EXISTINGMEMBERSHIPID = MEMBERSHIP.ID
from dbo.MEMBER
inner join dbo.MEMBERSHIP on MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
where
MEMBER.CONSTITUENTID = @BILLTOCONSTITUENTID and
MEMBERSHIP.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
MEMBERSHIP.STATUSCODE <> 1; --Cancelled
if @EXISTINGMEMBERSHIPID is not null
begin
declare @NEWMEMBERSHIPLEVELID uniqueidentifier;
declare @NEWMEMBERSHIPLEVELTERMID uniqueidentifier;
declare @TRANSACTIONDATE date;
declare @MEMBERSHIPEXPIRESONDATE date;
select top 1
@NEWMEMBERSHIPLEVELID = BATCHMEMBERSHIPDUES.MEMBERSHIPLEVELID,
@NEWMEMBERSHIPLEVELTERMID = BATCHMEMBERSHIPDUES.MEMBERSHIPLEVELTERMID,
@TRANSACTIONDATE = BATCHMEMBERSHIPDUES.DATE
from dbo.BATCHMEMBERSHIPDUES
where
BATCHMEMBERSHIPDUES.ID = @ID;
declare @ACTIONCODE tinyint = dbo.UFN_MEMBERSHIPTRANSACTION_DETERMINEACTIONCODE(@EXISTINGMEMBERSHIPID, @NEWMEMBERSHIPLEVELID, @TRANSACTIONDATE);
if @ACTIONCODE = 0 or @ACTIONCODE = 5 --join/rejoin
begin
set @MEMBERSHIPEXPIRESONDATE = dbo.UFN_MEMBERSHIP_CALCULATEEXPIRATIONDATEBYLEVEL(@NEWMEMBERSHIPLEVELID, @NEWMEMBERSHIPLEVELTERMID, @TRANSACTIONDATE);
end
else
begin
declare @CURRENTEXPIRATIONDATE datetime;
select
@CURRENTEXPIRATIONDATE = MEMBERSHIP.EXPIRATIONDATE
from dbo.MEMBERSHIP
where ID = @EXISTINGMEMBERSHIPID;
set @MEMBERSHIPEXPIRESONDATE = dbo.UFN_MEMBERSHIP_CALCULATERENEWALEXPIRATION_2(@CURRENTEXPIRATIONDATE, @NEWMEMBERSHIPLEVELTERMID);
end
update dbo.BATCHMEMBERSHIPDUES set
MEMBERSHIPTRANSACTIONTYPECODE = 1, --'Renew code - MDB will treat this as rejoin/renew appropriately.
MEMBERSHIPEXPIRESONDATE = @MEMBERSHIPEXPIRESONDATE,
EXISTINGMEMBERSHIPID = @EXISTINGMEMBERSHIPID
where ID = @ID;
end
end
select
@DOMANUALREVIEWFORAUTOMATCH = DOMANUALREVIEWFORAUTOMATCH
from dbo.BATCHCONSTITUENTUPDATE where ID = @ID;
-- apply the constituent update rules --
-- get rules settings from the batch row
declare @NAMECODE tinyint;
declare @SIMILARADDRESSCODE tinyint;
declare @UNSIMILARADDRESSCODE tinyint;
declare @NEWADDRESSPRIMARYCODE tinyint;
declare @BIRTHDATERULECODE tinyint;
declare @DIFFERENTEMAILCODE tinyint;
declare @NEWEMAILPRIMARYCODE tinyint;
declare @DIFFERENTPHONECODE tinyint;
declare @NEWPHONEPRIMARYCODE tinyint;
select
@NAMECODE = NAMECODE,
@SIMILARADDRESSCODE = SIMILARADDRESSCODE,
@UNSIMILARADDRESSCODE = UNSIMILARADDRESSCODE,
@NEWADDRESSPRIMARYCODE = NEWADDRESSPRIMARYCODE,
@BIRTHDATERULECODE = BIRTHDATERULECODE,
@DIFFERENTEMAILCODE = DIFFERENTEMAILCODE,
@NEWEMAILPRIMARYCODE = NEWEMAILPRIMARYCODE,
@DIFFERENTPHONECODE = DIFFERENTPHONECODE,
@NEWPHONEPRIMARYCODE = NEWPHONEPRIMARYCODE
from dbo.BATCHMEMBERSHIPDUES where ID = @ID;
-- Apply constituent matching rules
if @DOMANUALREVIEWFORAUTOMATCH = 0
exec dbo.USP_BATCHCONSTITUENT_APPLYBUSINESSRULES
@ID, @BILLTOCONSTITUENTID, @CHANGEAGENTID,
@NAMECODE, 0, @SIMILARADDRESSCODE,
@UNSIMILARADDRESSCODE, @NEWADDRESSPRIMARYCODE, @BIRTHDATERULECODE,
@DIFFERENTPHONECODE, @NEWPHONEPRIMARYCODE, @DIFFERENTEMAILCODE,
@NEWEMAILPRIMARYCODE;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;