summaryrefslogtreecommitdiff
path: root/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
diff options
context:
space:
mode:
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.kt33
1 files changed, 33 insertions, 0 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 124e73a..449d741 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
@@ -8,6 +8,7 @@ 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.CombinedLiveData
import net.taler.merchantpos.config.ConfigurationReceiver
import net.taler.merchantpos.order.RestartState.DISABLED
import net.taler.merchantpos.order.RestartState.ENABLED
@@ -40,6 +41,13 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
private val mRestartState = MutableLiveData<RestartState>().apply { value = DISABLED }
internal val restartState: LiveData<RestartState> = mRestartState
+ private val mSelectedOrderLine = MutableLiveData<OrderLine>()
+
+ internal val modifyOrderAllowed =
+ CombinedLiveData(restartState, mSelectedOrderLine) { restartState, selectedOrderLine ->
+ restartState != DISABLED && selectedOrderLine != null
+ }
+
@Suppress("BlockingMethodInNonBlockingContext") // run on Dispatchers.Main
override suspend fun onConfigurationReceived(json: JSONObject, currency: String): Boolean {
// parse categories
@@ -105,6 +113,14 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
}
@UiThread
+ internal fun removeProduct(product: ConfigProduct) {
+ val order = mOrder.value ?: throw IllegalStateException()
+ val modifiedOrder = order - product
+ mOrder.value = modifiedOrder
+ mRestartState.value = if (modifiedOrder.products.isEmpty()) DISABLED else ENABLED
+ }
+
+ @UiThread
internal fun restartOrUndo() {
if (restartState.value == UNDO) {
mOrder.value = undoOrder
@@ -117,4 +133,21 @@ class OrderManager(private val mapper: ObjectMapper) : ConfigurationReceiver {
}
}
+ @UiThread
+ fun selectOrderLine(orderLine: OrderLine?) {
+ mSelectedOrderLine.value = orderLine
+ }
+
+ @UiThread
+ fun increaseSelectedOrderLine() {
+ val orderLine = mSelectedOrderLine.value ?: throw IllegalStateException()
+ addProduct(orderLine.first)
+ }
+
+ @UiThread
+ fun decreaseSelectedOrderLine() {
+ val orderLine = mSelectedOrderLine.value ?: throw IllegalStateException()
+ removeProduct(orderLine.first)
+ }
+
}