import odooApi from '@/core/api/odooApi' import camelcaseObjectDeep from 'camelcase-object-deep' import midtransClient from 'midtrans-client' export default async function handler(req, res) { const PPN = process.env.NEXT_PUBLIC_PPN const { transactionId = null } = req.query if (!transactionId) { return res.status(422).json({ error: 'parameter missing' }) } let { auth } = req.cookies if (!auth) { return res.status(401).json({ error: 'Unauthorized' }) } auth = JSON.parse(auth) const transaction = await odooApi( 'GET', `/api/v1/partner/${auth.partnerId}/sale_order/${transactionId}`, {}, { Token: auth.token } ) if (!transaction?.id) { return res.status(400).json({ error: 'No Data' }) } const snap = new midtransClient.Snap({ isProduction: process.env.MIDTRANS_ENV == 'production', serverKey: process.env.MIDTRANS_SERVER_KEY }) let itemDetails = transaction.products.map((product) => ({ id: product.code, price: Math.round(product.price.priceDiscount), quantity: product.quantity, name: product.name?.substring(0, 50) })) itemDetails.push({ id: 'TAX', price: transaction.amountTax, quantity: 1, name: 'PPN 11%' }) const parameter = { transaction_details: { order_id: transaction.name?.replaceAll('/', '-'), gross_amount: Math.floor(transaction.amountTotal) }, credit_card: { secure: true }, customer_details: { first_name: transaction.address.customer.name, email: transaction.address.customer.email || '', phone: transaction.address.customer.phone || '' } } const midtransTransaction = await snap.createTransaction(parameter) return res.status(200).json(camelcaseObjectDeep(midtransTransaction)) }