diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-01-01 12:33:26 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-01-01 12:33:26 +0100 |
commit | 7238aa36f5f2b555c663fa37b73c344dc3183daa (patch) | |
tree | 574f54614c374813e3534101114db63410106a4a | |
parent | 08f544ceab0a8008cbf70f5ebe9d669a45190a0c (diff) |
Handle transaction in foreign currency
-rw-r--r-- | record/komplett/komplett.go | 19 | ||||
-rw-r--r-- | record/komplett/komplett_test.go | 1 | ||||
-rw-r--r-- | record/komplett/testdata/test.json | 15 |
3 files changed, 27 insertions, 8 deletions
diff --git a/record/komplett/komplett.go b/record/komplett/komplett.go index edf0e22..e68560d 100644 --- a/record/komplett/komplett.go +++ b/record/komplett/komplett.go @@ -16,8 +16,6 @@ const ( timeLayout = "02.01.2006" ) -var withdrawalPrefixes = []string{"kr -", "kr\u00a0-"} - // Reader implements a reader for Komplett-encoded (JSON) records. type Reader struct { rd io.Reader @@ -85,14 +83,19 @@ func (r *Reader) Read() ([]record.Record, error) { for _, jr := range jrs { amount := jr.BillingAmount if amount == 0 { // New format - amount = jr.Amount - // New format does not indicate whether transaction amount is positive or negative, so we guess - // based on the formatted field. - for _, withdrawalPrefix := range withdrawalPrefixes { - if strings.HasPrefix(jr.FormattedAmount, withdrawalPrefix) { - amount = -amount + var b strings.Builder + for _, r := range jr.FormattedAmount { + if r == '-' { + b.WriteRune(r) + } else if r >= '0' && r <= '9' { + b.WriteRune(r) } } + if n, err := strconv.ParseInt(b.String(), 10, 64); err == nil { + amount = jsonAmount(n) + } else { + return nil, err + } } rs = append(rs, record.Record{ Time: time.Time(jr.Time), diff --git a/record/komplett/komplett_test.go b/record/komplett/komplett_test.go index 2ba3d92..d2ffb59 100644 --- a/record/komplett/komplett_test.go +++ b/record/komplett/komplett_test.go @@ -79,6 +79,7 @@ func TestRead(t *testing.T) { {date(2019, 10, 30), "Varekjøp", -299000}, {date(2019, 10, 30), "Uttak av bonus", 6000}, {date(2020, 12, 14), "Varekjøp", -9900}, + {date(2020, 12, 28), "Varekjøp (5,00 EUR / Kurs 10,74000)", -5370}, } if len(rs) != len(tests) { t.Fatalf("want %d records, got %d", len(tests), len(rs)) diff --git a/record/komplett/testdata/test.json b/record/komplett/testdata/test.json index f9864f7..bce8a9e 100644 --- a/record/komplett/testdata/test.json +++ b/record/komplett/testdata/test.json @@ -43,5 +43,20 @@ "FormattedAmount": "kr -99,00", "FormattedPostingDate": "14.12.2020", "FormattedDefermentExpiryDate": null + }, + { + "TransactionId": null, + "TransactionRef": null, + "DisplayDescription": "Varekjøp (5,00 EUR / Kurs 10,74000)", + "EventNarrative": "", + "DestinationAccountNumber": null, + "Amount": 5.0, + "PostingDate": "/Date(1609110000000)/", + "CanDefer": false, + "IsDeferred": false, + "DefermentPeriod": null, + "FormattedAmount": "kr -53,70", + "FormattedPostingDate": "28.12.2020", + "FormattedDefermentExpiryDate": null } ] |