USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENT

The save procedure used by the edit dataform template "Revenue Transaction Change Constituent 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
@RESETRECOGNITIONCREDITS bit IN Recognition credit
@RESETSOLICITORS bit IN Solicitors

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENT
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @NEWCONSTITUENTID uniqueidentifier,
                        @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 hasn't 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 = 1
                        begin
                            raiserror('TRANSACTIONCANNOTBEPOSTED', 13, 1)
                            return 1
                        end

                        begin try
                            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

                            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