summaryrefslogtreecommitdiff
path: root/merchant-terminal/src/main/java/net/taler/merchantpos/history
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-04-01 15:02:15 -0300
committerTorsten Grote <t@grobox.de>2020-04-01 15:02:15 -0300
commitaa6dad91b20edd0a304423d1edc267cf4e8b5dbe (patch)
tree08376a2d952236ed16eaf49a36e057aec6dd5908 /merchant-terminal/src/main/java/net/taler/merchantpos/history
parenta66b2179638ba8c458aaba86d0707c7046ad881b (diff)
downloadtaler-android-aa6dad91b20edd0a304423d1edc267cf4e8b5dbe.tar.gz
taler-android-aa6dad91b20edd0a304423d1edc267cf4e8b5dbe.tar.bz2
taler-android-aa6dad91b20edd0a304423d1edc267cf4e8b5dbe.zip
[pos] Enable refunds
Diffstat (limited to 'merchant-terminal/src/main/java/net/taler/merchantpos/history')
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryManager.kt10
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundFragment.kt4
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundManager.kt24
-rw-r--r--merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundUriFragment.kt6
4 files changed, 32 insertions, 12 deletions
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryManager.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryManager.kt
index 3aaf3a4..6b95e16 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryManager.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryManager.kt
@@ -21,7 +21,6 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.android.volley.Request.Method.GET
import com.android.volley.RequestQueue
-import com.android.volley.Response.ErrorListener
import com.android.volley.Response.Listener
import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.annotation.JsonProperty
@@ -29,6 +28,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import net.taler.common.Amount
import net.taler.common.Timestamp
+import net.taler.merchantpos.LogErrorListener
import net.taler.merchantpos.config.ConfigManager
import net.taler.merchantpos.config.MerchantRequest
import org.json.JSONObject
@@ -36,15 +36,11 @@ import org.json.JSONObject
data class HistoryItem(
@JsonProperty("order_id")
val orderId: String,
- @JsonProperty("amount")
- val amountStr: String,
+ val amount: Amount,
val summary: String,
val timestamp: Timestamp
) {
@get:JsonIgnore
- val amount: Amount by lazy { Amount.fromJSONString(amountStr) }
-
- @get:JsonIgnore
val time = timestamp.ms
}
@@ -72,7 +68,7 @@ class HistoryManager(
val params = mapOf("instance" to merchantConfig.instance)
val req = MerchantRequest(GET, merchantConfig, "history", params, null,
Listener { onHistoryResponse(it) },
- ErrorListener { onHistoryError() })
+ LogErrorListener { onHistoryError() })
queue.add(req)
}
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundFragment.kt
index 7652ca4..2b85add 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundFragment.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundFragment.kt
@@ -36,6 +36,7 @@ import net.taler.common.navigate
import net.taler.merchantpos.MainViewModel
import net.taler.merchantpos.R
import net.taler.merchantpos.history.RefundFragmentDirections.Companion.actionRefundFragmentToRefundUriFragment
+import net.taler.merchantpos.history.RefundResult.AlreadyRefunded
import net.taler.merchantpos.history.RefundResult.Error
import net.taler.merchantpos.history.RefundResult.PastDeadline
import net.taler.merchantpos.history.RefundResult.Success
@@ -72,7 +73,7 @@ class RefundFragment : Fragment() {
return
}
if (inputAmount > item.amount) {
- amountView.error = getString(R.string.refund_error_max_amount, item.amountStr)
+ amountView.error = getString(R.string.refund_error_max_amount, item.amount.amountStr)
return
}
if (inputAmount.isZero()) {
@@ -88,6 +89,7 @@ class RefundFragment : Fragment() {
private fun onRefundResultChanged(result: RefundResult?): Any = when (result) {
Error -> onError(R.string.refund_error_backend)
PastDeadline -> onError(R.string.refund_error_deadline)
+ AlreadyRefunded -> onError(R.string.refund_error_already_refunded)
is Success -> {
progressBar.fadeOut()
refundButton.fadeIn()
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundManager.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundManager.kt
index 910116e..da642d6 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundManager.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundManager.kt
@@ -22,9 +22,10 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.android.volley.Request.Method.POST
import com.android.volley.RequestQueue
-import com.android.volley.Response.ErrorListener
import com.android.volley.Response.Listener
+import com.android.volley.VolleyError
import net.taler.common.Amount
+import net.taler.merchantpos.LogErrorListener
import net.taler.merchantpos.config.ConfigManager
import net.taler.merchantpos.config.MerchantRequest
import org.json.JSONObject
@@ -32,6 +33,7 @@ import org.json.JSONObject
sealed class RefundResult {
object Error : RefundResult()
object PastDeadline : RefundResult()
+ object AlreadyRefunded : RefundResult()
class Success(
val refundUri: String,
val item: HistoryItem,
@@ -62,6 +64,12 @@ class RefundManager(
}
@UiThread
+ internal fun abortRefund() {
+ toBeRefunded = null
+ mRefundResult.value = null
+ }
+
+ @UiThread
internal fun refund(item: HistoryItem, amount: Amount, reason: String) {
val merchantConfig = configManager.merchantConfig!!
val refundRequest = mapOf(
@@ -73,7 +81,7 @@ class RefundManager(
Log.d(TAG, body.toString(4))
val req = MerchantRequest(POST, merchantConfig, "refund", null, body,
Listener { onRefundResponse(it, item, amount, reason) },
- ErrorListener { onRefundError() }
+ LogErrorListener { onRefundError(it) }
)
queue.add(req)
}
@@ -86,7 +94,7 @@ class RefundManager(
reason: String
) {
if (!json.has("contract_terms")) {
- Log.e("TEST", "json: $json")
+ Log.e(TAG, "Contract terms missing: $json")
onRefundError()
return
}
@@ -110,7 +118,15 @@ class RefundManager(
}
@UiThread
- private fun onRefundError() {
+ private fun onRefundError(error: VolleyError? = null) {
+ val data = error?.networkResponse?.data
+ if (data != null) {
+ val json = JSONObject(String(data))
+ if (json.has("code") && json.getInt("code") == 2602) {
+ mRefundResult.value = RefundResult.AlreadyRefunded
+ return
+ }
+ }
mRefundResult.value = RefundResult.Error
}
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundUriFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundUriFragment.kt
index 1bc4002..1ea0959 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundUriFragment.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/history/RefundUriFragment.kt
@@ -58,6 +58,12 @@ class RefundUriFragment : Fragment() {
getString(R.string.refund_order_ref, result.item.orderId, result.reason)
cancelRefundButton.setOnClickListener { findNavController().navigateUp() }
+ completeButton.setOnClickListener { findNavController().navigateUp() }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ refundManager.abortRefund()
}
}