USP_MEMBERSHIPTRANSACTION_DELETE

Executes the "Membership Transaction: 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_MEMBERSHIPTRANSACTION_DELETE
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier
                    )
                    as begin
                        begin try
                            declare @CURRENTDATE datetime
                            set @CURRENTDATE = getdate()

                            declare @MEMBERSHIPID uniqueidentifier
                            declare @ACTIONCODE tinyint
                            declare @TRANSACTIONDATE datetime
                            declare @DATEADDED datetime
                            declare @DELETINGCURRENTTRANSACTION bit

                            select @MEMBERSHIPID = MEMBERSHIPID, 
                                    @ACTIONCODE = ACTIONCODE,
                                    @TRANSACTIONDATE = TRANSACTIONDATE,
                                    @DATEADDED = DATEADDED
                            from dbo.MEMBERSHIPTRANSACTION 
                            where ID = @ID

                            select top 1 @DELETINGCURRENTTRANSACTION = case ID when @ID then 1 else 0 end 
                            from dbo.MEMBERSHIPTRANSACTION 
                            where MEMBERSHIPID = @MEMBERSHIPID 
                            order by TRANSACTIONDATE desc,DATEADDED desc

                            --don't delete if attached to revenue

                            if (select REVENUESPLITID from dbo.MEMBERSHIPTRANSACTION where ID = @ID) is not null
                              begin
                                  raiserror('This membership transaction is attached to revenue and cannot be deleted.', 13, 1);
                                  return 1;
                              end    

                            --If this is the current cancel transaction, see if there are any commitments associated to the membership. If there is a recurring gift, it needs to be

                            --  set back to a status of 'Active'. If there is an installment plan, then we need to get the associated write-off and delete it, if one exists.

                            if @DELETINGCURRENTTRANSACTION = 1 and @ACTIONCODE = 4
                            begin
                                declare @RGID uniqueidentifier = (select top 1 FINANCIALTRANSACTION.ID
                                                                    from dbo.MEMBERSHIPTRANSACTION
                                                                    inner join dbo.MEMBERSHIP on MEMBERSHIPTRANSACTION.MEMBERSHIPID = MEMBERSHIP.ID
                                                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM on MEMBERSHIPTRANSACTION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
                                                                    inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                                                                    inner join REVENUESCHEDULE on FINANCIALTRANSACTION.ID = REVENUESCHEDULE.ID
                                                                    where MEMBERSHIPTRANSACTION.MEMBERSHIPID = (select MEMBERSHIPID from dbo.MEMBERSHIPTRANSACTION where ID = @ID)
                                                                        and FINANCIALTRANSACTION.TYPECODE = 2
                                                                        and MEMBERSHIPTRANSACTION.TRANSACTIONDATE >= MEMBERSHIP.JOINDATE
                                                                        order by MEMBERSHIPTRANSACTION.TRANSACTIONDATE desc, MEMBERSHIPTRANSACTION.DATEADDED desc);
                                declare @IPID uniqueidentifier = (select dbo.UFN_MEMBERSHIP_GETPLEDGE(MEMBERSHIPID) from dbo.MEMBERSHIPTRANSACTION where ID = @ID);

                                if @RGID is not null
                                begin                                    
                                    exec dbo.USP_RECURRINGGIFT_EDITSTATUS @RGID, 0, @CHANGEAGENTID, @CURRENTDATE, null, null, null, 14;
                                end
                                else if @IPID is not null
                                begin
                                    declare @WRITEOFFID uniqueidentifier;
                                    select top 1 @WRITEOFFID = ID 
                                        from dbo.WRITEOFF 
                                        where REVENUEID = @IPID and DATEADDED = (select DATEADDED from dbo.MEMBERSHIPTRANSACTION where ID = @ID)

                                    if @WRITEOFFID is not null
                                    begin
                                        delete from dbo.WRITEOFF where ID = @WRITEOFFID
                                    end
                                end
                            end

                            --don't delete if this is a join transaction

                            if @ACTIONCODE = 0
                              begin
                                  raiserror('The join membership transaction cannot be deleted.', 13, 1);
                                  return 1;
                              end        

                            declare @EXPIRATIONDATE date
                            select @EXPIRATIONDATE = [EXPIRATIONDATE] from dbo.MEMBERSHIPTRANSACTION where ID = @ID

              delete from dbo.MEMBERSHIPPROGRAMCONTRIBUTIONREVENUE
              where ORIGINALMEMBERSHIPTRANSACTIONID = @ID or CURRENTMEMBERSHIPTRANSACTIONID = @ID

                            exec USP_MEMBERSHIPTRANSACTION_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID

                            if @DELETINGCURRENTTRANSACTION = 1 
                              --Try to roll back the membership record to the state as of the previous transaction.

                                exec dbo.USP_MEMBERSHIP_RESETFROMLASTTRANSACTION @MEMBERSHIPID, @EXPIRATIONDATE, @CHANGEAGENTID
                            else
                            begin
                                -- Reset the action code of the next transaction

                                declare @PREVEXPRDATE datetime,
                                        @PREVLEVELID uniqueidentifier,
                                        @PREVACTIONCODE tinyint,
                                        @NEXTLEVELID uniqueidentifier,
                                        @NEXTTRANSDATE datetime,
                                        @NEXTTRANSID uniqueidentifier,
                                        @NEXTACTIONCODE tinyint;

                                select top 1
                                    @PREVEXPRDATE = EXPIRATIONDATE,
                                    @PREVLEVELID = MEMBERSHIPLEVELID,
                                    @PREVACTIONCODE = ACTIONCODE
                                from
                                    dbo.MEMBERSHIPTRANSACTION
                                where
                                    MEMBERSHIPID = @MEMBERSHIPID
                                    and (
                                        TRANSACTIONDATE < @TRANSACTIONDATE
                                        or (
                                            TRANSACTIONDATE = @TRANSACTIONDATE
                                            and DATEADDED < @DATEADDED
                                        )
                                    )
                                order by
                                    TRANSACTIONDATE desc, DATEADDED desc;

                                select top 1
                                    @NEXTTRANSDATE = TRANSACTIONDATE,
                                    @NEXTLEVELID = MEMBERSHIPLEVELID,
                                    @NEXTACTIONCODE = ACTIONCODE,
                                    @NEXTTRANSID = ID
                                from
                                    dbo.MEMBERSHIPTRANSACTION
                                where
                                    MEMBERSHIPID = @MEMBERSHIPID
                                    and (
                                        TRANSACTIONDATE > @TRANSACTIONDATE
                                        or (
                                            TRANSACTIONDATE = @TRANSACTIONDATE
                                            and DATEADDED > @DATEADDED
                                        )
                                    )
                                order by
                                    TRANSACTIONDATE asc, DATEADDED asc;

                                set @NEXTACTIONCODE = case @NEXTACTIONCODE
                                        when 4 then 4
                                        else
                                            dbo.UFN_MEMBERSHIPTRANSACTION_DETERMINENEWACTIONCODE(@PREVLEVELID,
                                                                                        @PREVEXPRDATE,
                                                                                        @PREVACTIONCODE,
                                                                                        @NEXTLEVELID,
                                                                                        @NEXTTRANSDATE)
                                        end

                                update dbo.MEMBERSHIPTRANSACTION set
                                    ACTIONCODE = @NEXTACTIONCODE,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @NEXTTRANSID;

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