/** * POST /api/settings/price-sheet/cell (staff only) — write ONE Tier 1 / Tier 2 row for a cell edit. * Body: TierUpsertInput (scope, organizationId, bpartnerId, shipperId, countryId, mode tier|perkg|kleinpaket, * weight, prevWeight, price | base, perKg, rowId, validFrom/To, deactivate) → { status, rowId, table } * ⚠ Writes the live billing tables (dev .env = prod iDempiere). */ import { gateFromEvent } from '../../../utils/chatAccess' import { upsertTierRow } from '../../../utils/shipping/priceSheet' export default defineEventHandler(async (event) => { const { token } = await gateFromEvent(event, { requireChat: false }) const body: any = await readBody(event).catch(() => ({})) try { const r = await upsertTierRow(event, token, body) return { status: 200, ...r } } catch (err: any) { const status = Number(err?.statusCode ?? err?.status ?? err?.response?.status) || 500 return { status, message: err?.statusMessage || err?.data?.detail || err?.data?.title || err?.message || 'Save failed' } } })