USP_CONSTITUENTSOLICITCODE_ADJUSTPREVIOUSDATERANGE_BULK
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@SOLICITCODES | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENTSOLICITCODE_ADJUSTPREVIOUSDATERANGE_BULK
(
@CONSTITUENTID uniqueidentifier,
@SOLICITCODES xml,
@CHANGEAGENTID uniqueidentifier = null
)
as
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime = getdate();
declare @TODAY date = convert(date, @CURRENTDATE); -- Strip the time component
declare @INPUT table
(
SOLICITCODEID uniqueidentifier,
NEW_STARTDATE date
);
declare @UPDATEROWS table
(
ROWNUMBER bigint,
CONSTITUENTSOLICITCODEID uniqueidentifier,
AUTOENDDATE date
);
-- Populate temp table with selected data
insert into @INPUT
select
T.c.value('(SOLICITCODEID)[1]','uniqueidentifier') AS 'SOLICITCODEID',
T.c.value('(STARTDATE)[1]','datetime') AS 'STARTDATE'
from @SOLICITCODES.nodes('/SOLICITCODES/ITEM') T(c);
begin try
-- Gather data
insert into @UPDATEROWS
select
ROW_NUMBER() over (partition by CONSTITUENTSOLICITCODE.CONSTITUENTID, CONSTITUENTSOLICITCODE.SOLICITCODEID order by CONSTITUENTSOLICITCODE.STARTDATE desc) as ROWNUMBER,
CONSTITUENTSOLICITCODE.ID as CONSTITUENTSOLICITCODEID,
dateadd(day, -1, INPUT.NEW_STARTDATE) as AUTOENDDATE
from @INPUT INPUT
inner join dbo.CONSTITUENTSOLICITCODE on INPUT.SOLICITCODEID = CONSTITUENTSOLICITCODE.SOLICITCODEID
inner join dbo.SOLICITCODE on CONSTITUENTSOLICITCODE.SOLICITCODEID = SOLICITCODE.ID
where
CONSTITUENTSOLICITCODE.CONSTITUENTID = @CONSTITUENTID
and (SOLICITCODE.CONSENTCODE = 1
or
SOLICITCODE.CONSENTCODE = 2) -- EU / Advanced Consent
and CONSTITUENTSOLICITCODE.STARTDATE < INPUT.NEW_STARTDATE
and CONSTITUENTSOLICITCODE.ENDDATE is null;
-- Discard entries that are not the most recent solicit code association
delete from @UPDATEROWS
where ROWNUMBER <> 1;
if (select count(CONSTITUENTSOLICITCODEID) from @UPDATEROWS) > 0
begin
-- End date previous solicit code associations
update dbo.CONSTITUENTSOLICITCODE
set
ENDDATE = UPDATEROWS.AUTOENDDATE,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from @UPDATEROWS UPDATEROWS
where CONSTITUENTSOLICITCODE.ID = UPDATEROWS.CONSTITUENTSOLICITCODEID;
-- Mark associated mail preferences as Do not send when the ended solicit code is no longer active
update MAILPREFERENCE set
SENDMAIL = 0,
USESEASONALADDRESS = 0,
USEPRIMARYADDRESS = 0,
USEPRIMARYEMAIL = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from @UPDATEROWS UPDATEROWS
inner join dbo.MAILPREFERENCE on UPDATEROWS.CONSTITUENTSOLICITCODEID = MAILPREFERENCE.CONSTITUENTSOLICITCODEID
where UPDATEROWS.AUTOENDDATE < @TODAY;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end