USP_DATAFORMTEMPLATE_EDIT_WRITEOFFGLDISTRIBUTIONADJUST_2

The save procedure used by the edit dataform template "Posted Write-off GL Distribution Edit Form 2".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@GLDISTRIBUTION xml IN Write-off GL distribution
@ADJUSTMENTDATE datetime IN Adjustment date
@ADJUSTMENTPOSTDATE datetime IN Adjustment post date
@ADJUSTMENTREASON nvarchar(300) IN Adjustment details
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@ADJUSTMENTREASONCODEID uniqueidentifier IN Adjustment reason

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_WRITEOFFGLDISTRIBUTIONADJUST_2
                (
                    @ID uniqueidentifier,
                    @GLDISTRIBUTION xml,
                    @ADJUSTMENTDATE datetime,
                    @ADJUSTMENTPOSTDATE datetime,
                    @ADJUSTMENTREASON nvarchar(300),    
                    @CHANGEAGENTID uniqueidentifier = null,
                    @ADJUSTMENTREASONCODEID uniqueidentifier
                )
                as
                    begin try

                        set nocount on;

                        declare @WRITEOFFADJUSTMENTID uniqueidentifier;

                        declare @ADJUST bit
                        set @ADJUST = 0

                        declare @ADJUSTMENTEXISTS bit;
                        set @ADJUSTMENTEXISTS = 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)


                        declare @REVID uniqueidentifier
                        select @REVID = REVENUEID  from dbo.WRITEOFF where ID = @ID                            

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

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

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

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

                        /* If there was a change to GL related data log an adjustment */
                        if @ADJUST = 1
                        begin
                            if @ADJUSTMENTREASONCODEID is null
                                raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)
                            set @WRITEOFFADJUSTMENTID = null;
                            exec dbo.USP_SAVE_WRITEOFFADJUSTMENT @ID, @WRITEOFFADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE
                                @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID;


                            declare @TRANSACTIONCURRENCYID uniqueidentifier;
                            declare @BASECURRENCYID uniqueidentifier;
                            declare @BASEEXCHANGERATEID uniqueidentifier;
                            declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

                            select top 1
                                @TRANSACTIONCURRENCYID = WRITEOFFSPLIT.TRANSACTIONCURRENCYID,
                                @BASECURRENCYID = WRITEOFFSPLIT.BASECURRENCYID,
                                @BASEEXCHANGERATEID = WRITEOFFSPLIT.BASEEXCHANGERATEID,
                                @ORGANIZATIONEXCHANGERATEID = WRITEOFFSPLIT.ORGANIZATIONEXCHANGERATEID
                            from dbo.WRITEOFFSPLIT
                            where WRITEOFFSPLIT.WRITEOFFID = @ID;

                            set @GLDISTRIBUTION = dbo.UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML(@GLDISTRIBUTION, @BASECURRENCYID, @ORGANIZATIONEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @BASEEXCHANGERATEID);

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

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

                            if @ADJUSTMENTEXISTS = 1 
                            begin
                                exec dbo.USP_REVENUE_GETWRITEOFFGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2 @ID, @GLDISTRIBUTION, @ADJUSTMENTPOSTDATE, @CHANGEAGENTID;
                            end
                            else
                            begin

                                declare @JOURNAL nvarchar(50);
                                set @JOURNAL = 'Blackbaud Enterprise';

                                declare @REVENUEID uniqueidentifier;
                                select @REVENUEID = REVENUEID from dbo.WRITEOFF where ID = @ID;

                                declare @DISTRIBUTIONS table(
                                    GLTRANSACTIONID uniqueidentifier,
                                    ACCOUNT nvarchar(100),
                                    AMOUNT money,
                                    PROJECT nvarchar(100),
                                    REFERENCE nvarchar(255),
                                    TRANSACTIONTYPECODE tinyint,
                                    POSTDATE datetime,
                                    GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
                                    ORGANIZATIONAMOUNT money,
                                    BASECURRENCYID uniqueidentifier,
                                    TRANSACTIONAMOUNT money,
                                    TRANSACTIONCURRENCYID uniqueidentifier,
                                    BASEEXCHANGERATEID uniqueidentifier,
                                    ORGANIZATIONEXCHANGERATEID uniqueidentifier
                                    ,ID uniqueidentifier
                                    ,FINANCIALTRANSACTIONLINEITEMID uniqueidentifier
                                );

                                -- Get the user-defined GL distributions for the write-off record.

                                insert into @DISTRIBUTIONS(GLTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, POSTDATE, GLPAYMENTMETHODREVENUETYPEMAPPINGID, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID,ID,FINANCIALTRANSACTIONLINEITEMID)
                                select 
                                    newid(),
                                    WRITEOFFDISTRIBUTION.ACCOUNT,
                                    WRITEOFFDISTRIBUTION.AMOUNT,
                                    WRITEOFFDISTRIBUTION.PROJECT,
                                    WRITEOFFDISTRIBUTION.REFERENCE, 
                                    WRITEOFFDISTRIBUTION.TRANSACTIONTYPECODE,
                                    @ADJUSTMENTPOSTDATE,
                                    WRITEOFFDISTRIBUTION.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                                    WRITEOFFDISTRIBUTION.ORGANIZATIONAMOUNT,
                                    WRITEOFFDISTRIBUTION.BASECURRENCYID,
                                    WRITEOFFDISTRIBUTION.TRANSACTIONAMOUNT,
                                    WRITEOFFDISTRIBUTION.TRANSACTIONCURRENCYID,
                                    WRITEOFFDISTRIBUTION.BASEEXCHANGERATEID,
                                    WRITEOFFDISTRIBUTION.ORGANIZATIONEXCHANGERATEID    
                                    ,WRITEOFFDISTRIBUTION.ID
                                    ,WRITEOFFDISTRIBUTION.FINANCIALTRANSACTIONLINEITEMID
                                from 
                                    dbo.UFN_REVENUE_GETWRITEOFFGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) WRITEOFFDISTRIBUTION


                               insert into dbo.JOURNALENTRY  
                              (ID,
                              FINANCIALTRANSACTIONLINEITEMID,
                              TRANSACTIONTYPECODE,SUBLEDGERTYPECODE, TRANSACTIONAMOUNT, BASEAMOUNT,ORGAMOUNT,COMMENT,POSTDATE,GLACCOUNTID,SEQUENCE ,TYPECODE,TRANSACTIONCURRENCYID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                              select    
                                T1.GLTRANSACTIONID
                                ,T1.FINANCIALTRANSACTIONLINEITEMID
                                ,T1.TRANSACTIONTYPECODE 
                                ,T1.TRANSACTIONTYPECODE 
                                ,T1.TRANSACTIONAMOUNT
                                ,T1.AMOUNT
                                ,T1.ORGANIZATIONAMOUNT
                                ,T1.REFERENCE
                                ,T1.POSTDATE
                                ,dbo.UFN_GLACCOUNT_GETIDFROMACCOUNTANDREVENUE([ACCOUNT],@REVID )    
                                ,case T1.TRANSACTIONTYPECODE when 0 then 1 else 2 end
                                ,case when T1.TRANSACTIONCURRENCYID is null then 1 else 0 end 
                                ,T1.TRANSACTIONCURRENCYID                    
                                ,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
                              from @DISTRIBUTIONS T1

                              insert into dbo.JOURNALENTRY_EXT
                              (ID,PROJECT,ACCOUNT,JOURNAL,TABLENAMECODE,
                              PRECALCORGANIZATIONEXCHANGERATEID,PRECALCBASEEXCHANGERATEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED
                                ,OUTDATED
                                  ,GLPAYMENTMETHODREVENUETYPEMAPPINGID
                                ,DISTRIBUTIONTABLEID
                                ,WRITEOFFID
                                ,LOGICALREVENUEID)
                              select 
                                GLTRANSACTIONID
                                ,PROJECT
                                ,ACCOUNT
                                ,@JOURNAL
                                ,12
                                ,ORGANIZATIONEXCHANGERATEID
                                ,BASEEXCHANGERATEID
                                ,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
                                ,0
                                ,GLPAYMENTMETHODREVENUETYPEMAPPINGID
                                ,ID
                                ,@ID
                                ,@REVENUEID
                              from  @DISTRIBUTIONS               

                            end

                            exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_SAVEHISTORY @ID, @CHANGEAGENTID, null, @WRITEOFFADJUSTMENTID;
                        end
                    end try

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

                    return 0;