reg prints balance per xaction now

main
Bel LaPointe 2024-12-12 22:27:44 -07:00
parent 4831914251
commit 4d484b8aa4
3 changed files with 33 additions and 13 deletions

View File

@ -88,24 +88,17 @@ func Main() {
FPrintBalances(os.Stdout, balances) FPrintBalances(os.Stdout, balances)
case "reg": case "reg":
register := deltas.Register() transactions := deltas.Transactions()
if likePattern != "" { if likePattern != "" {
register = register.Like(likePattern) transactions = transactions.Like(ledger.LikeName(likePattern))
} }
if notLikePattern != "" { if notLikePattern != "" {
register = register.NotLike(notLikePattern) transactions = transactions.NotLike(ledger.NotLikeName(notLikePattern))
} }
var prev ledger.Balances for _, transaction := range transactions {
for _, date := range register.Dates() { fmt.Println(transaction[0].Date)
balances := register[date] FPrintBalances(os.Stdout, ledger.Deltas(transaction).Balances())
if newBalances := balances.Sub(prev).Nonzero(); len(newBalances) > 0 {
fmt.Println(date)
FPrintBalances(os.Stdout, newBalances)
}
prev = balances
} }
default: default:
panic("unknown command " + positional[0]) panic("unknown command " + positional[0])

View File

@ -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 { func LikeName(pattern string) Like {
return func(d Delta) bool { return func(d Delta) bool {
return like(pattern, d.Name) return like(pattern, d.Name)

View File

@ -42,6 +42,26 @@ func (deltas Deltas) Transactions() Transactions {
return result 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 { func (transaction Transaction) Payee() string {
balances := Deltas(transaction).Balances() balances := Deltas(transaction).Balances()