prettier printing

main
Bel LaPointe 2024-12-12 22:33:21 -07:00
parent 7a828f8463
commit e25d52b141
3 changed files with 22 additions and 8 deletions

View File

@ -7,5 +7,6 @@ type Config struct {
Sort string Sort string
NoRounding bool NoRounding bool
Depth int Depth int
Reverse bool
} }
} }

View File

@ -19,6 +19,7 @@ func Main() {
fs.StringVar(&config.Query.Sort, "S", "", "sort ie date") fs.StringVar(&config.Query.Sort, "S", "", "sort ie date")
fs.BoolVar(&config.Query.NoRounding, "no-rounding", false, "no rounding") fs.BoolVar(&config.Query.NoRounding, "no-rounding", false, "no rounding")
fs.IntVar(&config.Query.Depth, "depth", 0, "depth grouping") fs.IntVar(&config.Query.Depth, "depth", 0, "depth grouping")
fs.BoolVar(&config.Query.Reverse, "r", false, "reverse printed accounts")
if err := fs.Parse(os.Args[1:]); err != nil { if err := fs.Parse(os.Args[1:]); err != nil {
panic(err) panic(err)
} }
@ -86,31 +87,40 @@ func Main() {
balances = balances.NotLike(notLikePattern) balances = balances.NotLike(notLikePattern)
} }
FPrintBalances(os.Stdout, balances) FPrintBalances(os.Stdout, "", balances)
case "reg": case "reg":
transactions := deltas.Transactions() transactions := deltas.Transactions()
likes := []ledger.Like{} likes := []ledger.Like{}
if likePattern != "" { if likePattern != "" {
like := ledger.LikeName(likePattern) like := ledger.LikeName(likePattern)
transactions = transactions.Like(like) transactions = transactions.Like(like)
if config.Query.Reverse {
like = ledger.LikeNot(like)
}
likes = append(likes, like) likes = append(likes, like)
} }
if notLikePattern != "" { if notLikePattern != "" {
like := ledger.NotLikeName(notLikePattern) like := ledger.NotLikeName(notLikePattern)
transactions = transactions.NotLike(like) transactions = transactions.NotLike(like)
if config.Query.Reverse {
like = ledger.LikeNot(like)
}
likes = append(likes, like) likes = append(likes, like)
} }
for _, transaction := range transactions { for _, transaction := range transactions {
fmt.Println(transaction[0].Date) balances := ledger.Deltas(transaction).Like(likes...).Balances()
FPrintBalances(os.Stdout, ledger.Deltas(transaction).Like(likes...).Balances()) if len(balances) > 0 {
fmt.Printf("%s\t%s\n", transaction[0].Date, transaction[0].Description)
FPrintBalances(os.Stdout, "\t\t", ledger.Deltas(transaction).Like(likes...).Balances())
}
} }
default: default:
panic("unknown command " + positional[0]) panic("unknown command " + positional[0])
} }
} }
func FPrintBalances(w io.Writer, balances ledger.Balances) { func FPrintBalances(w io.Writer, linePrefix string, balances ledger.Balances) {
keys := []string{} keys := []string{}
for k := range balances { for k := range balances {
keys = append(keys, k) keys = append(keys, k)
@ -124,7 +134,7 @@ func FPrintBalances(w io.Writer, balances ledger.Balances) {
} }
} }
format := fmt.Sprintf("%%-%ds\t%%s%%.2f\n", max) format := fmt.Sprintf("%s%%-%ds\t%%s%%.2f\n", linePrefix, max)
for _, key := range keys { for _, key := range keys {
currencies := []ledger.Currency{} currencies := []ledger.Currency{}
for currency := range balances[key] { for currency := range balances[key] {

View File

@ -41,13 +41,16 @@ func LikeNotName(pattern string) Like {
} }
} }
func NotLikeName(pattern string) Like { func LikeNot(like Like) Like {
foo := LikeName(pattern)
return func(d Delta) bool { return func(d Delta) bool {
return !foo(d) return !like(d)
} }
} }
func NotLikeName(pattern string) Like {
return LikeNot(LikeName(pattern))
}
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)