diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 540e9b9..4cdb196 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -109,7 +109,7 @@ func Main() { likes = append(likes, like) } - for _, transaction := range transactions { + for i, transaction := range transactions { balances := ledger.Deltas(transaction).Like(likes...).Balances() shouldPrint := false shouldPrint = shouldPrint || len(balances) > 2 @@ -123,7 +123,27 @@ func Main() { } if shouldPrint { fmt.Printf("%s\t%s\n", transaction[0].Date, transaction[0].Description) - FPrintBalances(os.Stdout, "\t\t", ledger.Deltas(transaction).Like(likes...).Balances()) + FPrintBalances(os.Stdout, "\t\t", balances) + + cumulativeBalances := transactions[:i+1].Deltas().Like(likes...).Balances() + cumulativeBalancesKeys := []string{} + for k := range cumulativeBalances { + cumulativeBalancesKeys = append(cumulativeBalancesKeys, k) + } + slices.Sort(cumulativeBalancesKeys) + + relevantCumulativeBalances := make(ledger.Balances) + for _, k := range cumulativeBalancesKeys { + m, ok := balances[k] + if !ok { + continue + } + relevantCumulativeBalances[k] = make(ledger.Balance) + for k2 := range m { + relevantCumulativeBalances[k][k2] = cumulativeBalances[k][k2] + } + } + fmt.Printf("\t\t(%+v)\n", relevantCumulativeBalances.Nonzero()) } } default: diff --git a/src/ledger/transaction.go b/src/ledger/transaction.go index fd5112d..c103077 100644 --- a/src/ledger/transaction.go +++ b/src/ledger/transaction.go @@ -18,6 +18,14 @@ type Transaction Deltas type Transactions []Transaction +func (transactions Transactions) Deltas() Deltas { + result := make(Deltas, 0, len(transactions)) + for _, transaction := range transactions { + result = append(result, transaction...) + } + return result +} + func (deltas Deltas) Transactions() Transactions { m := make(map[string]Transaction) for _, d := range deltas {