Implemented merging banks with same bank code and pin tan address in BankList.json
This commit is contained in:
parent
6b0504feb3
commit
18035203b7
|
@ -8,7 +8,8 @@ open class BankInfo(
|
||||||
open val postalCode: String,
|
open val postalCode: String,
|
||||||
open val city: String,
|
open val city: String,
|
||||||
open val pinTanAddress: String?,
|
open val pinTanAddress: String?,
|
||||||
open val pinTanVersion: String?
|
open val pinTanVersion: String?,
|
||||||
|
open var branchesInOtherCities: List<String> = listOf() // to have only one entry per bank its branches's cities are now stored in branchesInOtherCities so that branches' cities are still searchable
|
||||||
) {
|
) {
|
||||||
|
|
||||||
protected constructor() : this("", "", "", "", "", null, "") // for object deserializers
|
protected constructor() : this("", "", "", "", "", null, "") // for object deserializers
|
||||||
|
|
|
@ -40,6 +40,7 @@ open class InMemoryBankFinder() : BankFinderBase(), IBankFinder {
|
||||||
protected open fun checkIfQueryMatchesBankNameOrCity(bankInfo: BankInfo, queryLowerCase: String): Boolean {
|
protected open fun checkIfQueryMatchesBankNameOrCity(bankInfo: BankInfo, queryLowerCase: String): Boolean {
|
||||||
return bankInfo.name.toLowerCase().contains(queryLowerCase)
|
return bankInfo.name.toLowerCase().contains(queryLowerCase)
|
||||||
|| bankInfo.city.toLowerCase().startsWith(queryLowerCase)
|
|| bankInfo.city.toLowerCase().startsWith(queryLowerCase)
|
||||||
|
|| bankInfo.branchesInOtherCities.any { it.toLowerCase().startsWith(queryLowerCase) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,8 @@ actual class BankListDeserializer {
|
||||||
bankInfoDict.getStringOrEmpty("postalCode"),
|
bankInfoDict.getStringOrEmpty("postalCode"),
|
||||||
bankInfoDict.getStringOrEmpty("city"),
|
bankInfoDict.getStringOrEmpty("city"),
|
||||||
bankInfoDict.getString("pinTanAddress"),
|
bankInfoDict.getString("pinTanAddress"),
|
||||||
bankInfoDict.getString("pinTanVersion")
|
bankInfoDict.getString("pinTanVersion"),
|
||||||
|
bankInfoDict.mutableArrayValueForKey("branchesInOtherCities").mapNotNull { it as? String }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,10 @@ open class BankListPrettifier {
|
||||||
prettifiedList = removeBanksWithSameBankCodeAndCity(prettifiedList)
|
prettifiedList = removeBanksWithSameBankCodeAndCity(prettifiedList)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.contains(BankListPrettifierOption.MergeAllBranchesOfBankIntoOne)) {
|
||||||
|
prettifiedList = mergeAllBranchesOfBankIntoOne(prettifiedList)
|
||||||
|
}
|
||||||
|
|
||||||
if (options.contains(BankListPrettifierOption.MapBankNamesToWellKnownNames)) {
|
if (options.contains(BankListPrettifierOption.MapBankNamesToWellKnownNames)) {
|
||||||
prettifiedList = mapBankNamesToWellKnownNames(prettifiedList)
|
prettifiedList = mapBankNamesToWellKnownNames(prettifiedList)
|
||||||
}
|
}
|
||||||
|
@ -105,4 +109,40 @@ open class BankListPrettifier {
|
||||||
return prettifiedList
|
return prettifiedList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun mergeAllBranchesOfBankIntoOne(banks: List<BankInfo>): List<BankInfo> {
|
||||||
|
val groupedByBankCodeAndPinTanAddress = banks.groupBy { it.bankCode + "_" + it.pinTanAddress }
|
||||||
|
|
||||||
|
val banksToRemove = groupedByBankCodeAndPinTanAddress.values.flatMap { banksWithSameBankCodeAndPinTanAddress ->
|
||||||
|
if (banksWithSameBankCodeAndPinTanAddress.size > 1) {
|
||||||
|
val banksToRemove = banksWithSameBankCodeAndPinTanAddress.toMutableList()
|
||||||
|
val mainBranch = findMainBranch(banksWithSameBankCodeAndPinTanAddress)
|
||||||
|
|
||||||
|
banksToRemove.remove(banksWithSameBankCodeAndPinTanAddress.first())
|
||||||
|
|
||||||
|
mainBranch.branchesInOtherCities = banksToRemove.map { it.city }.toSet().toList()
|
||||||
|
|
||||||
|
return@flatMap banksToRemove
|
||||||
|
}
|
||||||
|
|
||||||
|
listOf<BankInfo>()
|
||||||
|
}
|
||||||
|
|
||||||
|
val prettifiedList = banks.toMutableList()
|
||||||
|
prettifiedList.removeAll(banksToRemove)
|
||||||
|
|
||||||
|
return prettifiedList
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun findMainBranch(banksWithSameBankCodeAndPinTanAddress: List<BankInfo>): BankInfo {
|
||||||
|
// banksWithSameBankCodeAndPinTanAddress.forEach { bank ->
|
||||||
|
// if (bank.name.contains(bank.city)) {
|
||||||
|
// println("${bank.name}: Picked ${bank.city} from ${banksWithSameBankCodeAndPinTanAddress.map { it.city }}")
|
||||||
|
// return bank
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// in most cases this turned out to be the best one
|
||||||
|
return banksWithSameBankCodeAndPinTanAddress.first()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -18,6 +18,11 @@ enum class BankListPrettifierOption {
|
||||||
*/
|
*/
|
||||||
RemoveBanksWithSameBankCodeAndCity,
|
RemoveBanksWithSameBankCodeAndCity,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default each branch has its own BankInfo. With this option only main branch keeps its BankInfo and all branches get added to branchesInOtherCities.
|
||||||
|
*/
|
||||||
|
MergeAllBranchesOfBankIntoOne,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes banks like 'Deutsche Bank (Gf intern)' or 'UniCredit Bank - HVB Settlement EAC01' etc.
|
* Removes banks like 'Deutsche Bank (Gf intern)' or 'UniCredit Bank - HVB Settlement EAC01' etc.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -180,7 +180,7 @@ open class LuceneBankFinder(indexFolder: File) : BankFinderBase(), IBankFinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun createDocumentForBank(bank: BankInfo, writer: DocumentsWriter): Document {
|
protected open fun createDocumentForBank(bank: BankInfo, writer: DocumentsWriter): Document {
|
||||||
return writer.createDocumentForNonNullFields(
|
val indexableFields = mutableListOf(
|
||||||
fields.fullTextSearchField(BankInfoNameFieldName, bank.name, true),
|
fields.fullTextSearchField(BankInfoNameFieldName, bank.name, true),
|
||||||
fields.keywordField(BankInfoBankCodeFieldName, bank.bankCode, true),
|
fields.keywordField(BankInfoBankCodeFieldName, bank.bankCode, true),
|
||||||
fields.keywordField(BankInfoBicFieldName, bank.bic, true),
|
fields.keywordField(BankInfoBicFieldName, bank.bic, true),
|
||||||
|
@ -191,6 +191,12 @@ open class LuceneBankFinder(indexFolder: File) : BankFinderBase(), IBankFinder {
|
||||||
fields.nullableStoredField(BankInfoPinTanServerAddressFieldName, bank.pinTanAddress),
|
fields.nullableStoredField(BankInfoPinTanServerAddressFieldName, bank.pinTanAddress),
|
||||||
fields.nullableStoredField(BankInfoPinTanVersionFieldName, bank.pinTanVersion)
|
fields.nullableStoredField(BankInfoPinTanVersionFieldName, bank.pinTanVersion)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
bank.branchesInOtherCities.forEach { branchCity ->
|
||||||
|
indexableFields.add(fields.storedField(BankInfoCityStoredFieldName, branchCity))
|
||||||
|
}
|
||||||
|
|
||||||
|
return writer.createDocumentForNonNullFields(indexableFields)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -71,11 +71,19 @@ android {
|
||||||
pickFirst 'META-INF/ktor-http-cio.kotlin_module'
|
pickFirst 'META-INF/ktor-http-cio.kotlin_module'
|
||||||
pickFirst 'META-INF/atomicfu.kotlin_module'
|
pickFirst 'META-INF/atomicfu.kotlin_module'
|
||||||
|
|
||||||
|
pickFirst 'META-INF/common.kotlin_module'
|
||||||
|
pickFirst 'META-INF/fints4k.kotlin_module'
|
||||||
|
pickFirst 'META-INF/BankFinder.kotlin_module'
|
||||||
|
pickFirst 'META-INF/BankFinder.kotlin_module'
|
||||||
|
|
||||||
pickFirst 'META-INF/DEPENDENCIES'
|
pickFirst 'META-INF/DEPENDENCIES'
|
||||||
pickFirst 'META-INF/NOTICE'
|
pickFirst 'META-INF/NOTICE'
|
||||||
pickFirst 'META-INF/LICENSE'
|
pickFirst 'META-INF/LICENSE'
|
||||||
pickFirst 'META-INF/LICENSE.txt'
|
pickFirst 'META-INF/LICENSE.txt'
|
||||||
pickFirst 'META-INF/NOTICE.txt'
|
pickFirst 'META-INF/NOTICE.txt'
|
||||||
|
|
||||||
|
pickFirst 'BankList.json'
|
||||||
|
exclude 'DetailedBankList.json'
|
||||||
}
|
}
|
||||||
|
|
||||||
lintOptions {
|
lintOptions {
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct BankInfoListItem: View {
|
||||||
struct BankInfoListItem_Previews: PreviewProvider {
|
struct BankInfoListItem_Previews: PreviewProvider {
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
BankInfoListItem(BankInfo(name: "Abzockbank Berlin", bankCode: "12345678", bic: "ABZODEBBXXX", postalCode: "12345", city: "Berlin", pinTanAddress: nil, pinTanVersion: "FinTS 3.0"))
|
BankInfoListItem(BankInfo(name: "Abzockbank Berlin", bankCode: "12345678", bic: "ABZODEBBXXX", postalCode: "12345", city: "Berlin", pinTanAddress: nil, pinTanVersion: "FinTS 3.0", branchesInOtherCities: []))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue