USP_CONSTITUENTSOLICITCODE_ADJUSTSOLICITCODEDATERANGES
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@SOLICITCODES | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure USP_CONSTITUENTSOLICITCODE_ADJUSTSOLICITCODEDATERANGES
(
@CONSTITUENTID uniqueidentifier,
@SOLICITCODES xml,
@CHANGEAGENTID uniqueidentifier = null
)
as
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE date = getdate();
declare @INPUT table
(
SOLICITCODEID uniqueidentifier,
NEW_STARTDATE date,
NEW_ENDDATE date
);
-- Populate temp table with selected data
insert into @INPUT
select
T.c.value('(SOLICITCODEID)[1]','uniqueidentifier') AS 'SOLICITCODEID',
case when T.c.value('(STARTDATE)[1]','date') ='0001-01-01' then null else T.c.value('(STARTDATE)[1]','date') end AS 'STARTDATE',
case when T.c.value('(ENDDATE)[1]','date') ='0001-01-01' then null else T.c.value('(ENDDATE)[1]','date') end AS 'ENDDATE'
from @SOLICITCODES.nodes('/CONSENT/ITEM') T(c);
begin try
with UPDATEROWS as
(
select
ROW_NUMBER() over (partition by CONSTITUENTSOLICITCODE.CONSTITUENTID, CONSTITUENTSOLICITCODE.SOLICITCODEID order by CONSTITUENTSOLICITCODE.STARTDATE desc) as ROWNUMBER,
CONSTITUENTSOLICITCODE.ID as CONSTITUENTSOLICITCODEID,
INPUT.NEW_STARTDATE,
INPUT.NEW_ENDDATE
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 [dbo].[UFN_DATE_GETEARLIESTTIME](CONSTITUENTSOLICITCODE.STARTDATE) < [dbo].[UFN_DATE_GETEARLIESTTIME] (INPUT.NEW_STARTDATE)
and CONSTITUENTSOLICITCODE.ENDDATE is null
)
update dbo.CONSTITUENTSOLICITCODE
set
ENDDATE = case when UPDATEROWS.NEW_ENDDATE is null then dateadd(day, -1, UPDATEROWS.NEW_STARTDATE)
else UPDATEROWS.NEW_ENDDATE
end,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from UPDATEROWS
where
CONSTITUENTSOLICITCODE.ID = UPDATEROWS.CONSTITUENTSOLICITCODEID
and UPDATEROWS.ROWNUMBER = 1;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end