import { isSettlementMarketplace, recordSettlementExport, settlementExportLogAvailable, type PeriodExportInput } from '../../../utils/settlementExportLog' import { userNameOf } from '../../../utils/amazonAds/routeShared' // Records one produced lexoffice CSV file in the per-period export log. // POST { marketplace, orderSourceId, variant: 'combined'|'payouts'|'positions', // fileName?, rowCount?, periods: [{ periodId, periodLabel?, payoutDate?, // amount?, currency?, positions, complete, rowCount?, payout, net? }] } // → { status, periods: { [periodId]: PeriodExportRecord } } // Called by the settlement pages right after the browser received the file. const VARIANTS = new Set(['combined', 'payouts', 'positions']) export default defineEventHandler(async (event) => { await getTokenHelper(event) const body = await readBody(event) const marketplace = String(body?.marketplace || '') const orderSourceId = Number(body?.orderSourceId || 0) const variant = String(body?.variant || '') if (!isSettlementMarketplace(marketplace) || !orderSourceId || !VARIANTS.has(variant)) { return { status: 400, message: 'marketplace, orderSourceId and variant are required' } } const periods: PeriodExportInput[] = (Array.isArray(body?.periods) ? body.periods : []) .filter((p: any) => p && p.periodId) .map((p: any) => ({ periodId: String(p.periodId), periodLabel: p.periodLabel ? String(p.periodLabel) : undefined, payoutDate: p.payoutDate ? String(p.payoutDate) : undefined, amount: p.amount == null || p.amount === '' ? null : Number(p.amount), currency: p.currency ? String(p.currency) : undefined, positions: !!p.positions, complete: !!p.complete, rowCount: Number(p.rowCount || 0), payout: !!p.payout, net: p.net == null || p.net === '' ? null : Number(p.net) })) if (!periods.length) { return { status: 400, message: 'No periods given' } } if (!settlementExportLogAvailable()) { return { status: 503, message: 'Export-Protokoll nicht verfügbar (data/settlement-exports.db konnte nicht geöffnet werden)' } } const updated = recordSettlementExport({ marketplace, orderSourceId, variant: variant as any, fileName: body?.fileName ? String(body.fileName) : null, rowCount: Number(body?.rowCount || 0), user: userNameOf(event), periods }) return { status: 200, periods: updated } })