From b7c5000883192be864af074a5d09ea347d577981 Mon Sep 17 00:00:00 2001 From: Robert Dyer Date: Sat, 10 Aug 2024 18:41:48 -0500 Subject: [PATCH] update track-investments so that it uses SimpleFIN IDs instead of names to match accounts --- track-investments.js | 10 ++++++---- utils.js | 13 +++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/track-investments.js b/track-investments.js index f7ecbde..745961b 100644 --- a/track-investments.js +++ b/track-investments.js @@ -1,7 +1,7 @@ const api = require('@actual-app/api'); const fs = require('fs'); const readline = require('readline-sync'); -const { closeBudget, ensureCategory, ensurePayee, getAccountBalance, getAccountNote, getTransactions, openBudget } = require('./utils'); +const { closeBudget, ensureCategory, ensurePayee, getAccountBalance, getAccountNote, getSimpleFinID, getTransactions, openBudget } = require('./utils'); require("dotenv").config(); @@ -48,11 +48,12 @@ const getSimplefinBalances = async () => { const data = await response.json(); const accounts = data.accounts; const balances = {}; - accounts.forEach(a => balances[a.name] = parseFloat(a.balance)); + //accounts.forEach(a => balances[a.name] = parseFloat(a.balance)); + accounts.forEach(a => balances[a.id] = parseFloat(a.balance)); + return balances; } catch (e) { return undefined; } - return balances; }; const shouldDrop = (payment) => { @@ -106,7 +107,8 @@ const zeroTransaction = async (payment) => { if (note.indexOf('calcInvestment') > -1) { const currentBalance = await getAccountBalance(account); - const simplefinBalance = parseInt(simplefinBalances[account.name] * 100); + const simpleFinID = await getSimpleFinID(account); + const simplefinBalance = parseInt(simplefinBalances[simpleFinID] * 100); const diff = simplefinBalance - currentBalance; console.log('Account:', account.name); diff --git a/utils.js b/utils.js index 274bb27..3470f1b 100644 --- a/utils.js +++ b/utils.js @@ -140,6 +140,19 @@ const Utils = { }); }, + getSimpleFinID: async function (account) { + const data = await api.runQuery( + api.q('accounts') + .filter({ id: account.id }) + .filter({ account_sync_source: 'simpleFin' }) + .select('account_id') + ); + if (data.data.length && data.data[0].account_id) { + return data.data[0].account_id; + } + return undefined; + }, + sleep: function (ms) { return new Promise((resolve) => { setTimeout(resolve, ms);