USP_REVENUE_UPDATEAUCTIONPURCHASEGLDISTRIBUTION_SINGLEREVENUE

Update the auction purchase GL distributions for the given Revenue, but not all affected revenue.

Parameters

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

Definition

Copy


CREATE procedure [dbo].[USP_REVENUE_UPDATEAUCTIONPURCHASEGLDISTRIBUTION_SINGLEREVENUE]
(
    @REVENUEID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @CHANGEDATE datetime = null
)
as
begin

    set nocount on;

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

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    begin try

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

        declare @ADJUSTMENTDATE datetime;
        if @ADJUSTMENTDATE is null
            select @ADJUSTMENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@CHANGEDATE)

        declare @GLTRANSACTIONSTODELETE table (GLTRANSACTIONID uniqueidentifier,AUCTIONPURCHASEGLDISTRIBUTIONID uniqueidentifier);    

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

        --Delete all distributions not posted 

/*        delete dbo.AUCTIONPURCHASEGLDISTRIBUTION
        output DELETED.GLTRANSACTIONID into @GLTRANSACTIONSTODELETE
        from
             dbo.AUCTIONPURCHASEGLDISTRIBUTION     
            left join dbo.GLTRANSACTION on AUCTIONPURCHASEGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
        where
            AUCTIONPURCHASEGLDISTRIBUTION.REVENUEPURCHASEID = @REVENUEID
            and
            GLTRANSACTION.POSTSTATUSCODE <> 0;
*/        

        insert into @GLTRANSACTIONSTODELETE (GLTRANSACTIONID,AUCTIONPURCHASEGLDISTRIBUTIONID)    
        select  AUCTIONPURCHASEGLDISTRIBUTION.GLTRANSACTIONID,AUCTIONPURCHASEGLDISTRIBUTION.ID 
        from
            dbo.AUCTIONPURCHASEGLDISTRIBUTION     
            left join dbo.GLTRANSACTION on AUCTIONPURCHASEGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
        where
            AUCTIONPURCHASEGLDISTRIBUTION.REVENUEPURCHASEID = @REVENUEID
            and
            GLTRANSACTION.POSTSTATUSCODE <> 0;


        delete dbo.AUCTIONPURCHASEGLDISTRIBUTION where AUCTIONPURCHASEGLDISTRIBUTION.ID in (select AUCTIONPURCHASEGLDISTRIBUTIONID from @GLTRANSACTIONSTODELETE);                                

        -- Delete the GL Transactions

        delete dbo.GLTRANSACTION where GLTRANSACTION.ID in (select GLTRANSACTIONID from @GLTRANSACTIONSTODELETE)

        if((select
                count(*)
            from
                 dbo.AUCTIONPURCHASEGLDISTRIBUTION     
            left join dbo.GLTRANSACTION on
                AUCTIONPURCHASEGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
            where
                AUCTIONPURCHASEGLDISTRIBUTION.REVENUEPURCHASEID = @REVENUEID and
                GLTRANSACTION.POSTSTATUSCODE = 0
            > 0)
        begin
            exec dbo.USP_SAVE_AUCTIONPURCHASEADJUSTMENT 
                @REVENUEID = @REVENUEID,
                @DATE = @ADJUSTMENTDATE,
                @CHANGEAGENTID = @CHANGEAGENTID,
                @CHANGEDATE = @CHANGEDATE,
                @POSTDATE = @ADJUSTMENTDATE
        end

        -- Generate GL distributions for the auction purchase record.

        insert into @DISTRIBUTIONS(GLTRANSACTIONID,ACCOUNT,AMOUNT,PROJECT,REFERENCE,TRANSACTIONTYPECODE,POSTDATE,GLPAYMENTMETHODREVENUETYPEMAPPINGID,ACCOUNTID,REVENUEID,REVENUESPLITTYPECODE,POSTSTATUSCODE,AUCTIONITEMPOSTSTATUSCODE,REVENUEPURCHASEID,BASECURRENCYID,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,ORGANIZATIONAMOUNT,ERRORMESSAGE,MAPPEDVALUES)
        select 
            newid(),
            DISTRIBUTIONS.ACCOUNTSTRING,
            DISTRIBUTIONS.AMOUNT,
            DISTRIBUTIONS.PROJECT,
            DISTRIBUTIONS.REFERENCE, 
            DISTRIBUTIONS.TRANSACTIONTYPECODE,
            DISTRIBUTIONS.POSTDATE,
            DISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
            DISTRIBUTIONS.ACCOUNTID,
            DISTRIBUTIONS.REVENUEID,
            DISTRIBUTIONS.REVENUESPLITTYPECODE,
            1, --DISTRIBUTIONS.POSTSTATUSCODE,

            DISTRIBUTIONS.AUCTIONITEMPOSTSTATUSCODE,
            DISTRIBUTIONS.REVENUEPURCHASEID,
      DISTRIBUTIONS.BASECURRENCYID,
      DISTRIBUTIONS.TRANSACTIONCURRENCYID,
      DISTRIBUTIONS.BASEEXCHANGERATEID,
      DISTRIBUTIONS.ORGANIZATIONEXCHANGERATEID,
      DISTRIBUTIONS.TRANSACTIONAMOUNT,
      DISTRIBUTIONS.ORGANIZATIONAMOUNT,
      DISTRIBUTIONS.ERRORMESSAGE,
      DISTRIBUTIONS.MAPPEDVALUES
        from 
            dbo.UFN_REVENUE_GENERATEAUCTIONPURCHASEGLDISTRIBUTION_2(@REVENUEID,null) as DISTRIBUTIONS
        where not exists(select 1 from @DISTRIBUTIONS CURRENTDISTRIBUTIONS where CURRENTDISTRIBUTIONS.REVENUEPURCHASEID = DISTRIBUTIONS.REVENUEPURCHASEID and CURRENTDISTRIBUTIONS.REVENUEID = DISTRIBUTIONS.REVENUEID);

        select top 1 @ERRORMESSAGE = ERRORMESSAGE from @DISTRIBUTIONS where ACCOUNTID is null

        if nullif(@ERRORMESSAGE,'') is not null
            raiserror('%s', 13, 1, @ERRORMESSAGE);
        else
            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)

    if (select count(*) from @DISTRIBUTIONS) > 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)



    ----Insert New Distributions----


        insert into dbo.GLTRANSACTION
        (
            ID,
            TRANSACTIONTYPECODE,
            ACCOUNT,
            AMOUNT,PROJECT,
            REFERENCE,
            POSTDATE,
            POSTSTATUSCODE,
            JOURNAL,
            GLACCOUNTID,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED,
            TRANSACTIONAMOUNT, 
            ORGANIZATIONAMOUNT, 
            TRANSACTIONCURRENCYID, 
            BASECURRENCYID, 
            BASEEXCHANGERATEID, 
            ORGANIZATIONEXCHANGERATEID
        )
        select 
            DISTRIBUTIONS.GLTRANSACTIONID,
            DISTRIBUTIONS.TRANSACTIONTYPECODE,
            DISTRIBUTIONS.ACCOUNT,
            DISTRIBUTIONS.AMOUNT,
            DISTRIBUTIONS.PROJECT,
            DISTRIBUTIONS.REFERENCE,
            DISTRIBUTIONS.POSTDATE,
            DISTRIBUTIONS.POSTSTATUSCODE,
            @JOURNAL,
            DISTRIBUTIONS.ACCOUNTID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CHANGEDATE,
            @CHANGEDATE,
            DISTRIBUTIONS.TRANSACTIONAMOUNT,
            DISTRIBUTIONS.ORGANIZATIONAMOUNT,
            DISTRIBUTIONS.TRANSACTIONCURRENCYID,
            DISTRIBUTIONS.BASECURRENCYID,
            DISTRIBUTIONS.BASEEXCHANGERATEID,
            DISTRIBUTIONS.ORGANIZATIONEXCHANGERATEID
        from
            @DISTRIBUTIONS DISTRIBUTIONS 
        where 
            DISTRIBUTIONS.REVENUEPURCHASEID = @REVENUEID

        insert into dbo.AUCTIONPURCHASEGLDISTRIBUTION
        (
            ID,
            REVENUEID,
            GLPAYMENTMETHODREVENUETYPEMAPPINGID,
            PROJECT,
            REFERENCE,
            AMOUNT,
            ACCOUNT,
            TRANSACTIONTYPECODE,
            GLTRANSACTIONID,
            REVENUEPURCHASEID,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED,
            BASECURRENCYID,
            TRANSACTIONCURRENCYID,
            BASEEXCHANGERATEID,
            ORGANIZATIONEXCHANGERATEID,
            TRANSACTIONAMOUNT,
            ORGANIZATIONAMOUNT
        )
        select
            newid(),
            DISTRIBUTIONS.REVENUEID,
            DISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
            DISTRIBUTIONS.PROJECT,
            DISTRIBUTIONS.REFERENCE,
            DISTRIBUTIONS.AMOUNT,
            DISTRIBUTIONS.ACCOUNT,
            DISTRIBUTIONS.TRANSACTIONTYPECODE,
            DISTRIBUTIONS.GLTRANSACTIONID,
            DISTRIBUTIONS.REVENUEPURCHASEID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CHANGEDATE,
            @CHANGEDATE,
            DISTRIBUTIONS.BASECURRENCYID,
            DISTRIBUTIONS.TRANSACTIONCURRENCYID,
            DISTRIBUTIONS.BASEEXCHANGERATEID,
            DISTRIBUTIONS.ORGANIZATIONEXCHANGERATEID,
            DISTRIBUTIONS.TRANSACTIONAMOUNT,
            DISTRIBUTIONS.ORGANIZATIONAMOUNT
        from @DISTRIBUTIONS DISTRIBUTIONS 
        where DISTRIBUTIONS.REVENUEPURCHASEID = @REVENUEID

        exec dbo.USP_SAVE_AUCTIONPURCHASEREALIZEDGLDISTRIBUTION 
            @REVENUEID=@REVENUEID
            @CHANGEAGENTID=@CHANGEAGENTID
            @CURRENTDATE=@CURRENTDATE
            @REVENUEIDONLY=1;

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

    return 0;
end