USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENTPOSTED

The save procedure used by the edit dataform template "Revenue Transaction Change Constituent Posted Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NEWCONSTITUENTID uniqueidentifier IN New constituent
@ADJUSTMENTPOSTDATE datetime IN Adjustment post date
@ADJUSTMENTDATE datetime IN Adjustment date
@ADJUSTMENTREASON nvarchar(100) IN Adjustment details
@RESETRECOGNITIONCREDITS bit IN Recognition credit
@RESETSOLICITORS bit IN Solicitors

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENTPOSTED
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @NEWCONSTITUENTID uniqueidentifier,
                        @ADJUSTMENTPOSTDATE datetime,
                        @ADJUSTMENTDATE datetime,
                        @ADJUSTMENTREASON nvarchar(100),
                        @RESETRECOGNITIONCREDITS bit,
                        @RESETSOLICITORS bit
                    )
                    as
                        set nocount on

                        -- Verify the new constituent isn't the same as the previous one

                        declare @PREVIOUSCONSTITUENTID uniqueidentifier
                        select top 1 
                            @PREVIOUSCONSTITUENTID = CONSTITUENTID
                        from dbo.REVENUE
                        where ID = @ID

                        if @PREVIOUSCONSTITUENTID = @NEWCONSTITUENTID
                        begin
                            raiserror('NEWCONSTITUENTCANNOTBECURRENTCONSTITUENT', 13, 1)
                            return 1
                        end

                        declare @CHANGEDATE datetime
                        set @CHANGEDATE = getdate()

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

                        -- Verify the transaction has already been posted

                        declare @ISPOSTED bit
                        select
                            @ISPOSTED = 
                            case 
                                when exists (select 1 from dbo.REVENUEPOSTED RP where RP.ID = @ID) then 1
                                else 0
                            end

                        if @ISPOSTED = 0
                        begin
                            raiserror('TRANSACTIONMUSTBEPOSTED', 13, 1)
                            return 1                        
                        end

                        -- Verify the adjustment dates are set

                        if @ADJUSTMENTPOSTDATE is null
                        begin
                            raiserror('ADJUSTMENTPOSTDATEREQUIRED', 13, 1)
                            return 1
                        end

                        if @ADJUSTMENTDATE is null
                        begin
                            raiserror('ADJUSTMENTDATEREQUIRED', 13, 1)
                            return 1
                        end

                        declare @REVENUEID uniqueidentifier
                        declare @ADJUSTMENTID uniqueidentifier

                        /* Cursor to use for logging adjustments */
                        declare REVENUECURSOR cursor local fast_forward for
                        select REVENUE.ID
                        from dbo.REVENUE
                        where REVENUE.ID = @ID

                        declare @ADJUSTED table(REVENUEID uniqueidentifier, ADJUSTMENTID uniqueidentifier)

                        /* Cursor to use for logging history adjustments */
                        declare HISTORYCURSOR cursor local fast_forward for
                        select REVENUEID, ADJUSTMENTID from @ADJUSTED

                        begin try
                            -- update the payment information for each revenue record in the transaction

                            open REVENUECURSOR;
                            fetch next from REVENUECURSOR into @REVENUEID;
                            while @@FETCH_STATUS = 0
                            begin
                                set @ADJUSTMENTID = null;
                                exec dbo.USP_SAVE_ADJUSTMENT @REVENUEID, @ADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON

                                insert into @ADJUSTED(REVENUEID, ADJUSTMENTID)
                                values(@REVENUEID, @ADJUSTMENTID)

                                fetch next from REVENUECURSOR into @REVENUEID;
                            end
                            --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                            close REVENUECURSOR;
                            deallocate REVENUECURSOR;

                            exec dbo.USP_REVENUE_UPDATERERECEIPTS @ID, @CHANGEAGENTID, @CHANGEDATE;

                            exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @ID, @CHANGEAGENTID, @CHANGEDATE;

                            -- Update the constituent for all revenue entries belonging to the transaction

                          /* CMC
              update dbo.FINANCIALTRANSACTION set 
                                CONSTITUENTID = @NEWCONSTITUENTID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                            where FINANCIALTRANSACTION.ID = @ID
                                */
              update dbo.REVENUE set 
                                CONSTITUENTID = @NEWCONSTITUENTID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                            where REVENUE.ID = @ID


                            open HISTORYCURSOR
                            fetch next from HISTORYCURSOR into @REVENUEID, @ADJUSTMENTID
                            while @@FETCH_STATUS = 0 
                            begin
                                /*call USP_ADJUSTMENTHISTORY_*_SAVEHISTORY after the revenue tables are updated */
                                if exists(select top 1 ID from dbo.REVENUE where ID = @REVENUEID)
                                begin
                                    if @ADJUSTMENTID is not null
                                        exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @REVENUEID, @CHANGEAGENTID, null, @ADJUSTMENTID
                                end

                                fetch next from HISTORYCURSOR into @REVENUEID, @ADJUSTMENTID
                            end

                            --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                            close HISTORYCURSOR;
                            deallocate HISTORYCURSOR;

                            declare @contextCache varbinary(128);

                            if @RESETRECOGNITIONCREDITS = 1
                            begin
                                --Cache CONTEXT INFO

                                set @contextCache = CONTEXT_INFO();

                                if not @CHANGEAGENTID is null
                                    set CONTEXT_INFO @CHANGEAGENTID;

                                -- Remove previous recognition credits

                                delete from dbo.REVENUERECOGNITION where REVENUESPLITID in (select ID from dbo.REVENUESPLIT where REVENUEID = @ID)

                                --Restore CONTEXT_INFO

                                if not @contextCache is null
                                    set CONTEXT_INFO @contextCache;

                                -- Create the new default recognition credits

                                insert into dbo.REVENUERECOGNITION
                                (
                                    REVENUESPLITID, 
                                    CONSTITUENTID, 
                                    AMOUNT,
                                    REVENUERECOGNITIONTYPECODEID,
                                    EFFECTIVEDATE,
                                    ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED
                                )
                                select
                                    RS.ID,
                                    RR.CONSTITUENTID,
                                    RR.AMOUNT,
                                    RR.REVENUERECOGNITIONTYPECODEID,
                                    R.DATE,
                                    @CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE
                                from dbo.REVENUE R
                                inner join dbo.REVENUESPLIT RS
                                    on RS.REVENUEID = R.ID
                                left join dbo.RECURRINGGIFTACTIVITY RGA on RGA.PAYMENTREVENUEID = R.ID
                                cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(R.GIVENANONYMOUSLY, R.CONSTITUENTID, RS.AMOUNT, R.DATE, RGA.SOURCEREVENUEID) RR
                                where R.ID = @ID
                            end

                            if @RESETSOLICITORS = 1
                            begin
                                --Cache CONTEXT INFO

                                set @contextCache = CONTEXT_INFO();

                                if not @CHANGEAGENTID is null
                                    set CONTEXT_INFO @CHANGEAGENTID;

                                -- Remove previous solicitors

                                delete from dbo.REVENUESOLICITOR where REVENUESPLITID in (select ID from dbo.REVENUESPLIT where REVENUEID = @ID)

                                --Restore CONTEXT_INFO

                                if not @contextCache is null
                                    set CONTEXT_INFO @contextCache;
                            end
                        end try                    
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                        return 0