diff --git a/src/main/kotlin/com/cubetiqs/libra/moneyutils/Money.kt b/src/main/kotlin/com/cubetiqs/libra/moneyutils/Money.kt index 43a2a68..f7a1a1f 100644 --- a/src/main/kotlin/com/cubetiqs/libra/moneyutils/Money.kt +++ b/src/main/kotlin/com/cubetiqs/libra/moneyutils/Money.kt @@ -2,7 +2,7 @@ package com.cubetiqs.libra.moneyutils open class Money( var value: Double, - var currency: String = "USD" + private var currency: String = "USD" ) : StdMoney { //////////////////// - PROPERTIES - //////////////////// @@ -20,4 +20,9 @@ open class Money( override fun toString(): String { return "Money(value=${getMoneyValue()}, currency='${getMoneyCurrency()}')" } + + companion object { + val ZERO: StdMoney + get() = Money(value = 0.0) + } } diff --git a/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyConfig.kt b/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyConfig.kt index 5b6c5ce..a8f93c7 100644 --- a/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyConfig.kt +++ b/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyConfig.kt @@ -15,6 +15,8 @@ object MoneyConfig { * Value is the rate */ private val config: MutableMap = mutableMapOf() + private var valid: Boolean = false + fun isValid() = valid /** * Money properties for money config format @@ -56,6 +58,9 @@ object MoneyConfig { throw MoneyCurrencyStateException("money config format is not valid!") } } + + // validate the config is load or not + this.valid = this.config.isNotEmpty() } // all currencies with its rate diff --git a/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyExchangeUtils.kt b/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyExchangeUtils.kt index ba6a2ce..f6575bd 100644 --- a/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyExchangeUtils.kt +++ b/src/main/kotlin/com/cubetiqs/libra/moneyutils/MoneyExchangeUtils.kt @@ -1,7 +1,13 @@ package com.cubetiqs.libra.moneyutils object MoneyExchangeUtils { - fun computeRate(rateFrom: Double, rateTo: Double, baseRate: Double = 1.0, amountFrom: Double = 1.0): Double { + fun exchange(exchangeFrom: StdMoney, exchangeToCurrency: String): StdMoney { + val rateFrom = MoneyConfig.getRate(exchangeFrom.getMoneyCurrency()) + val rateTo = MoneyConfig.getRate(exchangeToCurrency) + return Money(value = computeRate(rateFrom, rateTo, amountFrom = exchangeFrom.getMoneyValue()), currency = exchangeToCurrency) + } + + private fun computeRate(rateFrom: Double, rateTo: Double, baseRate: Double = 1.0, amountFrom: Double = 1.0): Double { return amountFrom * ((baseRate / rateFrom) / (baseRate / rateTo)) } } \ No newline at end of file