diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-11-11 22:22:17 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-11-11 22:22:17 +0100 |
commit | dd375e0dd5dbf0af511c38ce511161b9c2fb8abc (patch) | |
tree | 3bca9fadf613653ad28043586962b60411567739 | |
parent | 335c919788e24f174a30b35e5dfa82467cfbd707 (diff) |
cmd: Add support for Bulder Bank
-rw-r--r-- | README.md | 8 | ||||
-rw-r--r-- | cmd/cmd.go | 2 | ||||
-rw-r--r-- | journal/journal.go | 3 | ||||
-rw-r--r-- | journal/journal_test.go | 6 |
4 files changed, 16 insertions, 3 deletions
@@ -6,8 +6,12 @@ ## Features -* Import financial records from multiple Norwegian banks, such as Eika Group -(most local banks), DNB, Storebrand, Bank Norwegian and Komplett Bank. +* Import financial records from multiple Norwegian banks: + * Bank Norwegian (XLS) + * Bulder Bank (custom CSV) + * DNB (XLS) + * Eika Group (most local banks), Storebrand and many others (standard CSV) + * Komplett Bank (JSON) * Identify spending habits using automatic grouping of records. * Define budgets for record groups. * Export record groups for further processing in other programs. @@ -25,7 +25,7 @@ type Options struct { // Import represents options for the import sub-command. type Import struct { Options - Reader string `short:"r" long:"reader" description:"Name of reader to use when importing data" choice:"csv" choice:"komplett" choice:"norwegian" choice:"dnb" choice:"auto" default:"auto"` + Reader string `short:"r" long:"reader" description:"Name of reader to use when importing data" choice:"csv" choice:"komplett" choice:"norwegian" choice:"dnb" choice:"bulder" choice:"auto" default:"auto"` Args struct { Account string `description:"Account number" positional-arg-name:"account-number"` Files []string `description:"File containing records to import" positional-arg-name:"import-file"` diff --git a/journal/journal.go b/journal/journal.go index 156305e..8ad2e27 100644 --- a/journal/journal.go +++ b/journal/journal.go @@ -14,6 +14,7 @@ import ( "github.com/BurntSushi/toml" "github.com/mpolden/journal/record" + "github.com/mpolden/journal/record/bulder" "github.com/mpolden/journal/record/dnb" "github.com/mpolden/journal/record/komplett" "github.com/mpolden/journal/record/norwegian" @@ -110,6 +111,8 @@ func readConfig(r io.Reader) (Config, error) { func readerFrom(r io.Reader, name, filename string) (record.Reader, error) { var rr record.Reader switch name { + case "bulder": + rr = bulder.NewReader(r) case "dnb": rr = dnb.NewReader(r) case "csv": diff --git a/journal/journal_test.go b/journal/journal_test.go index 8aa7294..aa17391 100644 --- a/journal/journal_test.go +++ b/journal/journal_test.go @@ -7,6 +7,7 @@ import ( "time" "github.com/mpolden/journal/record" + "github.com/mpolden/journal/record/bulder" "github.com/mpolden/journal/record/dnb" "github.com/mpolden/journal/record/komplett" "github.com/mpolden/journal/record/norwegian" @@ -70,6 +71,7 @@ func TestReaderFrom(t *testing.T) { filename string impl string }{ + {"bulder", "", "bulder"}, {"dnb", "", "dnb"}, {"csv", "", "default"}, {"norwegian", "", "norwegian"}, @@ -88,6 +90,10 @@ func TestReaderFrom(t *testing.T) { if _, ok := rr.(record.Reader); !ok { t.Errorf("#%d: want record.Reader, got %T", i, rr) } + case "bulder": + if _, ok := rr.(*bulder.Reader); !ok { + t.Errorf("#%d: want bulder.Reader, got %T", i, rr) + } case "dnb": if _, ok := rr.(*dnb.Reader); !ok { t.Errorf("#%d: want dnb.Reader, got %T", i, rr) |