aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/lib')
-rw-r--r--app/src/lib/server/actual.ts21
-rw-r--r--app/src/lib/server/importer.ts12
-rw-r--r--app/src/lib/shared.d.ts5
3 files changed, 33 insertions, 5 deletions
diff --git a/app/src/lib/server/actual.ts b/app/src/lib/server/actual.ts
index 0875273..389f390 100644
--- a/app/src/lib/server/actual.ts
+++ b/app/src/lib/server/actual.ts
@@ -3,6 +3,9 @@ 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";
async function init_actual() {
const dataDir = path.resolve(process.cwd(), "data/actualDataDir")
@@ -17,6 +20,24 @@ async function init_actual() {
})
}
+export async function import_transactions(account: string, transactions: Sb1Transaction[], dryRun: boolean) {
+
+ function parsedDate(date: number) {
+ const instant = Temporal.Instant.fromEpochMilliseconds(date)
+ return instant.toString({ timeZone: "Europe/Oslo" }).split("T")[0]
+ }
+
+ const actualMappedTransactions: ImportTransactionEntity[] = transactions.filter(c => c.bookingStatus === "BOOKED").map(c => ({
+ account,
+ date: parsedDate(c.date),
+ amount: c.amount,
+ notes: c.description,
+ payee_name: c.cleanedDescription
+ }))
+
+ actual.importTransactions(account, actualMappedTransactions, { dryRun })
+}
+
export async function get_budgets() {
await init_actual()
return actual.getBudgets()
diff --git a/app/src/lib/server/importer.ts b/app/src/lib/server/importer.ts
index 91adce0..02cb94c 100644
--- a/app/src/lib/server/importer.ts
+++ b/app/src/lib/server/importer.ts
@@ -1,9 +1,11 @@
-import type { Temporal } from "temporal-polyfill";
import sb1 from "./sb1";
+import * as actual from "./actual";
+import type { ImportForm } from "$lib/shared";
-async function importSince(account: string, date: Temporal.Instant) {
- const accounts = await sb1.data.get_accounts()
- for (const account of accounts?.accounts ?? []) {
- const transactions = await sb1.data.get_transactions(account.key);
+async function importSince(form: ImportForm) {
+ for (const mapping of form.mappings) {
+ const transactions = await sb1.data.get_transactions(mapping.sb1Id);
+ if (!transactions?.length) continue
+
}
} \ No newline at end of file
diff --git a/app/src/lib/shared.d.ts b/app/src/lib/shared.d.ts
new file mode 100644
index 0000000..e63904b
--- /dev/null
+++ b/app/src/lib/shared.d.ts
@@ -0,0 +1,5 @@
+export type ImportForm = {
+ budgetId: string,
+ mappings: Array<{ sb1Id: string, actualId: string }>,
+ dryRun: boolean
+} \ No newline at end of file