USP_SAVE_AUCTIONPURCHASEREALIZEDGLDISTRIBUTION

Generates and saves the system distributions for realized gains and losses on auction purchases.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@PDACCOUNTSYSTEMID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@REVENUEIDONLY bit IN

Definition

Copy


CREATE procedure dbo.USP_SAVE_AUCTIONPURCHASEREALIZEDGLDISTRIBUTION
(
    @REVENUEID uniqueidentifier,
    @PDACCOUNTSYSTEMID uniqueidentifier = null,
    @CHANGEAGENTID uniqueidentifier = null,
    @CURRENTDATE datetime = null,
    @REVENUEIDONLY bit = 0
)
as
begin

    /* To calculate the currency gains and loses for auctions, we just need to compare the amount of the debits and credits
        per financial transaction line item and create balancing distributions based on those amounts alone.*/

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

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

    declare @CUSTOMIZED integer = 0;
    exec  @CUSTOMIZED = dbo.USP_SAVE_AUCTIONPURCHASEREALIZEDGLDISTRIBUTION_CUSTOMIZE @REVENUEID,@PDACCOUNTSYSTEMID,@CHANGEAGENTID,@CURRENTDATE,@REVENUEIDONLY

    if @CUSTOMIZED = 0
    begin
        declare @TRANSACTIONCURRENCYID uniqueidentifier;
        declare @POSTDATE date;
        declare @POSTSTATUSCODE tinyint
        select @PDACCOUNTSYSTEMID = FT.PDACCOUNTSYSTEMID
            ,@TRANSACTIONCURRENCYID = FT.TRANSACTIONCURRENCYID
            ,@POSTDATE = FT.POSTDATE
            ,@POSTSTATUSCODE = 1
        from dbo.FINANCIALTRANSACTION FT
        where FT.ID = @REVENUEID;    

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

        declare @DISTRIBUTION table (
                ID uniqueidentifier,
                REVENUESPLITID uniqueidentifier,
                GLTRANSACTIONID uniqueidentifier,
                GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
                TRANSACTIONTYPECODE tinyint,
                POSTDATE datetime,
                POSTSTATUSCODE tinyint,
                ACCOUNTSTRING nvarchar(100),
                PROJECT nvarchar(100),
                AMOUNT money,
                REFERENCE nvarchar(255),
                JOURNAL nvarchar(50),
                ERRORMESSAGE nvarchar(max),
                GLACCOUNTID uniqueidentifier,
                REVENUEPURCHASEID uniqueidentifier,
                ORGANIZATIONAMOUNT money,
                MAPPEDVALUES xml
        )

        declare @AMOUNTS UDT_GAINLOSS_AMOUNTS;
        insert into @AMOUNTS (
            ID
            ,NEWBASEAMOUNT
            ,ORIGINALBASEAMOUNT
            ,NEWORGANIZATIONAMOUNT
            ,ORIGINALORGANIZATIONAMOUNT
        )
        select LI.ID
            ,SUM(case when JE.TRANSACTIONTYPECODE = 1 then JE.BASEAMOUNT else 0 end) [CREDITBASEAMOUNT]
            ,SUM(case when JE.TRANSACTIONTYPECODE = 0 then JE.BASEAMOUNT else 0 end) [DEBITBASEAMOUNT]
            ,SUM(case when JE.TRANSACTIONTYPECODE = 1 then JE.ORGAMOUNT else 0 end) [CREDITORGAMOUNT]
            ,SUM(case when JE.TRANSACTIONTYPECODE = 0 then JE.ORGAMOUNT else 0 end) [DEBITORGAMOUNT]
        from dbo.FINANCIALTRANSACTIONLINEITEM LI
        inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
        inner join dbo.JOURNALENTRY_EXT X on X.ID = JE.ID
        where LI.FINANCIALTRANSACTIONID = @REVENUEID and LI.TYPECODE != 1 and LI.DELETEDON is null
            and X.TABLENAMECODE = 2
        group by LI.ID;

        declare @DEBITSIDE bit = 0;

        insert into @DISTRIBUTION (
            REVENUESPLITID
            ,GLTRANSACTIONID
            ,ACCOUNTSTRING
            ,GLACCOUNTID
            ,TRANSACTIONTYPECODE
            ,AMOUNT
            ,ORGANIZATIONAMOUNT
            ,REFERENCE
            ,ERRORMESSAGE
            ,MAPPEDVALUES
        )
        exec dbo.USP_GET_GAINLOSSDISTRIBUTIONS @AMOUNTS, @DEBITSIDE, @TRANSACTIONCURRENCYID, @PDACCOUNTSYSTEMID;

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

        update DISTRIBUTION set
            ID = GLTRANSACTIONID
            ,GLPAYMENTMETHODREVENUETYPEMAPPINGID = dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE, FT.TYPECODE, REVENUESPLIT.TYPECODE, REVENUESPLIT.APPLICATIONCODE, DISTRIBUTION.TRANSACTIONTYPECODE)
            ,PROJECT = ''
            ,JOURNAL = @JOURNAL
            ,POSTSTATUSCODE = @POSTSTATUSCODE
            ,POSTDATE = @POSTDATE
        from @DISTRIBUTION DISTRIBUTION
        inner join dbo.FINANCIALTRANSACTION FT on FT.ID = @REVENUEID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on FT.ID = LI.FINANCIALTRANSACTIONID
        inner join dbo.REVENUESPLIT_EXT REVENUESPLIT on REVENUESPLIT.ID = LI.ID
        left join dbo.REVENUEPAYMENTMETHOD on FT.ID = REVENUEPAYMENTMETHOD.REVENUEID;

        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.GLACCOUNTID
            ,d.TRANSACTIONTYPECODE
            ,v.ERRORCODE
            ,v.MAPPEDVALUES
            ,v.PDACCOUNTSYSTEMID
        from @DISTRIBUTION 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)

        --Insert the newly generated distributions into the GLTRANSACTION table

        insert into dbo.JOURNALENTRY (
            ID
            ,FINANCIALTRANSACTIONLINEITEMID
            ,TRANSACTIONTYPECODE
            ,SUBLEDGERTYPECODE
            ,BASEAMOUNT
            ,COMMENT
            ,POSTDATE
            ,GLACCOUNTID
            ,ORGAMOUNT
            ,TRANSACTIONAMOUNT
            ,TRANSACTIONCURRENCYID
            ,TYPECODE
            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)        
        select 
            GLTRANSACTIONID
            ,REVENUESPLITID
            ,TRANSACTIONTYPECODE
            ,TRANSACTIONTYPECODE
            ,AMOUNT
            ,REFERENCE
            ,POSTDATE
            ,GLACCOUNTID
            ,ORGANIZATIONAMOUNT
            ,0
            ,null
            ,1
            ,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
        from @DISTRIBUTION

        insert into dbo.JOURNALENTRY_EXT (
            ID
            ,DISTRIBUTIONTABLEID
            ,REVENUEPURCHASEID
            ,TABLENAMECODE
            ,PROJECT
            ,JOURNAL
            ,PRECALCPOSTSTATUSCODE
            ,PRECALCORGANIZATIONEXCHANGERATEID
            ,PRECALCBASEEXCHANGERATEID
            ,ACCOUNT
            ,GLPAYMENTMETHODREVENUETYPEMAPPINGID
            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        select 
            GLTRANSACTIONID
            ,GLTRANSACTIONID
            ,@REVENUEID
            ,2
            ,''
            ,@JOURNAL
            ,POSTSTATUSCODE
            ,null
            ,null
            ,ACCOUNTSTRING
            ,GLPAYMENTMETHODREVENUETYPEMAPPINGID
            ,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
        from @DISTRIBUTION
    end
end