From 4d484b8aa43e8c34294a5e19d048414779eeb2ec Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Thu, 12 Dec 2024 22:27:44 -0700 Subject: [PATCH] reg prints balance per xaction now --- cmd/cli/main.go | 19 ++++++------------- src/ledger/like.go | 7 +++++++ src/ledger/transaction.go | 20 ++++++++++++++++++++ 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 8233e8d..e2a9381 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -88,24 +88,17 @@ func Main() { FPrintBalances(os.Stdout, balances) case "reg": - register := deltas.Register() + transactions := deltas.Transactions() if likePattern != "" { - register = register.Like(likePattern) + transactions = transactions.Like(ledger.LikeName(likePattern)) } if notLikePattern != "" { - register = register.NotLike(notLikePattern) + transactions = transactions.NotLike(ledger.NotLikeName(notLikePattern)) } - var prev ledger.Balances - for _, date := range register.Dates() { - balances := register[date] - - if newBalances := balances.Sub(prev).Nonzero(); len(newBalances) > 0 { - fmt.Println(date) - FPrintBalances(os.Stdout, newBalances) - } - - prev = balances + for _, transaction := range transactions { + fmt.Println(transaction[0].Date) + FPrintBalances(os.Stdout, ledger.Deltas(transaction).Balances()) } default: panic("unknown command " + positional[0]) diff --git a/src/ledger/like.go b/src/ledger/like.go index 8c28e7b..c2fe36f 100644 --- a/src/ledger/like.go +++ b/src/ledger/like.go @@ -41,6 +41,13 @@ func LikeNotName(pattern string) Like { } } +func NotLikeName(pattern string) Like { + foo := LikeName(pattern) + return func(d Delta) bool { + return !foo(d) + } +} + func LikeName(pattern string) Like { return func(d Delta) bool { return like(pattern, d.Name) diff --git a/src/ledger/transaction.go b/src/ledger/transaction.go index 5a68363..fd5112d 100644 --- a/src/ledger/transaction.go +++ b/src/ledger/transaction.go @@ -42,6 +42,26 @@ func (deltas Deltas) Transactions() Transactions { return result } +func (transactions Transactions) NotLike(like ...Like) Transactions { + result := make(Transactions, 0, len(transactions)) + for _, transaction := range transactions { + if matching := (Deltas)(transaction).Like(like...); len(matching) == 0 { + result = append(result, transaction) + } + } + return result +} + +func (transactions Transactions) Like(like ...Like) Transactions { + result := make(Transactions, 0, len(transactions)) + for _, transaction := range transactions { + if matching := (Deltas)(transaction).Like(like...); len(matching) > 0 { + result = append(result, transaction) + } + } + return result +} + func (transaction Transaction) Payee() string { balances := Deltas(transaction).Balances()