import { string } from 'alga-js' import refreshTokenHelper from "../../../utils/refreshTokenHelper" import getTokenHelper from "../../../utils/getTokenHelper" import forceLogoutHelper from "../../../utils/forceLogoutHelper" import errorHandlingHelper from "../../../utils/errorHandlingHelper" // GET /api/accounting/bank-reconciliation/unreconciled-payments?bankAccountId=|statementId= // Completed, not-yet-reconciled payments — candidates for "Zahlung verknüpfen" // (existing AP payments, recovery after a failed link). Optionally scoped to // one bank account — either directly (bankAccountId) or derived from the // statement being reconciled (statementId, passed by the match modal). const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const query = getQuery(event) let bankAccountId = Number(query.bankAccountId || 0) const statementId = Number(query.statementId || 0) if (!bankAccountId && statementId > 0) { const st: any = await event.context.fetch( `models/c_bankstatement/${statementId}?$select=C_BankAccount_ID`, 'GET', token, null ) bankAccountId = st?.C_BankAccount_ID?.id || 0 } let filter = `IsReconciled eq 'N' and DocStatus eq 'CO'` if (bankAccountId > 0) { filter += ` and C_BankAccount_ID eq ${bankAccountId}` } const res: any = await event.context.fetch( `models/c_payment?$filter=${string.urlEncode(filter)}` + `&$select=C_Payment_ID,DocumentNo,PayAmt,DateTrx,IsReceipt,C_BPartner_ID,Description,C_BankAccount_ID` + `&$expand=C_BPartner_ID($select=Name)` + `&$orderby=${string.urlEncode('DateTrx desc')}&$top=200`, 'GET', token, null ) const payments = (res?.records || []).map((p: any) => ({ id: p.id, documentNo: p.DocumentNo || '', payAmt: p.PayAmt ?? 0, dateTrx: p.DateTrx || '', isReceipt: !!p.IsReceipt, partnerName: p.C_BPartner_ID?.Name || p.C_BPartner_ID?.identifier || '', description: p.Description || '', bankAccountId: p.C_BankAccount_ID?.id || null })) return { status: 200, payments } } 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 })