USP_RELATIONSHIP_DELETE

Executes the "Relationship: Delete" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN Input parameter indicating the ID of the record being deleted.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the delete.

Definition

Copy


CREATE procedure dbo.USP_RELATIONSHIP_DELETE
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier
)
as
  set nocount on;
  declare @CURRENTDATE datetime;
  set @CURRENTDATE = getdate();

  if @CHANGEAGENTID is null
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
  declare @ADDRESSID uniqueidentifier

  select @ADDRESSID=ID
  from ADDRESS
  where RELATIONSHIPID=@ID and ISPRIMARY=0

  declare @INDIVIDUALANDORGANIZATIONRELATIONSHIP bit = 0;
  declare @INDIVIDUALISCONACT bit = 0;

  select
      @INDIVIDUALANDORGANIZATIONRELATIONSHIP = 
          case
              when (not CONSTITUENTISORG = 1 and not CONSTITUENTISGROUP = 1) and (RECIPROCALCONSTITUENTISORG = 1) then
                  1
              when (CONSTITUENTISORG = 1) and (not RECIPROCALCONSTITUENTISORG = 1 and not RECIPROCALCONSTITUENTISGROUP = 1) then
                  1
              else
                  0
          end,
      @INDIVIDUALISCONACT = ISCONTACT
  from
      dbo.UFN_RELATIONSHIP_GETCONSTITUENTS(@ID)

  if @ADDRESSID is not null and not exists(select 1 from dbo.[SALESORDER] where [SALESORDER].[ADDRESSID] = @ADDRESSID) and (not @INDIVIDUALANDORGANIZATIONRELATIONSHIP = 1 and not @INDIVIDUALISCONACT = 1)
  begin
    exec dbo.USP_ADDRESS_DELETEBYID_WITHCHANGEAGENTID @ADDRESSID, @CHANGEAGENTID;
  end
  else
  begin

    select @ADDRESSID=a.ID
    from dbo.ADDRESS a
      inner join dbo.RELATIONSHIP recip on recip.ID=a.RELATIONSHIPID
      inner join dbo.RELATIONSHIP relat on 
        relat.RELATIONSHIPCONSTITUENTID = recip.RECIPROCALCONSTITUENTID and
        relat.RECIPROCALCONSTITUENTID = recip.RELATIONSHIPCONSTITUENTID and
        relat.RELATIONSHIPTYPECODEID = recip.RECIPROCALTYPECODEID and
        relat.RECIPROCALTYPECODEID = recip.RELATIONSHIPTYPECODEID
    where  relat.ID='3661ecbe-0832-484b-8184-c79626164e1d' and a.ISPRIMARY=0

    if @ADDRESSID is not null and not exists(select 1 from dbo.[SALESORDER] where [SALESORDER].[ADDRESSID] = @ADDRESSID) and (not @INDIVIDUALANDORGANIZATIONRELATIONSHIP = 1 and not @INDIVIDUALISCONACT = 1)
    begin
      exec dbo.USP_ADDRESS_DELETEBYID_WITHCHANGEAGENTID @ADDRESSID, @CHANGEAGENTID;
    end
  end

  declare @SOURCECONSTITUENTID uniqueidentifier, @RECIPIENTCONSTITUENTID uniqueidentifier

  select
    @SOURCECONSTITUENTID = R.RELATIONSHIPCONSTITUENTID,
    @RECIPIENTCONSTITUENTID = R.RECIPROCALCONSTITUENTID
  from dbo.RELATIONSHIP R
  where
    ID = @ID

  begin try
    -- Clear recognition defaults if the matching couldn't have been set through household's recognize 

    -- specified members for a members gift

    declare @DELETERECOGNITIONDEFAULT bit
    set @DELETERECOGNITIONDEFAULT = 1

    declare @COMMONHOUSEHOLDID uniqueidentifier
    select 
      @COMMONHOUSEHOLDID = GM1.GROUPID 
    from dbo.GROUPMEMBER GM1
    inner join dbo.GROUPMEMBER GM2 on GM1.GROUPID = GM2.GROUPID
    inner join dbo.GROUPDATA GD on GM1.GROUPID = GD.ID
    where
      GD.GROUPTYPECODE = 0 and
      GM1.MEMBERID = @SOURCECONSTITUENTID and
      GM2.MEMBERID = @RECIPIENTCONSTITUENTID

    if @COMMONHOUSEHOLDID is not null
    begin
      declare @MEMBERRECOGNIZEOTHERMEMBERSCODE tinyint
      set @MEMBERRECOGNIZEOTHERMEMBERSCODE = dbo.UFN_HOUSEHOLD_GETMEMBERRECOGNIZEOTHERMEMBERSSETTING(@COMMONHOUSEHOLDID)

      if @MEMBERRECOGNIZEOTHERMEMBERSCODE = 2
        set @DELETERECOGNITIONDEFAULT = 0
    end

    declare @CONTEXTCACHE varbinary(128) = context_info();

    if not @CHANGEAGENTID is null
      set context_info @CHANGEAGENTID;

    if @DELETERECOGNITIONDEFAULT = 0
    begin
      -- Verify the two constituents don't have any other relationships

      if not exists  
      (select 1 
      from dbo.RELATIONSHIP 
      where 
 ((RELATIONSHIPCONSTITUENTID = @SOURCECONSTITUENTID and
        RECIPROCALCONSTITUENTID = @RECIPIENTCONSTITUENTID) or
        (RELATIONSHIPCONSTITUENTID = @RECIPIENTCONSTITUENTID and
        RECIPROCALCONSTITUENTID = @SOURCECONSTITUENTID)) and
        ID <> @ID)
      delete from dbo.REVENUERECOGNITIONDEFAULT
        where
          (SOURCECONSTITUENTID = @SOURCECONSTITUENTID and
          RECIPIENTCONSTITUENTID = @RECIPIENTCONSTITUENTID) or
          (SOURCECONSTITUENTID = @RECIPIENTCONSTITUENTID and
          RECIPIENTCONSTITUENTID = @SOURCECONSTITUENTID)
    end

    if not @CONTEXTCACHE is null
      set context_info @CONTEXTCACHE;

    declare @RECIPROCALRELATIONSHIPID uniqueidentifier;
    select
      @RECIPROCALRELATIONSHIPID = REC.ID
    from
      dbo.RELATIONSHIP REL
    inner join
      dbo.RELATIONSHIP REC on
        REC.RELATIONSHIPCONSTITUENTID = REL.RECIPROCALCONSTITUENTID and
        REC.RECIPROCALCONSTITUENTID = REL.RELATIONSHIPCONSTITUENTID and
        REC.RELATIONSHIPTYPECODEID = REL.RECIPROCALTYPECODEID and
        REC.RECIPROCALTYPECODEID = REL.RELATIONSHIPTYPECODEID
    where
      REL.ID = @ID;

    update BATCHREVENUEENHANCEDMATCHINGGIFTS set
      RELATIONSHIPID = null,
      CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CURRENTDATE
    from
      dbo.BATCHREVENUEENHANCEDMATCHINGGIFTS BREMG
    inner join
      dbo.BATCHREVENUE on BATCHREVENUE.ID = BREMG.BATCHREVENUEID
    inner join
      dbo.BATCH on BATCH.ID = BATCHREVENUE.BATCHID
    where
      BREMG.RELATIONSHIPID in (@ID, @RECIPROCALRELATIONSHIPID) and
      BATCH.STATUSCODE = 1;

  end try
  begin catch
    exec dbo.USP_RAISE_ERROR;
    return 1;
  end catch

  exec dbo.USP_RELATIONSHIP_DELETE_CLEANUPPARENTCORP @SOURCECONSTITUENTID, @RECIPIENTCONSTITUENTID, @CURRENTDATE, @CHANGEAGENTID;
  exec dbo.USP_RELATIONSHIP_DELETE_CLEANUPPARENTCORP @RECIPIENTCONSTITUENTID, @SOURCECONSTITUENTID, @CURRENTDATE, @CHANGEAGENTID;

  delete dbo.RELATIONSHIPBYMARRIAGE where RELATIONSHIPID = @ID or MARRIAGERELATIONSHIPID = @ID

  exec dbo.USP_RELATIONSHIP_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
  return 0;