for KBB tracking, added kbbDailyMileage to auto-update mileage

This commit is contained in:
Robert Dyer
2024-08-04 18:34:41 -05:00
parent 4a379d609a
commit 25b499263f
3 changed files with 32 additions and 2 deletions
+1
View File
@@ -144,6 +144,7 @@ on the values in the URL.
- `kbbZipcode:XXXXX` - `kbbZipcode:XXXXX`
- `kbbCondition:good` (or whatever condition you want to use) - `kbbCondition:good` (or whatever condition you want to use)
- `kbbMileage:XXXXX` (miles on the car, no commas) - `kbbMileage:XXXXX` (miles on the car, no commas)
- `kbbDailyMileage:XXXXX` (if given, will auto-update the mileage based on this daily average)
- `kbbVehicleid:XXXXXX` - `kbbVehicleid:XXXXXX`
- `kbbOptions:XXX,XXX,XXX,...` - `kbbOptions:XXX,XXX,XXX,...`
+24 -2
View File
@@ -1,6 +1,6 @@
const api = require('@actual-app/api'); const api = require('@actual-app/api');
const jsdom = require("jsdom"); 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(); require("dotenv").config();
async function getKBB(URL) { async function getKBB(URL) {
@@ -40,7 +40,7 @@ async function getKBB(URL) {
const condition = getTagValue(note, 'kbbCondition', 'good'); const condition = getTagValue(note, 'kbbCondition', 'good');
if (condition) URL += `&condition=${condition}`; if (condition) URL += `&condition=${condition}`;
let mileage = getTagValue(note, 'kbbMileage', 30000); let mileage = parseInt(getTagValue(note, 'kbbMileage', 30000));
if (mileage) URL += `&mileage=${mileage}`; if (mileage) URL += `&mileage=${mileage}`;
const vehicleid = getTagValue(note, 'kbbVehicleid'); const vehicleid = getTagValue(note, 'kbbVehicleid');
@@ -60,6 +60,28 @@ async function getKBB(URL) {
console.log('Difference:', diff); console.log('Difference:', diff);
if (diff != 0) { 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, [{ await api.importTransactions(account.id, [{
date: new Date(), date: new Date(),
payee: payeeId, payee: payeeId,
+7
View File
@@ -141,6 +141,13 @@ module.exports = {
return undefined; return undefined;
}, },
setAccountNote: async function (account, note) {
api.internal.send('notes-save', {
id: `account-${account.id}`,
note: note,
});
},
sleep: function (ms) { sleep: function (ms) {
return new Promise((resolve) => { return new Promise((resolve) => {
setTimeout(resolve, ms); setTimeout(resolve, ms);