import refreshTokenHelper from "../../../utils/refreshTokenHelper" import getTokenHelper from "../../../utils/getTokenHelper" import forceLogoutHelper from "../../../utils/forceLogoutHelper" import errorHandlingHelper from "../../../utils/errorHandlingHelper" import { isValidToken, loadUpload, planAccount, presentPlan } from "../../../utils/banking/bankFileImport" // POST /api/accounting/bank-file-import/replan // Body: { token, iban, bankAccountId } // Re-runs the dry-run plan of ONE account of a parked upload against a bank // account the user picked manually (file IBAN unknown to iDempiere, e.g. after // a bank merger changed the IBAN). Writes nothing; returns the same shape as // one entry of preview's `accounts`. const handleFunc = async (event: any, account: any, bankAccountId: number, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const plan = await planAccount(event, token, account, null, bankAccountId) if (!plan.bankAccount) return { status: 404, message: `Bankkonto ${bankAccountId} nicht gefunden oder inaktiv` } return { status: 200, account: presentPlan(plan) } } export default defineEventHandler(async (event) => { const body = await readBody(event) const uploadToken = String(body?.token || '') if (!isValidToken(uploadToken)) return { status: 400, message: 'Ungültiges Upload-Token' } const parsed = await loadUpload(uploadToken) if (!parsed) return { status: 404, message: 'Upload nicht mehr vorhanden — bitte die Datei erneut hochladen' } const iban = String(body?.iban || '').replace(/\s+/g, '').toUpperCase() const account = parsed.accounts.find((acc: any) => acc.iban === iban) if (!account) return { status: 404, message: 'Konto nicht im Upload enthalten' } const bankAccountId = Number(body?.bankAccountId || 0) if (!bankAccountId) return { status: 400, message: 'Kein Bankkonto gewählt' } let data: any = {} try { data = await handleFunc(event, account, bankAccountId) } catch (err: any) { try { let authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, account, bankAccountId, authToken) } catch (error: any) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) forceLogoutHelper(event, data) } } return data })