WERKS EZ PZ
parent
26b8174fb3
commit
24d0e829b3
|
|
@ -12,6 +12,26 @@ func NewFile(p string) (File, error) {
|
||||||
return f, err
|
return f, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (file File) Balances(like ...Like) (map[string]map[Currency]float64, error) {
|
||||||
|
deltas, err := file.Deltas(like...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
func (file File) Deltas(like ...Like) ([]Delta, error) {
|
func (file File) Deltas(like ...Like) ([]Delta, error) {
|
||||||
transactions, err := file.transactions()
|
transactions, err := file.transactions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,36 @@ func TestFileTestdata(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
transactions, err := f.Deltas()
|
|
||||||
if err != nil {
|
t.Run("deltas", func(t *testing.T) {
|
||||||
t.Fatal(err)
|
deltas, err := f.Deltas()
|
||||||
}
|
if err != nil {
|
||||||
for i := range transactions {
|
t.Fatal(err)
|
||||||
t.Logf("%+v", transactions[i].Debug())
|
}
|
||||||
}
|
for i := range deltas {
|
||||||
|
t.Logf("%+v", deltas[i].Debug())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("balances", func(t *testing.T) {
|
||||||
|
balances, err := f.Balances()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for k, v := range balances {
|
||||||
|
t.Logf("%s: %+v", k, v)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("balances like", func(t *testing.T) {
|
||||||
|
balances, err := f.Balances(LikeAcc(`AssetAccount:Cash:Fidelity76`))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for k, v := range balances {
|
||||||
|
t.Logf("%s: %+v", k, v)
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue