USP_MEMBERSHIP_CANCEL

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@REASONCODEID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_MEMBERSHIP_CANCEL
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @REASONCODEID uniqueidentifier = null

as
set nocount on;

declare @CURRENTDATE datetime = getdate();

if @CHANGEAGENTID is null
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

update dbo.MEMBERSHIP
set 
    STATUSCODE = 1,
    CANCELLATIONREASONCODEID = @REASONCODEID,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CURRENTDATE
where MEMBERSHIP.ID = @ID;

--Cancel all membership addons

update dbo.MEMBERSHIPADDON
set
    MEMBERSHIPADDON.NUMCANCELLED = MEMBERSHIPADDON.QUANTITY,
    MEMBERSHIPADDON.CHANGEDBYID = @CHANGEAGENTID,
    MEMBERSHIPADDON.DATECHANGED = @CURRENTDATE
from dbo.MEMBERSHIPADDON
where
    MEMBERSHIPADDON.MEMBERSHIPID = @ID and
    MEMBERSHIPADDON.EXPIRATIONDATE >= @CURRENTDATE;

insert into dbo.MEMBERSHIPTRANSACTION
(
    ID,
    MEMBERSHIPID,
    MEMBERSHIPLEVELID,
    MEMBERSHIPLEVELTERMID,
    MEMBERSHIPLEVELTYPECODEID,
    TRANSACTIONDATE,
    EXPIRATIONDATE,
    ISGIFT,
    DONORID,
    NUMBEROFCHILDREN,
    COMMENTS,
    ACTIONCODE,
    ADDEDBYID, 
    CHANGEDBYID, 
    DATEADDED, 
    DATECHANGED
)
select
    newid(),
    @ID,
    MEMBERSHIPLEVELID,
    MEMBERSHIPLEVELTERMID,
    MEMBERSHIPLEVELTYPECODEID,
    dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE),
    EXPIRATIONDATE,
    ISGIFT,
    GIVENBYID,
    NUMBEROFCHILDREN,
    COMMENTS,
    4,
    @CHANGEAGENTID
    @CHANGEAGENTID
    @CURRENTDATE
    @CURRENTDATE
from dbo.MEMBERSHIP
where MEMBERSHIP.ID = @ID

-- Mark the recurring gift as 'Completed'.

declare @RECURRINGGIFTID uniqueidentifier = dbo.UFN_MEMBERSHIP_GETRECURRINGGIFT(@ID)

if @RECURRINGGIFTID is not null
    exec dbo.USP_RECURRINGGIFT_EDITSTATUS @RECURRINGGIFTID, 3, @CHANGEAGENTID, @CURRENTDATE, null, null, null, 14;


-- Write-off the remainder of the installment plan

declare @INSTALLMENTPLANID uniqueidentifier = dbo.UFN_MEMBERSHIP_GETPLEDGE(@ID)

if @INSTALLMENTPLANID is not null
begin
    declare @AMOUNTREMAINING money = dbo.UFN_PLEDGE_GETBALANCE(@INSTALLMENTPLANID);
    if @AMOUNTREMAINING > 0
    begin
        declare @INSTALLMENTS xml;
        set @INSTALLMENTS =
                                    (
                                        select 
                                            ID, 
                                            DATE,
                                            TRANSACTIONAMOUNT as AMOUNT,
                                            BALANCE,
                                            BALANCE as WRITEOFFAMOUNT,
                                            SEQUENCE,
                                            TRANSACTIONCURRENCYID
                                        from dbo.UFN_INSTALLMENT_GETWRITEOFFINSTALLMENTS_2(@INSTALLMENTPLANID) WRITEOFFINSTALLMENT
                                        order by SEQUENCE
                                        for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64
                                    );

        declare @WRITEOFFDATE datetime = dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE);
        declare @WRITEOFFID uniqueidentifier;

        exec dbo.USP_DATAFORMTEMPLATE_ADD_PLEDGEWRITEOFF2 @WRITEOFFID output, @CHANGEAGENTID, @INSTALLMENTPLANID, @WRITEOFFDATE, @AMOUNTREMAINING, 2, null, null, @INSTALLMENTS, null, null

        --Setting the write-off's DATEADDED to the same value used for the membership transaction's DATEADDED will help with matching them up with the membership transaction if it gets deleted

        update dbo.FINANCIALTRANSACTION
        set DATEADDED = @CURRENTDATE,
            DATECHANGED = @CURRENTDATE
        where ID = @WRITEOFFID
    end
end

--Cancel membership cards

update dbo.MEMBERSHIPCARD 
set
    STATUSCODE = 2,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CURRENTDATE
from dbo.MEMBERSHIPCARD
inner join dbo.MEMBER on 
    MEMBERSHIPCARD.MEMBERID = MEMBER.ID
where MEMBER.MEMBERSHIPID = @ID