syia-mcp-vessel-accounts
Version:
MCP server for vessel account management including EyeShare API integration, vessel expenses, and purchase orders
100 lines • 3.4 kB
JavaScript
/**
* Utility functions for filtering Purchase Order Lines data
* Provides functionality to extract only specified fields from PoLines arrays
*/
/**
* Fields to be included in filtered PoLines response
*/
export const FILTERED_PO_LINES_FIELDS = [
'AccountCode',
'CostCentre',
'Extra4',
'QtyWrittenOff',
'PoNumber',
'Line',
'Item',
'Description',
'Ordered',
'Received',
'Invoiced',
'OriginalPrice',
'DiscountPercentage',
'Unit',
'CurrencyCode',
'Reserved',
'InvoicedNow',
'InvoicedUnitPrice'
];
/**
* Filters a single PoLine object to include only specified fields
* @param poLine - The original PoLine object
* @returns Filtered PoLine object with only specified fields
*/
export function filterPoLine(poLine) {
if (!poLine || typeof poLine !== 'object') {
return poLine;
}
const filteredPoLine = {};
FILTERED_PO_LINES_FIELDS.forEach(field => {
if (field in poLine) {
filteredPoLine[field] = poLine[field];
}
});
return filteredPoLine;
}
/**
* Filters an array of PoLines to include only specified fields
* @param poLines - Array of PoLine objects
* @returns Array of filtered PoLine objects
*/
export function filterPoLines(poLines) {
if (!Array.isArray(poLines)) {
return poLines;
}
return poLines.map(filterPoLine);
}
/**
* Filters purchase order data to include only specified PoLines fields
* Processes the entire purchase order structure and filters PoLines arrays
* @param purchaseOrderData - The complete purchase order response data
* @returns Purchase order data with filtered PoLines
*/
export function filterPurchaseOrderPoLines(purchaseOrderData) {
if (!purchaseOrderData || typeof purchaseOrderData !== 'object') {
return purchaseOrderData;
}
// Create a deep copy to avoid modifying the original data
const filtered = JSON.parse(JSON.stringify(purchaseOrderData));
// Handle single purchase order with PoLines
if (filtered.PoLines && Array.isArray(filtered.PoLines)) {
filtered.PoLines = filterPoLines(filtered.PoLines);
}
// Handle array of purchase orders
if (filtered.purchaseOrders && Array.isArray(filtered.purchaseOrders)) {
filtered.purchaseOrders = filtered.purchaseOrders.map((po) => {
if (po.PoLines && Array.isArray(po.PoLines)) {
po.PoLines = filterPoLines(po.PoLines);
}
return po;
});
}
// Handle PurchaseOrders array (EyeShare API format)
if (filtered.PurchaseOrders && Array.isArray(filtered.PurchaseOrders)) {
filtered.PurchaseOrders = filtered.PurchaseOrders.map((po) => {
if (po.PoLines && Array.isArray(po.PoLines)) {
po.PoLines = filterPoLines(po.PoLines);
}
return po;
});
}
// Handle PurchaseOrderLines array (direct line items)
if (filtered.PurchaseOrderLines && Array.isArray(filtered.PurchaseOrderLines)) {
filtered.PurchaseOrderLines = filterPoLines(filtered.PurchaseOrderLines);
}
// Handle ExtraCostLines array (additional cost line items)
if (filtered.ExtraCostLines && Array.isArray(filtered.ExtraCostLines)) {
filtered.ExtraCostLines = filterPoLines(filtered.ExtraCostLines);
}
return filtered;
}
//# sourceMappingURL=poLinesFilter.js.map