summaryrefslogtreecommitdiff
path: root/merchant-terminal/src/main/java/net/taler/merchantpos/order
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-03-20 15:43:23 -0300
committerTorsten Grote <t@grobox.de>2020-03-20 15:43:23 -0300
commitdb8b71418b766258a7a4bda91e496b1b03cb28cd (patch)
treebd221d1a7ecf77d7752ea7a6086da344e74619cc /merchant-terminal/src/main/java/net/taler/merchantpos/order
parent82b8b57dc16112b859150696199774fcf06655e1 (diff)
downloadtaler-android-db8b71418b766258a7a4bda91e496b1b03cb28cd.tar.gz
taler-android-db8b71418b766258a7a4bda91e496b1b03cb28cd.tar.bz2
taler-android-db8b71418b766258a7a4bda91e496b1b03cb28cd.zip
Let all apps use the same Amount class
The wallet now also uses taler-kotlin-common
Diffstat (limited to 'merchant-terminal/src/main/java/net/taler/merchantpos/order')
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt10
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt12
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderManager.kt9
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt7
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt2
5 files changed, 20 insertions, 20 deletions
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt
index 847326b..f8d465b 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/LiveOrder.kt
@@ -20,6 +20,7 @@ import androidx.annotation.UiThread
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations
+import net.taler.common.Amount
import net.taler.common.CombinedLiveData
import net.taler.merchantpos.config.Category
import net.taler.merchantpos.config.ConfigProduct
@@ -31,7 +32,7 @@ internal enum class RestartState { ENABLED, DISABLED, UNDO }
internal interface LiveOrder {
val order: LiveData<Order>
- val orderTotal: LiveData<Double>
+ val orderTotal: LiveData<Amount>
val restartState: LiveData<RestartState>
val modifyOrderAllowed: LiveData<Boolean>
val lastAddedProduct: ConfigProduct?
@@ -44,12 +45,13 @@ internal interface LiveOrder {
internal class MutableLiveOrder(
val id: Int,
+ private val currency: String,
private val productsByCategory: HashMap<Category, ArrayList<ConfigProduct>>
) : LiveOrder {
private val availableCategories: Map<Int, Category>
get() = productsByCategory.keys.map { it.id to it }.toMap()
- override val order: MutableLiveData<Order> = MutableLiveData(Order(id, availableCategories))
- override val orderTotal: LiveData<Double> = Transformations.map(order) { it.total }
+ override val order: MutableLiveData<Order> = MutableLiveData(Order(id, currency, availableCategories))
+ override val orderTotal: LiveData<Amount> = Transformations.map(order) { it.total }
override val restartState = MutableLiveData(DISABLED)
private val selectedOrderLine = MutableLiveData<ConfigProduct>()
override val selectedProductKey: String?
@@ -86,7 +88,7 @@ internal class MutableLiveOrder(
undoOrder = null
} else {
undoOrder = order.value
- order.value = Order(id, availableCategories)
+ order.value = Order(id, currency, availableCategories)
restartState.value = UNDO
}
}
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
index 5954e63..ff6e6b7 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
@@ -16,10 +16,11 @@
package net.taler.merchantpos.order
+import net.taler.common.Amount
import net.taler.merchantpos.config.Category
import net.taler.merchantpos.config.ConfigProduct
-data class Order(val id: Int, val availableCategories: Map<Int, Category>) {
+data class Order(val id: Int, val currency: String, val availableCategories: Map<Int, Category>) {
val products = ArrayList<ConfigProduct>()
val title: String = id.toString()
val summary: String
@@ -29,17 +30,14 @@ data class Order(val id: Int, val availableCategories: Map<Int, Category>) {
"$quantity x ${category.localizedName}"
}.joinToString()
}
- val total: Double
+ val total: Amount
get() {
- var total = 0.0
+ var total = Amount.zero(currency)
products.forEach { product ->
- val price = product.priceAsDouble
- total += price * product.quantity
+ total += product.price * product.quantity
}
return total
}
- val totalAsString: String
- get() = String.format("%.2f", total)
operator fun plus(product: ConfigProduct): Order {
val i = products.indexOf(product)
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderManager.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderManager.kt
index a30c264..ff2be48 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderManager.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderManager.kt
@@ -24,7 +24,6 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations.map
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
-import net.taler.common.Amount.Companion.fromString
import net.taler.merchantpos.R
import net.taler.merchantpos.config.Category
import net.taler.merchantpos.config.ConfigProduct
@@ -41,6 +40,7 @@ class OrderManager(
val TAG = OrderManager::class.java.simpleName
}
+ private lateinit var currency: String
private var orderCounter: Int = 0
private val mCurrentOrderId = MutableLiveData<Int>()
internal val currentOrderId: LiveData<Int> = mCurrentOrderId
@@ -75,7 +75,7 @@ class OrderManager(
// group products by categories
productsByCategory.clear()
products.forEach { product ->
- val productCurrency = fromString(product.price).currency
+ val productCurrency = product.price.currency
if (productCurrency != currency) {
Log.e(TAG, "Product $product has currency $productCurrency, $currency expected")
return context.getString(
@@ -98,12 +98,13 @@ class OrderManager(
}
}
return if (productsByCategory.size > 0) {
+ this.currency = currency
mCategories.postValue(categories)
mProducts.postValue(productsByCategory[categories[0]])
// Initialize first empty order, note this won't work when updating config mid-flight
if (orders.isEmpty()) {
val id = orderCounter++
- orders[id] = MutableLiveOrder(id, productsByCategory)
+ orders[id] = MutableLiveOrder(id, currency, productsByCategory)
mCurrentOrderId.postValue(id)
}
null // success, no error string
@@ -129,7 +130,7 @@ class OrderManager(
}
if (nextId == null) {
nextId = orderCounter++
- orders[nextId] = MutableLiveOrder(nextId, productsByCategory)
+ orders[nextId] = MutableLiveOrder(nextId, currency, productsByCategory)
}
val currentOrder = order(currentId)
if (currentOrder.isEmpty()) orders.remove(currentId)
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
index a90334b..f792d7a 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
@@ -95,12 +95,11 @@ class OrderStateFragment : Fragment() {
onOrderChanged(order, tracker)
})
liveOrder.orderTotal.observe(viewLifecycleOwner, Observer { orderTotal ->
- if (orderTotal == 0.0) {
+ if (orderTotal.isZero()) {
totalView.fadeOut()
totalView.text = null
} else {
- val currency = viewModel.configManager.merchantConfig?.currency
- totalView.text = getString(R.string.order_total, orderTotal, currency)
+ totalView.text = getString(R.string.order_total, orderTotal)
totalView.fadeIn()
}
})
@@ -184,7 +183,7 @@ private class OrderAdapter : Adapter<OrderViewHolder>() {
v.isActivated = selected
quantity.text = product.quantity.toString()
name.text = product.localizedDescription
- price.text = String.format("%.2f", product.priceAsDouble * product.quantity)
+ price.text = product.totalPrice.amountStr
}
}
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt
index d4da73f..00eb509 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/ProductsFragment.kt
@@ -104,7 +104,7 @@ private class ProductAdapter(
fun bind(product: ConfigProduct) {
name.text = product.localizedDescription
- price.text = product.priceAsDouble.toString()
+ price.text = product.price.amountStr
v.setOnClickListener { listener.onProductSelected(product) }
}
}