Deltas does Balances and Like

This commit is contained in:
Bel LaPointe
2023-10-24 12:57:17 -06:00
parent 480d358f5a
commit b93de87db4
3 changed files with 35 additions and 26 deletions

28
ledger/deltas.go Normal file
View File

@@ -0,0 +1,28 @@
package ledger
type Deltas []Delta
func (deltas Deltas) Like(like ...Like) Deltas {
result := make(Deltas, 0, len(deltas))
for i := range deltas {
if likes(like).all(deltas[i]) {
result = append(result, deltas[i])
}
}
return result
}
func (deltas Deltas) Balances() (map[string]map[Currency]float64, error) {
result := make(map[string]map[Currency]float64)
for _, delta := range deltas {
if _, ok := result[delta.Account]; !ok {
result[delta.Account] = make(map[Currency]float64)
}
if _, ok := result[delta.Account][delta.Currency]; !ok {
result[delta.Account][delta.Currency] = 0
}
result[delta.Account][delta.Currency] += delta.Value
}
return result, nil
}