mirror of
https://github.com/marcogll/TaxHacker_s23.git
synced 2026-01-13 21:35:19 +00:00
67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
"use server"
|
|
|
|
import { exportImportFieldsMapping } from "@/data/export_and_import"
|
|
import { createTransaction } from "@/data/transactions"
|
|
import { parse } from "@fast-csv/parse"
|
|
import { revalidatePath } from "next/cache"
|
|
|
|
export async function parseCSVAction(prevState: any, formData: FormData) {
|
|
const file = formData.get("file") as File
|
|
if (!file) {
|
|
return { success: false, error: "No file uploaded" }
|
|
}
|
|
|
|
if (!file.name.toLowerCase().endsWith(".csv")) {
|
|
return { success: false, error: "Only CSV files are allowed" }
|
|
}
|
|
|
|
try {
|
|
const buffer = Buffer.from(await file.arrayBuffer())
|
|
const rows: string[][] = []
|
|
|
|
const parser = parse()
|
|
.on("data", (row) => rows.push(row))
|
|
.on("error", (error) => {
|
|
throw error
|
|
})
|
|
parser.write(buffer)
|
|
parser.end()
|
|
|
|
// Wait for parsing to complete
|
|
await new Promise((resolve) => parser.on("end", resolve))
|
|
|
|
return { success: true, data: rows }
|
|
} catch (error) {
|
|
console.error("Error parsing CSV:", error)
|
|
return { success: false, error: "Failed to parse CSV file" }
|
|
}
|
|
}
|
|
|
|
export async function saveTransactionsAction(prevState: any, formData: FormData) {
|
|
try {
|
|
const rows = JSON.parse(formData.get("rows") as string) as Record<string, unknown>[]
|
|
|
|
for (const row of rows) {
|
|
const transactionData: Record<string, unknown> = {}
|
|
for (const [fieldCode, value] of Object.entries(row)) {
|
|
const fieldDef = exportImportFieldsMapping[fieldCode]
|
|
if (fieldDef?.import) {
|
|
transactionData[fieldCode] = await fieldDef.import(value as string)
|
|
} else {
|
|
transactionData[fieldCode] = value as string
|
|
}
|
|
}
|
|
|
|
await createTransaction(transactionData)
|
|
}
|
|
|
|
revalidatePath("/import/csv")
|
|
revalidatePath("/transactions")
|
|
|
|
return { success: true }
|
|
} catch (error) {
|
|
console.error("Error saving transactions:", error)
|
|
return { success: false, error: "Failed to save transactions: " + error }
|
|
}
|
|
}
|