UFN_RECOGNITIONCREDIT_GETADJUSTEDAMOUNT

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@RECOGNITIONCREDITADJUSTMENTCODE tinyint IN
@REVENUEID uniqueidentifier IN
@WRITEOFFTOTALAMOUNT money IN

Definition

Copy


create function dbo.UFN_RECOGNITIONCREDIT_GETADJUSTEDAMOUNT(
  @RECOGNITIONCREDITADJUSTMENTCODE tinyint,
  @REVENUEID uniqueidentifier,
  @WRITEOFFTOTALAMOUNT money
)
returns xml
as begin
declare @RECOGNITIONCREDITS xml;
declare @PLEDGEAMOUNTMINUSWRITEOFFS money;

select 
    @PLEDGEAMOUNTMINUSWRITEOFFS = (
        FINANCIALTRANSACTION.TRANSACTIONAMOUNT - coalesce((
                select sum(INSTALLMENTSPLITWRITEOFF.TRANSACTIONAMOUNT)
                from dbo.INSTALLMENTSPLITWRITEOFF
                inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                where INSTALLMENTSPLIT.PLEDGEID = @REVENUEID
                ), 0)
        )
from dbo.FINANCIALTRANSACTION
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(FINANCIALTRANSACTION.CONSTITUENTID) NF
left join dbo.CURRENCYEXCHANGERATE on FINANCIALTRANSACTION.BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID
where FINANCIALTRANSACTION.ID = @REVENUEID
    and FINANCIALTRANSACTION.DELETEDON is null;

set @RECOGNITIONCREDITADJUSTMENTCODE = COALESCE(@RECOGNITIONCREDITADJUSTMENTCODE, 3);

-- RECOGNITIONCREDITADJUSTMENTCODES.ReduceRecognitionCreditsByProportionalAmount 

if (@RECOGNITIONCREDITADJUSTMENTCODE = 0)
begin
    set @RECOGNITIONCREDITS = (
            select REVENUERECOGNITION.ID
                ,FINANCIALTRANSACTIONLINEITEM.ID as REVENUESPLITID
                ,dbo.UFN_DESIGNATION_BUILDNAME(REVENUESPLIT_EXT.DESIGNATIONID) as DESIGNATIONNAME
                ,CONSTITUENT.name as CONSTITUENTNAME
                ,REVENUERECOGNITIONTYPECODE.DESCRIPTION as RECOGNITIONCREDITTYPE
                ,REVENUERECOGNITION.EFFECTIVEDATE
                ,REVENUERECOGNITION.AMOUNT as ORIGINALAMOUNT
                ,(REVENUERECOGNITION.AMOUNT * (@PLEDGEAMOUNTMINUSWRITEOFFS - @WRITEOFFTOTALAMOUNT)) / @PLEDGEAMOUNTMINUSWRITEOFFS as ADJUSTEDAMOUNT
                ,REVENUERECOGNITION.BASECURRENCYID
            from dbo.FINANCIALTRANSACTION
            inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.REVENUERECOGNITION on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
            inner join dbo.CONSTITUENT on REVENUERECOGNITION.CONSTITUENTID = CONSTITUENT.ID
            left join dbo.REVENUERECOGNITIONTYPECODE on REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODE.ID
            where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
                and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
            order by DESIGNATIONNAME
                ,REVENUESPLITID
            for xml raw('ITEM')
                ,type
                ,elements
                ,root('RECOGNITIONCREDITS')
                ,binary BASE64
            );
end

-- RECOGNITIONCREDITADJUSTMENTCODES.ReduceRecognitionCreditsByWriteOffAmount 

