USP_DATAFORMTEMPLATE_EDIT_REVENUEBATCHDUPLICATEAUTOMATCH_WITHRULES
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@DOMANUALREVIEWFORAUTOMATCH | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUEBATCHDUPLICATEAUTOMATCH_WITHRULES
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier,
@DOMANUALREVIEWFORAUTOMATCH bit
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
declare
@ORIGINALCONSTITUENTID uniqueidentifier,
@DATE datetime,
@AMOUNT money,
@GIVESANONYMOUSLY bit,
@GIVENANONYMOUSLY bit,
@BASECURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASECURRENCYDECIMALDIGITS tinyint,
@BASECURRENCYROUNDINGTYPECODE tinyint,
@EXCHANGERATE decimal(20,8),
@CURRENCYSETID uniqueidentifier,
@PDACCOUNTSYSTEMID uniqueidentifier,
@FINDERNUMBER bigint = 0;
select
@GIVESANONYMOUSLY = GIVESANONYMOUSLY
from dbo.CONSTITUENT
where ID = @CONSTITUENTID
select
@ORIGINALCONSTITUENTID = CONSTITUENTID,
@DATE = date,
@AMOUNT = AMOUNT,
@GIVENANONYMOUSLY = case when (@GIVESANONYMOUSLY = 1 or @GIVENANONYMOUSLY = 1) then 1 else @GIVESANONYMOUSLY end,
@TRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID,
@BASECURRENCYID = BASECURRENCYID,
@BASEEXCHANGERATEID = BASEEXCHANGERATEID,
@EXCHANGERATE = EXCHANGERATE,
@PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID,
@FINDERNUMBER = [FINDERNUMBER]
from dbo.BATCHREVENUE
where ID = @ID
select @CURRENCYSETID = CURRENCYSETID
from dbo.PDACCOUNTSYSTEM
where ID = @PDACCOUNTSYSTEMID
select
@BASECURRENCYID = CURRENCYSET.BASECURRENCYID
from
dbo.CURRENCYSET
where
CURRENCYSET.ID = coalesce(@CURRENCYSETID,dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(null))
select @BASECURRENCYDECIMALDIGITS = DECIMALDIGITS, @BASECURRENCYROUNDINGTYPECODE = ROUNDINGTYPECODE
from dbo.CURRENCY where ID = @BASECURRENCYID;
--SA - bug fix 360284. When Automatching, the recognition credits need to be cleared from the BRR table and then redefaulted to the existing constituents'
--This code is very similar to that found in RevenueBatchDataFrorm.Edit.8.xml. Should that code need to be changed, consider updating this code here as well.
--clear the recognitions for the old constituent
delete from
dbo.BATCHREVENUERECOGNITION
where
BATCHREVENUEID = @ID
-- Create default recognitions
declare @SCAMOUNT money;
declare @REVENUESTREAMS xml;
set @REVENUESTREAMS = dbo.UFN_REVENUEBATCH_GETAPPLICATIONSWITHCHILDREN_TOITEMLISTXML(@ID)
if @AMOUNT > 0
begin
insert into dbo.BATCHREVENUERECOGNITION (
BATCHREVENUEID,
CONSTITUENTID,
REVENUERECOGNITIONTYPECODEID,
AMOUNT,
EFFECTIVEDATE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select @ID,
RECOGNITIONS.CONSTITUENTID,
RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
RECOGNITIONS.AMOUNT,
@date,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS(@GIVESANONYMOUSLY, @CONSTITUENTID, @AMOUNT, @DATE, null) as RECOGNITIONS;
end
update dbo.BATCHREVENUEAPPLICATIONPLEDGE set
CONSTITUENTID = @CONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.BATCHREVENUEAPPLICATIONPLEDGE
inner join dbo.BATCHREVENUEAPPLICATION on BATCHREVENUEAPPLICATIONPLEDGE.ID = BATCHREVENUEAPPLICATION.BATCHREVENUEAPPLICATIONPLEDGEID
where
BATCHREVENUEAPPLICATION.BATCHREVENUEID = @ID and
BATCHREVENUEAPPLICATIONPLEDGE.CONSTITUENTID = @ORIGINALCONSTITUENTID
update dbo.BATCHREVENUE set
CONSTITUENTID = @CONSTITUENTID,
GIVENANONYMOUSLY =
case
when
(@GIVESANONYMOUSLY = 1 or BATCHREVENUE.GIVENANONYMOUSLY = 1) then
1
else
@GIVESANONYMOUSLY
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
--Update BATCHREVENUECONSTITUENTAPPEAL
update
dbo.[BATCHREVENUECONSTITUENTAPPEAL]
set
[CONSTITUENTID] = @CONSTITUENTID
where
[CONSTITUENTID] = @ORIGINALCONSTITUENTID
and
[FINDERNUMBER] = @FINDERNUMBER;
--update the constituent accounts
exec dbo.USP_REVENUEBATCH_GENERATECONSTITUENTACCOUNTS
@ORIGINALCONSTITUENTID,
@CONSTITUENTID,
@CHANGEAGENTID
-- 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.BATCHREVENUE where ID = @ID
select
@DOMANUALREVIEWFORAUTOMATCH = DOMANUALREVIEWFORAUTOMATCH
from dbo.BATCHCONSTITUENTUPDATE where ID = @ID
-- Pull in spouse fields
declare
@SPOUSE_ID uniqueidentifier,
@SPOUSE_TITLECODEID uniqueidentifier,
@SPOUSE_FIRSTNAME nvarchar(50),
@SPOUSE_NICKNAME nvarchar(50),
@SPOUSE_MIDDLENAME nvarchar(50),
@SPOUSE_MAIDENNAME nvarchar(100),
@SPOUSE_KEYNAME nvarchar(100),
@SPOUSE_SUFFIXCODEID uniqueidentifier,
@SPOUSE_GENDERCODE tinyint,
@SPOUSE_GENDERCODEID uniqueidentifier,
@SPOUSE_BIRTHDATE dbo.UDT_FUZZYDATE,
@SPOUSE_LOOKUPID nvarchar(100),
@SPOUSE_RELATIONSHIPTYPECODEID uniqueidentifier,
@SPOUSE_RECIPROCALTYPECODEID uniqueidentifier
select
@SPOUSE_ID = CONSTITUENT_SPOUSE.ID,
@SPOUSE_TITLECODEID = CONSTITUENT_SPOUSE.TITLECODEID,
@SPOUSE_FIRSTNAME = CONSTITUENT_SPOUSE.FIRSTNAME,
@SPOUSE_NICKNAME = CONSTITUENT_SPOUSE.NICKNAME,
@SPOUSE_MIDDLENAME = CONSTITUENT_SPOUSE.MIDDLENAME,
@SPOUSE_MAIDENNAME = CONSTITUENT_SPOUSE.MAIDENNAME,
@SPOUSE_KEYNAME = CONSTITUENT_SPOUSE.KEYNAME,
@SPOUSE_SUFFIXCODEID = CONSTITUENT_SPOUSE.SUFFIXCODEID,
@SPOUSE_GENDERCODE = CONSTITUENT_SPOUSE.GENDERCODE,
@SPOUSE_GENDERCODEID = CONSTITUENT_SPOUSE.GENDERCODEID,
@SPOUSE_BIRTHDATE = CONSTITUENT_SPOUSE.BIRTHDATE,
@SPOUSE_LOOKUPID = CONSTITUENT_SPOUSE.LOOKUPID,
@SPOUSE_RELATIONSHIPTYPECODEID = RELATIONSHIP.RELATIONSHIPTYPECODEID,
@SPOUSE_RECIPROCALTYPECODEID = RELATIONSHIP.RECIPROCALTYPECODEID
from dbo.RELATIONSHIP
inner join dbo.CONSTITUENT as CONSTITUENT_SPOUSE on
RELATIONSHIP.RECIPROCALCONSTITUENTID = CONSTITUENT_SPOUSE.ID and
RELATIONSHIP.ISSPOUSE = 1
where RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID
-- Load spouse recognition defaults
declare
@SOURCETORECIPIENTEXISTS bit = 0,
@SOURCETORECIPIENTMATCHFACTOR decimal(5, 2),
@SOURCETORECIPIENTREVENUERECOGNITIONTYPECODEID uniqueidentifier,
@RECIPIENTTOSOURCEEXISTS bit = 0,
@RECIPIENTTOSOURCEMATCHFACTOR decimal(5, 2),
@RECIPIENTTOSOURCEREVENUERECOGNITIONTYPECODEID uniqueidentifier
if @SPOUSE_ID is not null
begin
declare @RECOGNITIONDEFAULT table
(
SOURCECONSTITUENTID uniqueidentifier,
RECIPIENTCONSTITUENTID uniqueidentifier,
MATCHFACTOR decimal(5, 2),
REVENUERECOGNITIONTYPECODEID uniqueidentifier,
ARESETTHROUGHMEMBERDEFAULTINGALLOTHERMEMBERS bit
)
insert into @RECOGNITIONDEFAULT
(
SOURCECONSTITUENTID,
RECIPIENTCONSTITUENTID,
MATCHFACTOR,
REVENUERECOGNITIONTYPECODEID
)
select
SOURCECONSTITUENTID,
RECIPIENTCONSTITUENTID,
MATCHFACTOR,
REVENUERECOGNITIONTYPECODEID
from dbo.UFN_RECOGNITIONDEFAULTS_GETBETWEENTWOCONSTITUENTS(@CONSTITUENTID, @SPOUSE_ID)
select
@SOURCETORECIPIENTEXISTS = 1,
@SOURCETORECIPIENTMATCHFACTOR = MATCHFACTOR,
@SOURCETORECIPIENTREVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODEID
from @RECOGNITIONDEFAULT
where
SOURCECONSTITUENTID = @CONSTITUENTID and
RECIPIENTCONSTITUENTID = @SPOUSE_ID
select
@RECIPIENTTOSOURCEEXISTS = 1,
@RECIPIENTTOSOURCEMATCHFACTOR = MATCHFACTOR,
@RECIPIENTTOSOURCEREVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODEID
from @RECOGNITIONDEFAULT
where
SOURCECONSTITUENTID = @SPOUSE_ID and
RECIPIENTCONSTITUENTID = @CONSTITUENTID
end
-- Apply constituent matching rules
if @DOMANUALREVIEWFORAUTOMATCH = 0
begin
-- the incoming primary address/phone/email should be made non-primary if the existing record has a primary address/email/phone since the rules are handling this below
if exists (select 'x' from dbo.ADDRESS where CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1)
update dbo.BATCHCONSTITUENTUPDATEADDRESSES set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where BATCHCONSTITUENTUPDATEID = @ID
and ISPRIMARY = 1;
if exists (select 'x' from dbo.PHONE where CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1)
update dbo.BATCHCONSTITUENTUPDATEPHONES set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where BATCHCONSTITUENTUPDATEID = @ID
and ISPRIMARY = 1;
if exists (select 'x' from dbo.EMAILADDRESS where CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1)
update dbo.BATCHCONSTITUENTUPDATEEMAILADDRESSES set
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where BATCHCONSTITUENTUPDATEID = @ID
and ISPRIMARY = 1;
exec dbo.USP_BATCHCONSTITUENT_APPLYBUSINESSRULES
@ID,
@CONSTITUENTID,
@CHANGEAGENTID,
@NAMECODE,
0,
@SIMILARADDRESSCODE,
@UNSIMILARADDRESSCODE,
@NEWADDRESSPRIMARYCODE,
@BIRTHDATERULECODE,
@DIFFERENTPHONECODE,
@NEWPHONEPRIMARYCODE,
@DIFFERENTEMAILCODE,
@NEWEMAILPRIMARYCODE;
end
update dbo.BATCHCONSTITUENTUPDATE set
SPOUSE_ID = @SPOUSE_ID,
SPOUSE_TITLECODEID = @SPOUSE_TITLECODEID,
SPOUSE_FIRSTNAME = coalesce(@SPOUSE_FIRSTNAME, ''),
SPOUSE_NICKNAME = coalesce(@SPOUSE_NICKNAME, ''),
SPOUSE_MIDDLENAME = coalesce(@SPOUSE_MIDDLENAME, ''),
SPOUSE_MAIDENNAME = coalesce(@SPOUSE_MAIDENNAME, ''),
SPOUSE_LASTNAME = coalesce(@SPOUSE_KEYNAME, ''),
SPOUSE_SUFFIXCODEID = @SPOUSE_SUFFIXCODEID,
SPOUSE_BIRTHDATE = coalesce(@SPOUSE_BIRTHDATE, '00000000'),
SPOUSE_GENDERCODE = coalesce(@SPOUSE_GENDERCODE, 0),
SPOUSE_GENDERCODEID = @SPOUSE_GENDERCODEID,
SPOUSE_LOOKUPID = coalesce(@SPOUSE_LOOKUPID, ''),
SPOUSE_RELATIONSHIPTYPECODEID = @SPOUSE_RELATIONSHIPTYPECODEID,
SPOUSE_RECIPROCALTYPECODEID = @SPOUSE_RECIPROCALTYPECODEID,
SPOUSE_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS = @SOURCETORECIPIENTEXISTS,
SPOUSE_RECIPROCALSOFTCREDITMATCHFACTOR = coalesce(@SOURCETORECIPIENTMATCHFACTOR, 100),
SPOUSE_RECIPROCALRECOGNITIONTYPECODEID = @SOURCETORECIPIENTREVENUERECOGNITIONTYPECODEID,
SPOUSE_PRIMARYSOFTCREDITRELATIONSHIPEXISTS = @RECIPIENTTOSOURCEEXISTS,
SPOUSE_PRIMARYSOFTCREDITMATCHFACTOR = coalesce(@RECIPIENTTOSOURCEMATCHFACTOR, 100),
SPOUSE_PRIMARYRECOGNITIONTYPECODEID = @RECIPIENTTOSOURCEREVENUERECOGNITIONTYPECODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
-- add solicit codes for matched constituent
insert into [dbo].[BATCHREVENUECONSTITUENTSOLICITCODE]
(
[ID],
[BATCHREVENUEID],
[SOLICITCODEID],
[CONSTITUENTSOLICITCODEID],
[STARTDATE],
[ENDDATE],
[COMMENTS],
[SEQUENCE],
[CONSENTPREFERENCECODE],
[SOURCECODEID],
[SOURCEFILEPATH],
[PRIVACYPOLICYFILEPATH],
[SUPPORTINGINFORMATION],
[CONSENTSTATEMENT],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
newid() ID,
@ID [BATCHREVENUEID],
[SOLICITCODEID],
[ID] [CONSTITUENTSOLICITCODEID],
[STARTDATE],
[ENDDATE],
[COMMENTS],
[SEQUENCE],
[CONSENTPREFERENCECODE],
[SOURCECODEID],
[SOURCEFILEPATH],
[PRIVACYPOLICYFILEPATH],
[SUPPORTINGINFORMATION],
[CONSENTSTATEMENT],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.CONSTITUENTSOLICITCODE
where [CONSTITUENTID] = @CONSTITUENTID;
-- address the auto end date issues for consent based solicit codes
declare @SOLICITCODES xml = dbo.UFN_BATCHREVENUE_GETCONSTITUENTSOLICITCODES_TOITEMLISTXML(@ID);
exec dbo.USP_BATCHREVENUE_ADJUSTSOLICITCODEDATERANGES @CONSTITUENTID, @SOLICITCODES, @CHANGEAGENTID;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;