import refreshTokenHelper from "../../../../utils/refreshTokenHelper" import getTokenHelper from "../../../../utils/getTokenHelper" import forceLogoutHelper from "../../../../utils/forceLogoutHelper" import errorHandlingHelper from "../../../../utils/errorHandlingHelper" import { LINE_SELECT_WITH_STATEMENT, fetchLinesForStatements, parseIdList, presentStatementLine } from "../../../../utils/bankReconciliation" // GET /api/accounting/bank-reconciliation/lines?ids=1,2,3 // All lines of MANY statements (the "Alle Auszüge" default view of the // reconcile tab). Each line carries its statement header so the table can show // / sort / search by document number. Per-statement progress is returned too, // so the statement list can show "3/12" without a second round-trip. const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const ids = parseIdList(getQuery(event).ids) if (!ids.length) { return { status: 200, lines: [], statements: {}, total: 0, matchedCount: 0 } } const records = await fetchLinesForStatements(event, token, ids, LINE_SELECT_WITH_STATEMENT) const statements: Record = {} const lines = records.map((rec: any) => { const st = rec.C_BankStatement_ID || {} const statementId = Number(st.id) || 0 if (statementId && !statements[statementId]) { statements[statementId] = { id: statementId, documentNo: st.DocumentNo || st.identifier || '', name: st.Name || '', statementDate: st.StatementDate || '', docStatus: st.DocStatus?.id || st.DocStatus || '', total: 0, matchedCount: 0 } } const line = presentStatementLine(rec) if (statementId) { statements[statementId].total++ if (line.matched) statements[statementId].matchedCount++ } return { ...line, statementId, statementDocNo: statements[statementId]?.documentNo || '', statementDate: statements[statementId]?.statementDate || '', statementDocStatus: statements[statementId]?.docStatus || '' } }) const matchedCount = lines.filter((l: any) => l.matched).length return { status: 200, lines, statements, total: lines.length, matchedCount } } export default defineEventHandler(async (event) => { let data: any = {} try { data = await handleFunc(event) } catch (err: any) { try { let authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch (error) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) forceLogoutHelper(event, data) } } return data })