main
Bel LaPointe 2024-12-12 22:10:16 -07:00
parent 1a2c88687f
commit 849a8696f5
2 changed files with 81 additions and 24 deletions

View File

@ -3,6 +3,8 @@ package cli
import ( import (
"flag" "flag"
"fmt" "fmt"
"io"
"maps"
"os" "os"
"slices" "slices"
@ -85,6 +87,40 @@ func Main() {
balances = balances.NotLike(notLikePattern) balances = balances.NotLike(notLikePattern)
} }
FPrintBalances(os.Stdout, balances)
case "reg":
register := deltas.Register()
if likePattern != "" {
register = register.Like(likePattern)
}
if notLikePattern != "" {
register = register.NotLike(notLikePattern)
}
var prev ledger.Balances
for _, date := range register.Dates() {
balances := register[date]
newBalances := make(ledger.Balances)
for k, v := range balances {
if got := prev[k]; !maps.Equal(v, got) {
newBalances[k] = v
}
}
if len(newBalances) > 0 {
fmt.Println(date)
FPrintBalances(os.Stdout, newBalances)
}
prev = balances
}
default:
panic("unknown command " + positional[0])
}
}
func FPrintBalances(w io.Writer, balances ledger.Balances) {
keys := []string{} keys := []string{}
for k := range balances { for k := range balances {
keys = append(keys, k) keys = append(keys, k)
@ -100,17 +136,18 @@ func Main() {
format := fmt.Sprintf("%%-%ds\t%%s%%.2f\n", max) format := fmt.Sprintf("%%-%ds\t%%s%%.2f\n", max)
for _, key := range keys { for _, key := range keys {
for currency, v := range balances[key] { currencies := []ledger.Currency{}
if currency != "$" { for currency := range balances[key] {
currency += " " currencies = append(currencies, currency)
} }
fmt.Printf(format, key, currency, v) slices.Sort(currencies)
for _, currency := range currencies {
printableCurrency := currency
if printableCurrency != "$" {
printableCurrency += " "
}
fmt.Fprintf(w, format, key, printableCurrency, balances[key][currency])
} }
} }
case "reg":
// register := deltas.Register()
panic(cmd)
default:
panic("unknown command " + positional[0])
}
} }

View File

@ -51,6 +51,26 @@ func (register Register) Names() []string {
return result return result
} }
func (register Register) Like(pattern string) Register {
result := make(Register)
for k, v := range register {
if got := v.Like(pattern); len(got) > 0 {
result[k] = got
}
}
return result
}
func (register Register) NotLike(pattern string) Register {
result := make(Register)
for k, v := range register {
if got := v.NotLike(pattern); len(got) > 0 {
result[k] = got
}
}
return result
}
func (register Register) Dates() []string { func (register Register) Dates() []string {
result := make([]string, 0, len(register)) result := make([]string, 0, len(register))
for k := range register { for k := range register {