Compare commits

..

No commits in common. "5f59c23fbe65d385c56abb58031ab227be01dac5" and "1cef3a8d1d246c86ed4ecd329bc1d15d378ff1dc" have entirely different histories.

105 changed files with 552 additions and 1980 deletions

View File

@ -1,11 +1,6 @@
import mongoose from 'mongoose';
import { generateId } from '../../utils.js';
import {
getObject,
editObject,
aggregateRollups,
aggregateRollupsHistory,
} from '../../database.js';
import { getObject, editObject, aggregateRollups, aggregateRollupsHistory } from '../../database.js';
const { Schema } = mongoose;
const parentStockModelNames = {
@ -48,6 +43,8 @@ const buildParentState = (parentType, parentStock, currentAmount, startingAmount
const progress = currentAmount / startingAmount;
console.log('progress', progress);
if (currentAmount === startingAmount) {
return { ...parentStock.state, type: fullState, progress: 1 };
}

View File

@ -1,81 +0,0 @@
import { afterEach, describe, expect, it, jest } from '@jest/globals';
import { getOrder, syncOrders } from '../orders.js';
const successXml = `<?xml version="1.0" encoding="utf-8"?>
<GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Ack>Success</Ack>
<HasMoreOrders>false</HasMoreOrders>
<OrderArray>
<Order>
<OrderID>12-34567-89012</OrderID>
<OrderStatus>Completed</OrderStatus>
<Subtotal currencyID="GBP">10.00</Subtotal>
<Total currencyID="GBP">12.50</Total>
<BuyerUserID>ebay-buyer</BuyerUserID>
</Order>
</OrderArray>
</GetOrdersResponse>`;
const marketplace = {
name: 'eBay UK',
config: { accessToken: 'token', marketplaceId: 'EBAY_GB' },
};
function mockTradingResponse(xml = successXml) {
return jest.spyOn(global, 'fetch').mockResolvedValue({
ok: true,
status: 200,
text: async () => xml,
});
}
describe('eBay Trading API order fetch', () => {
afterEach(() => {
jest.restoreAllMocks();
});
it('syncs orders with GetOrders and a default lookback', async () => {
const fetchSpy = mockTradingResponse();
const orders = await syncOrders(marketplace);
expect(fetchSpy).toHaveBeenCalledWith(
'https://api.ebay.com/ws/api.dll',
expect.objectContaining({
method: 'POST',
headers: expect.objectContaining({
'X-EBAY-API-CALL-NAME': 'GetOrders',
'X-EBAY-API-IAF-TOKEN': 'token',
'X-EBAY-API-SITEID': '3',
}),
})
);
const body = fetchSpy.mock.calls[0][1].body;
expect(body).toContain('<GetOrdersRequest');
expect(body).toContain('<NumberOfDays>30</NumberOfDays>');
expect(body).toContain('<OrderRole>Seller</OrderRole>');
expect(orders).toHaveLength(1);
expect(orders[0].orderId).toBe('12-34567-89012');
});
it('uses CreateTimeFrom/To when a sync window is provided', async () => {
const fetchSpy = mockTradingResponse();
await syncOrders(marketplace, { startTime: 1756512000, endTime: 1756598400 });
const body = fetchSpy.mock.calls[0][1].body;
expect(body).toContain('<CreateTimeFrom>2025-08-30T00:00:00.000Z</CreateTimeFrom>');
expect(body).toContain('<CreateTimeTo>2025-08-31T00:00:00.000Z</CreateTimeTo>');
expect(body).not.toContain('<NumberOfDays>');
});
it('loads a single order by OrderID', async () => {
const fetchSpy = mockTradingResponse();
const order = await getOrder(marketplace, '12-34567-89012');
const body = fetchSpy.mock.calls[0][1].body;
expect(body).toContain('<OrderID>12-34567-89012</OrderID>');
expect(order.orderId).toBe('12-34567-89012');
});
});

View File

@ -6,106 +6,56 @@ import {
mapOrderLineItems,
mapOrderShipments,
handleWebhook,
parseGetOrdersResponse,
} from '../orders.js';
const sampleGetOrdersXml = `
<GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Ack>Success</Ack>
<HasMoreOrders>false</HasMoreOrders>
<OrderArray>
<Order>
<OrderID>12-34567-89012</OrderID>
<ExtendedOrderID>12-34567-89012</ExtendedOrderID>
<OrderStatus>Completed</OrderStatus>
<AmountPaid currencyID="GBP">13.70</AmountPaid>
<CheckoutStatus>
<Status>Complete</Status>
</CheckoutStatus>
<ShippingDetails>
<SalesTax>
<SalesTaxAmount currencyID="GBP">1.20</SalesTaxAmount>
</SalesTax>
<ShipmentTrackingDetails>
<ShippingCarrierUsed>Royal Mail</ShippingCarrierUsed>
<ShipmentTrackingNumber>TRACK123</ShipmentTrackingNumber>
</ShipmentTrackingDetails>
</ShippingDetails>
<CreatedTime>2026-08-01T09:00:00.000Z</CreatedTime>
<ShippingAddress>
<Name>Jane Buyer</Name>
<Street1>1 High St</Street1>
<CityName>London</CityName>
<PostalCode>SW1A 1AA</PostalCode>
<Country>GB</Country>
<Phone>012345</Phone>
</ShippingAddress>
<ShippingServiceSelected>
<ShippingService>UK_RoyalMailFirstClassStandard</ShippingService>
<ShippingServiceCost currencyID="GBP">2.50</ShippingServiceCost>
</ShippingServiceSelected>
<Subtotal currencyID="GBP">10.00</Subtotal>
<Total currencyID="GBP">13.70</Total>
<TransactionArray>
<Transaction>
<Buyer>
<Email>buyer@example.com</Email>
<UserFirstName>Jane</UserFirstName>
<UserLastName>Buyer</UserLastName>
</Buyer>
<Item>
<ItemID>111</ItemID>
<Title>Red widget</Title>
<SKU>SKU-RED</SKU>
</Item>
<QuantityPurchased>2</QuantityPurchased>
<TransactionID>line-1</TransactionID>
<TransactionPrice currencyID="GBP">5.00</TransactionPrice>
<Taxes>
<TotalTaxAmount currencyID="GBP">1.00</TotalTaxAmount>
</Taxes>
<OrderLineItemID>line-1</OrderLineItemID>
</Transaction>
</TransactionArray>
<BuyerUserID>ebay-buyer</BuyerUserID>
<PaidTime>2026-08-01T09:05:00.000Z</PaidTime>
<ShippedTime>2026-08-01T10:00:00.000Z</ShippedTime>
<CancelStatus>NotApplicable</CancelStatus>
</Order>
</OrderArray>
</GetOrdersResponse>
`;
const ebayOrder = parseGetOrdersResponse(sampleGetOrdersXml).orders[0];
describe('eBay Trading API GetOrders parsing', () => {
it('parses order totals, buyer, lines, and tracking', () => {
expect(ebayOrder).toMatchObject({
orderId: '12-34567-89012',
orderStatus: 'Completed',
buyerUserId: 'ebay-buyer',
buyerEmail: 'buyer@example.com',
subtotal: 10,
shippingAmount: 2.5,
salesTaxAmount: 1.2,
total: 13.7,
});
expect(ebayOrder.shippingAddress.city).toBe('London');
expect(ebayOrder.transactions[0]).toMatchObject({
const ebayOrder = {
orderId: '12-34567-89012',
orderFulfillmentStatus: 'NOT_STARTED',
pricingSummary: {
priceSubtotal: { value: '10.00' },
deliveryCost: { value: '2.50' },
tax: { value: '1.20' },
total: { value: '13.70' },
},
buyer: {
username: 'ebay-buyer',
buyerRegistrationAddress: { email: 'buyer@example.com' },
},
fulfillmentStartInstructions: [
{
shippingStep: {
shipTo: {
fullName: 'Jane Buyer',
primaryPhone: { phoneNumber: '012345' },
contactAddress: {
addressLine1: '1 High St',
city: 'London',
postalCode: 'SW1A 1AA',
countryCode: 'GB',
},
},
},
},
],
lineItems: [
{
lineItemId: 'line-1',
sku: 'SKU-RED',
title: 'Red widget',
quantity: 2,
transactionPrice: 5,
});
expect(ebayOrder.shipments[0].trackingNumber).toBe('TRACK123');
});
it('treats HasMoreOrders as false when missing', () => {
expect(parseGetOrdersResponse('<Ack>Success</Ack>')).toEqual({
orders: [],
hasMoreOrders: false,
});
});
});
lineItemCost: { value: '5.00' },
taxes: [{ amount: { value: '1.00' } }],
},
],
shippingFulfillments: [
{
fulfillmentId: 'ful-1',
shipmentTrackingNumber: 'TRACK123',
shippedDate: '2026-08-01T10:00:00.000Z',
lineItems: [{ lineItemId: 'line-1' }],
},
],
};
describe('eBay order mappers', () => {
it('maps sales order totals and externalReference', () => {
@ -114,18 +64,13 @@ describe('eBay order mappers', () => {
expect(mapped.totalAmount).toBe(10);
expect(mapped.shippingAmount).toBe(2.5);
expect(mapped.totalTaxAmount).toBe(1.2);
expect(mapped.state.type).toBe('shipped');
expect(mapped.state.type).toBe('draft');
});
it('maps cancelled orders', () => {
expect(mapOrderStatus({ cancelStatus: 'CancelClosedWithRefund' })).toBe('cancelled');
expect(mapOrderStatus({ orderStatus: 'Cancelled' })).toBe('cancelled');
});
it('maps paid but unshipped orders as confirmed', () => {
expect(mapOrderStatus({ orderStatus: 'Completed', checkoutStatus: 'Complete' })).toBe(
'confirmed'
);
expect(
mapOrderStatus({ cancelStatus: { cancelState: 'CANCELED' } })
).toBe('cancelled');
});
it('maps buyer to client with marketplace buyer id', () => {
@ -148,10 +93,10 @@ describe('eBay order mappers', () => {
});
});
it('maps shipments from tracking details', () => {
it('maps shipments from fulfillments', () => {
const shipments = mapOrderShipments(ebayOrder);
expect(shipments[0]).toMatchObject({
externalReference: 'TRACK123',
externalReference: 'ful-1',
trackingNumber: 'TRACK123',
});
expect(shipments[0].state.type).toBe('shipped');
@ -160,10 +105,7 @@ describe('eBay order mappers', () => {
it('classifies commerce notification topics', async () => {
const sold = await handleWebhook(
{ name: 'eBay' },
{
metadata: { topic: 'ORDER_CONFIRMATION' },
notification: { data: { orderId: 'o1' }, notificationId: 'n1' },
}
{ metadata: { topic: 'ORDER_CONFIRMATION' }, notification: { data: { orderId: 'o1' }, notificationId: 'n1' } }
);
expect(sold).toMatchObject({ action: 'orderUpdate', orderId: 'o1', notificationId: 'n1' });

View File

@ -1,217 +1,49 @@
import { makeRequest, logger } from './shared.js';
import { makeTradingRequest, xmlBlocks, xmlEscape, xmlNumber, xmlText } from './trading.js';
const ENTRIES_PER_PAGE = 100;
const DEFAULT_LOOKBACK_DAYS = 30;
const MAX_RANGE_MS = 90 * 24 * 60 * 60 * 1000;
const INVALID_EMAILS = new Set(['', 'invalid request']);
const CANCELLED_STATUSES = new Set([
'Cancelled',
'CancelClosedNoRefund',
'CancelClosedWithRefund',
'CancelClosedUnknownRefund',
'CancelClosedForCommitment',
]);
function headerXml(orderXml) {
return String(orderXml || '').replace(/<TransactionArray>[\s\S]*?<\/TransactionArray>/i, '');
}
function parseShippingAddress(xml) {
const block = xmlBlocks(xml, 'ShippingAddress')[0] || '';
return {
name: xmlText(block, 'Name'),
street1: xmlText(block, 'Street1'),
street2: xmlText(block, 'Street2'),
city: xmlText(block, 'CityName'),
state: xmlText(block, 'StateOrProvince'),
postalCode: xmlText(block, 'PostalCode'),
country: xmlText(block, 'Country'),
phone: xmlText(block, 'Phone'),
};
}
function parseTrackingDetails(xml) {
return xmlBlocks(xml, 'ShipmentTrackingDetails')
.map((block) => ({
trackingNumber: xmlText(block, 'ShipmentTrackingNumber'),
carrier: xmlText(block, 'ShippingCarrierUsed'),
}))
.filter((detail) => detail.trackingNumber);
}
function parseTradingTransaction(xml) {
const item = xmlBlocks(xml, 'Item')[0] || '';
const buyer = xmlBlocks(xml, 'Buyer')[0] || '';
const taxes = xmlBlocks(xml, 'Taxes')[0] || '';
return {
transactionId: xmlText(xml, 'TransactionID'),
orderLineItemId: xmlText(xml, 'OrderLineItemID'),
sku: xmlText(item, 'SKU'),
title: xmlText(item, 'Title'),
quantity: xmlNumber(xml, 'QuantityPurchased') || 1,
transactionPrice: xmlNumber(xml, 'TransactionPrice'),
totalTaxAmount: xmlNumber(taxes, 'TotalTaxAmount'),
email: xmlText(buyer, 'Email'),
firstName: xmlText(buyer, 'UserFirstName'),
lastName: xmlText(buyer, 'UserLastName'),
tracking: parseTrackingDetails(xml),
};
}
function firstValidEmail(transactions) {
for (const transaction of transactions) {
const email = (transaction.email || '').trim();
if (email && !INVALID_EMAILS.has(email.toLowerCase())) {
return email;
}
}
return '';
}
function dedupeTracking(details) {
const seen = new Set();
const unique = [];
for (const detail of details) {
if (seen.has(detail.trackingNumber)) continue;
seen.add(detail.trackingNumber);
unique.push(detail);
}
return unique;
}
export function parseTradingOrder(orderXml) {
const header = headerXml(orderXml);
const shippingSelected = xmlBlocks(header, 'ShippingServiceSelected')[0] || '';
const salesTaxBlock = xmlBlocks(header, 'SalesTax')[0] || '';
const checkout = xmlBlocks(header, 'CheckoutStatus')[0] || '';
const transactions = xmlBlocks(orderXml, 'Transaction').map(parseTradingTransaction);
const taxFromTransactions = transactions.reduce((sum, line) => sum + line.totalTaxAmount, 0);
return {
orderId: xmlText(header, 'OrderID') || xmlText(header, 'ExtendedOrderID'),
extendedOrderId: xmlText(header, 'ExtendedOrderID'),
orderStatus: xmlText(header, 'OrderStatus'),
cancelStatus: xmlText(header, 'CancelStatus'),
checkoutStatus: xmlText(checkout, 'Status'),
paidTime: xmlText(header, 'PaidTime'),
shippedTime: xmlText(header, 'ShippedTime'),
createdTime: xmlText(header, 'CreatedTime'),
buyerUserId: xmlText(header, 'BuyerUserID'),
buyerEmail: firstValidEmail(transactions),
shippingAddress: parseShippingAddress(header),
subtotal: xmlNumber(header, 'Subtotal'),
total: xmlNumber(header, 'Total'),
amountPaid: xmlNumber(header, 'AmountPaid'),
shippingAmount: xmlNumber(shippingSelected, 'ShippingServiceCost'),
salesTaxAmount: xmlNumber(salesTaxBlock, 'SalesTaxAmount') || taxFromTransactions,
transactions,
shipments: dedupeTracking([
...parseTrackingDetails(header),
...transactions.flatMap((line) => line.tracking),
]),
};
}
export function parseGetOrdersResponse(xml = '') {
return {
orders: xmlBlocks(xml, 'Order').map(parseTradingOrder),
hasMoreOrders: xmlText(xml, 'HasMoreOrders').toLowerCase() === 'true',
};
}
function buildGetOrdersRequest({
startIso,
endIso,
numberOfDays,
pageNumber = 1,
orderIds = [],
} = {}) {
const filters = [];
if (orderIds.length) {
filters.push(
` <OrderIDArray>\n${orderIds
.map((id) => ` <OrderID>${xmlEscape(id)}</OrderID>`)
.join('\n')}\n </OrderIDArray>`
);
} else if (numberOfDays) {
filters.push(` <NumberOfDays>${numberOfDays}</NumberOfDays>`);
} else {
if (startIso) filters.push(` <CreateTimeFrom>${startIso}</CreateTimeFrom>`);
if (endIso) filters.push(` <CreateTimeTo>${endIso}</CreateTimeTo>`);
}
return `<?xml version="1.0" encoding="utf-8"?>
<GetOrdersRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<ErrorLanguage>en_GB</ErrorLanguage>
<WarningLevel>High</WarningLevel>
<DetailLevel>ReturnAll</DetailLevel>
<OrderRole>Seller</OrderRole>
<OrderStatus>All</OrderStatus>
${filters.join('\n')}
<Pagination>
<EntriesPerPage>${ENTRIES_PER_PAGE}</EntriesPerPage>
<PageNumber>${pageNumber}</PageNumber>
</Pagination>
</GetOrdersRequest>`;
}
function createTimeWindows(startTime, endTime) {
if (!startTime && !endTime) {
return [{ numberOfDays: DEFAULT_LOOKBACK_DAYS }];
}
const nowSec = Math.floor(Date.now() / 1000);
const startSec = startTime || endTime - DEFAULT_LOOKBACK_DAYS * 86400;
const endSec = endTime || nowSec;
const windows = [];
let cursor = Math.min(startSec, endSec) * 1000;
const endMs = Math.max(startSec, endSec) * 1000;
while (cursor < endMs) {
const windowEnd = Math.min(cursor + MAX_RANGE_MS, endMs);
windows.push({
startIso: new Date(cursor).toISOString(),
endIso: new Date(windowEnd).toISOString(),
});
cursor = windowEnd;
}
return windows.length ? windows : [{ numberOfDays: DEFAULT_LOOKBACK_DAYS }];
}
async function fetchOrdersPage(marketplace, requestOptions) {
const xml = await makeTradingRequest({
marketplace,
callName: 'GetOrders',
body: buildGetOrdersRequest(requestOptions),
});
return parseGetOrdersResponse(xml);
}
async function fetchOrdersInWindow(marketplace, windowOptions) {
const orders = [];
let pageNumber = 1;
let hasMore = true;
while (hasMore) {
const page = await fetchOrdersPage(marketplace, { ...windowOptions, pageNumber });
if (page.orders.length) {
orders.push(...page.orders);
}
hasMore = page.hasMoreOrders && page.orders.length > 0;
pageNumber += 1;
}
return orders;
}
async function fetchAllOrders(marketplace, { startTime, endTime } = {}) {
const orders = [];
for (const window of createTimeWindows(startTime, endTime)) {
orders.push(...(await fetchOrdersInWindow(marketplace, window)));
let offset = 0;
const limit = 50;
const filterParts = [];
if (startTime) {
const isoStart = new Date(startTime * 1000).toISOString();
filterParts.push(`creationdate:[${isoStart}..`);
}
if (endTime) {
const isoEnd = new Date(endTime * 1000).toISOString();
if (filterParts.length && filterParts[0].startsWith('creationdate:')) {
filterParts[0] = filterParts[0] + `${isoEnd}]`;
} else {
filterParts.push(`creationdate:[..${isoEnd}]`);
}
} else if (filterParts.length) {
filterParts[0] = filterParts[0] + ']';
}
do {
const params = { limit, offset };
if (filterParts.length) {
params.filter = filterParts.join(',');
}
const data = await makeRequest({
marketplace,
path: '/sell/fulfillment/v1/order',
params,
});
if (data?.orders?.length) {
orders.push(...data.orders);
}
if (!data?.orders?.length || orders.length >= (data.total || 0)) {
break;
}
offset += limit;
} while (true);
return orders;
}
@ -224,32 +56,38 @@ export async function syncOrders(marketplace, { startTime, endTime } = {}) {
return orders;
}
const ORDER_STATUS_MAP = {
NOT_STARTED: 'draft',
IN_PROGRESS: 'confirmed',
FULFILLED: 'shipped',
CANCELLED: 'cancelled',
};
const FULFILLMENT_STATUS_MAP = {
NOT_STARTED: 'confirmed',
IN_PROGRESS: 'shipped',
FULFILLED: 'delivered',
};
export function mapOrderStatus(ebayOrder) {
const cancelStatus = ebayOrder.cancelStatus || '';
if (CANCELLED_STATUSES.has(ebayOrder.orderStatus) || CANCELLED_STATUSES.has(cancelStatus)) {
if (ebayOrder.cancelStatus?.cancelState === 'CANCELED') {
return 'cancelled';
}
if (ebayOrder.shippedTime) {
return 'shipped';
const fulfillmentStatus = ebayOrder.fulfillmentStartInstructions?.[0]?.fulfillmentStatus;
if (fulfillmentStatus && FULFILLMENT_STATUS_MAP[fulfillmentStatus]) {
return FULFILLMENT_STATUS_MAP[fulfillmentStatus];
}
if (
ebayOrder.orderStatus === 'Completed' ||
ebayOrder.checkoutStatus === 'Complete' ||
ebayOrder.paidTime
) {
return 'confirmed';
}
return 'draft';
return ORDER_STATUS_MAP[ebayOrder.orderFulfillmentStatus] || 'draft';
}
export function mapOrderToSalesOrder(ebayOrder) {
const totalAmount = ebayOrder.subtotal || 0;
const shippingAmount = ebayOrder.shippingAmount || 0;
const totalTax = ebayOrder.salesTaxAmount || 0;
const grandTotal = ebayOrder.total || 0;
const pricingSummary = ebayOrder.pricingSummary || {};
const totalAmount = parseFloat(pricingSummary.priceSubtotal?.value || 0);
const shippingAmount = parseFloat(pricingSummary.deliveryCost?.value || 0);
const totalTax = parseFloat(pricingSummary.tax?.value || 0);
const grandTotal = parseFloat(pricingSummary.total?.value || 0);
return {
externalReference: ebayOrder.orderId,
@ -265,47 +103,54 @@ export function mapOrderToSalesOrder(ebayOrder) {
}
export function mapBuyerToClient(ebayOrder) {
const address = ebayOrder.shippingAddress || {};
const buyer = ebayOrder.transactions?.[0] || {};
const buyerName = [buyer.firstName, buyer.lastName].filter(Boolean).join(' ');
const fullName = address.name || buyerName || ebayOrder.buyerUserId || 'Unknown';
const buyer = ebayOrder.buyer || {};
const address = ebayOrder.fulfillmentStartInstructions?.[0]?.shippingStep?.shipTo || {};
const fullName = address.fullName || buyer.username || 'Unknown';
const contactAddress = address.contactAddress || {};
return {
name: fullName,
email: ebayOrder.buyerEmail || '',
phone: address.phone || '',
externalReference: ebayOrder.buyerUserId || '',
email: buyer.buyerRegistrationAddress?.email || '',
phone: address.primaryPhone?.phoneNumber || '',
externalReference: buyer.username || '',
address: {
addressLine1: address.street1 || '',
addressLine2: address.street2 || '',
city: address.city || '',
state: address.state || '',
postcode: address.postalCode || '',
country: address.country || '',
addressLine1: contactAddress.addressLine1 || '',
addressLine2: contactAddress.addressLine2 || '',
city: contactAddress.city || '',
state: contactAddress.stateOrProvince || '',
postcode: contactAddress.postalCode || '',
country: contactAddress.countryCode || '',
},
};
}
export async function getOrder(marketplace, orderId) {
const xml = await makeTradingRequest({
const order = await makeRequest({
marketplace,
callName: 'GetOrders',
body: buildGetOrdersRequest({ orderIds: [orderId] }),
path: `/sell/fulfillment/v1/order/${encodeURIComponent(orderId)}`,
});
const { orders } = parseGetOrdersResponse(xml);
if (!orders.length) {
throw new Error(`eBay order ${orderId} was not found`);
}
return orders[0];
const fulfillments = await makeRequest({
marketplace,
path: `/sell/fulfillment/v1/order/${encodeURIComponent(orderId)}/shipping_fulfillment`,
acceptableStatuses: [404],
});
return {
...order,
shippingFulfillments: fulfillments?.fulfillments || [],
};
}
export function mapOrderLineItems(ebayOrder) {
return (ebayOrder.transactions || []).map((line) => {
const unit = line.transactionPrice || 0;
const tax = line.totalTaxAmount || 0;
return (ebayOrder.lineItems || []).map((line) => {
const unit = parseFloat(line.lineItemCost?.value || 0);
const tax = (line.taxes || []).reduce(
(sum, taxLine) => sum + parseFloat(taxLine.amount?.value || 0),
0
);
const quantity = line.quantity || 1;
return {
externalReference: line.orderLineItemId || line.transactionId,
externalReference: line.lineItemId,
sku: line.sku || '',
name: line.title || line.sku || 'Marketplace item',
quantity,
@ -318,26 +163,24 @@ export function mapOrderLineItems(ebayOrder) {
}
export function mapOrderShipments(ebayOrder) {
const shipments = ebayOrder.shipments || [];
if (!shipments.length) {
const shippingAmount = parseFloat(ebayOrder.pricingSummary?.deliveryCost?.value || 0);
const fulfillments = ebayOrder.shippingFulfillments || [];
if (!fulfillments.length) {
return [];
}
const shippingAmount = ebayOrder.shippingAmount || 0;
const splitAmount = shippingAmount / shipments.length;
return shipments.map((shipment) => ({
externalReference: shipment.trackingNumber,
trackingNumber: shipment.trackingNumber || '',
const splitAmount = shippingAmount / fulfillments.length;
return fulfillments.map((fulfillment) => ({
externalReference: fulfillment.fulfillmentId,
trackingNumber: fulfillment.shipmentTrackingNumber || '',
amount: splitAmount,
amountWithTax: splitAmount,
state: { type: ebayOrder.shippedTime ? 'shipped' : 'planned' },
shippedAt: ebayOrder.shippedTime ? new Date(ebayOrder.shippedTime) : undefined,
state: { type: fulfillment.shippedDate ? 'shipped' : 'planned' },
shippedAt: fulfillment.shippedDate ? new Date(fulfillment.shippedDate) : undefined,
lineItemIds: (fulfillment.lineItems || []).map((line) => line.lineItemId).filter(Boolean),
}));
}
export async function createShippingFulfillment(
marketplace,
{ orderId, lineItems, trackingNumber, shippingCarrierCode }
) {
export async function createShippingFulfillment(marketplace, { orderId, lineItems, trackingNumber, shippingCarrierCode }) {
if (!orderId) {
throw new Error('orderId is required to create an eBay shipping fulfillment');
}
@ -361,9 +204,14 @@ export async function createShippingFulfillment(
}
export async function handleWebhook(marketplace, event) {
const topic = event?.metadata?.topic || event?.topic || event?.notification?.topic || '';
const topic =
event?.metadata?.topic ||
event?.topic ||
event?.notification?.topic ||
'';
const data = event?.notification?.data || event?.data || {};
const notificationId = event?.notification?.notificationId || event?.notificationId || '';
const notificationId =
event?.notification?.notificationId || event?.notificationId || '';
logger.info(`eBay webhook received: ${topic} for marketplace ${marketplace.name}`);
@ -372,10 +220,7 @@ export async function handleWebhook(marketplace, event) {
const normalized = String(topic).toUpperCase();
if (
normalized.includes('ACCOUNT_DELETION') ||
normalized.includes('MARKETPLACE_ACCOUNT_DELETION')
) {
if (normalized.includes('ACCOUNT_DELETION') || normalized.includes('MARKETPLACE_ACCOUNT_DELETION')) {
return {
action: 'accountDeletion',
userId: data.userId || data.username,
@ -388,11 +233,7 @@ export async function handleWebhook(marketplace, event) {
return { action: 'disconnect', notificationId, topic };
}
if (
normalized.includes('ORDER') ||
normalized === 'ITEM.SOLD' ||
normalized === 'ORDER.FULFILLMENT'
) {
if (normalized.includes('ORDER') || normalized === 'ITEM.SOLD' || normalized === 'ORDER.FULFILLMENT') {
return {
action: orderId && topic.toLowerCase().includes('cancel') ? 'orderCancel' : 'orderUpdate',
orderId,

View File

@ -1,8 +1,43 @@
import { logger } from './shared.js';
import { makeTradingRequest } from './trading.js';
import { logger, getMarketplaceDebugContext } from './shared.js';
import { fetchEbayCategoryReferences } from './categoryTree.js';
import { syncAccountPolicies } from './accountPolicySync.js';
const TRADING_COMPATIBILITY_LEVEL = '1399';
const TRADING_SANDBOX_URL = 'https://api.sandbox.ebay.com/ws/api.dll';
const TRADING_PRODUCTION_URL = 'https://api.ebay.com/ws/api.dll';
const MARKETPLACE_SITE_IDS = {
EBAY_US: '0',
EBAY_ENCA: '2',
EBAY_GB: '3',
EBAY_AU: '15',
EBAY_AT: '16',
EBAY_FRBE: '23',
EBAY_FR: '71',
EBAY_DE: '77',
EBAY_IT: '101',
EBAY_NLBE: '123',
EBAY_NL: '146',
EBAY_ES: '186',
EBAY_CH: '193',
EBAY_HK: '201',
EBAY_IN: '203',
EBAY_IE: '205',
EBAY_MY: '207',
EBAY_PH: '211',
EBAY_PL: '212',
EBAY_SG: '216',
};
function getTradingApiUrl(marketplace) {
return marketplace.config?.sandbox ? TRADING_SANDBOX_URL : TRADING_PRODUCTION_URL;
}
function getSiteId(marketplace) {
const marketplaceId = marketplace.config?.marketplaceId || 'EBAY_GB';
return MARKETPLACE_SITE_IDS[marketplaceId] || MARKETPLACE_SITE_IDS.EBAY_GB;
}
export function parseShippingServiceDetails(xml = '') {
const blocks = xml.match(/<ShippingServiceDetails>[\s\S]*?<\/ShippingServiceDetails>/g) || [];
const services = [];
@ -33,13 +68,67 @@ function buildGeteBayDetailsRequest() {
}
export async function fetchEbayShippingServices(marketplace) {
const xml = await makeTradingRequest({
marketplace,
callName: 'GeteBayDetails',
const accessToken = marketplace.config?.accessToken;
if (!accessToken) {
throw new Error(
'eBay marketplace is not authenticated. Complete marketplace authorization first.'
);
}
const url = getTradingApiUrl(marketplace);
const siteId = getSiteId(marketplace);
const startedAt = Date.now();
logger.debug('eBay Trading API GeteBayDetails request', {
...getMarketplaceDebugContext(marketplace),
siteId,
url,
});
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'text/xml',
'X-EBAY-API-CALL-NAME': 'GeteBayDetails',
'X-EBAY-API-SITEID': siteId,
'X-EBAY-API-COMPATIBILITY-LEVEL': TRADING_COMPATIBILITY_LEVEL,
'X-EBAY-API-IAF-TOKEN': accessToken,
},
body: buildGeteBayDetailsRequest(),
});
const xml = await response.text();
const durationMs = Date.now() - startedAt;
if (!response.ok) {
logger.error(`GeteBayDetails failed (${response.status})`, {
durationMs,
...getMarketplaceDebugContext(marketplace),
siteId,
});
throw new Error(`eBay GeteBayDetails error (${response.status})`);
}
const ackMatch = xml.match(/<Ack>([^<]+)<\/Ack>/);
const ack = ackMatch?.[1];
if (ack && ack !== 'Success' && ack !== 'Warning') {
const message =
xml.match(/<LongMessage>([^<]+)<\/LongMessage>/)?.[1] ||
xml.match(/<ShortMessage>([^<]+)<\/ShortMessage>/)?.[1] ||
ack;
logger.error(`GeteBayDetails failed: ${message}`, {
ack,
durationMs,
...getMarketplaceDebugContext(marketplace),
siteId,
});
throw new Error(`eBay GeteBayDetails failed: ${message}`);
}
const services = parseShippingServiceDetails(xml);
logger.debug(`GeteBayDetails succeeded (${durationMs}ms)`, {
...getMarketplaceDebugContext(marketplace),
siteId,
serviceCount: services.length,
});
logger.info(
`Fetched ${services.length} eBay shipping service(s) for marketplace "${marketplace.name}"`
);

View File

@ -1,141 +0,0 @@
import { logger, getMarketplaceDebugContext, formatDebugPayload } from './shared.js';
const TRADING_COMPATIBILITY_LEVEL = '1399';
const TRADING_SANDBOX_URL = 'https://api.sandbox.ebay.com/ws/api.dll';
const TRADING_PRODUCTION_URL = 'https://api.ebay.com/ws/api.dll';
const MARKETPLACE_SITE_IDS = {
EBAY_US: '0',
EBAY_ENCA: '2',
EBAY_GB: '3',
EBAY_AU: '15',
EBAY_AT: '16',
EBAY_FRBE: '23',
EBAY_FR: '71',
EBAY_DE: '77',
EBAY_IT: '101',
EBAY_NLBE: '123',
EBAY_NL: '146',
EBAY_ES: '186',
EBAY_CH: '193',
EBAY_HK: '201',
EBAY_IN: '203',
EBAY_IE: '205',
EBAY_MY: '207',
EBAY_PH: '211',
EBAY_PL: '212',
EBAY_SG: '216',
};
export function getTradingApiUrl(marketplace) {
return marketplace.config?.sandbox ? TRADING_SANDBOX_URL : TRADING_PRODUCTION_URL;
}
export function getTradingSiteId(marketplace) {
const marketplaceId = marketplace.config?.marketplaceId || 'EBAY_GB';
return MARKETPLACE_SITE_IDS[marketplaceId] || MARKETPLACE_SITE_IDS.EBAY_GB;
}
export function xmlEscape(value) {
return String(value ?? '')
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&apos;');
}
export function xmlUnescape(value) {
return String(value ?? '')
.replace(/&apos;/g, "'")
.replace(/&quot;/g, '"')
.replace(/&gt;/g, '>')
.replace(/&lt;/g, '<')
.replace(/&amp;/g, '&');
}
export function xmlBlocks(xml, tag) {
const re = new RegExp(`<${tag}(?:\\s[^>]*)?>[\\s\\S]*?</${tag}>`, 'gi');
return String(xml || '').match(re) || [];
}
export function xmlText(xml, tag) {
const re = new RegExp(`<${tag}(?:\\s[^>]*)?>([\\s\\S]*?)</${tag}>`, 'i');
const match = String(xml || '').match(re);
if (!match) return '';
return xmlUnescape(match[1].replace(/<[^>]+>/g, '').trim());
}
export function xmlNumber(xml, tag) {
const parsed = parseFloat(xmlText(xml, tag));
return Number.isFinite(parsed) ? parsed : 0;
}
export async function makeTradingRequest({
marketplace,
callName,
body,
logResponse = false,
} = {}) {
const accessToken = marketplace.config?.accessToken;
if (!accessToken) {
throw new Error(
'eBay marketplace is not authenticated. Complete marketplace authorization first.'
);
}
const url = getTradingApiUrl(marketplace);
const siteId = getTradingSiteId(marketplace);
const startedAt = Date.now();
logger.debug(`eBay Trading API ${callName} request`, {
...getMarketplaceDebugContext(marketplace),
siteId,
url,
});
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'text/xml',
'X-EBAY-API-CALL-NAME': callName,
'X-EBAY-API-SITEID': siteId,
'X-EBAY-API-COMPATIBILITY-LEVEL': TRADING_COMPATIBILITY_LEVEL,
'X-EBAY-API-IAF-TOKEN': accessToken,
},
body,
});
const xml = await response.text();
const durationMs = Date.now() - startedAt;
if (!response.ok) {
logger.error(`${callName} failed (${response.status})`, {
durationMs,
...getMarketplaceDebugContext(marketplace),
siteId,
});
throw new Error(`eBay ${callName} error (${response.status})`);
}
const ack = xmlText(xml, 'Ack');
if (ack && ack !== 'Success' && ack !== 'Warning') {
const message = xmlText(xml, 'LongMessage') || xmlText(xml, 'ShortMessage') || ack;
logger.error(`${callName} failed: ${message}`, {
ack,
durationMs,
...getMarketplaceDebugContext(marketplace),
siteId,
response: formatDebugPayload(xml),
});
throw new Error(`eBay ${callName} failed: ${message}`);
}
logger.debug(`eBay Trading API ${callName} -> ${ack || response.status} (${durationMs}ms)`, {
...getMarketplaceDebugContext(marketplace),
siteId,
response: logResponse ? formatDebugPayload(xml) : undefined,
});
return xml;
}

View File

@ -84,24 +84,10 @@ router.get('/properties', checkPermissions('invoice', 'list'), isAuthenticated,
listInvoicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('invoice', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true, invoiceModel);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true, invoiceModel
);
}
getInvoicePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('invoice', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getInvoicePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('invoice', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchInvoicesRouteHandler(req, res, search);

View File

@ -65,17 +65,7 @@ router.get(
checkPermissions('paymentPolicy', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPaymentPolicyPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
getPaymentPolicyPropertyValuesRouteHandler(req, res, req.query.property);
}
);

View File

@ -65,24 +65,10 @@ router.get('/properties', checkPermissions('payment', 'list'), isAuthenticated,
listPaymentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('payment', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPaymentPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('payment', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPaymentPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('payment', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchPaymentsRouteHandler(req, res, search);

View File

@ -50,24 +50,10 @@ router.get('/properties', checkPermissions('taxRecord', 'list'), isAuthenticated
listTaxRecordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('taxRecord', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getTaxRecordPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('taxRecord', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getTaxRecordPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('taxRecord', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchTaxRecordsRouteHandler(req, res, search);

View File

@ -60,24 +60,10 @@ router.get('/properties', checkPermissions('filamentStock', 'list'), isAuthentic
listFilamentStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('filamentStock', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getFilamentStockPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('filamentStock', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getFilamentStockPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('filamentStock', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchFilamentStocksRouteHandler(req, res, search);

View File

@ -74,24 +74,10 @@ router.get('/properties', checkPermissions('orderItem', 'list'), isAuthenticated
listOrderItemsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('orderItem', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getOrderItemPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('orderItem', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getOrderItemPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('orderItem', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchOrderItemsRouteHandler(req, res, search);

View File

@ -52,24 +52,10 @@ router.get('/properties', checkPermissions('partStock', 'list'), isAuthenticated
listPartStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('partStock', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPartStockPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('partStock', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPartStockPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('partStock', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchPartStocksRouteHandler(req, res, search);

View File

@ -51,24 +51,10 @@ router.get('/properties', checkPermissions('productStock', 'list'), isAuthentica
listProductStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('productStock', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getProductStockPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('productStock', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getProductStockPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('productStock', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchProductStocksRouteHandler(req, res, search);

View File

@ -78,24 +78,10 @@ router.get('/properties', checkPermissions('purchaseOrder', 'list'), isAuthentic
listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('purchaseOrder', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPurchaseOrderPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('purchaseOrder', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPurchaseOrderPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('purchaseOrder', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchPurchaseOrdersRouteHandler(req, res, search);

View File

@ -83,24 +83,10 @@ router.get('/properties', checkPermissions('shipment', 'list'), isAuthenticated,
listShipmentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('shipment', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getShipmentPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('shipment', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getShipmentPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('shipment', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchShipmentsRouteHandler(req, res, search);

View File

@ -41,24 +41,10 @@ router.get('/properties', checkPermissions('stockEvent', 'list'), isAuthenticate
listStockEventsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('stockEvent', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getStockEventPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('stockEvent', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getStockEventPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('stockEvent', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchStockEventsRouteHandler(req, res, search);

View File

@ -40,24 +40,10 @@ router.get('/properties', checkPermissions('stockLocation', 'list'), isAuthentic
listStockLocationsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('stockLocation', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getStockLocationPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('stockLocation', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getStockLocationPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('stockLocation', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchStockLocationsRouteHandler(req, res, search);

View File

@ -49,24 +49,10 @@ router.get('/properties', checkPermissions('stockTransfer', 'list'), isAuthentic
listStockTransfersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('stockTransfer', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getStockTransferPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('stockTransfer', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getStockTransferPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('stockTransfer', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchStockTransfersRouteHandler(req, res, search);

View File

@ -46,24 +46,10 @@ router.get('/properties', checkPermissions('appPassword', 'list'), isAuthenticat
listAppPasswordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('appPassword', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getAppPasswordPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('appPassword', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getAppPasswordPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('appPassword', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -50,24 +50,10 @@ router.get('/properties', checkPermissions('courier', 'list'), isAuthenticated,
listCouriersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('courier', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getCourierPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('courier', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getCourierPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('courier', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -76,24 +76,10 @@ router.get('/properties', checkPermissions('courierService', 'list'), isAuthenti
listCourierServicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('courierService', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getCourierServicePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('courierService', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getCourierServicePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('courierService', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -49,24 +49,10 @@ router.get('/properties', checkPermissions('documentJob', 'list'), isAuthenticat
listDocumentJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('documentJob', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getDocumentJobPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('documentJob', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getDocumentJobPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('documentJob', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -49,24 +49,10 @@ router.get('/properties', checkPermissions('documentPrinter', 'list'), isAuthent
listDocumentPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('documentPrinter', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getDocumentPrinterPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('documentPrinter', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getDocumentPrinterPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('documentPrinter', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -64,24 +64,10 @@ router.get('/properties', checkPermissions('documentSize', 'list'), isAuthentica
listDocumentSizesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('documentSize', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getDocumentSizePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('documentSize', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getDocumentSizePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('documentSize', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -66,24 +66,10 @@ router.get('/properties', checkPermissions('documentTemplate', 'list'), isAuthen
listDocumentTemplatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('documentTemplate', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getDocumentTemplatePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('documentTemplate', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getDocumentTemplatePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('documentTemplate', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -70,24 +70,10 @@ router.get('/properties', checkPermissions('filament', 'list'), isAuthenticated,
listFilamentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('filament', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getFilamentPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('filament', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getFilamentPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('filament', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -59,24 +59,10 @@ router.get('/properties', checkPermissions('filamentSku', 'list'), isAuthenticat
listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('filamentSku', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getFilamentSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('filamentSku', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getFilamentSkuPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('filamentSku', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchFilamentSkusRouteHandler(req, res, search);

View File

@ -52,24 +52,10 @@ router.get('/properties', checkPermissions('file', 'list'), isAuthenticated, asy
listFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('file', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getFilePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('file', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getFilePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('file', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -48,24 +48,10 @@ router.get('/properties', checkPermissions('host', 'list'), isAuthenticated, asy
listHostsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('host', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getHostPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('host', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getHostPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('host', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -48,24 +48,10 @@ router.get('/properties', checkPermissions('material', 'list'), isAuthenticated,
listMaterialsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('material', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getMaterialPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('material', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getMaterialPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('material', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -48,24 +48,10 @@ router.get('/properties', checkPermissions('noteType', 'list'), isAuthenticated,
listNoteTypesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('noteType', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getNoteTypePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('noteType', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getNoteTypePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('noteType', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchNoteTypesRouteHandler(req, res, search);

View File

@ -59,24 +59,10 @@ router.get('/properties', checkPermissions('part', 'list'), isAuthenticated, asy
listPartsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('part', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPartPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('part', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPartPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('part', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -60,24 +60,10 @@ router.get('/properties', checkPermissions('partSku', 'list'), isAuthenticated,
listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('partSku', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPartSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPartSkuPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchPartSkusRouteHandler(req, res, search);

View File

@ -48,24 +48,10 @@ router.get('/properties', checkPermissions('permissionSetting', 'list'), isAuthe
listPermissionSettingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('permissionSetting', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPermissionSettingsPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('permissionSetting', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPermissionSettingsPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('permissionSetting', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -46,24 +46,10 @@ router.get('/properties', checkPermissions('productCategory', 'list'), isAuthent
listProductCategoriesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('productCategory', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getProductCategoryPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('productCategory', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getProductCategoryPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('productCategory', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -60,24 +60,10 @@ router.get('/properties', checkPermissions('product', 'list'), isAuthenticated,
listProductsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('product', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getProductPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('product', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getProductPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('product', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -60,24 +60,10 @@ router.get('/properties', checkPermissions('productSku', 'list'), isAuthenticate
listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('productSku', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getProductSkuPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getProductSkuPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchProductSkusRouteHandler(req, res, search);

View File

@ -61,24 +61,10 @@ router.get('/properties', checkPermissions('taxRate', 'list'), isAuthenticated,
listTaxRatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('taxRate', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getTaxRatePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('taxRate', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getTaxRatePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('taxRate', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -48,24 +48,10 @@ router.get('/properties', checkPermissions('userGroup', 'list'), isAuthenticated
listUserGroupsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('userGroup', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getUserGroupPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('userGroup', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getUserGroupPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('userGroup', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -50,24 +50,10 @@ router.get('/properties', checkPermissions('user', 'list'), isAuthenticated, asy
listUsersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('user', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getUserPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('user', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getUserPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('user', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchUsersRouteHandler(req, res, search);

View File

@ -48,24 +48,10 @@ router.get('/properties', checkPermissions('vendor', 'list'), isAuthenticated, a
listVendorsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('vendor', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getVendorPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('vendor', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getVendorPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('vendor', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;

View File

@ -46,24 +46,10 @@ router.get('/properties', checkPermissions('filamentProfile', 'list'), isAuthent
listFilamentProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('filamentProfile', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getFilamentProfilePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('filamentProfile', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getFilamentProfilePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('filamentProfile', 'list'), isAuthenticated, async (req, res) => {
searchFilamentProfilesRouteHandler(req, res, req.query.search);

View File

@ -49,24 +49,10 @@ router.get('/properties', checkPermissions('gcodeFile', 'list'), isAuthenticated
listGCodeFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('gcodeFile', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getGCodeFilePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('gcodeFile', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getGCodeFilePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('gcodeFile', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchGCodeFilesRouteHandler(req, res, search);

View File

@ -45,17 +45,7 @@ import { convertPropertiesString, getFilter, getSort } from '../../utils.js';
router.get('/', isAuthenticated, checkPermissions('job', 'list'), async (req, res) => {
const { page, limit, property, search, sortProperty, sortOrder } = req.query;
const filter = await getFilter(req.query, listAllowedFilters);
listJobsRouteHandler(
req,
res,
page,
limit,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder
);
listJobsRouteHandler(req, res, page, limit, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder);
});
router.get('/properties', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
@ -70,12 +60,7 @@ router.get('/properties', checkPermissions('job', 'list'), isAuthenticated, asyn
router.get('/values', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(JSON.parse(req.query.masterFilter), listAllowedFilters, true);
}
getJobPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
getJobPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
@ -99,16 +84,7 @@ router.get('/history', isAuthenticated, async (req, res) => {
router.get('/neighbors', isAuthenticated, async (req, res) => {
const { property, search, sortProperty, sortOrder, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters);
getJobNeighborsRouteHandler(
req,
res,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder,
id
);
getJobNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id);
});
router.get('/:id', isAuthenticated, checkPermissions('job', 'info'), async (req, res) => {

View File

@ -45,24 +45,10 @@ router.get('/properties', checkPermissions('printerProfile', 'list'), isAuthenti
listPrinterProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('printerProfile', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPrinterProfilePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('printerProfile', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPrinterProfilePropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('printerProfile', 'list'), isAuthenticated, async (req, res) => {
searchPrinterProfilesRouteHandler(req, res, req.query.search);

View File

@ -49,24 +49,10 @@ router.get('/properties', checkPermissions('printer', 'list'), isAuthenticated,
listPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('printer', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getPrinterPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('printer', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getPrinterPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('printer', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchPrintersRouteHandler(req, res, search);

View File

@ -56,24 +56,10 @@ router.get('/properties', checkPermissions('subJob', 'list'), isAuthenticated, a
listSubJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('subJob', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getSubJobPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('subJob', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getSubJobPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('subJob', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchSubJobsRouteHandler(req, res, search);

View File

@ -49,24 +49,10 @@ router.get('/properties', checkPermissions('client', 'list'), isAuthenticated, a
listClientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('client', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getClientPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('client', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getClientPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('client', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchClientsRouteHandler(req, res, search);

View File

@ -76,17 +76,7 @@ router.get(
checkPermissions('fulfillmentPolicy', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getFulfillmentPolicyPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
getFulfillmentPolicyPropertyValuesRouteHandler(req, res, req.query.property);
}
);

View File

@ -84,24 +84,10 @@ router.get('/properties', checkPermissions('listing', 'list'), isAuthenticated,
listListingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('listing', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getListingPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('listing', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getListingPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('listing', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchListingsRouteHandler(req, res, search);

View File

@ -2,7 +2,6 @@ import express from 'express';
import { isAuthenticated } from '../../keycloak.js';
import { checkPermissions } from '../../database/permissions.js';
import { getFilter, convertPropertiesString, getSort } from '../../utils.js';
import { listingVarientModel } from '../../database/schemas/sales/listingvarient.schema.js';
const router = express.Router();
@ -20,26 +19,18 @@ const listAllowedFilters = [
'updatedAt',
'_reference',
];
const listAllowedSorters = [
'state',
'stockQuantity',
'price',
'lastSyncedAt',
'createdAt',
'updatedAt',
'_id',
];
const listAllowedSorters = ['state', 'stockQuantity', 'price', 'lastSyncedAt', 'createdAt', 'updatedAt', '_id'];
const propertiesAllowedFilters = [
'listing',
'listing._id',
'product',
'productSku',
'stockQuantity',
'state',
'state.type',
'createdAt',
'updatedAt',
];
'listing',
'listing._id',
'product',
'productSku',
'stockQuantity',
'state',
'state.type',
'createdAt',
'updatedAt',
];
import {
listListingVarientsRouteHandler,
getListingVarientRouteHandler,
@ -53,77 +44,39 @@ import {
unpublishListingVarientRouteHandler,
searchListingVarientsRouteHandler,
getListingVarientPropertyValuesRouteHandler,
getListingVarientNeighborsRouteHandler,
getListingVarientNeighborsRouteHandler
} from '../../services/sales/listingvarients.js';
router.get('/', isAuthenticated, checkPermissions('listingVarient', 'list'), async (req, res) => {
const { page, limit, property, search, sortProperty, sortOrder } = req.query;
const filter = await getFilter(req.query, listAllowedFilters);
listListingVarientsRouteHandler(
req,
res,
page,
limit,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder
);
const filter = await getFilter(req.query, listAllowedFilters);
listListingVarientsRouteHandler(req, res, page, limit, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder);
});
router.get(
'/properties',
checkPermissions('listingVarient', 'list'),
isAuthenticated,
async (req, res) => {
let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = JSON.parse(req.query.masterFilter);
}
listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
router.get('/properties', checkPermissions('listingVarient', 'list'), isAuthenticated, async (req, res) => {
let properties = convertPropertiesString(req.query.properties);
const filter = await getFilter(req.query, propertiesAllowedFilters, false);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = JSON.parse(req.query.masterFilter);
}
);
listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('listingVarient', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true, listingVarientModel);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true,
listingVarientModel
);
}
getListingVarientPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get(
'/search',
checkPermissions('listingVarient', 'list'),
isAuthenticated,
async (req, res) => {
const { search } = req.query;
searchListingVarientsRouteHandler(req, res, search);
}
);
router.get('/values', checkPermissions('listingVarient', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getListingVarientPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('listingVarient', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchListingVarientsRouteHandler(req, res, search);
});
router.post(
'/',
isAuthenticated,
checkPermissions('listing', 'newListingVarient'),
async (req, res) => {
newListingVarientRouteHandler(req, res);
}
);
router.post('/', isAuthenticated, checkPermissions('listing', 'newListingVarient'), async (req, res) => {
newListingVarientRouteHandler(req, res);
});
router.get('/stats', isAuthenticated, async (req, res) => {
getListingVarientStatsRouteHandler(req, res);
@ -133,56 +86,27 @@ router.get('/history', isAuthenticated, async (req, res) => {
getListingVarientHistoryRouteHandler(req, res);
});
router.post(
'/:id/publish',
isAuthenticated,
checkPermissions('listingVarient', 'publish'),
async (req, res) => {
publishListingVarientRouteHandler(req, res);
}
);
router.post('/:id/publish', isAuthenticated, checkPermissions('listingVarient', 'publish'), async (req, res) => {
publishListingVarientRouteHandler(req, res);
});
router.post(
'/:id/unpublish',
isAuthenticated,
checkPermissions('listingVarient', 'unpublish'),
async (req, res) => {
unpublishListingVarientRouteHandler(req, res);
}
);
router.post('/:id/unpublish', isAuthenticated, checkPermissions('listingVarient', 'unpublish'), async (req, res) => {
unpublishListingVarientRouteHandler(req, res);
});
router.get('/neighbors', isAuthenticated, async (req, res) => {
const { property, search, sortProperty, sortOrder, id } = req.query;
const filter = await getFilter(req.query, listAllowedFilters);
getListingVarientNeighborsRouteHandler(
req,
res,
property,
filter,
search,
getSort(sortProperty, listAllowedSorters),
sortOrder,
id
);
getListingVarientNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id);
});
router.get(
'/:id',
isAuthenticated,
checkPermissions('listingVarient', 'info'),
async (req, res) => {
getListingVarientRouteHandler(req, res);
}
);
router.get('/:id', isAuthenticated, checkPermissions('listingVarient', 'info'), async (req, res) => {
getListingVarientRouteHandler(req, res);
});
router.put(
'/:id',
isAuthenticated,
checkPermissions('listingVarient', 'edit'),
async (req, res) => {
editListingVarientRouteHandler(req, res);
}
);
router.put('/:id', isAuthenticated, checkPermissions('listingVarient', 'edit'), async (req, res) => {
editListingVarientRouteHandler(req, res);
});
router.delete('/:id', isAuthenticated, async (req, res) => {
deleteListingVarientRouteHandler(req, res);

View File

@ -101,16 +101,7 @@ router.get(
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getMarketplacePropertyValuesRouteHandler(req, res, property, filter, masterFilter);
getMarketplacePropertyValuesRouteHandler(req, res, property);
}
);
router.get(

View File

@ -81,17 +81,7 @@ router.get(
checkPermissions('returnPolicy', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getReturnPolicyPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
getReturnPolicyPropertyValuesRouteHandler(req, res, req.query.property);
}
);

View File

@ -51,24 +51,10 @@ router.get('/properties', checkPermissions('salesOrder', 'list'), isAuthenticate
listSalesOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
});
router.get(
'/values',
checkPermissions('salesOrder', 'list'),
isAuthenticated,
async (req, res) => {
const { property } = req.query;
const filter = await getFilter(req.query, listAllowedFilters, true);
var masterFilter = {};
if (req.query.masterFilter) {
masterFilter = await getFilter(
JSON.parse(req.query.masterFilter),
listAllowedFilters,
true
);
}
getSalesOrderPropertyValuesRouteHandler(req, res, property, filter, masterFilter);
}
);
router.get('/values', checkPermissions('salesOrder', 'list'), isAuthenticated, async (req, res) => {
const { property } = req.query;
getSalesOrderPropertyValuesRouteHandler(req, res, property);
});
router.get('/search', checkPermissions('salesOrder', 'list'), isAuthenticated, async (req, res) => {
const { search } = req.query;
searchSalesOrdersRouteHandler(req, res, search);

View File

@ -95,17 +95,10 @@ export const listInvoicesByPropertiesRouteHandler = async (
res.send(result);
};
export const getInvoicePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getInvoicePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: invoiceModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -89,17 +89,10 @@ export const listPaymentPoliciesByPropertiesRouteHandler = async (
res.send(result);
};
export const getPaymentPolicyPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPaymentPolicyPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: paymentPolicyModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -84,17 +84,10 @@ export const listPaymentsByPropertiesRouteHandler = async (
res.send(result);
};
export const getPaymentPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPaymentPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: paymentModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -74,17 +74,10 @@ export const listTaxRecordsByPropertiesRouteHandler = async (
res.send(result);
};
export const getTaxRecordPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getTaxRecordPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: taxRecordModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -82,17 +82,10 @@ export const listFilamentStocksByPropertiesRouteHandler = async (
res.send(result);
};
export const getFilamentStockPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getFilamentStockPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: filamentStockModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -173,17 +173,10 @@ export const listOrderItemsByPropertiesRouteHandler = async (
res.send(result);
};
export const getOrderItemPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getOrderItemPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: orderItemModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -85,17 +85,10 @@ export const listPartStocksByPropertiesRouteHandler = async (
res.send(result);
};
export const getPartStockPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPartStockPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: partStockModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -144,17 +144,10 @@ export const listProductStocksByPropertiesRouteHandler = async (
res.send(result);
};
export const getProductStockPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getProductStockPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: productStockModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -81,17 +81,10 @@ export const listPurchaseOrdersByPropertiesRouteHandler = async (
res.send(result);
};
export const getPurchaseOrderPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPurchaseOrderPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: purchaseOrderModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -82,17 +82,10 @@ export const listShipmentsByPropertiesRouteHandler = async (
res.send(result);
};
export const getShipmentPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getShipmentPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: shipmentModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -79,17 +79,10 @@ export const listStockEventsByPropertiesRouteHandler = async (
res.send(result);
};
export const getStockEventPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getStockEventPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: stockEventModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -76,17 +76,10 @@ export const listStockLocationsByPropertiesRouteHandler = async (
res.send(result);
};
export const getStockLocationPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getStockLocationPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: stockLocationModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -281,17 +281,10 @@ export const listStockTransfersByPropertiesRouteHandler = async (
res.send(result);
};
export const getStockTransferPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getStockTransferPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: stockTransferModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -82,17 +82,10 @@ export const listAppPasswordsByPropertiesRouteHandler = async (
res.send(result);
};
export const getAppPasswordPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getAppPasswordPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: appPasswordModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -74,17 +74,10 @@ export const listCouriersByPropertiesRouteHandler = async (
res.send(result);
};
export const getCourierPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getCourierPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: courierModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -78,17 +78,10 @@ export const listCourierServicesByPropertiesRouteHandler = async (
res.send(result);
};
export const getCourierServicePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getCourierServicePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: courierServiceModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -75,17 +75,10 @@ export const listDocumentJobsByPropertiesRouteHandler = async (
res.send(result);
};
export const getDocumentJobPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getDocumentJobPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: documentJobModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -78,17 +78,10 @@ export const listDocumentPrintersByPropertiesRouteHandler = async (
res.send(result);
};
export const getDocumentPrinterPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getDocumentPrinterPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: documentPrinterModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -74,17 +74,10 @@ export const listDocumentSizesByPropertiesRouteHandler = async (
res.send(result);
};
export const getDocumentSizePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getDocumentSizePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: documentSizeModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -112,17 +112,10 @@ export const listDocumentTemplatesByPropertiesRouteHandler = async (
res.send(result);
};
export const getDocumentTemplatePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getDocumentTemplatePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: documentTemplateModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -78,17 +78,10 @@ export const listFilamentsByPropertiesRouteHandler = async (
res.send(result);
};
export const getFilamentPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getFilamentPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: filamentModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -76,17 +76,10 @@ export const listFilamentSkusByPropertiesRouteHandler = async (
res.send(result);
};
export const getFilamentSkuPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getFilamentSkuPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: filamentSkuModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -111,17 +111,10 @@ export const listFilesByPropertiesRouteHandler = async (
res.send(result);
};
export const getFilePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getFilePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: fileModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -74,17 +74,10 @@ export const listHostsByPropertiesRouteHandler = async (
res.send(result);
};
export const getHostPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getHostPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: hostModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -76,17 +76,10 @@ export const listMaterialsByPropertiesRouteHandler = async (
res.send(result);
};
export const getMaterialPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getMaterialPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: materialModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -74,17 +74,10 @@ export const listNoteTypesByPropertiesRouteHandler = async (
res.send(result);
};
export const getNoteTypePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getNoteTypePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: noteTypeModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -76,17 +76,10 @@ export const listPartsByPropertiesRouteHandler = async (
res.send(result);
};
export const getPartPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPartPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: partModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -82,17 +82,10 @@ export const listPartSkusByPropertiesRouteHandler = async (
res.send(result);
};
export const getPartSkuPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPartSkuPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: partSkuModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -77,17 +77,10 @@ export const listPermissionSettingsByPropertiesRouteHandler = async (
res.send(result);
};
export const getPermissionSettingsPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPermissionSettingsPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: permissionSettingModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -79,17 +79,10 @@ export const listProductCategoriesByPropertiesRouteHandler = async (
res.send(result);
};
export const getProductCategoryPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getProductCategoryPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: productCategoryModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -76,17 +76,10 @@ export const listProductsByPropertiesRouteHandler = async (
res.send(result);
};
export const getProductPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getProductPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: productModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -85,17 +85,10 @@ export const listProductSkusByPropertiesRouteHandler = async (
res.send(result);
};
export const getProductSkuPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getProductSkuPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: productSkuModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -80,17 +80,10 @@ export const listTaxRatesByPropertiesRouteHandler = async (
res.send(result);
};
export const getTaxRatePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getTaxRatePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: taxRateModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -83,17 +83,10 @@ export const listUserGroupsByPropertiesRouteHandler = async (
res.send(result);
};
export const getUserGroupPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getUserGroupPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: userGroupModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -78,17 +78,10 @@ export const listUsersByPropertiesRouteHandler = async (
res.send(result);
};
export const getUserPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getUserPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: userModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -74,17 +74,10 @@ export const listVendorsByPropertiesRouteHandler = async (
res.send(result);
};
export const getVendorPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getVendorPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: vendorModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -225,17 +225,10 @@ export const listFilamentProfilesByPropertiesRouteHandler = async (
res.send(result);
};
export const getFilamentProfilePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getFilamentProfilePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: filamentProfileModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -76,17 +76,10 @@ export const listGCodeFilesByPropertiesRouteHandler = async (
res.send(result);
};
export const getGCodeFilePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getGCodeFilePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: gcodeFileModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -76,17 +76,11 @@ export const listJobsByPropertiesRouteHandler = async (
res.send(result);
};
export const getJobPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getJobPropertyValuesRouteHandler = async (req, res, property, filter = {}) => {
const result = await getPropertyValues({
model: jobModel,
property,
filter: { ...filter, ...masterFilter },
filter,
});
res.send(result);
};

View File

@ -113,17 +113,10 @@ export const listPrinterProfilesByPropertiesRouteHandler = async (
res.send(result);
};
export const getPrinterProfilePropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPrinterProfilePropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: printerProfileModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -77,17 +77,10 @@ export const listPrintersByPropertiesRouteHandler = async (
res.send(result);
};
export const getPrinterPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getPrinterPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: printerModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -71,17 +71,10 @@ export const listSubJobsByPropertiesRouteHandler = async (
res.send(result);
};
export const getSubJobPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getSubJobPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: subJobModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -74,17 +74,10 @@ export const listClientsByPropertiesRouteHandler = async (
res.send(result);
};
export const getClientPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getClientPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: clientModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -95,17 +95,10 @@ export const listFulfillmentPoliciesByPropertiesRouteHandler = async (
res.send(result);
};
export const getFulfillmentPolicyPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getFulfillmentPolicyPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: fulfillmentPolicyModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

View File

@ -144,17 +144,10 @@ export const listListingsByPropertiesRouteHandler = async (
res.send(result);
};
export const getListingPropertyValuesRouteHandler = async (
req,
res,
property,
filter,
masterFilter
) => {
export const getListingPropertyValuesRouteHandler = async (req, res, property) => {
const result = await getPropertyValues({
model: listingModel,
property,
filter: { ...filter, ...masterFilter },
});
res.send(result);
};

Some files were not shown because too many files have changed in this diff Show More