USP_BATCHREVENUE_DELETE

Executes the "Revenue Batch Row: 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_BATCHREVENUE_DELETE
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier
)
as
begin
  --check deletion rules, if any


  declare @SOURCEREVENUEID uniqueidentifier;
  declare @CURRENTDATE datetime = getdate();

  declare @contextCache varbinary(128);
  set @contextCache = CONTEXT_INFO();

  if not @CHANGEAGENTID is null
    set CONTEXT_INFO @CHANGEAGENTID;

  delete from dbo.BATCHREVENUESPLIT where BATCHREVENUEID = @ID;

  exec dbo.USP_REVENUEBATCH_CLEARSCHEDULEISPENDINGFLAG @REVENUEBATCHID = @ID, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE;

  declare @PLEDGEIDS as table (ID uniqueidentifier);
  insert into @PLEDGEIDS select BATCHREVENUEAPPLICATIONPLEDGEID from BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID
  delete from dbo.BATCHREVENUEAPPLICATIONPLEDGE where ID in (select ID from @PLEDGEIDS);

  declare @MEMBERSHIPIDS as table (ID uniqueidentifier);
  insert into @MEMBERSHIPIDS select BATCHREVENUEAPPLICATIONMEMBERSHIPID from BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID
  delete from dbo.BATCHREVENUEAPPLICATIONMEMBERSHIP where ID in (select ID from @MEMBERSHIPIDS);

  -- remove any revenue batch registrant guests of the this registrant

  -- Delete any registrant registration maps for this registrant and their guests

  -- Deleting from REGISTRANTREGISTRATIONMAP cascade deletes REGISTRANTPREFERENCEMAP

  delete from
    dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
  where
    BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID in
    (
      select
        BATCHREVENUEREGISTRANT.ID
      from
        dbo.BATCHREVENUEREGISTRANT
      inner join
        dbo.BATCHREVENUEAPPLICATION on BATCHREVENUEAPPLICATION.BATCHREVENUEREGISTRANTID = BATCHREVENUEREGISTRANT.ID
      where
        BATCHREVENUEAPPLICATION.BATCHREVENUEID = @ID
    )
    or 
    BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID in
    (
      select
        GUEST.ID
      from
        dbo.BATCHREVENUEREGISTRANT GUEST
      inner join
        dbo.BATCHREVENUEREGISTRANT HOST on GUEST.GUESTOFREGISTRANTID = HOST.ID
      inner join
        dbo.BATCHREVENUEAPPLICATION on BATCHREVENUEAPPLICATION.BATCHREVENUEREGISTRANTID = HOST.ID
      where
        BATCHREVENUEAPPLICATION.BATCHREVENUEID = @ID
    );

  --Remove the registrant's guests

  delete from
    dbo.BATCHREVENUEREGISTRANT
  where
    BATCHREVENUEREGISTRANT.ID in
    (
      select
        GUEST.ID
      from 
        dbo.BATCHREVENUEREGISTRANT GUEST
      inner join
        dbo.BATCHREVENUEREGISTRANT HOST on GUEST.GUESTOFREGISTRANTID = HOST.ID
      inner join
        dbo.BATCHREVENUEAPPLICATION on BATCHREVENUEAPPLICATION.BATCHREVENUEREGISTRANTID = HOST.ID
      where
        BATCHREVENUEAPPLICATION.BATCHREVENUEID = @ID
    );

  declare @BATCHREVENUEREGISTRANTS table (ID uniqueidentifier);
  insert into @BATCHREVENUEREGISTRANTS(ID)
  (
    select
      BATCHREVENUEREGISTRANT.ID
    from
      dbo.BATCHREVENUEREGISTRANT
    inner join
      dbo.BATCHREVENUEAPPLICATION on BATCHREVENUEAPPLICATION.BATCHREVENUEREGISTRANTID = BATCHREVENUEREGISTRANT.ID
    where
      BATCHREVENUEAPPLICATION.BATCHREVENUEID = @ID
  );

  --BATCHREVENUEAPPLICATION cannot support multiple cascade paths so set the batch revenue registrant IDs to null before deleting

  update dbo.BATCHREVENUEAPPLICATION set
    BATCHREVENUEREGISTRANTID = null,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CURRENTDATE
  where
    BATCHREVENUEAPPLICATION.BATCHREVENUEREGISTRANTID is not null
    and
    BATCHREVENUEAPPLICATION.BATCHREVENUEID = @ID;

  --Remove the registrant

  delete from
    dbo.BATCHREVENUEREGISTRANT
  where
    BATCHREVENUEREGISTRANT.ID in (select ID from @BATCHREVENUEREGISTRANTS)
    and BATCHREVENUEREGISTRANT.ID not in (select BATCHREVENUEREGISTRANTID from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEREGISTRANTID is not null);

  delete from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID;
  delete from dbo.BATCHREVENUERECOGNITION where BATCHREVENUEID = @ID;

  --remove revenue group members of groups you are about to delete

  delete from
    dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
  where
    MEMBERID in 
    (select BRC.ID from dbo.BATCHREVENUECONSTITUENT BRC
      inner join dbo.BATCHREVENUE BR on BR.CONSTITUENTID = BRC.ID
      where BR.ID = @ID);

  --remove revenue constituent if the constituent was created in this batch

  delete
    from dbo.BATCHREVENUECONSTITUENT
  where
    ID in
    (select BRC.ID from dbo.BATCHREVENUECONSTITUENT BRC
      inner join dbo.BATCHREVENUE BR on BR.CONSTITUENTID = BRC.ID
      where BR.ID = @ID);

  delete from dbo.BATCHREVENUECONSTITUENTACCOUNT
  where BATCHREVENUECONSTITUENTACCOUNT.ID in
    (
      select CONSTITUENTACCOUNTID
      from dbo.BATCHREVENUE
      where BATCHREVENUE.ID = @ID
    );

  --SEPAMANDATEACTIVITY stores a BATCHROWID column that can store either ERB rows or membership dues batch rows. This is a guid column because we cannot have two FK's due to 

  -- multiple cascade paths

  update dbo.SEPAMANDATEACTIVITY set
    BATCHROWID = null
  where
    SEPAMANDATEACTIVITY.BATCHROWID = @ID;

  --remove BBIS transaction info if batch row was created by BBIS donation transaction.

  declare @BBNCTRANID int = 0;
  select @BBNCTRANID = (select top 1 BBNCTRANID
  from dbo.BATCHREVENUEBBNCINFO
  where ID in
    (select BRB.ID from dbo.BATCHREVENUEBBNCINFO BRB
     inner join dbo.BATCHREVENUE BR on BR.ID = BRB.BATCHREVENUEID
     where BR.ID = @ID));

  delete
  from dbo.BATCHREVENUEBBNCINFO
  where ID in
    (select BRB.ID from dbo.BATCHREVENUEBBNCINFO BRB
     inner join dbo.BATCHREVENUE BR on BR.ID = BRB.BATCHREVENUEID
     where BR.ID = @ID);

  if @BBNCTRANID > 0
    exec [dbo].[spTransactions_DeleteDonation] @BBNCTRANID

      --remove the constituent update batch row for constituent edits

  exec USP_BATCHCONSTITUENTUPDATE_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;

  exec USP_BATCHREVENUE_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;

  if not @contextCache is null
    set CONTEXT_INFO @contextCache;

  return 0;
end