UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY

Returns the amount of a given revenue recognition record in the given currency.

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@REVENUERECOGNITIONID uniqueidentifier IN
@CURRENCYID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY
(
    @REVENUERECOGNITIONID uniqueidentifier,
    @CURRENCYID uniqueidentifier
)
returns money
as
begin
    declare @AMOUNT money = 0;
  declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

    if (@CURRENCYID is null) or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
    begin
        select
            @AMOUNT = REVENUERECOGNITION.ORGANIZATIONAMOUNT
        from
            dbo.REVENUERECOGNITION
        where
            REVENUERECOGNITION.ID = @REVENUERECOGNITIONID;
    end
    else
    begin
        declare @RECORDBASECURRENCYID uniqueidentifier;
        declare @RECORDDATE datetime;
    declare @BASEAMOUNT money;
    declare @ORGANIZATIONAMOUNT money;

        select
            @RECORDBASECURRENCYID = REVENUERECOGNITION.BASECURRENCYID,
            @RECORDDATE = REVENUE.DATE,
      @BASEAMOUNT = REVENUERECOGNITION.AMOUNT,
      @ORGANIZATIONAMOUNT = REVENUERECOGNITION.ORGANIZATIONAMOUNT
        from
            dbo.REVENUERECOGNITION
        inner join
            dbo.FINANCIALTRANSACTIONLINEITEM as REVENUESPLIT  on REVENUESPLIT.ID = REVENUERECOGNITION.REVENUESPLITID
        inner join
            dbo.FINANCIALTRANSACTION as REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
        where REVENUESPLIT.DELETEDON is null and REVENUE.DELETEDON is null and
            REVENUERECOGNITION.ID = @REVENUERECOGNITIONID;

        if @CURRENCYID = @RECORDBASECURRENCYID
            set @AMOUNT = @BASEAMOUNT;
        else
        begin
            declare @CURRENCYEXCHANGERATEID uniqueidentifier;

            set @CURRENCYEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(@ORGANIZATIONCURRENCYID, @CURRENCYID, @RECORDDATE, 1, null);
            if (@CURRENCYEXCHANGERATEID is not null)
                set @AMOUNT = dbo.UFN_CURRENCY_CONVERT(@ORGANIZATIONAMOUNT, @CURRENCYEXCHANGERATEID);
            else
            begin
                set @CURRENCYEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(@CURRENCYID, @ORGANIZATIONCURRENCYID, @RECORDDATE, 1, null);
                set @AMOUNT = dbo.UFN_CURRENCY_CONVERTINVERSE(@ORGANIZATIONAMOUNT, @CURRENCYEXCHANGERATEID);
            end
        end
    end    

    return @AMOUNT;
end