diff options
| author | ivar <i@oiee.no> | 2026-01-14 21:32:16 +0100 |
|---|---|---|
| committer | ivar <i@oiee.no> | 2026-01-14 21:32:16 +0100 |
| commit | b35302fa020ec82a9d67a6cb34379d42983d3cfc (patch) | |
| tree | 6d9ece54091d96589c9d8b0fa8ec4181c60913e7 /app/src/lib/server/actual.ts | |
| parent | 5a5717699b8b2d60b7d92c2087ed2cc22667e1cc (diff) | |
| download | sparebank1-actualbudget-b35302fa020ec82a9d67a6cb34379d42983d3cfc.tar.xz sparebank1-actualbudget-b35302fa020ec82a9d67a6cb34379d42983d3cfc.zip | |
Diffstat (limited to 'app/src/lib/server/actual.ts')
| -rw-r--r-- | app/src/lib/server/actual.ts | 20 |
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() { |
