import odooApi from '@/core/api/odooApi' import mailer from '@/core/utils/mailer' import FinishCheckoutEmail from '@/lib/checkout/email/FinishCheckoutEmail' import { render } from '@react-email/render' import axios from 'axios' import camelcaseObjectDeep from 'camelcase-object-deep' export default async function handler(req, res) { const { orderName = null } = req.query if (!orderName) { 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 midtransAuthKey = btoa(process.env.MIDTRANS_SERVER_KEY + ':') const midtransHeaders = { Accept: 'application/json', 'Content-Type': 'application/json', Authorization: `Basic ${midtransAuthKey}` } let midtransStatus = {} try { midtransStatus = await axios.get(`${process.env.MIDTRANS_HOST}/v2/${orderName}/status`, { headers: midtransHeaders }) midtransStatus = camelcaseObjectDeep(midtransStatus.data) } catch (error) { console.log(error) } let statusPayment = 'manual' if (midtransStatus?.orderId) { const transactionStatus = midtransStatus.transactionStatus statusPayment = 'failed' if (['capture', 'settlement'].includes(transactionStatus)) { statusPayment = 'success' } else if (transactionStatus == 'pending') { statusPayment = 'pending' } } const query = `name=${orderName.replaceAll('-', '/')}&limit=1&context=quotation` const searchTransaction = await odooApi( 'GET', `/api/v1/partner/${auth.partnerId}/sale_order?${query}`, {}, { Token: auth.token } ) if (searchTransaction.saleOrderTotal == 0) { return res.status(400).json({ error: 'Transaction Not Found' }) } let transaction = await odooApi( 'GET', `/api/v1/partner/${auth.partnerId}/sale_order/${searchTransaction.saleOrders[0].id}`, {}, { Token: auth.token } ) if (!transaction?.id) { return res.status(400).json({ error: 'Transaction Detail Not Found' }) } transaction.subtotal = 0 transaction.discountTotal = 0 for (const product of transaction.products) { transaction.subtotal += product.price.price * product.quantity transaction.discountTotal -= (product.price.price - product.price.priceDiscount) * product.quantity } const emailMessage = render( ) mailer.sendMail({ from: 'sales@indoteknik.com', to: transaction.address.customer.email, subject: 'Pembelian di Indoteknik.com', html: emailMessage }) return res.status(200).json({ description: 'success' }) }