USP_SAVE_BENEFITGLDISTRIBUTION_NONPLEDGE_PAYMENT

Adds gl distribution for non pledge payment benefits.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_SAVE_BENEFITGLDISTRIBUTION_NONPLEDGE_PAYMENT
            (
                @REVENUEID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null

            )
            as
                set nocount on;

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

                if @CHANGEDATE is null
                    set @CHANGEDATE = getdate();

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

                declare @CUSTOMIZED integer = 0;
                exec  @CUSTOMIZED = dbo.USP_SAVE_BENEFITGLDISTRIBUTION_NONPLEDGE_PAYMENT_CUSTOMIZE @REVENUEID, @CHANGEAGENTID, @CHANGEDATE

                if @CUSTOMIZED = 0
                begin
                    declare @REVENUESPLITID uniqueidentifier
                    select top 1 @REVENUESPLITID = ID from FINANCIALTRANSACTIONLINEITEM    where FINANCIALTRANSACTIONID = @REVENUEID

                    declare @DISTRIBUTIONS table(
                        GLTRANSACTIONID uniqueidentifier,
                        REVENUEBENEFITID uniqueidentifier,
                        ACCOUNT nvarchar(100),
                        AMOUNT money,
                        PROJECT nvarchar(100),
                        REFERENCE nvarchar(255),
                        TRANSACTIONTYPECODE tinyint,
                        POSTDATE datetime,
                        GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
                        ACCOUNTID uniqueidentifier,
                        ERRORMESSAGE nvarchar(max),
                        REVENUESPLITID uniqueidentifier,
                        BASECURRENCYID uniqueidentifier,
                        TRANSACTIONAMOUNT money,
                        TRANSACTIONCURRENCYID uniqueidentifier,
                        BASEEXCHANGERATEID uniqueidentifier,
                        ORGANIZATIONAMOUNT money,
                        ORGANIZATIONEXCHANGERATEID uniqueidentifier,
                        MAPPEDVALUES xml
                    );

                    -- Generate GL distributions for the revenue record.

                    insert into @DISTRIBUTIONS(GLTRANSACTIONID, REVENUEBENEFITID,ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, POSTDATE, 
                                GLPAYMENTMETHODREVENUETYPEMAPPINGID,ACCOUNTID,ERRORMESSAGE,REVENUESPLITID,
                                BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, MAPPEDVALUES)
                    select 
                        newid(),
                        REVDISTRIBUTIONS.REVENUEBENEFITID,
                        REVDISTRIBUTIONS.ACCOUNTSTRING,
                        REVDISTRIBUTIONS.AMOUNT,
                        REVDISTRIBUTIONS.PROJECT,
                        REVDISTRIBUTIONS.REFERENCE, 
                        REVDISTRIBUTIONS.TRANSACTIONTYPECODE,
                        REVDISTRIBUTIONS.POSTDATE,
                        REVDISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                        REVDISTRIBUTIONS.ACCOUNTID,
                        REVDISTRIBUTIONS.ERRORMESSAGE,
                        REVDISTRIBUTIONS.REVENUESPLITID,
                        REVDISTRIBUTIONS.BASECURRENCYID,
                        REVDISTRIBUTIONS.TRANSACTIONAMOUNT,
                        REVDISTRIBUTIONS.TRANSACTIONCURRENCYID,
                        REVDISTRIBUTIONS.BASEEXCHANGERATEID,
                        REVDISTRIBUTIONS.ORGANIZATIONAMOUNT,
                        REVDISTRIBUTIONS.ORGANIZATIONEXCHANGERATEID,
                        REVDISTRIBUTIONS.MAPPEDVALUES
                    from 
                    (
                        select 
                            REVENUEBENEFIT.ID as REVENUEBENEFITID, 
                            dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE, REVENUE.TYPECODE, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE, tf.TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                            tf.TRANSACTIONTYPECODE, 
                            case when BENEFITADJUSTMENT.ID is null then 
                                REVENUE.POSTDATE        
                            else 
                                BENEFITADJUSTMENT.POSTDATE
                            end as POSTDATE,
                            case when BENEFITADJUSTMENT.ID is null then 
                                REVENUE.POSTSTATUSCODE        
                            else 
                                BENEFITADJUSTMENT.POSTSTATUSCODE
                            end as POSTSTATUSCODE,
                            tf.ACCOUNTSTRING, 
                            tf.PROJECTCODE as PROJECT, 
                            case when BENEFITLINEITEM.DELETEDON is null then BENEFITLINEITEM.BASEAMOUNT else null end as AMOUNT, 
                            dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE (REVENUESPLIT.ID, 'Benefit Expense' ,'Payment') as REFERENCE,
                            tf.ERRORMESSAGE,
                            REVENUE.TYPECODE as REVENUETRANSACTIONTYPECODE,
                            tf.ACCOUNTID as ACCOUNTID,
                            REVENUESPLIT.ID as REVENUESPLITID,
                            isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID) as BASECURRENCYID,
                            BENEFITLINEITEM.TRANSACTIONAMOUNT as TRANSACTIONAMOUNT,
                            REVENUE.TRANSACTIONCURRENCYID,
                            REVENUE.BASEEXCHANGERATEID,
                            BENEFITLINEITEM.ORGAMOUNT as ORGANIZATIONAMOUNT,
                            REVENUE.ORGEXCHANGERATEID as ORGANIZATIONEXCHANGERATEID,
                            tf.MAPPEDVALUES
                        from 
                            dbo.FINANCIALTRANSACTION REVENUE
                            inner join REVENUE_EXT on REVENUE_EXT.ID = REVENUE.ID
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID and REVENUESPLIT.ID = @REVENUESPLITID 
                            inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM BENEFITLINEITEM on BENEFITLINEITEM.FINANCIALTRANSACTIONID = REVENUE.ID                        
                            inner join dbo.REVENUEBENEFIT_EXT REVENUEBENEFIT on BENEFITLINEITEM.ID = REVENUEBENEFIT.ID                     
                            inner join dbo.REVENUEPAYMENTMETHOD on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID 
                            left join dbo.BENEFITADJUSTMENT on REVENUE.ID = BENEFITADJUSTMENT.REVENUEID and BENEFITADJUSTMENT.POSTSTATUSCODE <> 0
                            inner join dbo.PDACCOUNTSYSTEM on REVENUE.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
                            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID                        
                            cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, REVENUE.TYPECODE, REVENUESPLIT_EXT.TYPECODE, 86, 9, REVENUEBENEFIT.BENEFITID) as tf                    
                        where    
                            REVENUE.ID = @REVENUEID 
                            and REVENUE.TYPECODE = 0 
                            and REVENUEBENEFIT.SENDBENEFIT = 0
                            and REVENUESPLIT.DELETEDON is null
                            and REVENUE.DELETEDON is null
                            and REVENUESPLIT.TYPECODE <> 1
                            and BENEFITLINEITEM.DELETEDON is null
                            and BENEFITLINEITEM.TYPECODE <> 1
                    ) as REVDISTRIBUTIONS

            declare @ERRORMESSAGE nvarchar(max);
                    --Only throw an error if the account ID is null because we want to allow the record to save but also trap the error

                    -- when a holding account exists.

                    select top 1 @ERRORMESSAGE = ERRORMESSAGE from @DISTRIBUTIONS where nullif(ERRORMESSAGE,'') is not null and ACCOUNTID is null;

                    if nullif(@ERRORMESSAGE,'') is not null
                        raiserror('%s', 13, 1, @ERRORMESSAGE);
                    else
                        --Trap the error when a holding account exists so we can show it to the user later.

                        insert into dbo.GLACCOUNTMAPPINGERROR (
                            [TRANSACTIONID]
                            ,[TRANSACTIONTYPECODE]
                            ,[ERRORMESSAGE]
                            ,[MAPPEDVALUES]
                            ,[ADDEDBYID]
                            ,[CHANGEDBYID]
                            ,[DATEADDED]
                            ,[DATECHANGED])
                        select distinct
                            @REVENUEID
                            ,(select TRANSACTIONTYPECODE from dbo.REVENUE where ID = @REVENUEID)
                            ,D.ERRORMESSAGE
                            ,convert(varchar(max),D.MAPPEDVALUES)
                            ,@CHANGEAGENTID
                            ,@CHANGEAGENTID
                            ,@CHANGEDATE
                            ,@CHANGEDATE
                        from @DISTRIBUTIONS
                        where nullif(D.ERRORMESSAGE,'') is not null 
                            and D.ERRORMESSAGE not in (select ERRORMESSAGE from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @REVENUEID and DELETED = 0)

                    set @ERRORMESSAGE = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE((select top 1 POSTDATE from @DISTRIBUTIONS));

                    if @ERRORMESSAGE <> ''
                        raiserror(@ERRORMESSAGE, 13, 1);

            declare @Cache table (HashCode uniqueidentifier, ErrorMessage nvarchar(max), GLAccountID uniqueidentifier, TransactionTypeCode tinyint, ErrorNumber tinyint, MappedValues nvarchar(max), PDAccountSystemID uniqueidentifier)
            insert into @Cache(HashCode, ErrorMessage, GLAccountID, TransactionTypeCode, ErrorNumber, MappedValues, PDAccountSystemID)
            select
               v.MD5HASHCODE
              ,d.ERRORMESSAGE
              ,d.ACCOUNTID
              ,d.TRANSACTIONTYPECODE
              ,v.ERRORCODE
              ,v.MAPPEDVALUES
              ,v.PDACCOUNTSYSTEMID
            from @DISTRIBUTIONS d
            cross apply dbo.UFN_PDACCOUNTLOOKUPCACHE_PARSE_MAPPEDVALUES(MAPPEDVALUES) v
            where v.MD5HASHCODE is not null

            insert into dbo.PDACCOUNTLOOKUPCACHE (MD5HASHCODE, ERRORMESSAGE, GLACCOUNTID, TRANSACTIONTYPECODE, ERRORNUMBER, MAPPEDVALUES, PDACCOUNTSYSTEMID)
            select HashCode, ErrorMessage, GLAccountID, TransactionTypeCode, ErrorNumber, MappedValues, PDAccountSystemID
            from @Cache tt
            where not exists (select MD5HASHCODE from dbo.PDACCOUNTLOOKUPCACHE with (NOLOCK) where MD5HASHCODE = tt.HashCode and TRANSACTIONTYPECODE = tt.TransactionTypeCode and MAPPEDVALUES = tt.MappedValues)

            declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

            insert into dbo.JOURNALENTRY(
                ID
                ,FINANCIALTRANSACTIONLINEITEMID
                ,TRANSACTIONTYPECODE
                ,SUBLEDGERTYPECODE 
                ,TRANSACTIONAMOUNT
                ,BASEAMOUNT
                ,ORGAMOUNT
                ,COMMENT
                ,POSTDATE
                ,GLACCOUNTID    
                ,SEQUENCE          
                ,TYPECODE
                ,TRANSACTIONCURRENCYID            
                -- Boilerplate

                 ,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED
                )
                select 
                GLTRANSACTIONID
                ,REVENUEBENEFITID
                ,TRANSACTIONTYPECODE
                ,TRANSACTIONTYPECODE
                ,TRANSACTIONAMOUNT
                ,AMOUNT
                ,ORGANIZATIONAMOUNT
                ,REFERENCE
                ,POSTDATE
                ,ACCOUNTID
                ,row_number() over (order by GLTRANSACTIONID)
                ,0 --default system distribution

                ,isnull(TRANSACTIONCURRENCYID,@ORGANIZATIONCURRENCYID)            
                -- Boilerplate

                ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
                from 
                  @DISTRIBUTIONS
              ;

              insert into JOURNALENTRY_EXT(
                ID
                ,DISTRIBUTIONTABLEID
                ,PROJECT
                ,ACCOUNT
                ,JOURNAL
                --,REVERSEDGLTRANSACTIONID

                --,REVERSEDATE

                --,BATCHID

                ,PRECALCORGANIZATIONEXCHANGERATEID
                ,PRECALCBASEEXCHANGERATEID
                ,GLPAYMENTMETHODREVENUETYPEMAPPINGID
                ,TABLENAMECODE
                ,OUTDATED
                ,LOGICALREVENUEID
                ,FULLYPAIDSTATUSCODE
                ,BENEFITTYPECODE
                -- Boilerplate

                ,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED
                )
                select
                GLTRANSACTIONID
                ,NEWID()            
                ,coalesce(PROJECT, '')
                ,ACCOUNT
                ,@JOURNAL
                --,source.REVERSEDGLTRANSACTIONID

                --,source.REVERSEDATE

                --,BATCHID

                ,ORGANIZATIONEXCHANGERATEID
                ,BASEEXCHANGERATEID
                ,GLPAYMENTMETHODREVENUETYPEMAPPINGID
                ,5 -- BENEFITGLDISTRIBUTION

                ,0 -- OUTDATED

                ,@REVENUEID
                ,0 --FULLYPAIDSTATUS

                ,1 --BENEFITTYPECODE

                -- Boilerplate

                ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
                from 
                  @DISTRIBUTIONS
              ;
        end