/** * POST /api/settings/price-sheet/resolve — body: SheetOptions → { status, sheet: PriceSheet } * `shipperIds` with more than one carrier resolves one sheet per carrier and merges them * (mergePriceSheets: rows / services / surcharges tagged with their carrier). */ import { withIdempiere } from '../../../utils/shipping/withIdempiere' import { resolvePriceSheet } from '../../../utils/shipping/priceSheet' import { mergePriceSheets, sheetShipperIds } from '../../../../app/utils/shippingPriceSheet' export default defineEventHandler(withIdempiere(async (event, token) => { const body: any = await readBody(event).catch(() => ({})) try { const ids = sheetShipperIds(body || {}) const sheets = await Promise.all(ids.map((shipperId) => resolvePriceSheet(event, token, { ...(body || {}), shipperId, shipperIds: ids }))) const sheet = mergePriceSheets(sheets) if (ids.length === 1) sheet.carriers = [{ shipperId: ids[0], shipperName: sheet.shipperName }] return { status: 200, sheet } } catch (err: any) { if (Number(err?.statusCode) === 401 || Number(err?.status) === 401) throw err const status = Number(err?.statusCode ?? err?.status ?? err?.response?.status) || 500 return { status, message: err?.statusMessage || err?.data?.detail || err?.data?.title || err?.message || 'Resolve failed' } } }))