From 5b1163311192e9adf15ef3d626c72812e638f90c Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 3 Aug 2020 13:31:26 -0300 Subject: [pos] improve payment processing - cancel orders that have been abandoned and will not be paid - show unpaid orders in history (in case one makes it through) - set deadlines when creating orders in case it helps with enabling refunds --- .../merchantpos/history/HistoryItemAdapter.kt | 88 ++++++++++++++++++++++ .../taler/merchantpos/history/HistoryManager.kt | 6 +- .../merchantpos/history/MerchantHistoryFragment.kt | 60 +-------------- 3 files changed, 92 insertions(+), 62 deletions(-) create mode 100644 merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryItemAdapter.kt (limited to 'merchant-terminal/src/main/java/net/taler/merchantpos/history') diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryItemAdapter.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryItemAdapter.kt new file mode 100644 index 0000000..25e94fb --- /dev/null +++ b/merchant-terminal/src/main/java/net/taler/merchantpos/history/HistoryItemAdapter.kt @@ -0,0 +1,88 @@ +/* + * This file is part of GNU Taler + * (C) 2020 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see + */ + +package net.taler.merchantpos.history + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageButton +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.Adapter +import net.taler.common.toRelativeTime +import net.taler.merchantlib.OrderHistoryEntry +import net.taler.merchantpos.R +import net.taler.merchantpos.history.HistoryItemAdapter.HistoryItemViewHolder +import java.util.ArrayList + + +internal class HistoryItemAdapter(private val listener: RefundClickListener) : + Adapter() { + + private val items = ArrayList() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryItemViewHolder { + val v = + LayoutInflater.from(parent.context).inflate(R.layout.list_item_history, parent, false) + return HistoryItemViewHolder(v) + } + + override fun getItemCount() = items.size + + override fun onBindViewHolder(holder: HistoryItemViewHolder, position: Int) { + holder.bind(items[position]) + } + + fun setData(items: List) { + this.items.clear() + this.items.addAll(items) + this.notifyDataSetChanged() + } + + internal inner class HistoryItemViewHolder(private val v: View) : RecyclerView.ViewHolder(v) { + + private val orderSummaryView: TextView = v.findViewById(R.id.orderSummaryView) + private val orderAmountView: TextView = v.findViewById(R.id.orderAmountView) + private val orderTimeView: TextView = v.findViewById(R.id.orderTimeView) + private val orderIdView: TextView = v.findViewById(R.id.orderIdView) + private val refundButton: ImageButton = v.findViewById(R.id.refundButton) + + private val orderIdColor = orderIdView.currentTextColor + + fun bind(item: OrderHistoryEntry) { + orderSummaryView.text = item.summary + val amount = item.amount + orderAmountView.text = amount.toString() + orderTimeView.text = item.timestamp.ms.toRelativeTime(v.context) + if (item.paid) { + orderIdView.text = v.context.getString(R.string.history_ref_no, item.orderId) + orderIdView.setTextColor(orderIdColor) + } else { + orderIdView.text = v.context.getString(R.string.history_unpaid) + orderIdView.setTextColor(v.context.getColor(R.color.red)) + } + if (item.refundable) { + refundButton.visibility = View.VISIBLE + refundButton.setOnClickListener { listener.onRefundClicked(item) } + } else { + refundButton.visibility = View.GONE + } + } + + } + +} 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 cb77096..aabe4cc 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 @@ -55,9 +55,9 @@ class HistoryManager( } } - private fun onHistoryError(msg: String) = scope.launch(Dispatchers.Main) { - mIsLoading.value = false - mItems.value = HistoryResult.Error(msg) + private fun onHistoryError(msg: String) { + mIsLoading.postValue(false) + mItems.postValue(HistoryResult.Error(msg)) } } diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/history/MerchantHistoryFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/history/MerchantHistoryFragment.kt index 25805dc..596b8b0 100644 --- a/merchant-terminal/src/main/java/net/taler/merchantpos/history/MerchantHistoryFragment.kt +++ b/merchant-terminal/src/main/java/net/taler/merchantpos/history/MerchantHistoryFragment.kt @@ -20,34 +20,25 @@ import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View -import android.view.View.GONE -import android.view.View.VISIBLE import android.view.ViewGroup -import android.widget.ImageButton -import android.widget.TextView import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.Observer import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration.VERTICAL import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView.Adapter -import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_merchant_history.* import net.taler.common.exhaustive import net.taler.common.navigate -import net.taler.common.toRelativeTime import net.taler.merchantlib.OrderHistoryEntry import net.taler.merchantpos.MainViewModel import net.taler.merchantpos.R -import net.taler.merchantpos.history.HistoryItemAdapter.HistoryItemViewHolder import net.taler.merchantpos.history.MerchantHistoryFragmentDirections.Companion.actionGlobalMerchantSettings import net.taler.merchantpos.history.MerchantHistoryFragmentDirections.Companion.actionNavHistoryToRefundFragment -import java.util.ArrayList -private interface RefundClickListener { +internal interface RefundClickListener { fun onRefundClicked(item: OrderHistoryEntry) } @@ -115,52 +106,3 @@ class MerchantHistoryFragment : Fragment(), RefundClickListener { } } - -private class HistoryItemAdapter(private val listener: RefundClickListener) : - Adapter() { - - private val items = ArrayList() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryItemViewHolder { - val v = - LayoutInflater.from(parent.context).inflate(R.layout.list_item_history, parent, false) - return HistoryItemViewHolder(v) - } - - override fun getItemCount() = items.size - - override fun onBindViewHolder(holder: HistoryItemViewHolder, position: Int) { - holder.bind(items[position]) - } - - fun setData(items: List) { - this.items.clear() - this.items.addAll(items) - this.notifyDataSetChanged() - } - - private inner class HistoryItemViewHolder(private val v: View) : ViewHolder(v) { - - private val orderSummaryView: TextView = v.findViewById(R.id.orderSummaryView) - private val orderAmountView: TextView = v.findViewById(R.id.orderAmountView) - private val orderTimeView: TextView = v.findViewById(R.id.orderTimeView) - private val orderIdView: TextView = v.findViewById(R.id.orderIdView) - private val refundButton: ImageButton = v.findViewById(R.id.refundButton) - - fun bind(item: OrderHistoryEntry) { - orderSummaryView.text = item.summary - val amount = item.amount - orderAmountView.text = amount.toString() - orderIdView.text = v.context.getString(R.string.history_ref_no, item.orderId) - orderTimeView.text = item.timestamp.ms.toRelativeTime(v.context) - if (item.refundable) { - refundButton.visibility = VISIBLE - refundButton.setOnClickListener { listener.onRefundClicked(item) } - } else { - refundButton.visibility = GONE - } - } - - } - -} -- cgit v1.2.3