gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-merchant-terminal-android] 14/19: Use product categories for orde


From: gnunet
Subject: [taler-merchant-terminal-android] 14/19: Use product categories for order summary
Date: Fri, 21 Feb 2020 19:00:07 +0100

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository merchant-terminal-android.

commit 2cbfec1bdcc5ada8fb20094eb3a9d071316a13e2
Author: Torsten Grote <address@hidden>
AuthorDate: Wed Feb 12 10:33:17 2020 -0300

    Use product categories for order summary
---
 app/build.gradle                                   |  4 +--
 .../net/taler/merchantpos/order/Definitions.kt     | 33 +++++++++++++++++++++-
 .../net/taler/merchantpos/order/OrderManager.kt    | 25 ++++------------
 .../taler/merchantpos/order/OrderStateFragment.kt  |  2 +-
 .../taler/merchantpos/payment/PaymentManager.kt    | 10 ++-----
 .../merchantpos/payment/ProcessPaymentFragment.kt  |  3 +-
 6 files changed, 45 insertions(+), 32 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 3a6c23b..4eea459 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -37,13 +37,13 @@ dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
     implementation 'androidx.appcompat:appcompat:1.1.0'
-    implementation 'androidx.core:core-ktx:1.1.0'
+    implementation 'androidx.core:core-ktx:1.2.0'
     implementation 'com.google.android.material:material:1.1.0-rc02'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     implementation "androidx.recyclerview:recyclerview:1.1.0"
 
     // Navigation
-    def nav_version = "2.2.0"
+    def nav_version = "2.2.1"
     implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
     implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
 
diff --git a/app/src/main/java/net/taler/merchantpos/order/Definitions.kt 
b/app/src/main/java/net/taler/merchantpos/order/Definitions.kt
index 569993c..ee17655 100644
--- a/app/src/main/java/net/taler/merchantpos/order/Definitions.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/Definitions.kt
@@ -24,6 +24,37 @@ data class Product(
     val priceAsDouble by lazy { Amount.fromString(price).amount.toDouble() }
 }
 
-typealias Order = HashMap<Product, Int>
+data class Order(val availableCategories: Map<Int, Category>) {
+    val products = HashMap<Product, Int>()
+    val summary: String
+        get() {
+            val categories = HashMap<Category, Int>()
+            products.forEach { (product, quantity) ->
+                val categoryId = product.categories[0]
+                val category = availableCategories.getValue(categoryId)
+                val oldQuantity = categories[category] ?: 0
+                categories[category] = oldQuantity + quantity
+            }
+            return categories.map { (category, quantity) ->
+                "$quantity x ${category.name}"
+            }.joinToString()
+        }
+    val total: Double
+        get() {
+            var total = 0.0
+            products.forEach { (product, quantity) ->
+                val price = product.priceAsDouble
+                total += price * quantity
+            }
+            return total
+        }
+    val totalAsString: String
+        get() = String.format("%.2f", total)
+
+    operator fun plus(product: Product): Order {
+        products[product] = (products[product] ?: 0) + 1
+        return this
+    }
+}
 
 typealias OrderLine = Pair<Product, Int>
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 42a2060..55a3be6 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
@@ -25,8 +25,10 @@ class OrderManager(private val mapper: ObjectMapper) : 
ConfigurationReceiver {
     private val productsByCategory = HashMap<Category, ArrayList<Product>>()
 
     private val mOrder = MutableLiveData<Order>()
+    private val newOrder  // an empty order containing only available 
categories
+        get() = Order(productsByCategory.keys.map { it.id to it }.toMap())
     internal val order: LiveData<Order> = mOrder
-    internal val orderTotal: LiveData<Double> = map(mOrder) { it.getTotal() }
+    internal val orderTotal: LiveData<Double> = map(mOrder) { it.total }
 
     private val mProducts = MutableLiveData<List<Product>>()
     internal val products: LiveData<List<Product>> = mProducts
@@ -97,10 +99,8 @@ class OrderManager(private val mapper: ObjectMapper) : 
ConfigurationReceiver {
 
     @UiThread
     internal fun addProduct(product: Product) {
-        val map = mOrder.value ?: HashMap()
-        val quantity = map[product] ?: 0
-        map[product] = quantity + 1
-        mOrder.value = map
+        val order = mOrder.value ?: newOrder
+        mOrder.value = order + product
         mRestartState.value = ENABLED
     }
 
@@ -112,22 +112,9 @@ class OrderManager(private val mapper: ObjectMapper) : 
ConfigurationReceiver {
             undoOrder = null
         } else {
             undoOrder = mOrder.value
-            mOrder.value = HashMap()
+            mOrder.value = newOrder
             mRestartState.value = UNDO
         }
     }
 
 }
