Displaying income and expenses of each month

This commit is contained in:
dankito 2024-08-25 03:22:08 +02:00
parent fedbb3a544
commit a7731091be
3 changed files with 28 additions and 1 deletions

View File

@ -13,6 +13,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
@ -20,10 +21,14 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import kotlinx.datetime.LocalDate
import net.codinux.banking.client.model.AccountTransaction
import net.codinux.banking.client.model.Amount
import net.codinux.banking.ui.extensions.toBigDecimal
import net.codinux.banking.ui.service.Colors
import net.codinux.banking.ui.service.DI
import org.jetbrains.compose.ui.tooling.preview.Preview
private val formatUtil = DI.formatUtil
@Composable
fun TransactionsList(transactions: List<AccountTransaction>) {
val groupedByMonth by remember(transactions) {
@ -60,6 +65,22 @@ fun TransactionsList(transactions: List<AccountTransaction>) {
}
}
}
Column(Modifier.fillMaxWidth().padding(top = 10.dp), horizontalAlignment = Alignment.End) {
Text(
// TODO: find a better solution
text = formatUtil.formatAmount(Amount(monthTransactions.map { it.amount.toBigDecimal() }.filter { it > 0 }.sum().toString()), "EUR"),
color = formatUtil.getColorForAmount(Amount.Zero)
)
}
Column(Modifier.fillMaxWidth().padding(top = 2.dp), horizontalAlignment = Alignment.End) {
Text(
// TODO: find a better solution
text = formatUtil.formatAmount(Amount(monthTransactions.map { it.amount.toBigDecimal() }.filter { it < 0 }.sum().toString()), "EUR"),
color = formatUtil.getColorForAmount(Amount("-1"))
)
}
}
}
}

View File

@ -0,0 +1,5 @@
package net.codinux.banking.ui.extensions
import net.codinux.banking.client.model.Amount
fun Amount.toBigDecimal(): Double = this.amount.toDouble()

View File

@ -34,7 +34,8 @@ class FormatUtil {
val parts = amount.amount.split('.')
val decimalPart = if (parts.size == 2) parts[1] else "00"
return "${parts[0]},${decimalPart.padEnd(2, '0')} ${formatCurrency(currency)}"
// TODO: add thousands separator
return "${parts[0]},${decimalPart.padEnd(2, '0').substring(0, 2)} ${formatCurrency(currency)}"
}
fun formatCurrency(currency: String): String = when (currency) {