USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENTPOSTED_2

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

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
@CONSTITUENTACCOUNTID uniqueidentifier IN Account
@ADJUSTMENTPOSTDATE datetime IN Adjustment post date
@ADJUSTMENTDATE datetime IN Adjustment date
@ADJUSTMENTREASON nvarchar(100) IN Adjustment reason
@RESETRECOGNITIONCREDITS bit IN Recognition credit
@RESETSOLICITORS bit IN Solicitors

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENTPOSTED_2
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @NEWCONSTITUENTID uniqueidentifier,
            @CONSTITUENTACCOUNTID 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;
                        declare @TRANSACTIONTYPECODE tinyint;

                        select top 1 
                            @PREVIOUSCONSTITUENTID = CONSTITUENTID,
                            @TRANSACTIONTYPECODE = TRANSACTIONTYPECODE
                        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

                        -- Get payment code

                        declare @PAYMENTMETHODCODE tinyint;
                        declare @REVENUEPAYMENTMETHODID uniqueidentifier;

                        select 
                          @PAYMENTMETHODCODE = PAYMENTMETHODCODE,
                          @REVENUEPAYMENTMETHODID = ID 
                        from 
                          dbo.REVENUEPAYMENTMETHOD 
                        where
                          REVENUEID = @ID;

                        -- 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 @ADJUSTMENTID uniqueidentifier;
                        declare @STOCKSALEADJUSTMENTIDS xml;
                        declare @PROPERTYDETAILADJUSTMENTID uniqueidentifier;
                        declare @WRITEOFFADJUSTMENTID uniqueidentifier;
                        declare @PROPERTYDETAILCOUNT int;
                        declare @ADJUSTEDWRITEOFFS table(WRITEOFFID uniqueidentifier, ADJUSTMENTID uniqueidentifier)

                        begin try

                            declare @contextCache varbinary(128);

                            --cache current context information

                            set @contextCache = CONTEXT_INFO();

                            --set CONTEXT_INFO to @CHANGEAGENTID

                            set CONTEXT_INFO @CHANGEAGENTID;

                            exec dbo.USP_SAVE_ADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;

                            if @TRANSACTIONTYPECODE = 1 
                            begin
                                if exists (select GL.ID from dbo.WRITEOFFGLDISTRIBUTION GL inner join dbo.WRITEOFF on GL.WRITEOFFID = WRITEOFF.ID where WRITEOFF.REVENUEID = @ID
                                begin
                                    declare @WRITEOFFID uniqueidentifier;

                                    declare WRITEOFFCURSOR cursor local fast_forward for
                                    select WRITEOFF.ID from dbo.WRITEOFF where REVENUEID = @ID;

                                    open WRITEOFFCURSOR;
                                    fetch next from WRITEOFFCURSOR into @WRITEOFFID;

                                    while @@FETCH_STATUS = 0
                                    begin
                                        set @WRITEOFFADJUSTMENTID = null;

                                        exec dbo.USP_SAVE_WRITEOFFADJUSTMENT @WRITEOFFID, @WRITEOFFADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;

                                        --Save adjustment IDs for adjustment history

                                        insert into @ADJUSTEDWRITEOFFS(WRITEOFFID,ADJUSTMENTID) values (@WRITEOFFID,@WRITEOFFADJUSTMENTID);

                                        fetch next from WRITEOFFCURSOR into @WRITEOFFID;    
                                    end

                                    close WRITEOFFCURSOR;
                                    deallocate WRITEOFFCURSOR;
                                end
                            end

                            else
                            begin                                
                                select @PROPERTYDETAILCOUNT = count(PROPERTYDETAIL.ID)
                                from dbo.PROPERTYDETAIL 
                                where PROPERTYDETAIL.ID = @REVENUEPAYMENTMETHODID and SALEPOSTSTATUSCODE = 0;

                                /* If sold stock has been posted, log stock detail adjustment */
                                if @PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID)
                                begin
                                    exec dbo.USP_SAVE_STOCKDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @STOCKSALEADJUSTMENTIDS output;
                                end

                                /* If sold property has been posted, log property detail adjustment */
                                else if (@PAYMENTMETHODCODE = 5) and (@PROPERTYDETAILCOUNT > 0
                                begin
                                    exec dbo.USP_SAVE_PROPERTYDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @PROPERTYDETAILADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;                        
                                end
                            end

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

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

                            -- Gift Aid is for UK only

                            if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
                                -- Create manual refunds for any claimed revenue splits

                                exec dbo.USP_REVENUE_CREATEREFUNDS @ID, 1, @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

                            if @RESETRECOGNITIONCREDITS = 1
                            begin               
                                -- Remove previous recognition credits

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

                                -- 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
                                -- Remove previous solicitors

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

                            if @PAYMENTMETHODCODE = 3 --Direct debit

                            begin

                      if @CONSTITUENTACCOUNTID is not null
                                begin
                                    update dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT set
                                        CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CHANGEDATE
                                    where REVENUESCHEDULEDIRECTDEBITPAYMENT.ID = @ID
                                end
                                else
                                begin
                                    -- No longer autopay


                                    update dbo.REVENUEPAYMENTMETHOD set
                                        PAYMENTMETHODCODE = 9,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CHANGEDATE
                                    where 
                                        REVENUEID = @ID;

                                    -- Delete entry

                                    exec dbo.USP_REVENUESCHEDULEDIRECTDEBITPAYMENT_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;

                                end
                            end

                            -- Clear GL

                            delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;    
                            delete from dbo.WRITEOFFGLDISTRIBUTION where WRITEOFFID in (select WO.ID from dbo.WRITEOFF WO where WO.REVENUEID = @ID) and OUTDATED = 0;
                            delete from dbo.STOCKSALEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
                            delete from dbo.PROPERTYDETAILGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;

                            -- Add new GL distributions

                            if (select DONOTPOST from dbo.REVENUE where ID = @ID) = 0
                            begin
                                -- Add new GL distributions

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

                                -- Add new stock detail GL distributions

                                if @PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID)
                                    exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;

                                -- Add new property detail GL distributions

                                if @PAYMENTMETHODCODE = 5 and exists(select ID from dbo.PROPERTYDETAIL where ID = @REVENUEPAYMENTMETHODID and ISSOLD = 1)
                                    exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;

                                -- Add new write-off GL distributions

                                if @TRANSACTIONTYPECODE = 1
                                    exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;

                declare @DEPOSITID uniqueidentifier;
                select @DEPOSITID = DEPOSITID
                from dbo.BANKACCOUNTDEPOSITPAYMENT
                where ID = @ID;
                if @DEPOSITID is not null
                  exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS @ID, @DEPOSITID, @CHANGEAGENTID, @CHANGEDATE;
                            end

                            if @ADJUSTMENTID is not null
                                exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @ID, @CHANGEAGENTID, null, @ADJUSTMENTID

                            if @STOCKSALEADJUSTMENTIDS is not null
                                exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @STOCKSALEADJUSTMENTIDS;

                            if @PROPERTYDETAILADJUSTMENTID is not null
                                exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @PROPERTYDETAILADJUSTMENTID;

                            -- If this is a pledge, save the adjustment history for any write-offs

                            if @TRANSACTIONTYPECODE = 1 and (select count(*) from @ADJUSTEDWRITEOFFS) > 0
                            begin
                                declare @HISTORYWRITEOFFID uniqueidentifier;
                                declare @HISTORYADJUSTMENTID uniqueidentifier;

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

                                open HISTORYCURSOR;
                                fetch next from HISTORYCURSOR into @HISTORYWRITEOFFID, @HISTORYADJUSTMENTID;

                                while @@FETCH_STATUS = 0 
                                begin
                                    if @HISTORYADJUSTMENTID is not null
                                        exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_SAVEHISTORY @HISTORYWRITEOFFID, @CHANGEAGENTID, null, @HISTORYADJUSTMENTID;

                                    fetch next from HISTORYCURSOR into @HISTORYWRITEOFFID, @HISTORYADJUSTMENTID;
                                end

                                close HISTORYCURSOR;
                                deallocate HISTORYCURSOR;
                            end

                            --reset CONTEXT_INFO to previous value

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

                        return 0