a reg
parent
1a2c88687f
commit
849a8696f5
|
|
@ -3,6 +3,8 @@ package cli
|
|||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"maps"
|
||||
"os"
|
||||
"slices"
|
||||
|
||||
|
|
@ -85,6 +87,40 @@ func Main() {
|
|||
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{}
|
||||
for k := range balances {
|
||||
keys = append(keys, k)
|
||||
|
|
@ -100,17 +136,18 @@ func Main() {
|
|||
|
||||
format := fmt.Sprintf("%%-%ds\t%%s%%.2f\n", max)
|
||||
for _, key := range keys {
|
||||
for currency, v := range balances[key] {
|
||||
if currency != "$" {
|
||||
currency += " "
|
||||
currencies := []ledger.Currency{}
|
||||
for currency := range balances[key] {
|
||||
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])
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,26 @@ func (register Register) Names() []string {
|
|||
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 {
|
||||
result := make([]string, 0, len(register))
|
||||
for k := range register {
|
||||
|
|
|
|||
Loading…
Reference in New Issue