Implemented transferring money

This commit is contained in:
dankl 2019-10-27 22:01:43 +01:00 committed by dankito
parent c57f8885e1
commit 89bba4bc11
3 changed files with 67 additions and 7 deletions

View File

@ -80,6 +80,13 @@ open class MainWindowPresenter(callback: FinTsClientCallback) {
} }
open fun transferMoneyAsync(bankTransferData: BankTransferData, callback: (FinTsClientResponse) -> Unit) {
accounts.entries.firstOrNull()?.let { // TODO: of course not correct, but i have to think of a multi account architecture and data model anyway
finTsClient.doBankTransferAsync(bankTransferData, it.value, it.key, callback)
}
}
open fun searchForBankAsync(enteredBankCode: String, callback: (List<BankInfo>) -> Unit) { open fun searchForBankAsync(enteredBankCode: String, callback: (List<BankInfo>) -> Unit) {
threadPool.runAsync { threadPool.runAsync {
callback(searchForBank(enteredBankCode)) callback(searchForBank(enteredBankCode))

View File

@ -2,6 +2,7 @@ package net.dankito.banking.fints4java.android.ui.dialogs
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.DialogFragment import android.support.v4.app.DialogFragment
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher
@ -13,8 +14,8 @@ import kotlinx.android.synthetic.main.dialog_bank_transfer.view.*
import net.dankito.banking.fints4java.android.R import net.dankito.banking.fints4java.android.R
import net.dankito.banking.fints4java.android.ui.MainWindowPresenter import net.dankito.banking.fints4java.android.ui.MainWindowPresenter
import net.dankito.fints.model.BankTransferData import net.dankito.fints.model.BankTransferData
import net.dankito.fints.response.client.FinTsClientResponse
import net.dankito.utils.android.extensions.asActivity import net.dankito.utils.android.extensions.asActivity
import org.slf4j.LoggerFactory
import java.math.BigDecimal import java.math.BigDecimal
@ -66,7 +67,7 @@ open class BankTransferDialog : DialogFragment() {
rootView.btnCancel.setOnClickListener { dismiss() } rootView.btnCancel.setOnClickListener { dismiss() }
rootView.btnDoBankTransfer.setOnClickListener { dismiss() } rootView.btnDoBankTransfer.setOnClickListener { transferMoney() }
} }
protected open fun setPreselectedValues(rootView: View) { protected open fun setPreselectedValues(rootView: View) {
@ -97,6 +98,46 @@ open class BankTransferDialog : DialogFragment() {
} }
} }
protected open fun transferMoney() {
getEnteredAmount()?.let { amount -> // should only come at this stage when a valid amount has been entered
val transferData = BankTransferData(
edtxtRemitteeName.text.toString(),
edtxtRemitteeIban.text.toString(),
edtxtRemitteeBic.text.toString(),
amount,
edtxtUsage.text.toString()
)
presenter.transferMoneyAsync(transferData) {
context?.asActivity()?.runOnUiThread {
handleTransferMoneyResultOnUiThread(it, transferData)
}
}
}
}
protected open fun handleTransferMoneyResultOnUiThread(response: FinTsClientResponse, transferData: BankTransferData) {
context?.let { context ->
val message = if (response.isSuccessful) {
context.getString(R.string.dialog_bank_transfer_message_transfer_successful,
String.format("%.02f", transferData.amount), "", transferData.creditorName) // TODO: where to get currency from?
}
else {
context.getString(R.string.dialog_bank_transfer_message_transfer_failed,
String.format("%.02f", transferData.amount), "", transferData.creditorName, // TODO: where to get currency from?
response.exception ?: response.errorsToShowToUser.joinToString("\n")
)
}
AlertDialog.Builder(context)
.setMessage(message)
.setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() }
.show()
this.dismiss()
}
}
protected val otherEditTextChangedWatcher = object : TextWatcher { protected val otherEditTextChangedWatcher = object : TextWatcher {
@ -145,19 +186,29 @@ open class BankTransferDialog : DialogFragment() {
edtxtRemitteeName.text.toString().isNotEmpty() edtxtRemitteeName.text.toString().isNotEmpty()
&& edtxtRemitteeIban.text.toString().isNotEmpty() // TODO: check if it is of length > 12, in Germany > 22? && edtxtRemitteeIban.text.toString().isNotEmpty() // TODO: check if it is of length > 12, in Germany > 22?
&& edtxtRemitteeBic?.text.toString().isNotEmpty() // TODO: check if it is of length is 8 or 11? && edtxtRemitteeBic?.text.toString().isNotEmpty() // TODO: check if it is of length is 8 or 11?
&& isAmountGreaterZero(edtxtAmount.text.toString()) && isAmountGreaterZero()
btnDoBankTransfer.isEnabled = requiredDataEntered btnDoBankTransfer.isEnabled = requiredDataEntered
} }
protected open fun isAmountGreaterZero(amountString: String): Boolean { protected open fun isAmountGreaterZero(): Boolean {
try { try {
val amount = amountString.toBigDecimal() getEnteredAmount()?.let { amount ->
return amount > BigDecimal.ZERO
return amount > BigDecimal.ZERO }
} catch (ignored: Exception) { } } catch (ignored: Exception) { }
return false return false
} }
protected open fun getEnteredAmount(): BigDecimal? {
try {
val amountString = edtxtAmount.text.toString()
return amountString.toBigDecimal()
} catch (ignored: Exception) { }
return null
}
} }

View File

@ -31,6 +31,8 @@
<string name="dialog_bank_transfer_amount">Amount:</string> <string name="dialog_bank_transfer_amount">Amount:</string>
<string name="dialog_bank_transfer_usage">Usage:</string> <string name="dialog_bank_transfer_usage">Usage:</string>
<string name="dialog_bank_transfer_transfer">Transfer</string> <string name="dialog_bank_transfer_transfer">Transfer</string>
<string name="dialog_bank_transfer_message_transfer_successful">Successfully transferred %1$s %2$s to %3$s.</string>
<string name="dialog_bank_transfer_message_transfer_failed">Could not transfer %1$s %2$s to %3$s:\n%4$s.</string>
<string name="view_flicker_code_size">Size:</string> <string name="view_flicker_code_size">Size:</string>
<string name="view_flicker_code_increase_size">+</string> <string name="view_flicker_code_increase_size">+</string>