project QadFinancials > class BConsolid > method GetExchangeRatesSimpleAverage
Description
Get Exchange Rate for exchange method SIMPLEAVERAGE
Parameters
icCurrencyCode | input | character | Currency Code |
itPeriodStartDate | input | date | Period Start Date |
itPeriodEndDate | input | date | Period End Date |
odExchangeRate | output | decimal | Exchange Rate |
odExchangeRateScale | output | decimal | Exchange Rate Scale |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
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.