Implemented selecting account for which EPC QR code should get generated

This commit is contained in:
dankito 2024-10-03 21:32:37 +02:00
parent 3d474f38ae
commit 1520d19625
1 changed files with 49 additions and 1 deletions

View File

@ -9,13 +9,18 @@ import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import net.codinux.banking.persistence.entities.BankAccountEntity
import net.codinux.banking.ui.composables.BankIcon
import net.codinux.banking.ui.composables.tan.ImageSizeControls
import net.codinux.banking.ui.config.Colors
import net.codinux.banking.ui.config.DI
import net.codinux.banking.ui.extensions.ImeNext
import net.codinux.banking.ui.forms.OutlinedTextField
import net.codinux.banking.ui.forms.Select
import net.codinux.banking.ui.service.createImageBitmap
private val epcQrCodeService = DI.epcQrCodeService
@ -23,6 +28,22 @@ private val epcQrCodeService = DI.epcQrCodeService
@Composable
fun CreateEpcQrCodeScreen(onClosed: () -> Unit) {
val banks = DI.uiState.banks.collectAsState().value
val accountsWithIban: List<BankAccountEntity?> = buildList {
add(null)
addAll(DI.uiState.accounts.collectAsState().value.filter { it.iban != null })
}
var selectedAccount by remember { mutableStateOf<BankAccountEntity?>(null) }
val bankOfSelectedAccount by remember(selectedAccount) {
derivedStateOf { banks.firstOrNull { it.id == selectedAccount?.bankId } }
}
val amountFocus = remember { FocusRequester() }
var receiverName by remember { mutableStateOf("") }
var iban by remember { mutableStateOf("") }
@ -65,6 +86,33 @@ fun CreateEpcQrCodeScreen(onClosed: () -> Unit) {
}
Select(
"Für Konto",
accountsWithIban,
selectedAccount,
{ account ->
selectedAccount = account
if (account != null) {
iban = account.iban ?: ""
bic = banks.firstOrNull { it.id == selectedAccount?.bankId }?.bic ?: ""
receiverName = account.accountHolderName
amountFocus.requestFocus()
}
},
{ account -> account?.displayName ?: "" },
leadingIcon = bankOfSelectedAccount?.let { { BankIcon(bankOfSelectedAccount) } },
dropDownItemContent = { account ->
Row(verticalAlignment = Alignment.CenterVertically) {
BankIcon(banks.firstOrNull { it.id == account?.bankId }, Modifier.padding(end = 6.dp))
Text(account?.displayName ?: "")
}
},
modifier = Modifier.fillMaxWidth().padding(top = 16.dp, bottom = 8.dp)
)
OutlinedTextField(
label = { Text("Empfänger*in") },
value = receiverName,
@ -93,7 +141,7 @@ fun CreateEpcQrCodeScreen(onClosed: () -> Unit) {
label = { Text("Betrag (optional)") },
value = amount,
onValueChange = { amount = it },
modifier = Modifier.fillMaxWidth().padding(vertical = 8.dp),
modifier = Modifier.fillMaxWidth().padding(vertical = 8.dp).focusRequester(amountFocus),
keyboardOptions = KeyboardOptions.ImeNext
)