import { string } from 'alga-js' import refreshTokenHelper from "../../../utils/refreshTokenHelper" import forceLogoutHelper from "../../../utils/forceLogoutHelper" import errorHandlingHelper from "../../../utils/errorHandlingHelper" import fetchHelper from "../../../utils/fetchHelper" const handleFunc = async (event: any, authToken: any = null) => { const data: any = { partner: null, partnerLocation: null, paymentTerm: null, docType: null, priceList: null } const token = authToken ?? await getTokenHelper(event) const partnerRes: any = await fetchHelper( event, `models/c_bpartner?$filter=${string.urlEncode("Name eq 'Dummy' AND IsVendor eq true AND IsActive eq true")}&$top=1`, 'GET', token, null ) const partner = partnerRes?.records?.[0] if (partner?.id) { data.partner = { id: partner.id, identifier: partner.Name } if (partner.C_PaymentTerm_ID?.id) { data.paymentTerm = { id: partner.C_PaymentTerm_ID.id, identifier: partner.C_PaymentTerm_ID.identifier || '' } } const locRes: any = await fetchHelper( event, `models/c_bpartner_location?$filter=${string.urlEncode('C_BPartner_ID eq ' + partner.id + ' AND IsActive eq true')}&$orderby=${string.urlEncode('c_bpartner_location_id asc')}&$top=1`, 'GET', token, null ) const loc = locRes?.records?.[0] if (loc?.id) { data.partnerLocation = { id: loc.id, identifier: loc.Name || '' } } } // Pinned: limited-role POs always use doctype 1000016 ("Purchase Order"). // Used as both C_DocType_ID and C_DocTypeTarget_ID on the order. const DOCTYPE_ID = 1000016 const docRes: any = await fetchHelper( event, `models/c_doctype/${DOCTYPE_ID}`, 'GET', token, null ) data.docType = { id: DOCTYPE_ID, identifier: docRes?.Name || 'Purchase Order' } // Pinned: derive the purchase price list from the env-configured version // (PURCHASE_PRICE_LIST_VERSION_ID, defaults to 1000004) so every limited-role // PO uses the same procurement pricing, regardless of org. const PRICELIST_VERSION_ID = Number(process.env.PURCHASE_PRICE_LIST_VERSION_ID) || 1000004 const plvRes: any = await fetchHelper( event, `models/m_pricelist_version/${PRICELIST_VERSION_ID}`, 'GET', token, null ) const plId = plvRes?.M_PriceList_ID?.id if (plId) { let currencyId = 102 let currency = 'EUR' const plRes: any = await fetchHelper( event, `models/m_pricelist/${plId}`, 'GET', token, null ) if (plRes?.C_Currency_ID?.id) { currencyId = plRes.C_Currency_ID.id currency = plRes.C_Currency_ID.identifier || currency } data.priceList = { id: plId, identifier: plvRes?.M_PriceList_ID?.identifier || plRes?.Name || '', versionId: PRICELIST_VERSION_ID, versionIdentifier: plvRes?.Name || '', currencyId, currency } } else { data.priceList = { id: '', identifier: '', versionId: PRICELIST_VERSION_ID, versionIdentifier: '', currencyId: 102, currency: 'EUR' } } return data } export default defineEventHandler(async (event) => { let data: any = {} try { data = await handleFunc(event) } catch (err: any) { try { const authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch (error: any) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) forceLogoutHelper(event, data) } } return data })