ana-ledger/ledger/deltas.go

29 lines
679 B
Go

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.Name]; !ok {
result[delta.Name] = make(map[Currency]float64)
}
if _, ok := result[delta.Name][delta.Currency]; !ok {
result[delta.Name][delta.Currency] = 0
}
result[delta.Name][delta.Currency] += delta.Value
}
return result, nil
}