aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-11-11 22:22:17 +0100
committerMartin Polden <mpolden@mpolden.no>2021-11-11 22:22:17 +0100
commitdd375e0dd5dbf0af511c38ce511161b9c2fb8abc (patch)
tree3bca9fadf613653ad28043586962b60411567739
parent335c919788e24f174a30b35e5dfa82467cfbd707 (diff)
cmd: Add support for Bulder Bank
-rw-r--r--README.md8
-rw-r--r--cmd/cmd.go2
-rw-r--r--journal/journal.go3
-rw-r--r--journal/journal_test.go6
4 files changed, 16 insertions, 3 deletions
diff --git a/README.md b/README.md
index 92bcb52..06061d1 100644
--- a/README.md
+++ b/README.md
@@ -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.
diff --git a/cmd/cmd.go b/cmd/cmd.go
index a428500..8aef019 100644
--- a/cmd/cmd.go
+++ b/cmd/cmd.go
@@ -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)