-
-fun Order.getTotal(): Double {
-    var total = 0.0
-    forEach {
-        val price = it.key.priceAsDouble
-        total += price * it.value
-    }
-    return total
-}
-
-fun Order.getTotalAsString(): String {
-    return String.format("%.2f", getTotal())
-}
diff --git 
a/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt 
b/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
index b473b5d..9948599 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderStateFragment.kt
@@ -36,7 +36,7 @@ class OrderStateFragment : Fragment() {
         }
 
         orderManager.order.observe(viewLifecycleOwner, Observer { order ->
-            adapter.setItems(order)
+            adapter.setItems(order.products)
         })
         orderManager.orderTotal.observe(viewLifecycleOwner, Observer { 
orderTotal ->
             if (orderTotal == 0.0) {
diff --git a/app/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt 
b/app/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
index 99780b0..258149e 100644
--- a/app/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
@@ -16,7 +16,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode
 import net.taler.merchantpos.config.ConfigManager
 import net.taler.merchantpos.config.MerchantRequest
 import net.taler.merchantpos.order.Order
-import net.taler.merchantpos.order.getTotalAsString
 import org.json.JSONArray
 import org.json.JSONObject
 import java.net.URLEncoder
@@ -53,11 +52,8 @@ class PaymentManager(
         val merchantConfig = configManager.merchantConfig!!
 
         val currency = merchantConfig.currency!!
-        val orderTotal = order.getTotalAsString()
-        val amount = "$currency:$orderTotal"
-        val summary = order.map {
-            "${it.value} x ${it.key.description}"
-        }.joinToString()
+        val amount = "$currency:${order.totalAsString}"
+        val summary = order.summary
 
         mPayment.value = Payment(order, summary, currency)
 
@@ -84,7 +80,7 @@ class PaymentManager(
 
     private fun Order.getProductsJson(): JSONArray {
         val json = JSONArray()
-        forEach { product, quantity ->
+        products.forEach { (product, quantity) ->
             val node = mapper.valueToTree<ObjectNode>(product).apply {
                 remove("categories")
                 put("quantity", quantity)
diff --git 
a/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt 
b/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
index 138bff3..a7195ec 100644
--- a/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
@@ -14,7 +14,6 @@ import 
kotlinx.android.synthetic.main.fragment_process_payment.*
 import net.taler.merchantpos.MainViewModel
 import net.taler.merchantpos.QrCodeManager.makeQrCode
 import net.taler.merchantpos.R
-import net.taler.merchantpos.order.getTotalAsString
 
 class ProcessPaymentFragment : Fragment() {
 
@@ -47,7 +46,7 @@ class ProcessPaymentFragment : Fragment() {
             model.orderManager.restartOrUndo()
             return
         }
-        text_view_amount.text = "${payment.order.getTotalAsString()} 
${payment.currency}"
+        text_view_amount.text = "${payment.order.totalAsString} 
${payment.currency}"
         text_view_order_reference.text = "Order Reference: ${payment.orderId}"
         payment.talerPayUri?.let {
             val qrcodeBitmap = makeQrCode(it)

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]