a reg
parent
1a2c88687f
commit
849a8696f5
|
|
@ -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])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue