UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTION

Returns a single-row table containing base and organization currency values given a transaction amount, and total amounts.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@AMOUNT money IN
@TOTALAMOUNT money IN
@BASECURRENCYID uniqueidentifier IN
@TOTALBASEAMOUNT money IN
@BASECURRENCYDECIMALDIGITS tinyint IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASEAMOUNT money IN
@ORGANIZATIONCURRENCYID uniqueidentifier IN
@TOTALORGANIZATIONAMOUNT money IN
@ORGANIZATIONCURRENCYDECIMALDIGITS tinyint IN
@ORGANIZATIONAMOUNT money IN

Definition

Copy


            create function dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTION
            (
                @AMOUNT money,
                @TOTALAMOUNT money,
                @BASECURRENCYID uniqueidentifier,
                @TOTALBASEAMOUNT money = null,
                @BASECURRENCYDECIMALDIGITS tinyint = null,
                @TRANSACTIONCURRENCYID uniqueidentifier,
                @BASEAMOUNT money = null,
                @ORGANIZATIONCURRENCYID uniqueidentifier = null,
                @TOTALORGANIZATIONAMOUNT money,
                @ORGANIZATIONCURRENCYDECIMALDIGITS tinyint = null,
                @ORGANIZATIONAMOUNT money = null
            )
            returns @VALUES table (
                [BASEAMOUNT] money,
                [ORGANIZATIONAMOUNT] money,
                [TRANSACTIONCURRENCYID] uniqueidentifier,
                [ORGANIZATIONCURRENCYID] uniqueidentifier
            )
            as begin

                if @TRANSACTIONCURRENCYID is null
                    set @TRANSACTIONCURRENCYID = @BASECURRENCYID;

                if @BASECURRENCYDECIMALDIGITS is null
                    select
                        @BASECURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS
                    from
                        dbo.CURRENCY
                    where
                        CURRENCY.ID = @BASECURRENCYID;

                if @ORGANIZATIONCURRENCYDECIMALDIGITS is null
                    select
                        @ORGANIZATIONCURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS
                    from
                        dbo.CURRENCY
                    where
                        CURRENCY.ID = @ORGANIZATIONCURRENCYID;

                if @TRANSACTIONCURRENCYID = @BASECURRENCYID 
                begin
                    set @BASEAMOUNT = @AMOUNT;
                    set @TOTALBASEAMOUNT = @TOTALAMOUNT;
                end
                else
                    set @BASEAMOUNT = dbo.UFN_CURRENCY_CONVERTBYPROPORTION(@AMOUNT, @TOTALAMOUNT, @TOTALBASEAMOUNT, @BASECURRENCYDECIMALDIGITS);

                declare @ORGANIZATIONAMOUNTORIGINCODE tinyint = 0;
                select top 1
                    @ORGANIZATIONAMOUNTORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE
                from
                    dbo.MULTICURRENCYCONFIGURATION;

                if @ORGANIZATIONAMOUNTORIGINCODE = 0
                begin
                    if @BASECURRENCYID = @ORGANIZATIONCURRENCYID
                        set @ORGANIZATIONAMOUNT = @BASEAMOUNT;
                    else
                        set @ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERTBYPROPORTION(@BASEAMOUNT, @TOTALBASEAMOUNT, @TOTALORGANIZATIONAMOUNT, @ORGANIZATIONCURRENCYDECIMALDIGITS);
                end
                else
                begin
                    if @TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID
                        set @ORGANIZATIONAMOUNT = @AMOUNT;
                    else
                        set @ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERTBYPROPORTION(@AMOUNT, @TOTALAMOUNT, @TOTALORGANIZATIONAMOUNT, @ORGANIZATIONCURRENCYDECIMALDIGITS);
                end    

                insert into @VALUES
                select
                    @BASEAMOUNT,
                    @ORGANIZATIONAMOUNT,
                    @TRANSACTIONCURRENCYID,
                    @ORGANIZATIONCURRENCYID;

                return;
            end