From 25b499263f2e6244aa3cdf0485d226011e552c3e Mon Sep 17 00:00:00 2001 From: Robert Dyer Date: Sun, 4 Aug 2024 18:34:41 -0500 Subject: [PATCH] for KBB tracking, added kbbDailyMileage to auto-update mileage --- README.md | 1 + kbb.js | 26 ++++++++++++++++++++++++-- utils.js | 7 +++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ed66447..3a1c058 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ on the values in the URL. - `kbbZipcode:XXXXX` - `kbbCondition:good` (or whatever condition you want to use) - `kbbMileage:XXXXX` (miles on the car, no commas) +- `kbbDailyMileage:XXXXX` (if given, will auto-update the mileage based on this daily average) - `kbbVehicleid:XXXXXX` - `kbbOptions:XXX,XXX,XXX,...` diff --git a/kbb.js b/kbb.js index 6076b58..dde8b96 100644 --- a/kbb.js +++ b/kbb.js @@ -1,6 +1,6 @@ const api = require('@actual-app/api'); const jsdom = require("jsdom"); -const { closeBudget, ensurePayee, getAccountBalance, getAccountNote, getTagValue, openBudget, sleep } = require('./utils'); +const { closeBudget, ensurePayee, getAccountBalance, getAccountNote, getLastTransactionDate, getTagValue, openBudget, setAccountNote, sleep } = require('./utils'); require("dotenv").config(); async function getKBB(URL) { @@ -40,7 +40,7 @@ async function getKBB(URL) { const condition = getTagValue(note, 'kbbCondition', 'good'); if (condition) URL += `&condition=${condition}`; - let mileage = getTagValue(note, 'kbbMileage', 30000); + let mileage = parseInt(getTagValue(note, 'kbbMileage', 30000)); if (mileage) URL += `&mileage=${mileage}`; const vehicleid = getTagValue(note, 'kbbVehicleid'); @@ -60,6 +60,28 @@ async function getKBB(URL) { console.log('Difference:', diff); if (diff != 0) { + const daily = parseInt(getTagValue(note, 'kbbDailyMileage')); + if (mileage && daily) { + let lastDate = await getLastTransactionDate(account); + const parts = lastDate.split('-'); + lastDate = new Date(parts[0], parts[1] - 1, parts[2]); + if (lastDate < new Date()) { + let today = new Date(); + today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); + const days = Math.round((today - lastDate) / (1000 * 60 * 60 * 24)); + if (days > 0) { + mileage += days * daily; + + const newNote = note.replace(/kbbMileage:\d+/, `kbbMileage:${mileage}`); + await setAccountNote(account, newNote); + + console.log('daily mileage:', daily); + console.log('days since last update:', days); + console.log('Updated mileage to:', mileage); + } + } + } + await api.importTransactions(account.id, [{ date: new Date(), payee: payeeId, diff --git a/utils.js b/utils.js index 06a8906..8cb149b 100644 --- a/utils.js +++ b/utils.js @@ -141,6 +141,13 @@ module.exports = { return undefined; }, + setAccountNote: async function (account, note) { + api.internal.send('notes-save', { + id: `account-${account.id}`, + note: note, + }); + }, + sleep: function (ms) { return new Promise((resolve) => { setTimeout(resolve, ms);