From 2f3e4bc74849ba33812924938bfa3051f4903345 Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Sun, 9 Jan 2022 20:27:51 +0000 Subject: [PATCH] Add transfers to list and skip --- postgres/ynab-import.go | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/postgres/ynab-import.go b/postgres/ynab-import.go index cb7af94..766e668 100644 --- a/postgres/ynab-import.go +++ b/postgres/ynab-import.go @@ -125,6 +125,8 @@ func (ynab *YNABImport) ImportTransactions(r io.Reader) error { return fmt.Errorf("could not read from tsv: %w", err) } + var openTransfers []CreateTransactionParams + count := 0 for _, record := range csvData[1:] { accountName := record[0] @@ -141,12 +143,6 @@ func (ynab *YNABImport) ImportTransactions(r io.Reader) error { return fmt.Errorf("could not parse date %s: %w", dateString, err) } - payeeName := record[3] - payeeID, err := ynab.GetPayee(payeeName) - if err != nil { - return fmt.Errorf("could not get payee %s: %w", payeeName, err) - } - categoryGroup, categoryName := record[5], record[6] //also in 4 joined by : category, err := ynab.GetCategory(categoryGroup, categoryName) if err != nil { @@ -162,21 +158,39 @@ func (ynab *YNABImport) ImportTransactions(r io.Reader) error { return fmt.Errorf("could not parse amount from (%s/%s): %w", inflow, outflow, err) } - //status := record[10] - transaction := CreateTransactionParams{ Date: date, Memo: memo, AccountID: account.ID, - PayeeID: payeeID, CategoryID: category, Amount: amount, } - _, err = ynab.queries.CreateTransaction(ynab.Context, transaction) - if err != nil { - return fmt.Errorf("could not save transaction %v: %w", transaction, err) + + payeeName := record[3] + if strings.HasPrefix(payeeName, "Transfer : ") { + // Transaction is a transfer to + transferToAccountName := payeeName[11:] + transferToAccount, err := ynab.GetAccount(transferToAccountName) + if err != nil { + return fmt.Errorf("Could not get transfer account %s: %w", transferToAccountName, err) + } + openTransfers = append(openTransfers, transaction) + fmt.Printf("Found transfer from %s to %s over %f\n", account.Name, transferToAccount.Name, amount.GetFloat64()) + } else { + payeeID, err := ynab.GetPayee(payeeName) + if err != nil { + return fmt.Errorf("could not get payee %s: %w", payeeName, err) + } + transaction.PayeeID = payeeID + + _, err = ynab.queries.CreateTransaction(ynab.Context, transaction) + if err != nil { + return fmt.Errorf("could not save transaction %v: %w", transaction, err) + } } + //status := record[10] + count++ }