if (@RECOGNITIONCREDITADJUSTMENTCODE = 1)
begin
    declare @PRORATEDAMOUNTS table (
        ID uniqueidentifier
        ,AMOUNT money
        )
    -- adjust splits for new amount

    declare @CURRENTAMOUNT decimal(30, 5);
    declare @WEIGHT decimal(30, 10);
    declare @tempID uniqueidentifier;
    declare @ORIGINALAMOUNT decimal(30, 5);

  SELECT @ORIGINALAMOUNT=COALESCE(TRANSACTIONAMOUNT,0) FROM dbo.FINANCIALTRANSACTION WHERE ID=@REVENUEID;

    declare @NEWAMOUNT decimal(30, 5) = COALESCE (
        @WRITEOFFTOTALAMOUNT
        ,0
        );

    -- Load return table with current amounts to prorate

    insert into @PRORATEDAMOUNTS (
        AMOUNT
        ,ID
        )
    select FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT [AMOUNT]
          ,FINANCIALTRANSACTIONLINEITEM.ID
                from dbo.FINANCIALTRANSACTIONLINEITEM
                inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
                    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                    and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;

    -- Loop through and calculate new split amounts

    declare AMOUNTSTOPRORATECURSOR cursor local fast_forward
    for
    select ID
        ,AMOUNT
    from @PRORATEDAMOUNTS;

    open AMOUNTSTOPRORATECURSOR;

    fetch next
    from AMOUNTSTOPRORATECURSOR
    into @tempID
        ,@WEIGHT;

    while @@FETCH_STATUS = 0
    begin
        if @ORIGINALAMOUNT <> 0
            set @CURRENTAMOUNT = (@WEIGHT / @ORIGINALAMOUNT) * @NEWAMOUNT;
        else
            set @CURRENTAMOUNT = 0;

        update @PRORATEDAMOUNTS
        set AMOUNT = @CURRENTAMOUNT
        where ID = @tempID;

        set @NEWAMOUNT = @NEWAMOUNT + @CURRENTAMOUNT;
        set @ORIGINALAMOUNT = @ORIGINALAMOUNT + @WEIGHT;

        fetch next
        from AMOUNTSTOPRORATECURSOR
        into @tempID
            ,@WEIGHT;
    end

    close AMOUNTSTOPRORATECURSOR;

    deallocate AMOUNTSTOPRORATECURSOR;

    set @RECOGNITIONCREDITS = (
            select REVENUERECOGNITION.ID
                ,FINANCIALTRANSACTIONLINEITEM.ID as REVENUESPLITID
                ,dbo.UFN_DESIGNATION_BUILDNAME(REVENUESPLIT_EXT.DESIGNATIONID) as DESIGNATIONNAME
                ,CONSTITUENT.name as CONSTITUENTNAME
                ,REVENUERECOGNITIONTYPECODE.DESCRIPTION as RECOGNITIONCREDITTYPE
                ,REVENUERECOGNITION.EFFECTIVEDATE
                ,REVENUERECOGNITION.AMOUNT as ORIGINALAMOUNT
                ,case when REVENUERECOGNITION.AMOUNT > COALESCE(P.AMOUNT, 0) then REVENUERECOGNITION.AMOUNT - COALESCE(P.AMOUNT, 0) else 0 end as ADJUSTEDAMOUNT
                ,REVENUERECOGNITION.BASECURRENCYID
            from dbo.FINANCIALTRANSACTION
            inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.REVENUERECOGNITION on FINANCIALTRANSACTIONLINEITEM.ID = REVENUERECOGNITION.REVENUESPLITID
            inner join dbo.CONSTITUENT on REVENUERECOGNITION.CONSTITUENTID = CONSTITUENT.ID
            left join dbo.REVENUERECOGNITIONTYPECODE on REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODE.ID
            left join @PRORATEDAMOUNTS P on FINANCIALTRANSACTIONLINEITEM.ID = P.ID
            where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
                and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
            order by DESIGNATIONNAME
                ,REVENUESPLITID
            for xml raw('ITEM')
                ,type
                ,elements
                ,root('RECOGNITIONCREDITS')
                ,binary BASE64
            );
end

-- RECOGNITIONCREDITADJUSTMENTCODES.DoNotAdjustRecognitionCredits 

if (@RECOGNITIONCREDITADJUSTMENTCODE = 3)
begin
    set @RECOGNITIONCREDITS = (
         select ID
                ,REVENUESPLITID
                ,DESIGNATIONNAME
                ,CONSTITUENTNAME
                ,RECOGNITIONCREDITTYPE
                ,EFFECTIVEDATE
                ,ORIGINALAMOUNT
                ,ADJUSTEDAMOUNT
                ,BASECURRENCYID
            from dbo.UFN_PLEDGEWRITEOFFBATCH_GETRECOGNITIONCREDITS(NULL, @REVENUEID) RECOGNITIONCREDITS
            order by DESIGNATIONNAME, REVENUESPLITID, CONSTITUENTNAME
            for xml raw('ITEM')
                ,type
                ,elements
                ,root('RECOGNITIONCREDITS')
                ,binary BASE64
            );
end

    return @RECOGNITIONCREDITS
end