USP_RELATIONSHIPS_MANAGELIFECHANGES_ADDITIONAL
Creates new relationships based off of additional 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_ADDITIONAL
(
@RELATIONSHIPID uniqueidentifier,
@CONSTITUENTID uniqueidentifier,
@SPOUSEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
begin
set nocount on;
declare @CURRENTDATE datetime;
set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
declare @RECIPROCAL_RELATIONSHIPID uniqueidentifier; --need for creating the reciprocal relationshipbymarriage record
select
@RECIPROCAL_RELATIONSHIPID = ID
from dbo.RELATIONSHIP
where ISSPOUSE = 1 and
RECIPROCALCONSTITUENTID = @CONSTITUENTID and RELATIONSHIPCONSTITUENTID = @SPOUSEID;
declare @SPOUSE_RELATIONSHIPCONSTITUENTID uniqueidentifier;
declare @CONSTIT_RELATIONSHIPCONSTITUENTID uniqueidentifier;
declare @SPOUSE_RELATIONSHIPTYPECODEID uniqueidentifier;
--join to life changes additional configuration to get new typecode for sibling relationship; exclude relationships created by the marriage process
declare SIBLINGRELATIONSHIPCURSOR cursor local fast_forward for
select
SPOUSERELATIONSHIP.RECIPROCALCONSTITUENTID, --new relationship on spouse side
RELATIONSHIP.RECIPROCALCONSTITUENTID, --child
MARRIAGEADDITIONALRELATIONSHIP.RELATIONSHIPTYPECODEID --new sibling type code
from dbo.RELATIONSHIP
inner join dbo.MARRIAGEADDITIONALRELATIONSHIPASSOCIATION
on MARRIAGEADDITIONALRELATIONSHIPASSOCIATION.RELATIONSHIPTYPECODEID = RELATIONSHIP.RECIPROCALTYPECODEID
inner join dbo.MARRIAGEADDITIONALRELATIONSHIP
on MARRIAGEADDITIONALRELATIONSHIPASSOCIATION.MARRIAGEADDITIONALRELATIONSHIPID = MARRIAGEADDITIONALRELATIONSHIP.ID
inner join dbo.RELATIONSHIP SPOUSERELATIONSHIP
on SPOUSERELATIONSHIP.RECIPROCALTYPECODEID = MARRIAGEADDITIONALRELATIONSHIP.SPOUSERELATIONSHIPTYPECODEID
where
RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CONSTITUENTID and
SPOUSERELATIONSHIP.RELATIONSHIPCONSTITUENTID = @SPOUSEID and
(RELATIONSHIP.ENDDATE is null or RELATIONSHIP.ENDDATE >= @CURRENTDATE) and
(SPOUSERELATIONSHIP.ENDDATE is null or SPOUSERELATIONSHIP.ENDDATE >= @CURRENTDATE) and
not exists (select ID from dbo.RELATIONSHIPBYMARRIAGE where RELATIONSHIPBYMARRIAGE.RELATIONSHIPID in (RELATIONSHIP.ID, SPOUSERELATIONSHIP.ID)) and
not exists (select ID from dbo.DECEASEDCONSTITUENT where DECEASEDCONSTITUENT.ID in (RELATIONSHIP.RECIPROCALCONSTITUENTID, SPOUSERELATIONSHIP.RECIPROCALCONSTITUENTID));
open SIBLINGRELATIONSHIPCURSOR;
fetch next from SIBLINGRELATIONSHIPCURSOR into @SPOUSE_RELATIONSHIPCONSTITUENTID, @CONSTIT_RELATIONSHIPCONSTITUENTID, @SPOUSE_RELATIONSHIPTYPECODEID;
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, @CONSTIT_RELATIONSHIPCONSTITUENTID, @SPOUSE_RELATIONSHIPTYPECODEID, 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_SIBLING uniqueidentifier = newid();
insert into dbo.RELATIONSHIP
(
ID,
RELATIONSHIPCONSTITUENTID,
RECIPROCALCONSTITUENTID,
RELATIONSHIPTYPECODEID,
RECIPROCALTYPECODEID,
RELATIONSHIPSETID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@RELATIONSHIPID_SIBLING,
@CONSTIT_RELATIONSHIPCONSTITUENTID,
@SPOUSE_RELATIONSHIPCONSTITUENTID,
@RECIPROCALTYPECODEID,
@SPOUSE_RELATIONSHIPTYPECODEID,
@SETID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
exec dbo.USP_RELATIONSHIPBYMARRIAGE_CREATE @RELATIONSHIPID, @RELATIONSHIPID_SIBLING, @CHANGEAGENTID, @CURRENTDATE;
end try
begin catch
--do nothing
end catch
end
fetch next from SIBLINGRELATIONSHIPCURSOR into @SPOUSE_RELATIONSHIPCONSTITUENTID, @CONSTIT_RELATIONSHIPCONSTITUENTID, @SPOUSE_RELATIONSHIPTYPECODEID;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close SIBLINGRELATIONSHIPCURSOR;
deallocate SIBLINGRELATIONSHIPCURSOR;
end