USP_DATAFORMTEMPLATE_EDIT_REVENUEGLDISTRIBUTIONADJUST

The save procedure used by the edit dataform template "Posted Revenue GL Distribution Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@GLDISTRIBUTION xml IN Revenue GL distribution
@ADJUSTMENTDATE datetime IN Adjusted Date
@ADJUSTMENTPOSTDATE datetime IN Adjusted Post Date
@ADJUSTMENTREASON nvarchar(300) IN Adjustment reason
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUEGLDISTRIBUTIONADJUST
                    (
                        @ID uniqueidentifier,
                        @GLDISTRIBUTION xml,
                        @ADJUSTMENTDATE datetime,
                        @ADJUSTMENTPOSTDATE datetime,
                        @ADJUSTMENTREASON nvarchar(300),
                        @CHANGEAGENTID uniqueidentifier = null
                    )
                as
                    begin try
                        set nocount on;

                        declare @ADJUSTMENTID uniqueidentifier;
                        declare @PAYMENTMETHODCODE tinyint;

                        declare @ADJUST bit;
                        declare @ADJUSTMENTEXISTS bit;

                        set @ADJUST = 0

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

                        if (dbo.UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS(@GLDISTRIBUTION) = 0)
                            raiserror('The sum of the debit accounts must equal the sum of the credit accounts.', 13, 1)    

                        --if (dbo.UFN_GLDISTRIBUTION_ACCOUNTEXISTS(@GLDISTRIBUTION) = 0)

                        --    raiserror('One or more of the edited accounts do not exist.', 13, 1)


                        if (dbo.UFN_GLDISTRIBUTION_ACCOUNTEXISTS_2(@GLDISTRIBUTION,@ID) = 0)
                            raiserror('One or more of the edited accounts do not exist.', 13, 1)                            

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

                        select top 1 
                            @PAYMENTMETHODCODE = PAYMENTMETHODCODE
                        from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @ID;

                        /* Already adjusted */
                        if (select COUNT(ADJUSTMENT.ID)
                                from dbo.ADJUSTMENT
                                where REVENUEID = @ID and POSTSTATUSCODE = 1) > 0
                        begin
                            set @ADJUST = 1;
                            set @ADJUSTMENTEXISTS = 1;
                        end

                        /* distributions Changed */
                        if @ADJUST = 0
                            set @ADJUST = dbo.UFN_CHECKDETAIL_DISTRIBUTIONCHANGED(@ID, @GLDISTRIBUTION)

                        /* If there was a change to GL related data log an adjustment for each revenue in the transaction */
                        if @ADJUST = 1
                        begin
                                -- update the payment information for each revenue record in the transaction

                            set @ADJUSTMENTID = null;
                            exec dbo.USP_SAVE_ADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;                            
                        end                            

                        -- If an unposted adjustment already exists, update the revenue GL distribution rows.

                        -- Otherwise, insert new revenue gl distribution rows using @GLDISTRIBUTION.

                        if @ADJUSTMENTEXISTS = 1 
                        begin
                            exec dbo.USP_REVENUE_GETGLDISTRIBUTION_CUSTOMUPDATEFROMXML @ID, @GLDISTRIBUTION, @ADJUSTMENTPOSTDATE, @CHANGEAGENTID, @CHANGEDATE;
                        end
                        else
                        begin
                            declare @JOURNAL nvarchar(50);
                            set @JOURNAL = 'Blackbaud Enterprise';

                            set @CHANGEDATE = getdate();

                            declare @DISTRIBUTIONS table(
                                GLTRANSACTIONID uniqueidentifier,
                                ACCOUNT nvarchar(100),
                                AMOUNT money,
                                PROJECT nvarchar(100),
                                REFERENCE nvarchar(255),
                                TRANSACTIONTYPECODE tinyint,
                                GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier
                            );

                            -- Get the user-defined GL distributions for the revenue record.

                            insert into @DISTRIBUTIONS(GLTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, GLPAYMENTMETHODREVENUETYPEMAPPINGID)
                            select 
                                newid(),
                                REVDISTRIBUTIONS.ACCOUNT,
                                REVDISTRIBUTIONS.AMOUNT,
                                REVDISTRIBUTIONS.PROJECT,
                                REVDISTRIBUTIONS.REFERENCE, 
                                REVDISTRIBUTIONS.TRANSACTIONTYPECODE,
                                REVDISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID
                            from 
                                dbo.UFN_REVENUE_GETGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) REVDISTRIBUTIONS

                            -- Insert rows in GLTRANSACTION table

                            insert into dbo.GLTRANSACTION(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, PROJECT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            select
                                GLTRANSACTIONID,
                                TRANSACTIONTYPECODE,
                                ACCOUNT,
                                AMOUNT,
                                PROJECT,
                                REFERENCE,
                                @ADJUSTMENTPOSTDATE,
                                @JOURNAL,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE,
                                @CHANGEDATE
                            from 
                                @DISTRIBUTIONS;

                            insert into dbo.REVENUEGLDISTRIBUTION
                                (ID,REVENUEID,GLTRANSACTIONID,GLPAYMENTMETHODREVENUETYPEMAPPINGID,PROJECT,REFERENCE,AMOUNT,ACCOUNT,TRANSACTIONTYPECODE,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                            select
                                newid(),
                                @ID,
                                GLTRANSACTIONID,
                                GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                                PROJECT,
                                REFERENCE,
                                AMOUNT,
                                ACCOUNT,
                                TRANSACTIONTYPECODE,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE,
                                @CHANGEDATE
                            from 
                                @DISTRIBUTIONS;
                        end

                        if @ADJUST = 1
                            exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @ID, @CHANGEAGENTID, null, @ADJUSTMENTID;
                    end try

                    begin catch
                        exec dbo.USP_RAISE_ERROR;
                        return 1;
                    end catch

                    return 0;