Extracted findUniqueBankForIbanAsync()
This commit is contained in:
parent
5bc19b9e18
commit
1857590834
|
@ -20,6 +20,7 @@ import net.dankito.fints.banks.BankFinder
|
||||||
import net.dankito.fints.model.BankInfo
|
import net.dankito.fints.model.BankInfo
|
||||||
import net.dankito.utils.IThreadPool
|
import net.dankito.utils.IThreadPool
|
||||||
import net.dankito.utils.ThreadPool
|
import net.dankito.utils.ThreadPool
|
||||||
|
import net.dankito.utils.extensions.ofMaxLength
|
||||||
import net.dankito.utils.web.client.OkHttpWebClient
|
import net.dankito.utils.web.client.OkHttpWebClient
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -158,17 +159,39 @@ open class MainWindowPresenter(
|
||||||
|
|
||||||
|
|
||||||
open fun preloadBanksAsync() {
|
open fun preloadBanksAsync() {
|
||||||
searchBanksByBankCodeAsync("1") { }
|
findUniqueBankForBankCodeAsync("1") { }
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun searchBanksByBankCodeAsync(enteredBankCode: String, callback: (List<BankInfo>) -> Unit) {
|
open fun findUniqueBankForIbanAsync(iban: String, callback: (BankInfo?) -> Unit) {
|
||||||
threadPool.runAsync {
|
threadPool.runAsync {
|
||||||
callback(searchBanksByBankCode(enteredBankCode))
|
callback(findUniqueBankForIban(iban))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun searchBanksByBankCode(enteredBankCode: String): List<BankInfo> {
|
open fun findUniqueBankForIban(iban: String): BankInfo? {
|
||||||
return bankFinder.findBankByBankCode(enteredBankCode)
|
// first two characters are country code, 3rd and 4th character are checksum, bank code has 8 digits in Germany and user
|
||||||
|
// should enter at least five characters before we start searching (before there shouldn't be a chance of a unique result)
|
||||||
|
if (iban.length >= 9) {
|
||||||
|
if (iban.startsWith("DE", true)) {
|
||||||
|
return findUniqueBankForBankCode(iban.substring(4).ofMaxLength(8))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun findUniqueBankForBankCodeAsync(bankCode: String, callback: (BankInfo?) -> Unit) {
|
||||||
|
threadPool.runAsync {
|
||||||
|
callback(findUniqueBankForBankCode(bankCode))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun findUniqueBankForBankCode(bankCode: String): BankInfo? {
|
||||||
|
val searchResult = bankFinder.findBankByBankCode(bankCode)
|
||||||
|
|
||||||
|
val groupedByBic = searchResult.groupBy { it.bic }
|
||||||
|
|
||||||
|
return if (groupedByBic.size == 1) searchResult.first() else null
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun searchBanksByNameBankCodeOrCity(query: String?): List<BankInfo> {
|
open fun searchBanksByNameBankCodeOrCity(query: String?): List<BankInfo> {
|
||||||
|
|
|
@ -192,20 +192,20 @@ open class TransferMoneyDialog : DialogFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun tryToGetBicFromIban(enteredText: CharSequence) {
|
protected open fun tryToGetBicFromIban(enteredText: CharSequence) {
|
||||||
if (enteredText.length >= 12) { // first two characters are country code, 3rd and 4th character are checksum
|
presenter.findUniqueBankForIbanAsync(enteredText.toString()) { foundBank ->
|
||||||
if (enteredText.startsWith("DE", true)) {
|
|
||||||
presenter.searchBanksByBankCodeAsync(enteredText.substring(4)) { foundBanks ->
|
|
||||||
if (foundBanks.isNotEmpty()) {
|
|
||||||
context?.asActivity()?.runOnUiThread {
|
context?.asActivity()?.runOnUiThread {
|
||||||
edtxtRemitteeBic.setText(foundBanks.first().bic)
|
showValuesForFoundBankOnUiThread(foundBank)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showValuesForFoundBankOnUiThread(foundBank: BankInfo?) {
|
||||||
|
edtxtRemitteeBank.setText(if (foundBank != null) (foundBank.name + " " + foundBank.city) else "")
|
||||||
|
|
||||||
|
edtxtRemitteeBic.setText(foundBank?.bic ?: "")
|
||||||
|
|
||||||
checkIfRequiredDataEnteredOnUiThread()
|
checkIfRequiredDataEnteredOnUiThread()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun checkIfRequiredDataEnteredOnUiThread() {
|
protected open fun checkIfRequiredDataEnteredOnUiThread() {
|
||||||
val requiredDataEntered =
|
val requiredDataEntered =
|
||||||
|
|
Loading…
Reference in New Issue