/** * 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; }