project QadFinancials > class BConsolid > method GetExchangeRatesSimpleAverage

Description

Get Exchange Rate for exchange method SIMPLEAVERAGE


Parameters


icCurrencyCodeinputcharacterCurrency Code
itPeriodStartDateinputdatePeriod Start Date
itPeriodEndDateinputdatePeriod End Date
odExchangeRateoutputdecimalExchange Rate
odExchangeRateScaleoutputdecimalExchange Rate Scale
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BConsolid.GetExchangeRates


program code (program6/bconsolid.p)

/* =================================================================================== */
/* The input parameters are already validated in the calling method (GetExchangeRates) */
/* So don't call this method, except from method GetExchangeRates.                     */
/* =================================================================================== */

/* =============================================== */
/* Initialise output parameters and oiReturnStatus */
/* =============================================== */
assign viLocalReturnStatus = oiReturnStatus
       oiReturnStatus      = -98
       odExchangeRate      = 0
       odExchangeRateScale = 0.

/* ======================================= */
/* Get the Exchange Rate of the start date */
/* ======================================= */
find tExchangeRateCache where
     tExchangeRateCache.tcFromCurrencyCode     = icCurrencyCode                 and
     tExchangeRateCache.tiToCurrencyId         = viCompanyLCId                  and
     tExchangeRateCache.tcExchangeRateTypeCode = {&EXCHANGERATETYPE-ACCOUNTING} and
     tExchangeRateCache.ttValidityDate         = itPeriodStartDate
     no-error.
if available tExchangeRateCache
then assign vdExchangeRateStart      = tExchangeRateCache.tdMultiplyExchangeRate
            vdExchangeRateScaleStart = tExchangeRateCache.tdExchangeRateScaleFactor.
else do:
    <M-82 run GetExchangeRate
       (input  ? (iiCompanyID), 
        input  ? (iiFromCurrencyID), 
        input  icCurrencyCode (icFromCurrencyCode), 
        input  viCompanyLCId (iiToCurrencyID), 
        input  ? (icToCurrencyCode), 
        input  ? (iiExchangeRateTypeID), 
        input  {&EXCHANGERATETYPE-ACCOUNTING} (icExchangeRateTypeCode), 
        input  itPeriodStartDate (itValidityDate), 
        output vdExchangeRateStart (odExchangeRate), 
        output vdExchangeRateScaleStart (odExchangeScaleFactor), 
        output viFcReturnSuper (oiReturnStatus)) in BConsolid>
    if viFcReturnSuper <> 0
    then do:
        assign vcMessage = trim(substitute(#T-22'The accounting exchange rate for currency &1 on &2 is not defined in the system.':200(61715)T-22#, trim(icCurrencyCode), trim(string(itPeriodStartDate)) )).
        if viLocalReturnStatus >= 0
        then assign viLocalReturnStatus = viFcReturnSuper.
        <M-54 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '':U (icRowid), 
            input  'qadfin-727972':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolid>
    end. /* if viFcReturnSuper <> 0 */    

    create tExchangeRateCache.
    assign tExchangeRateCache.tcFromCurrencyCode        = icCurrencyCode                 
           tExchangeRateCache.tiToCurrencyId            = viCompanyLCId                  
           tExchangeRateCache.tcExchangeRateTypeCode    = {&EXCHANGERATETYPE-ACCOUNTING} 
           tExchangeRateCache.ttValidityDate            = itPeriodStartDate
           tExchangeRateCache.tdMultiplyExchangeRate    = vdExchangeRateStart
           tExchangeRateCache.tdExchangeRateScaleFactor = vdExchangeRateScaleStart.
end. /* else do: */

/* ===================================== */
/* Get the Exchange Rate of the end date */
/* ===================================== */
find tExchangeRateCache where
     tExchangeRateCache.tcFromCurrencyCode     = icCurrencyCode                 and
     tExchangeRateCache.tiToCurrencyId         = viCompanyLCId                  and
     tExchangeRateCache.tcExchangeRateTypeCode = {&EXCHANGERATETYPE-ACCOUNTING} and
     tExchangeRateCache.ttValidityDate         = itPeriodEndDate
     no-error.
if available tExchangeRateCache
then assign vdExchangeRateEnd      = tExchangeRateCache.tdMultiplyExchangeRate
            vdExchangeRateScaleEnd = tExchangeRateCache.tdExchangeRateScaleFactor.
else do:
    <M-36 run GetExchangeRate
       (input  ? (iiCompanyID), 
        input  ? (iiFromCurrencyID), 
        input  icCurrencyCode (icFromCurrencyCode), 
        input  viCompanyLCId (iiToCurrencyID), 
        input  ? (icToCurrencyCode), 
        input  ? (iiExchangeRateTypeID), 
        input  {&EXCHANGERATETYPE-ACCOUNTING} (icExchangeRateTypeCode), 
        input  itPeriodEndDate (itValidityDate), 
        output vdExchangeRateEnd (odExchangeRate), 
        output vdExchangeRateScaleEnd (odExchangeScaleFactor), 
        output viFcReturnSuper (oiReturnStatus)) in BConsolid>
    if viFcReturnSuper <> 0
    then do:
        assign vcMessage = trim(substitute(#T-44'The accounting exchange rate for currency &1 on &2 is not defined in the system.':200(61715)T-44#, trim(icCurrencyCode), trim(string(itPeriodEndDate)) )).
        if viLocalReturnStatus >= 0
        then assign viLocalReturnStatus = viFcReturnSuper.
        <M-95 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '':U (icRowid), 
            input  'qadfin-662952':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BConsolid>
    end. /* if viFcReturnSuper <> 0 */
    create tExchangeRateCache.
    assign tExchangeRateCache.tcFromCurrencyCode        = icCurrencyCode                 
           tExchangeRateCache.tiToCurrencyId            = viCompanyLCId                  
           tExchangeRateCache.tcExchangeRateTypeCode    = {&EXCHANGERATETYPE-ACCOUNTING} 
           tExchangeRateCache.ttValidityDate            = itPeriodEndDate
           tExchangeRateCache.tdMultiplyExchangeRate    = vdExchangeRateEnd
           tExchangeRateCache.tdExchangeRateScaleFactor = vdExchangeRateScaleEnd.
end. /* else do: */

/* ==================== */
/* Set Output parameter */
/* ==================== */
if vdExchangeRateScaleStart = vdExchangeRateScaleEnd
then assign odExchangeRate      = (vdExchangeRateStart + vdExchangeRateEnd) / 2
            odExchangeRateScale = vdExchangeRateScaleStart.
else assign odExchangeRate      = ((vdExchangeRateStart * vdExchangeRateScaleStart) + 
                                   (vdExchangeRateEnd   * vdExchangeRateScaleEnd)) / 2
            odExchangeRateScale = 1.

assign oiReturnStatus = viLocalReturnStatus.