import { string } from 'alga-js' import refreshTokenHelper from "../../utils/refreshTokenHelper" import getTokenHelper from "../../utils/getTokenHelper" import forceLogoutHelper from "../../utils/forceLogoutHelper" import errorHandlingHelper from "../../utils/errorHandlingHelper" import fetchHelper from "../../utils/fetchHelper" const handleFunc = async (event: any, authToken: any = null) => { let data: any = {} const config = useRuntimeConfig() const token = authToken ?? await getTokenHelper(event) const organizationId = getCookie(event, 'logship_organization_id') const query = getQuery(event) // Fetch transactions (outbound movements only - negative MovementQty) // This captures all customer shipments, sales, and outbound movements const res: any = await fetchHelper( event, `models/m_transaction?$filter=${string.urlEncode("MovementQty lt 0 AND isActive eq true")}&$orderby=${string.urlEncode('MovementDate desc')}&$top=2000`, 'GET', token, null ) if(res?.records) { // Get unique product IDs from all transactions const productIds = new Set() res.records.forEach((transaction: any) => { const productId = transaction.M_Product_ID?.id || transaction.m_product_id?.id if (productId) { productIds.add(productId) } }) // Fetch product details with storage for each unique product const productDataMap = new Map() let debugLogged = false for (const productId of productIds) { try { const productRes: any = await fetchHelper( event, `models/m_product/${productId}?$expand=M_Storage`, 'GET', token, null ) if (productRes) { productDataMap.set(productId, productRes) // Debug log first product if (!debugLogged) { console.log('=== PRODUCT STORAGE DEBUG ===') console.log('Product ID:', productId) console.log('Product Name:', productRes.Name || productRes.identifier) console.log('M_Storage:', productRes.M_Storage || productRes.m_storage || 'NOT FOUND') if (productRes.M_Storage || productRes.m_storage) { const storage = productRes.M_Storage || productRes.m_storage console.log('Storage length:', storage.length) if (storage.length > 0) { console.log('First storage:', storage[0]) } } debugLogged = true } } } catch (err) { console.error(`Error fetching product ${productId}:`, err) } } // Merge product data into transactions res.records.forEach((transaction: any) => { const productId = transaction.M_Product_ID?.id || transaction.m_product_id?.id if (productId && productDataMap.has(productId)) { const productData = productDataMap.get(productId) // Add storage data to the transaction if (transaction.M_Product_ID) { transaction.M_Product_ID.M_Storage = productData.M_Storage || [] } if (transaction.m_product_id) { transaction.m_product_id.m_storage = productData.M_Storage || productData.m_storage || [] } } }) data = res } return data } export default defineEventHandler(async (event) => { let data: any = {} try { data = await handleFunc(event) } catch(err: any) { try { let 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 })