aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/lib/server/actual.ts
diff options
context:
space:
mode:
authorivar <i@oiee.no>2026-01-14 21:32:16 +0100
committerivar <i@oiee.no>2026-01-14 21:32:16 +0100
commitb35302fa020ec82a9d67a6cb34379d42983d3cfc (patch)
tree6d9ece54091d96589c9d8b0fa8ec4181c60913e7 /app/src/lib/server/actual.ts
parent5a5717699b8b2d60b7d92c2087ed2cc22667e1cc (diff)
downloadsparebank1-actualbudget-master.tar.xz
sparebank1-actualbudget-master.zip
Misc stuffHEADmaster
Diffstat (limited to 'app/src/lib/server/actual.ts')
-rw-r--r--app/src/lib/server/actual.ts20
1 files changed, 12 insertions, 8 deletions
diff --git a/app/src/lib/server/actual.ts b/app/src/lib/server/actual.ts
index 4cf0262..fb1a4fb 100644
--- a/app/src/lib/server/actual.ts
+++ b/app/src/lib/server/actual.ts
@@ -1,13 +1,13 @@
-import { ACTUAL_BUDGET_ID, ACTUAL_HOST, ACTUAL_PASS } from "$env/static/private";
+import { ACTUAL_FILE_ID, ACTUAL_HOST, ACTUAL_PASS } from "$env/static/private";
import * as actual from "@actual-app/api"
import { existsSync, mkdirSync } from "node:fs";
import path from "node:path"
import process from "node:process";
-import type { Sb1Transaction } from "./sb1";
import type { ImportTransactionEntity } from "@actual-app/api/@types/loot-core/src/types/models/import-transaction";
import { Temporal } from "temporal-polyfill";
+import type { Sb1Transaction } from "$lib/shared";
-async function init_actual() {
+export async function init_actual() {
const dataDir = path.resolve(process.cwd(), "data/actualDataDir")
if (!existsSync(dataDir)) mkdirSync(dataDir, { recursive: true });
return actual.init({
@@ -15,33 +15,37 @@ async function init_actual() {
serverURL: ACTUAL_HOST,
dataDir: dataDir
}).then(async () => {
- await actual.downloadBudget(ACTUAL_BUDGET_ID)
+ await actual.downloadBudget(ACTUAL_FILE_ID)
await actual.sync()
})
}
export async function import_transactions(account: string, transactions: Sb1Transaction[], dryRun: boolean) {
-
+ await init_actual()
function parsedDate(date: number) {
const instant = Temporal.Instant.fromEpochMilliseconds(date)
return instant.toString({ timeZone: "Europe/Oslo" }).split("T")[0]
}
function notes(transaction: Sb1Transaction) {
- const {description,cleanedDescription} =transaction
+ const { description, cleanedDescription } = transaction
if (description.toLowerCase().trim() === cleanedDescription.toLowerCase().trim()) return undefined
return description
}
+ function amount(amount: number) {
+ return Math.round(amount * 100)
+ }
+
const actualMappedTransactions: ImportTransactionEntity[] = transactions.filter(c => c.bookingStatus === "BOOKED").map(c => ({
account,
date: parsedDate(c.date),
- amount: c.amount,
+ amount: amount(c.amount),
notes: notes(c),
payee_name: c.cleanedDescription
}))
- return await actual.importTransactions(account, actualMappedTransactions, { dryRun })
+ await actual.importTransactions(account, actualMappedTransactions, { dryRun })
}
export async function get_budgets() {