summaryrefslogtreecommitdiff
path: root/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-03-09 15:13:18 -0300
committerTorsten Grote <t@grobox.de>2020-03-09 15:13:18 -0300
commit96da1b763914d02e283478646e0147c515044ed5 (patch)
tree58d73d71be01e15e3f22390ea64958081fb15fe3 /app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
parentb87319c0a437e7a72f52384e689c8e2971060cff (diff)
downloadmerchant-terminal-android-96da1b763914d02e283478646e0147c515044ed5.tar.gz
merchant-terminal-android-96da1b763914d02e283478646e0147c515044ed5.tar.bz2
merchant-terminal-android-96da1b763914d02e283478646e0147c515044ed5.zip
Show Meaningful Configuration Parsing Errors
Closes #0006113
Diffstat (limited to 'app/src/main/java/net/taler/merchantpos/order/OrderManager.kt')
-rw-r--r--app/src/main/java/net/taler/merchantpos/order/OrderManager.kt32
1 files changed, 16 insertions, 16 deletions
diff --git a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
index ab561e2..b97219b 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
@@ -1,5 +1,6 @@
package net.taler.merchantpos.order
+import android.content.Context
import android.util.Log
import androidx.annotation.UiThread
import androidx.lifecycle.LiveData
@@ -8,11 +9,15 @@ import androidx.lifecycle.Transformations.map
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import net.taler.merchantpos.Amount.Companion.fromString
+import net.taler.merchantpos.R
import net.taler.merchantpos.config.ConfigurationReceiver
import net.taler.merchantpos.order.RestartState.ENABLED
import org.json.JSONObject
-class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
+class OrderManager(
+ private val context: Context,
+ private val mapper: ObjectMapper
+) : ConfigurationReceiver {
companion object {
val TAG = OrderManager::class.java.simpleName
@@ -32,15 +37,14 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
private val mCategories = MutableLiveData<List<Category>>()
internal val categories: LiveData<List<Category>> = mCategories
- @Suppress("BlockingMethodInNonBlockingContext") // run on Dispatchers.Main
- override suspend fun onConfigurationReceived(json: JSONObject, currency: String): Boolean {
+ override suspend fun onConfigurationReceived(json: JSONObject, currency: String): String? {
// parse categories
val categoriesStr = json.getJSONArray("categories").toString()
val categoriesType = object : TypeReference<List<Category>>() {}
val categories: List<Category> = mapper.readValue(categoriesStr, categoriesType)
if (categories.isEmpty()) {
Log.e(TAG, "No valid category found.")
- return false
+ return context.getString(R.string.config_error_category)
}
// pre-select the first category
categories[0].selected = true
@@ -52,23 +56,21 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
// group products by categories
productsByCategory.clear()
- val seenIds = ArrayList<String>()
products.forEach { product ->
val productCurrency = fromString(product.price).currency
if (productCurrency != currency) {
Log.e(TAG, "Product $product has currency $productCurrency, $currency expected")
- return false
+ return context.getString(
+ R.string.config_error_currency, product.description, productCurrency, currency
+ )
}
- if (seenIds.contains(product.id)) {
- Log.e(TAG, "Product $product has duplicate product_id ${product.id}")
- return false
- }
- seenIds.add(product.id)
product.categories.forEach { categoryId ->
val category = categories.find { it.id == categoryId }
if (category == null) {
Log.e(TAG, "Product $product has unknown category $categoryId")
- return false
+ return context.getString(
+ R.string.config_error_product_category_id, product.description, categoryId
+ )
}
if (productsByCategory.containsKey(category)) {
productsByCategory[category]?.add(product)
@@ -86,10 +88,8 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
orders[id] = MutableLiveOrder(id, productsByCategory)
mCurrentOrderId.postValue(id)
}
- true
- } else {
- false
- }
+ null // success, no error string
+ } else context.getString(R.string.config_error_product_zero)
}
@UiThread