USP_AUCTIONDONATIONWRITEOFF_DELETEPOSTED

Executes the "Posted Auction Donation Write-off: 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_AUCTIONDONATIONWRITEOFF_DELETEPOSTED
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier 
                    )
                    as 
                    set nocount on;

                    declare @CHANGEDATE datetime
                    set @CHANGEDATE = getdate();

                    declare @GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier;
                    declare @ADJUSTMENTHISTORYWRITEOFFID uniqueidentifier;

                    if (select POSTSTATUSCODE from dbo.WRITEOFF where ID = @ID) <> 0
                        raiserror('Unposted write-offs cannot be deleted with this task.', 13, 1);

                    if (select top 1 REVENUE.TRANSACTIONTYPECODE from dbo.WRITEOFF inner join dbo.REVENUE on REVENUE.ID = WRITEOFF.REVENUEID where WRITEOFF.ID = @ID) <> 7
                    begin
                        raiserror('This record operation can only delete write-offs for auction donations.', 13, 1);
                        return 0;
                    end

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

                    exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_FIXFORDELETE @ID, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTHISTORYWRITEOFFID output;

                    /* LOG REVERSAL */
                    if not exists (select ADJ.ID from dbo.WRITEOFFADJUSTMENT ADJ where ADJ.WRITEOFFID = @ID and ADJ.POSTSTATUSCODE = 1)
                    begin
                        declare @POSTDATE datetime;
                        declare @ERRORMESSAGE nvarchar(255);
                        select top 1 @POSTDATE = POSTDATE from dbo.WRITEOFFADJUSTMENT where WRITEOFFID = @ID and POSTSTATUSCODE = 0 order by DATEADDED desc
                        if @POSTDATE is null
                            select @POSTDATE = POSTDATE from dbo.WRITEOFF where ID = @ID;
                            set @ERRORMESSAGE = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE);
                        if @ERRORMESSAGE <> ''
                            raiserror(@ERRORMESSAGE, 13, 1);

                        --Log reversals in the GLTRANSACTION table

                        exec dbo.USP_GLTRANSACTION_ADDWRITEOFFREVERSALS @ID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE;

                        declare @LIAID uniqueidentifier = NEWID();
                        insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
                            (ID, ADJUSTMENTREASONCODEID, REASON, DATE, CONSTITUENTID,
                            DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
                        values
                            (@LIAID, NULL, '', @POSTDATE, NULL,
                            @CHANGEDATE, @CHANGEDATE, @CHANGEAGENTID, @CHANGEAGENTID)

                        update LI set
                            FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @LIAID
                        from
                            dbo.FINANCIALTRANSACTIONLINEITEM LI
                        where
                            LI.FINANCIALTRANSACTIONID = @ID
                            and LI.TYPECODE = 1
                            and LI.POSTSTATUSCODE = 1
                    end
                    else --Update the post date of the existing reversal rows to today's date

                    begin
                        update dbo.GLTRANSACTION
                        set 
                            POSTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@CHANGEDATE),
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                        where ID in (
                            select
                                REVERSAL.ID
                            from
                                dbo.WRITEOFFGLDISTRIBUTION
                            inner join 
                                dbo.GLTRANSACTION on WRITEOFFGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                            inner join 
                                dbo.GLTRANSACTION REVERSAL on GLTRANSACTION.ID = REVERSAL.REVERSEDGLTRANSACTIONID
                            where 
                                WRITEOFFGLDISTRIBUTION.WRITEOFFID = @ID
                            and 
                                REVERSAL.POSTSTATUSCODE = 1);

                    end

                    --Update the new ADJUSTMENTHISTORYWRITEOFF record with one of the newly created GLTRANSACTION reversal IDs

                    update dbo.ADJUSTMENTHISTORYWRITEOFF
                    set GLTRANSACTIONID = (
                        select top 1 REVERSAL.ID from dbo.WRITEOFFGLDISTRIBUTION
                        inner join dbo.GLTRANSACTION on WRITEOFFGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                        inner join dbo.GLTRANSACTION REVERSAL on GLTRANSACTION.ID = REVERSAL.REVERSEDGLTRANSACTIONID
                        where WRITEOFFGLDISTRIBUTION.WRITEOFFID = @ID
                        order by REVERSAL.DATEADDED desc)
                    where ID = @ADJUSTMENTHISTORYWRITEOFFID;

                    -- Delete unposted write-off distributions.

                    delete from dbo.WRITEOFFGLDISTRIBUTION where ID in (
                        select WRITEOFFGLDISTRIBUTION.ID
                        from WRITEOFFGLDISTRIBUTION
                        inner join dbo.GLTRANSACTION on WRITEOFFGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                        where WRITEOFFGLDISTRIBUTION.WRITEOFFID = @ID and GLTRANSACTION.POSTSTATUSCODE <> 0
                    );


                    /* DELETE WRITE-OFF */
                    exec dbo.USP_WRITEOFF_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;

                    return 0;