USP_RELATIONSHIPS_MANAGELIFECHANGES
Creates new relationships based off of settings in life changes configuration.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RELATIONSHIPID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@SPOUSEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_RELATIONSHIPS_MANAGELIFECHANGES
(
@RELATIONSHIPID uniqueidentifier,
@CONSTITUENTID uniqueidentifier,
@SPOUSEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
begin
set nocount on;
declare @UPDATEINDIVIDUALRELATIONSHIPS bit;
select
@UPDATEINDIVIDUALRELATIONSHIPS = UPDATEINDIVIDUALRELATIONSHIPS
from dbo.UFN_MARRIAGEOPTION_GETRULES();
if @UPDATEINDIVIDUALRELATIONSHIPS = 1
begin
declare @CURRENTDATE datetime;
set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
declare @SPOUSERELATIONSHIPTYPECODEID uniqueidentifier;
declare @CHILDID uniqueidentifier;
declare @STARTDATE datetime;
declare @ENDDATE datetime;
declare @RECIPROCAL bit = 0;
if @RELATIONSHIPID is null --need to get reciprocal relationship to correctly set marriage relationship
select
@RECIPROCAL = 1,
@RELATIONSHIPID = ID
from dbo.RELATIONSHIP
where ISSPOUSE = 1 and
RELATIONSHIPCONSTITUENTID = @CONSTITUENTID and RECIPROCALCONSTITUENTID = @SPOUSEID;
declare @GENDERSPOUSE int = null;
declare @GENDERCODEID uniqueidentifier = null;
declare @GENDERDESCRIPTION varchar(100);
select @GENDERCODEID = GENDERCODEID from dbo.CONSTITUENT where ID = @SPOUSEID
if (@GENDERCODEID is null or @GENDERCODEID = '00000000-0000-0000-0000-000000000000')
begin
set @GENDERSPOUSE=0;
end
else
begin
select @GENDERDESCRIPTION = ltrim(rtrim(DEFAULTREASON)) from dbo.GENDERCODEDEFAULTMAPPING where GENDERCODEID=@GENDERCODEID;
set @GENDERSPOUSE = case when @GENDERDESCRIPTION ='Unknown' then 0
when @GENDERDESCRIPTION='Male' then 1
when @GENDERDESCRIPTION='Female' then 2
else 3
end;
end
--join to life changes configuration to get new typecode for parent and child relationship; exclude relationships created by the marriage process
declare MARRIAGERELATIONSHIPCURSOR cursor local fast_forward for
select
MARRIAGERELATIONSHIP.SPOUSERELATIONSHIPTYPECODEID, --new relationship on spouse side
RELATIONSHIP.RECIPROCALCONSTITUENTID, --child
RELATIONSHIP.STARTDATE,
RELATIONSHIP.ENDDATE
from dbo.RELATIONSHIP
inner join dbo.MARRIAGERELATIONSHIPASSOCIATION
on MARRIAGERELATIONSHIPASSOCIATION.RELATIONSHIPTYPECODEID = RELATIONSHIP.RECIPROCAlTYPECODEID
inner join dbo.MARRIAGERELATIONSHIP
on MARRIAGERELATIONSHIPASSOCIATION.MARRIAGERELATIONSHIPID = MARRIAGERELATIONSHIP.ID
where
(MARRIAGERELATIONSHIP.SPOUSEGENDERCODE = 3 or --any
MARRIAGERELATIONSHIP.SPOUSEGENDERCODE = @GENDERSPOUSE) and
RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID and
(RELATIONSHIP.ENDDATE is null or RELATIONSHIP.ENDDATE >= @CURRENTDATE) and
not exists (select ID from dbo.RELATIONSHIPBYMARRIAGE where RELATIONSHIPBYMARRIAGE.RELATIONSHIPID = RELATIONSHIP.ID) and
not exists (select ID from dbo.DECEASEDCONSTITUENT where DECEASEDCONSTITUENT.ID = RELATIONSHIP.RECIPROCALCONSTITUENTID);
open MARRIAGERELATIONSHIPCURSOR;
fetch next from MARRIAGERELATIONSHIPCURSOR into @SPOUSERELATIONSHIPTYPECODEID, @CHILDID, @STARTDATE, @ENDDATE;
set @CURRENTDATE = getdate();
while (@@FETCH_STATUS = 0)
begin
--this returns a list of type codes; DESCRIPTION is set to 1 if there are commonly used relationship type combinations; we grab the first to match behavior in UI
declare @RELATIONSHIPTYPERELATESTO table(VALUE uniqueidentifier, LABEL nvarchar(255), DESCRIPTION bit);
delete @RELATIONSHIPTYPERELATESTO;
insert into @RELATIONSHIPTYPERELATESTO
exec dbo.USP_SIMPLEDATALIST_RELATIONSHIPTYPERELATESTO 0, @CHILDID, @SPOUSERELATIONSHIPTYPECODEID, null, 0, null;
declare @RECIPROCALTYPECODEID uniqueidentifier = null;
select
top 1 @RECIPROCALTYPECODEID = VALUE
from @RELATIONSHIPTYPERELATESTO
where DESCRIPTION = 1
if not @RECIPROCALTYPECODEID is null --do nothing if there are no commonly used matches
begin
declare @SETID uniqueidentifier = newid();
begin try
insert into dbo.RELATIONSHIPSET
(ID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@SETID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
declare @RELATIONSHIPID_CHILD uniqueidentifier = newid();
insert into dbo.RELATIONSHIP
(
ID,
RELATIONSHIPCONSTITUENTID,
RECIPROCALCONSTITUENTID,
RELATIONSHIPTYPECODEID,
RECIPROCALTYPECODEID,
RELATIONSHIPSETID,
STARTDATE,
ENDDATE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@RELATIONSHIPID_CHILD,
@SPOUSEID,
@CHILDID,
@SPOUSERELATIONSHIPTYPECODEID,
@RECIPROCALTYPECODEID,
@SETID,
@STARTDATE,
@ENDDATE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
exec dbo.USP_RELATIONSHIPBYMARRIAGE_CREATE @RELATIONSHIPID, @RELATIONSHIPID_CHILD, @CHANGEAGENTID, @CURRENTDATE;
end try
begin catch
--do nothing
end catch
end
fetch next from MARRIAGERELATIONSHIPCURSOR into @SPOUSERELATIONSHIPTYPECODEID, @CHILDID, @STARTDATE, @ENDDATE;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close MARRIAGERELATIONSHIPCURSOR;
deallocate MARRIAGERELATIONSHIPCURSOR;
--create additional relationships between "siblings"
exec dbo.USP_RELATIONSHIPS_MANAGELIFECHANGES_ADDITIONAL @RELATIONSHIPID, @CONSTITUENTID, @SPOUSEID, @CHANGEAGENTID;
if @RECIPROCAL = 0 --need to add the reciprocal relationships by marriage
exec dbo.USP_RELATIONSHIPS_MANAGELIFECHANGES null, @SPOUSEID, @CONSTITUENTID, @CHANGEAGENTID;
end
end