USP_RECORDOPERATION_GIFTINKINDSELLUNDO

Executes the "Sell Gift-in-Kind: Undo" record operation.

Parameters

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

Definition

Copy


                    CREATE procedure dbo.USP_RECORDOPERATION_GIFTINKINDSELLUNDO
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier
                    )
                    as begin

                        declare @ADJUSTMENTHISTORYGIFTINKINDID uniqueidentifier;

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

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

                        begin try
                            -- Remove the most recent gift-in-kind sale

                            declare @GIFTINKINDSALETODELETE uniqueidentifier
                            select top 1 @GIFTINKINDSALETODELETE = ID
                            from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @ID
                            order by SALEDATE desc, DATEADDED desc

                            if (select SALEPOSTSTATUSCODE from dbo.GIFTINKINDSALE where ID = @GIFTINKINDSALETODELETE) = 0
                                exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_FIXFORDELETE @ID, 1, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTHISTORYGIFTINKINDID output, @GIFTINKINDSALETODELETE;

                            /* If gift-in-kind details have been posted but not already adjusted */
                            if exists (select 1 from dbo.GIFTINKINDSALE where GIFTINKINDSALE.ID = @GIFTINKINDSALETODELETE and GIFTINKINDSALE.SALEPOSTSTATUSCODE = 0)
                                and not exists (select 1 from dbo.GIFTINKINDSALEADJUSTMENT where GIFTINKINDSALEID = @GIFTINKINDSALETODELETE and POSTSTATUSCODE = 1)
                                begin
                                    declare @POSTDATE datetime;
                                    declare @ERRORMESSAGE nvarchar(255);
                                    select top 1 @POSTDATE = POSTDATE from dbo.GIFTINKINDSALEADJUSTMENT where GIFTINKINDSALEID = @GIFTINKINDSALETODELETE and POSTSTATUSCODE = 0 order by DATEADDED desc;

                                    if @POSTDATE is null
                                        select @POSTDATE = SALEPOSTDATE from dbo.GIFTINKINDSALE where ID = @GIFTINKINDSALETODELETE;

                                    set @ERRORMESSAGE = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE);

                                    if @ERRORMESSAGE <> ''
                                      raiserror(@ERRORMESSAGE, 13, 1);

                                    --Log reversals in the GLTRANSACTION table 

                                    exec dbo.USP_GLTRANSACTION_ADDGIFTINKINDSALEREVERSALS @GIFTINKINDSALETODELETE, @CHANGEAGENTID, @CURRENTDATE, @POSTDATE;
                                end
                            else --Update the post date of the existing gift-in-kind detail reversal rows to today's date

                                begin
                                    update dbo.GLTRANSACTION
                                    set 
                                        POSTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE),
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where ID in (
                                        select
                                            REVERSAL.ID
                                        from
                                            dbo.GIFTINKINDSALEGLDISTRIBUTION
                                        inner join 
                                            dbo.GLTRANSACTION on GIFTINKINDSALEGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                                        inner join 
                                            dbo.GLTRANSACTION REVERSAL on GLTRANSACTION.ID = REVERSAL.REVERSEDGLTRANSACTIONID
                                        where 
                                            GIFTINKINDSALEGLDISTRIBUTION.GIFTINKINDSALEID = @GIFTINKINDSALETODELETE
                                        and 
                                            REVERSAL.POSTSTATUSCODE = 1);
                                end

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

                            update dbo.ADJUSTMENTHISTORYGIFTINKIND
                            set GLTRANSACTIONID = (
                                select top 1 REVERSAL.ID 
                                from dbo.GIFTINKINDSALEGLDISTRIBUTION
                                    inner join dbo.GLTRANSACTION on GIFTINKINDSALEGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                                    inner join dbo.GLTRANSACTION REVERSAL on GLTRANSACTION.ID = REVERSAL.REVERSEDGLTRANSACTIONID
                                where GIFTINKINDSALEGLDISTRIBUTION.GIFTINKINDSALEID = @GIFTINKINDSALETODELETE
                                order by REVERSAL.DATEADDED desc)
                            where ID = @ADJUSTMENTHISTORYGIFTINKINDID;


                            --Cache CONTEXT INFO

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

                            if not @CHANGEAGENTID is null
                                set CONTEXT_INFO @CHANGEAGENTID;


                            delete from dbo.GIFTINKINDSALEGLDISTRIBUTION where GIFTINKINDSALEID = @GIFTINKINDSALETODELETE and OUTDATED = 0;

                            --reset CONTEXT_INFO to previous value

                            if not @contextCache is null
                                set CONTEXT_INFO @contextCache;

                            if @GIFTINKINDSALETODELETE is not null
                            begin
                                update FT
                                    set DELETEDON = @CURRENTDATE
                                from
                                    dbo.FINANCIALTRANSACTION FT
                                where FT.ID = @GIFTINKINDSALETODELETE

                                update LI
                                    set DELETEDON = null
                                from
                                    dbo.FINANCIALTRANSACTION FT
                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = FT.ID
                                where FT.ID = @GIFTINKINDSALETODELETE
                                    and LI.TYPECODE = 1

                                delete from dbo.FINANCIALTRANSACTION
                                where POSTSTATUSCODE = 1 and ID = @GIFTINKINDSALETODELETE
                            end
                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR;
                            return 1;
                        end catch

                        return 0;
                    end