/** * Convert specified amount target currency into another currency . * * @see {@link CurrencyExchangeDao#getCurrencyExchange(String, Date)} * @return amount in target currency or <code>null</code> if original <code>originalAmount</code> * was <code>null</code> or exchange rate cannot be identified. */ public BigDecimal convert( String currencyCode, String anotherCurrency, Date effectiveFromDate, BigDecimal originalAmount) { if (originalAmount == null) { return null; } if (anotherCurrency != null && anotherCurrency.equals(currencyCode)) { return originalAmount; } CurrencyExchange exchange = currencyExchangeDao.getCurrencyExchange(currencyCode, effectiveFromDate); CurrencyExchange anotherExchange = currencyExchangeDao.getCurrencyExchange(anotherCurrency, effectiveFromDate); if (exchange == null || anotherExchange == null) { return null; } BigDecimal originalCurrencyAmount = originalAmount.setScale(exchange.getPrecisionNumber(), RoundingMode.HALF_UP); BigDecimal exchangeRate = exchange .getAlternativeExchangeRate() .divide(anotherExchange.getAlternativeExchangeRate(), 16, RoundingMode.HALF_UP); BigDecimal convertedAmount = originalCurrencyAmount.divide( exchangeRate, anotherExchange.getPrecisionNumber(), RoundingMode.HALF_UP); return convertedAmount; }
/** * Convert specified amount target currency into USD . * * @see {@link CurrencyExchangeDao#getCurrencyExchange(String, Date)} * @return amount in target currency or <code>null</code> if original <code>foreignAmount</code> * was <code>null</code> or exchange rate cannot be identified. */ public BigDecimal convert(String currencyCode, Date effectiveFromDate, BigDecimal foreignAmount) { if (foreignAmount == null) { return null; } CurrencyExchange exchange = currencyExchangeDao.getCurrencyExchange(currencyCode, effectiveFromDate); if (exchange == null) { return null; } BigDecimal foreignCurrencyAmount = foreignAmount.setScale(exchange.getPrecisionNumber(), RoundingMode.HALF_UP); BigDecimal convertedAmount = foreignCurrencyAmount.divide( exchange.getAlternativeExchangeRate(), USD_PRECISION, RoundingMode.HALF_UP); return convertedAmount; }
/** * Get all exchange rate for as of given effective date. See {@link * CurrencyExchangeDao#getCurrencyExchanges(Date)} for details. */ public List<CurrencyExchange> getCurrencyExchanges(Date asOf) { return currencyExchangeDao.getCurrencyExchanges(asOf); }
/** * Get exchange rate for specified currency as of given effective date. See {@link * CurrencyExchangeDao#getCurrencyExchange(String, Date)} for details. */ public CurrencyExchange getCurrencyExchange(String currencyCode, Date effectiveFromDate) { return currencyExchangeDao.getCurrencyExchange(currencyCode, effectiveFromDate); }