bal prints percents
cicd / ci (push) Successful in 2m40s Details

main
Bel LaPointe 2025-10-26 09:27:07 -06:00
parent f58053ebe9
commit 0066a267a6
1 changed files with 43 additions and 16 deletions

View File

@ -144,7 +144,21 @@ func Main() {
KindaGroup(group).
Nonzero().
Normalize(cpiNormalizer, "9")
FPrintBalances(w, "", balances, nil, config.Query.USDOnly, config.Query.Normalize, time.Now().Format("2006-01-02"), false, maxAccW)
cumulatives := make(ledger.Balances)
var sum float64
for key := range balances {
usd, ok := balances[key][ledger.USD]
if ok {
cumulatives[key] = ledger.Balance{ledger.USD: usd}
sum += usd
}
}
for key := range cumulatives {
cumulatives[key][ledger.USD] = 100 * cumulatives[key][ledger.USD] / sum
}
FPrintBalances(w, "", balances, cumulatives, config.Query.USDOnly, config.Query.Normalize, time.Now().Format("2006-01-02"), false, maxAccW, "%.0f%%%%")
case "gra": // graph
dateGrouping := "^[0-9]{4}-[0-9]{2}"
if period := config.Query.Period; !period.Empty() {
@ -306,7 +320,7 @@ func Main() {
if shouldPrint {
cumulative.PushAll(balances)
cumulative = cumulative.Nonzero()
FPrintBalancesFor(transaction[0].Description, w, "\t\t", balances, cumulative, config.Query.USDOnly, config.Query.Normalize, transaction[0].Date, config.Compact, maxAccW)
FPrintBalancesFor(transaction[0].Description, w, "\t\t", balances, cumulative, config.Query.USDOnly, config.Query.Normalize, transaction[0].Date, config.Compact, maxAccW, "%s%.2f")
}
}
default:
@ -314,16 +328,16 @@ func Main() {
}
}
func FPrintBalancesFor(description string, w io.Writer, linePrefix string, balances, cumulatives ledger.Balances, usdOnly, normalized bool, date string, compact bool, keyW int) {
func FPrintBalancesFor(description string, w io.Writer, linePrefix string, balances, cumulatives ledger.Balances, usdOnly, normalized bool, date string, compact bool, keyW int, cumulativeFormat string) {
if compact {
FPrintBalances(w, date+"\t", balances, cumulatives, usdOnly, normalized, date, compact, keyW)
FPrintBalances(w, date+"\t", balances, cumulatives, usdOnly, normalized, date, compact, keyW, cumulativeFormat)
} else {
fmt.Fprintf(w, "%s\t%s\n", date, description)
FPrintBalances(w, linePrefix, balances, cumulatives, usdOnly, normalized, date, compact, keyW)
FPrintBalances(w, linePrefix, balances, cumulatives, usdOnly, normalized, date, compact, keyW, cumulativeFormat)
}
}
func FPrintBalances(w io.Writer, linePrefix string, balances, cumulatives ledger.Balances, usdOnly, normalized bool, date string, fullKey bool, max int) {
func FPrintBalances(w io.Writer, linePrefix string, balances, cumulatives ledger.Balances, usdOnly, normalized bool, date string, fullKey bool, max int, cumulativeFormat string) {
maxes := map[ledger.Currency]float64{}
keys := []string{}
for k, v := range balances {
@ -338,9 +352,9 @@ func FPrintBalances(w io.Writer, linePrefix string, balances, cumulatives ledger
normalizer := ana.NewDefaultNormalizer()
format := fmt.Sprintf("%s%%-%ds\t%%s%%.2f (%%s%%.2f)\n", linePrefix, max)
format := fmt.Sprintf("%s%%-%ds\t%%s%%.2f (%"+cumulativeFormat+")\n", linePrefix, max)
if normalized {
format = fmt.Sprintf("%s%%-%ds\t%%s%%.2f (%%s%%.2f (%%.2f @%%.2f (%%s%%.0f)))\n", linePrefix, max)
format = fmt.Sprintf("%s%%-%ds\t%%s%%.2f (%%s%%.2f (%%.2f @%%.2f (%"+cumulativeFormat+")))\n", linePrefix, max)
}
for i, key := range keys {
printableKey := key
@ -375,9 +389,12 @@ func FPrintBalances(w io.Writer, linePrefix string, balances, cumulatives ledger
for _, currency := range currencies {
printableCurrency := currency
format := format
if printableCurrency != "$" {
printableCurrency += " "
format = strings.ReplaceAll(format, "%.2f", "%.3f")
printPrintableCurrency := strings.Count(cumulativeFormat, "%s") > 0
if printPrintableCurrency {
if printableCurrency != "$" {
printableCurrency += " "
format = strings.ReplaceAll(format, "%.2f", "%.3f")
}
}
if usdOnly && printableCurrency != "$" {
continue
@ -390,12 +407,22 @@ func FPrintBalances(w io.Writer, linePrefix string, balances, cumulatives ledger
cumulative = value
}
if !normalized {
fmt.Fprintf(w, format, printableKey, printableCurrency, balances[key][currency], printableCurrency, cumulative)
if printPrintableCurrency {
if !normalized {
fmt.Fprintf(w, format, printableKey, printableCurrency, balances[key][currency], printableCurrency, cumulative)
} else {
factor := normalizer.NormalizeFactor(key, date)
trailingMax := maxes[currency] - math.Abs(balances[key][currency])
fmt.Fprintf(w, format, printableKey, printableCurrency, balances[key][currency], printableCurrency, cumulative, cumulative*factor, factor, printableCurrency, factor*trailingMax)
}
} else {
factor := normalizer.NormalizeFactor(key, date)
trailingMax := maxes[currency] - math.Abs(balances[key][currency])
fmt.Fprintf(w, format, printableKey, printableCurrency, balances[key][currency], printableCurrency, cumulative, cumulative*factor, factor, printableCurrency, factor*trailingMax)
if !normalized {
fmt.Fprintf(w, format, printableKey, printableCurrency, balances[key][currency], cumulative)
} else {
factor := normalizer.NormalizeFactor(key, date)
trailingMax := maxes[currency] - math.Abs(balances[key][currency])
fmt.Fprintf(w, format, printableKey, printableCurrency, balances[key][currency], printableCurrency, cumulative, cumulative*factor, factor, factor*trailingMax)
}
}
}
}