Compare commits
3 Commits
1cef3a8d1d
...
5f59c23fbe
| Author | SHA1 | Date | |
|---|---|---|---|
| 5f59c23fbe | |||
| 6a730294b1 | |||
| 933d76969f |
@ -1,6 +1,11 @@
|
|||||||
import mongoose from 'mongoose';
|
import mongoose from 'mongoose';
|
||||||
import { generateId } from '../../utils.js';
|
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 { Schema } = mongoose;
|
||||||
|
|
||||||
const parentStockModelNames = {
|
const parentStockModelNames = {
|
||||||
@ -43,8 +48,6 @@ const buildParentState = (parentType, parentStock, currentAmount, startingAmount
|
|||||||
|
|
||||||
const progress = currentAmount / startingAmount;
|
const progress = currentAmount / startingAmount;
|
||||||
|
|
||||||
console.log('progress', progress);
|
|
||||||
|
|
||||||
if (currentAmount === startingAmount) {
|
if (currentAmount === startingAmount) {
|
||||||
return { ...parentStock.state, type: fullState, progress: 1 };
|
return { ...parentStock.state, type: fullState, progress: 1 };
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,81 @@
|
|||||||
|
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');
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -6,56 +6,106 @@ import {
|
|||||||
mapOrderLineItems,
|
mapOrderLineItems,
|
||||||
mapOrderShipments,
|
mapOrderShipments,
|
||||||
handleWebhook,
|
handleWebhook,
|
||||||
|
parseGetOrdersResponse,
|
||||||
} from '../orders.js';
|
} from '../orders.js';
|
||||||
|
|
||||||
const ebayOrder = {
|
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',
|
orderId: '12-34567-89012',
|
||||||
orderFulfillmentStatus: 'NOT_STARTED',
|
orderStatus: 'Completed',
|
||||||
pricingSummary: {
|
buyerUserId: 'ebay-buyer',
|
||||||
priceSubtotal: { value: '10.00' },
|
buyerEmail: 'buyer@example.com',
|
||||||
deliveryCost: { value: '2.50' },
|
subtotal: 10,
|
||||||
tax: { value: '1.20' },
|
shippingAmount: 2.5,
|
||||||
total: { value: '13.70' },
|
salesTaxAmount: 1.2,
|
||||||
},
|
total: 13.7,
|
||||||
buyer: {
|
});
|
||||||
username: 'ebay-buyer',
|
expect(ebayOrder.shippingAddress.city).toBe('London');
|
||||||
buyerRegistrationAddress: { email: 'buyer@example.com' },
|
expect(ebayOrder.transactions[0]).toMatchObject({
|
||||||
},
|
|
||||||
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',
|
sku: 'SKU-RED',
|
||||||
title: 'Red widget',
|
|
||||||
quantity: 2,
|
quantity: 2,
|
||||||
lineItemCost: { value: '5.00' },
|
transactionPrice: 5,
|
||||||
taxes: [{ amount: { value: '1.00' } }],
|
});
|
||||||
},
|
expect(ebayOrder.shipments[0].trackingNumber).toBe('TRACK123');
|
||||||
],
|
});
|
||||||
shippingFulfillments: [
|
|
||||||
{
|
it('treats HasMoreOrders as false when missing', () => {
|
||||||
fulfillmentId: 'ful-1',
|
expect(parseGetOrdersResponse('<Ack>Success</Ack>')).toEqual({
|
||||||
shipmentTrackingNumber: 'TRACK123',
|
orders: [],
|
||||||
shippedDate: '2026-08-01T10:00:00.000Z',
|
hasMoreOrders: false,
|
||||||
lineItems: [{ lineItemId: 'line-1' }],
|
});
|
||||||
},
|
});
|
||||||
],
|
});
|
||||||
};
|
|
||||||
|
|
||||||
describe('eBay order mappers', () => {
|
describe('eBay order mappers', () => {
|
||||||
it('maps sales order totals and externalReference', () => {
|
it('maps sales order totals and externalReference', () => {
|
||||||
@ -64,13 +114,18 @@ describe('eBay order mappers', () => {
|
|||||||
expect(mapped.totalAmount).toBe(10);
|
expect(mapped.totalAmount).toBe(10);
|
||||||
expect(mapped.shippingAmount).toBe(2.5);
|
expect(mapped.shippingAmount).toBe(2.5);
|
||||||
expect(mapped.totalTaxAmount).toBe(1.2);
|
expect(mapped.totalTaxAmount).toBe(1.2);
|
||||||
expect(mapped.state.type).toBe('draft');
|
expect(mapped.state.type).toBe('shipped');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('maps cancelled orders', () => {
|
it('maps cancelled orders', () => {
|
||||||
expect(
|
expect(mapOrderStatus({ cancelStatus: 'CancelClosedWithRefund' })).toBe('cancelled');
|
||||||
mapOrderStatus({ cancelStatus: { cancelState: 'CANCELED' } })
|
expect(mapOrderStatus({ orderStatus: 'Cancelled' })).toBe('cancelled');
|
||||||
).toBe('cancelled');
|
});
|
||||||
|
|
||||||
|
it('maps paid but unshipped orders as confirmed', () => {
|
||||||
|
expect(mapOrderStatus({ orderStatus: 'Completed', checkoutStatus: 'Complete' })).toBe(
|
||||||
|
'confirmed'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('maps buyer to client with marketplace buyer id', () => {
|
it('maps buyer to client with marketplace buyer id', () => {
|
||||||
@ -93,10 +148,10 @@ describe('eBay order mappers', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('maps shipments from fulfillments', () => {
|
it('maps shipments from tracking details', () => {
|
||||||
const shipments = mapOrderShipments(ebayOrder);
|
const shipments = mapOrderShipments(ebayOrder);
|
||||||
expect(shipments[0]).toMatchObject({
|
expect(shipments[0]).toMatchObject({
|
||||||
externalReference: 'ful-1',
|
externalReference: 'TRACK123',
|
||||||
trackingNumber: 'TRACK123',
|
trackingNumber: 'TRACK123',
|
||||||
});
|
});
|
||||||
expect(shipments[0].state.type).toBe('shipped');
|
expect(shipments[0].state.type).toBe('shipped');
|
||||||
@ -105,7 +160,10 @@ describe('eBay order mappers', () => {
|
|||||||
it('classifies commerce notification topics', async () => {
|
it('classifies commerce notification topics', async () => {
|
||||||
const sold = await handleWebhook(
|
const sold = await handleWebhook(
|
||||||
{ name: 'eBay' },
|
{ 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' });
|
expect(sold).toMatchObject({ action: 'orderUpdate', orderId: 'o1', notificationId: 'n1' });
|
||||||
|
|
||||||
|
|||||||
@ -1,49 +1,217 @@
|
|||||||
import { makeRequest, logger } from './shared.js';
|
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 } = {}) {
|
async function fetchAllOrders(marketplace, { startTime, endTime } = {}) {
|
||||||
const orders = [];
|
const orders = [];
|
||||||
let offset = 0;
|
for (const window of createTimeWindows(startTime, endTime)) {
|
||||||
const limit = 50;
|
orders.push(...(await fetchOrdersInWindow(marketplace, window)));
|
||||||
|
|
||||||
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;
|
return orders;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,38 +224,32 @@ export async function syncOrders(marketplace, { startTime, endTime } = {}) {
|
|||||||
return orders;
|
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) {
|
export function mapOrderStatus(ebayOrder) {
|
||||||
if (ebayOrder.cancelStatus?.cancelState === 'CANCELED') {
|
const cancelStatus = ebayOrder.cancelStatus || '';
|
||||||
|
if (CANCELLED_STATUSES.has(ebayOrder.orderStatus) || CANCELLED_STATUSES.has(cancelStatus)) {
|
||||||
return 'cancelled';
|
return 'cancelled';
|
||||||
}
|
}
|
||||||
|
|
||||||
const fulfillmentStatus = ebayOrder.fulfillmentStartInstructions?.[0]?.fulfillmentStatus;
|
if (ebayOrder.shippedTime) {
|
||||||
if (fulfillmentStatus && FULFILLMENT_STATUS_MAP[fulfillmentStatus]) {
|
return 'shipped';
|
||||||
return FULFILLMENT_STATUS_MAP[fulfillmentStatus];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ORDER_STATUS_MAP[ebayOrder.orderFulfillmentStatus] || 'draft';
|
if (
|
||||||
|
ebayOrder.orderStatus === 'Completed' ||
|
||||||
|
ebayOrder.checkoutStatus === 'Complete' ||
|
||||||
|
ebayOrder.paidTime
|
||||||
|
) {
|
||||||
|
return 'confirmed';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'draft';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mapOrderToSalesOrder(ebayOrder) {
|
export function mapOrderToSalesOrder(ebayOrder) {
|
||||||
const pricingSummary = ebayOrder.pricingSummary || {};
|
const totalAmount = ebayOrder.subtotal || 0;
|
||||||
const totalAmount = parseFloat(pricingSummary.priceSubtotal?.value || 0);
|
const shippingAmount = ebayOrder.shippingAmount || 0;
|
||||||
const shippingAmount = parseFloat(pricingSummary.deliveryCost?.value || 0);
|
const totalTax = ebayOrder.salesTaxAmount || 0;
|
||||||
const totalTax = parseFloat(pricingSummary.tax?.value || 0);
|
const grandTotal = ebayOrder.total || 0;
|
||||||
const grandTotal = parseFloat(pricingSummary.total?.value || 0);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
externalReference: ebayOrder.orderId,
|
externalReference: ebayOrder.orderId,
|
||||||
@ -103,54 +265,47 @@ export function mapOrderToSalesOrder(ebayOrder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function mapBuyerToClient(ebayOrder) {
|
export function mapBuyerToClient(ebayOrder) {
|
||||||
const buyer = ebayOrder.buyer || {};
|
const address = ebayOrder.shippingAddress || {};
|
||||||
const address = ebayOrder.fulfillmentStartInstructions?.[0]?.shippingStep?.shipTo || {};
|
const buyer = ebayOrder.transactions?.[0] || {};
|
||||||
|
const buyerName = [buyer.firstName, buyer.lastName].filter(Boolean).join(' ');
|
||||||
const fullName = address.fullName || buyer.username || 'Unknown';
|
const fullName = address.name || buyerName || ebayOrder.buyerUserId || 'Unknown';
|
||||||
const contactAddress = address.contactAddress || {};
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: fullName,
|
name: fullName,
|
||||||
email: buyer.buyerRegistrationAddress?.email || '',
|
email: ebayOrder.buyerEmail || '',
|
||||||
phone: address.primaryPhone?.phoneNumber || '',
|
phone: address.phone || '',
|
||||||
externalReference: buyer.username || '',
|
externalReference: ebayOrder.buyerUserId || '',
|
||||||
address: {
|
address: {
|
||||||
addressLine1: contactAddress.addressLine1 || '',
|
addressLine1: address.street1 || '',
|
||||||
addressLine2: contactAddress.addressLine2 || '',
|
addressLine2: address.street2 || '',
|
||||||
city: contactAddress.city || '',
|
city: address.city || '',
|
||||||
state: contactAddress.stateOrProvince || '',
|
state: address.state || '',
|
||||||
postcode: contactAddress.postalCode || '',
|
postcode: address.postalCode || '',
|
||||||
country: contactAddress.countryCode || '',
|
country: address.country || '',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getOrder(marketplace, orderId) {
|
export async function getOrder(marketplace, orderId) {
|
||||||
const order = await makeRequest({
|
const xml = await makeTradingRequest({
|
||||||
marketplace,
|
marketplace,
|
||||||
path: `/sell/fulfillment/v1/order/${encodeURIComponent(orderId)}`,
|
callName: 'GetOrders',
|
||||||
|
body: buildGetOrdersRequest({ orderIds: [orderId] }),
|
||||||
});
|
});
|
||||||
const fulfillments = await makeRequest({
|
const { orders } = parseGetOrdersResponse(xml);
|
||||||
marketplace,
|
if (!orders.length) {
|
||||||
path: `/sell/fulfillment/v1/order/${encodeURIComponent(orderId)}/shipping_fulfillment`,
|
throw new Error(`eBay order ${orderId} was not found`);
|
||||||
acceptableStatuses: [404],
|
}
|
||||||
});
|
return orders[0];
|
||||||
return {
|
|
||||||
...order,
|
|
||||||
shippingFulfillments: fulfillments?.fulfillments || [],
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mapOrderLineItems(ebayOrder) {
|
export function mapOrderLineItems(ebayOrder) {
|
||||||
return (ebayOrder.lineItems || []).map((line) => {
|
return (ebayOrder.transactions || []).map((line) => {
|
||||||
const unit = parseFloat(line.lineItemCost?.value || 0);
|
const unit = line.transactionPrice || 0;
|
||||||
const tax = (line.taxes || []).reduce(
|
const tax = line.totalTaxAmount || 0;
|
||||||
(sum, taxLine) => sum + parseFloat(taxLine.amount?.value || 0),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
const quantity = line.quantity || 1;
|
const quantity = line.quantity || 1;
|
||||||
return {
|
return {
|
||||||
externalReference: line.lineItemId,
|
externalReference: line.orderLineItemId || line.transactionId,
|
||||||
sku: line.sku || '',
|
sku: line.sku || '',
|
||||||
name: line.title || line.sku || 'Marketplace item',
|
name: line.title || line.sku || 'Marketplace item',
|
||||||
quantity,
|
quantity,
|
||||||
@ -163,24 +318,26 @@ export function mapOrderLineItems(ebayOrder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function mapOrderShipments(ebayOrder) {
|
export function mapOrderShipments(ebayOrder) {
|
||||||
const shippingAmount = parseFloat(ebayOrder.pricingSummary?.deliveryCost?.value || 0);
|
const shipments = ebayOrder.shipments || [];
|
||||||
const fulfillments = ebayOrder.shippingFulfillments || [];
|
if (!shipments.length) {
|
||||||
if (!fulfillments.length) {
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
const splitAmount = shippingAmount / fulfillments.length;
|
const shippingAmount = ebayOrder.shippingAmount || 0;
|
||||||
return fulfillments.map((fulfillment) => ({
|
const splitAmount = shippingAmount / shipments.length;
|
||||||
externalReference: fulfillment.fulfillmentId,
|
return shipments.map((shipment) => ({
|
||||||
trackingNumber: fulfillment.shipmentTrackingNumber || '',
|
externalReference: shipment.trackingNumber,
|
||||||
|
trackingNumber: shipment.trackingNumber || '',
|
||||||
amount: splitAmount,
|
amount: splitAmount,
|
||||||
amountWithTax: splitAmount,
|
amountWithTax: splitAmount,
|
||||||
state: { type: fulfillment.shippedDate ? 'shipped' : 'planned' },
|
state: { type: ebayOrder.shippedTime ? 'shipped' : 'planned' },
|
||||||
shippedAt: fulfillment.shippedDate ? new Date(fulfillment.shippedDate) : undefined,
|
shippedAt: ebayOrder.shippedTime ? new Date(ebayOrder.shippedTime) : 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) {
|
if (!orderId) {
|
||||||
throw new Error('orderId is required to create an eBay shipping fulfillment');
|
throw new Error('orderId is required to create an eBay shipping fulfillment');
|
||||||
}
|
}
|
||||||
@ -204,14 +361,9 @@ export async function createShippingFulfillment(marketplace, { orderId, lineItem
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function handleWebhook(marketplace, event) {
|
export async function handleWebhook(marketplace, event) {
|
||||||
const topic =
|
const topic = event?.metadata?.topic || event?.topic || event?.notification?.topic || '';
|
||||||
event?.metadata?.topic ||
|
|
||||||
event?.topic ||
|
|
||||||
event?.notification?.topic ||
|
|
||||||
'';
|
|
||||||
const data = event?.notification?.data || event?.data || {};
|
const data = event?.notification?.data || event?.data || {};
|
||||||
const notificationId =
|
const notificationId = event?.notification?.notificationId || event?.notificationId || '';
|
||||||
event?.notification?.notificationId || event?.notificationId || '';
|
|
||||||
|
|
||||||
logger.info(`eBay webhook received: ${topic} for marketplace ${marketplace.name}`);
|
logger.info(`eBay webhook received: ${topic} for marketplace ${marketplace.name}`);
|
||||||
|
|
||||||
@ -220,7 +372,10 @@ export async function handleWebhook(marketplace, event) {
|
|||||||
|
|
||||||
const normalized = String(topic).toUpperCase();
|
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 {
|
return {
|
||||||
action: 'accountDeletion',
|
action: 'accountDeletion',
|
||||||
userId: data.userId || data.username,
|
userId: data.userId || data.username,
|
||||||
@ -233,7 +388,11 @@ export async function handleWebhook(marketplace, event) {
|
|||||||
return { action: 'disconnect', notificationId, topic };
|
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 {
|
return {
|
||||||
action: orderId && topic.toLowerCase().includes('cancel') ? 'orderCancel' : 'orderUpdate',
|
action: orderId && topic.toLowerCase().includes('cancel') ? 'orderCancel' : 'orderUpdate',
|
||||||
orderId,
|
orderId,
|
||||||
|
|||||||
@ -1,43 +1,8 @@
|
|||||||
import { logger, getMarketplaceDebugContext } from './shared.js';
|
import { logger } from './shared.js';
|
||||||
|
import { makeTradingRequest } from './trading.js';
|
||||||
import { fetchEbayCategoryReferences } from './categoryTree.js';
|
import { fetchEbayCategoryReferences } from './categoryTree.js';
|
||||||
import { syncAccountPolicies } from './accountPolicySync.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 = '') {
|
export function parseShippingServiceDetails(xml = '') {
|
||||||
const blocks = xml.match(/<ShippingServiceDetails>[\s\S]*?<\/ShippingServiceDetails>/g) || [];
|
const blocks = xml.match(/<ShippingServiceDetails>[\s\S]*?<\/ShippingServiceDetails>/g) || [];
|
||||||
const services = [];
|
const services = [];
|
||||||
@ -68,67 +33,13 @@ function buildGeteBayDetailsRequest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchEbayShippingServices(marketplace) {
|
export async function fetchEbayShippingServices(marketplace) {
|
||||||
const accessToken = marketplace.config?.accessToken;
|
const xml = await makeTradingRequest({
|
||||||
if (!accessToken) {
|
marketplace,
|
||||||
throw new Error(
|
callName: 'GeteBayDetails',
|
||||||
'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(),
|
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);
|
const services = parseShippingServiceDetails(xml);
|
||||||
logger.debug(`GeteBayDetails succeeded (${durationMs}ms)`, {
|
|
||||||
...getMarketplaceDebugContext(marketplace),
|
|
||||||
siteId,
|
|
||||||
serviceCount: services.length,
|
|
||||||
});
|
|
||||||
logger.info(
|
logger.info(
|
||||||
`Fetched ${services.length} eBay shipping service(s) for marketplace "${marketplace.name}"`
|
`Fetched ${services.length} eBay shipping service(s) for marketplace "${marketplace.name}"`
|
||||||
);
|
);
|
||||||
|
|||||||
141
src/integrations/marketplaces/ebay/trading.js
Normal file
141
src/integrations/marketplaces/ebay/trading.js
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
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, '&')
|
||||||
|
.replace(/</g, '<')
|
||||||
|
.replace(/>/g, '>')
|
||||||
|
.replace(/"/g, '"')
|
||||||
|
.replace(/'/g, ''');
|
||||||
|
}
|
||||||
|
|
||||||
|
export function xmlUnescape(value) {
|
||||||
|
return String(value ?? '')
|
||||||
|
.replace(/'/g, "'")
|
||||||
|
.replace(/"/g, '"')
|
||||||
|
.replace(/>/g, '>')
|
||||||
|
.replace(/</g, '<')
|
||||||
|
.replace(/&/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;
|
||||||
|
}
|
||||||
@ -84,10 +84,24 @@ router.get('/properties', checkPermissions('invoice', 'list'), isAuthenticated,
|
|||||||
listInvoicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listInvoicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('invoice', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('invoice', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getInvoicePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('invoice', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('invoice', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchInvoicesRouteHandler(req, res, search);
|
searchInvoicesRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -65,7 +65,17 @@ router.get(
|
|||||||
checkPermissions('paymentPolicy', 'list'),
|
checkPermissions('paymentPolicy', 'list'),
|
||||||
isAuthenticated,
|
isAuthenticated,
|
||||||
async (req, res) => {
|
async (req, res) => {
|
||||||
getPaymentPolicyPropertyValuesRouteHandler(req, res, req.query.property);
|
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);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -65,10 +65,24 @@ router.get('/properties', checkPermissions('payment', 'list'), isAuthenticated,
|
|||||||
listPaymentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPaymentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('payment', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('payment', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPaymentPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('payment', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('payment', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchPaymentsRouteHandler(req, res, search);
|
searchPaymentsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -50,10 +50,24 @@ router.get('/properties', checkPermissions('taxRecord', 'list'), isAuthenticated
|
|||||||
listTaxRecordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listTaxRecordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('taxRecord', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('taxRecord', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getTaxRecordPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('taxRecord', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('taxRecord', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchTaxRecordsRouteHandler(req, res, search);
|
searchTaxRecordsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -60,10 +60,24 @@ router.get('/properties', checkPermissions('filamentStock', 'list'), isAuthentic
|
|||||||
listFilamentStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listFilamentStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('filamentStock', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('filamentStock', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getFilamentStockPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('filamentStock', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('filamentStock', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchFilamentStocksRouteHandler(req, res, search);
|
searchFilamentStocksRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -74,10 +74,24 @@ router.get('/properties', checkPermissions('orderItem', 'list'), isAuthenticated
|
|||||||
listOrderItemsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listOrderItemsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('orderItem', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('orderItem', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getOrderItemPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('orderItem', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('orderItem', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchOrderItemsRouteHandler(req, res, search);
|
searchOrderItemsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -52,10 +52,24 @@ router.get('/properties', checkPermissions('partStock', 'list'), isAuthenticated
|
|||||||
listPartStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPartStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('partStock', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('partStock', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPartStockPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('partStock', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('partStock', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchPartStocksRouteHandler(req, res, search);
|
searchPartStocksRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -51,10 +51,24 @@ router.get('/properties', checkPermissions('productStock', 'list'), isAuthentica
|
|||||||
listProductStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listProductStocksByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('productStock', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('productStock', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getProductStockPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('productStock', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('productStock', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchProductStocksRouteHandler(req, res, search);
|
searchProductStocksRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -78,10 +78,24 @@ router.get('/properties', checkPermissions('purchaseOrder', 'list'), isAuthentic
|
|||||||
listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('purchaseOrder', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('purchaseOrder', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPurchaseOrderPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('purchaseOrder', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('purchaseOrder', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchPurchaseOrdersRouteHandler(req, res, search);
|
searchPurchaseOrdersRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -83,10 +83,24 @@ router.get('/properties', checkPermissions('shipment', 'list'), isAuthenticated,
|
|||||||
listShipmentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listShipmentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('shipment', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('shipment', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getShipmentPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('shipment', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('shipment', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchShipmentsRouteHandler(req, res, search);
|
searchShipmentsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -41,10 +41,24 @@ router.get('/properties', checkPermissions('stockEvent', 'list'), isAuthenticate
|
|||||||
listStockEventsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listStockEventsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('stockEvent', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('stockEvent', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getStockEventPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('stockEvent', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('stockEvent', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchStockEventsRouteHandler(req, res, search);
|
searchStockEventsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -40,10 +40,24 @@ router.get('/properties', checkPermissions('stockLocation', 'list'), isAuthentic
|
|||||||
listStockLocationsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listStockLocationsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('stockLocation', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('stockLocation', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getStockLocationPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('stockLocation', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('stockLocation', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchStockLocationsRouteHandler(req, res, search);
|
searchStockLocationsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -49,10 +49,24 @@ router.get('/properties', checkPermissions('stockTransfer', 'list'), isAuthentic
|
|||||||
listStockTransfersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listStockTransfersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('stockTransfer', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('stockTransfer', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getStockTransferPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('stockTransfer', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('stockTransfer', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchStockTransfersRouteHandler(req, res, search);
|
searchStockTransfersRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -46,10 +46,24 @@ router.get('/properties', checkPermissions('appPassword', 'list'), isAuthenticat
|
|||||||
listAppPasswordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listAppPasswordsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('appPassword', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('appPassword', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getAppPasswordPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('appPassword', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('appPassword', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -50,10 +50,24 @@ router.get('/properties', checkPermissions('courier', 'list'), isAuthenticated,
|
|||||||
listCouriersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listCouriersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('courier', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('courier', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getCourierPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('courier', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('courier', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -76,10 +76,24 @@ router.get('/properties', checkPermissions('courierService', 'list'), isAuthenti
|
|||||||
listCourierServicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listCourierServicesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('courierService', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('courierService', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getCourierServicePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('courierService', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('courierService', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -49,10 +49,24 @@ router.get('/properties', checkPermissions('documentJob', 'list'), isAuthenticat
|
|||||||
listDocumentJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listDocumentJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('documentJob', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('documentJob', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getDocumentJobPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('documentJob', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('documentJob', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -49,10 +49,24 @@ router.get('/properties', checkPermissions('documentPrinter', 'list'), isAuthent
|
|||||||
listDocumentPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listDocumentPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('documentPrinter', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('documentPrinter', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getDocumentPrinterPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('documentPrinter', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('documentPrinter', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -64,10 +64,24 @@ router.get('/properties', checkPermissions('documentSize', 'list'), isAuthentica
|
|||||||
listDocumentSizesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listDocumentSizesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('documentSize', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('documentSize', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getDocumentSizePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('documentSize', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('documentSize', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -66,10 +66,24 @@ router.get('/properties', checkPermissions('documentTemplate', 'list'), isAuthen
|
|||||||
listDocumentTemplatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listDocumentTemplatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('documentTemplate', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('documentTemplate', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getDocumentTemplatePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('documentTemplate', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('documentTemplate', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -70,10 +70,24 @@ router.get('/properties', checkPermissions('filament', 'list'), isAuthenticated,
|
|||||||
listFilamentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listFilamentsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('filament', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('filament', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getFilamentPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('filament', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('filament', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -59,10 +59,24 @@ router.get('/properties', checkPermissions('filamentSku', 'list'), isAuthenticat
|
|||||||
listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listFilamentSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('filamentSku', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('filamentSku', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getFilamentSkuPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('filamentSku', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('filamentSku', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchFilamentSkusRouteHandler(req, res, search);
|
searchFilamentSkusRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -52,10 +52,24 @@ router.get('/properties', checkPermissions('file', 'list'), isAuthenticated, asy
|
|||||||
listFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('file', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('file', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getFilePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('file', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('file', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -48,10 +48,24 @@ router.get('/properties', checkPermissions('host', 'list'), isAuthenticated, asy
|
|||||||
listHostsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listHostsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('host', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('host', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getHostPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('host', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('host', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -48,10 +48,24 @@ router.get('/properties', checkPermissions('material', 'list'), isAuthenticated,
|
|||||||
listMaterialsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listMaterialsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('material', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('material', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getMaterialPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('material', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('material', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -48,10 +48,24 @@ router.get('/properties', checkPermissions('noteType', 'list'), isAuthenticated,
|
|||||||
listNoteTypesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listNoteTypesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('noteType', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('noteType', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getNoteTypePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('noteType', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('noteType', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchNoteTypesRouteHandler(req, res, search);
|
searchNoteTypesRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -59,10 +59,24 @@ router.get('/properties', checkPermissions('part', 'list'), isAuthenticated, asy
|
|||||||
listPartsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPartsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('part', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('part', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPartPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('part', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('part', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -60,10 +60,24 @@ router.get('/properties', checkPermissions('partSku', 'list'), isAuthenticated,
|
|||||||
listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPartSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('partSku', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPartSkuPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('partSku', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchPartSkusRouteHandler(req, res, search);
|
searchPartSkusRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -48,10 +48,24 @@ router.get('/properties', checkPermissions('permissionSetting', 'list'), isAuthe
|
|||||||
listPermissionSettingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPermissionSettingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('permissionSetting', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('permissionSetting', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPermissionSettingsPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('permissionSetting', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('permissionSetting', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -46,10 +46,24 @@ router.get('/properties', checkPermissions('productCategory', 'list'), isAuthent
|
|||||||
listProductCategoriesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listProductCategoriesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('productCategory', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('productCategory', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getProductCategoryPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('productCategory', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('productCategory', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -60,10 +60,24 @@ router.get('/properties', checkPermissions('product', 'list'), isAuthenticated,
|
|||||||
listProductsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listProductsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('product', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('product', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getProductPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('product', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('product', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -60,10 +60,24 @@ router.get('/properties', checkPermissions('productSku', 'list'), isAuthenticate
|
|||||||
listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listProductSkusByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('productSku', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getProductSkuPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('productSku', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchProductSkusRouteHandler(req, res, search);
|
searchProductSkusRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -61,10 +61,24 @@ router.get('/properties', checkPermissions('taxRate', 'list'), isAuthenticated,
|
|||||||
listTaxRatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listTaxRatesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('taxRate', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('taxRate', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getTaxRatePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('taxRate', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('taxRate', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -48,10 +48,24 @@ router.get('/properties', checkPermissions('userGroup', 'list'), isAuthenticated
|
|||||||
listUserGroupsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listUserGroupsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('userGroup', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('userGroup', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getUserGroupPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('userGroup', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('userGroup', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -50,10 +50,24 @@ router.get('/properties', checkPermissions('user', 'list'), isAuthenticated, asy
|
|||||||
listUsersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listUsersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('user', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('user', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getUserPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('user', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('user', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchUsersRouteHandler(req, res, search);
|
searchUsersRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -48,10 +48,24 @@ router.get('/properties', checkPermissions('vendor', 'list'), isAuthenticated, a
|
|||||||
listVendorsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listVendorsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('vendor', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('vendor', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getVendorPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('vendor', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('vendor', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
|
|||||||
@ -46,10 +46,24 @@ router.get('/properties', checkPermissions('filamentProfile', 'list'), isAuthent
|
|||||||
listFilamentProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listFilamentProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('filamentProfile', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('filamentProfile', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getFilamentProfilePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('filamentProfile', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('filamentProfile', 'list'), isAuthenticated, async (req, res) => {
|
||||||
searchFilamentProfilesRouteHandler(req, res, req.query.search);
|
searchFilamentProfilesRouteHandler(req, res, req.query.search);
|
||||||
|
|||||||
@ -49,10 +49,24 @@ router.get('/properties', checkPermissions('gcodeFile', 'list'), isAuthenticated
|
|||||||
listGCodeFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listGCodeFilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('gcodeFile', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('gcodeFile', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getGCodeFilePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('gcodeFile', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('gcodeFile', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchGCodeFilesRouteHandler(req, res, search);
|
searchGCodeFilesRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -45,7 +45,17 @@ import { convertPropertiesString, getFilter, getSort } from '../../utils.js';
|
|||||||
router.get('/', isAuthenticated, checkPermissions('job', 'list'), async (req, res) => {
|
router.get('/', isAuthenticated, checkPermissions('job', 'list'), async (req, res) => {
|
||||||
const { page, limit, property, search, sortProperty, sortOrder } = req.query;
|
const { page, limit, property, search, sortProperty, sortOrder } = req.query;
|
||||||
const filter = await getFilter(req.query, listAllowedFilters);
|
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) => {
|
router.get('/properties', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
|
||||||
@ -60,7 +70,12 @@ router.get('/properties', checkPermissions('job', 'list'), isAuthenticated, asyn
|
|||||||
|
|
||||||
router.get('/values', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/values', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getJobPropertyValuesRouteHandler(req, res, property);
|
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);
|
||||||
});
|
});
|
||||||
router.get('/search', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('job', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
@ -84,7 +99,16 @@ router.get('/history', isAuthenticated, async (req, res) => {
|
|||||||
router.get('/neighbors', isAuthenticated, async (req, res) => {
|
router.get('/neighbors', isAuthenticated, async (req, res) => {
|
||||||
const { property, search, sortProperty, sortOrder, id } = req.query;
|
const { property, search, sortProperty, sortOrder, id } = req.query;
|
||||||
const filter = await getFilter(req.query, listAllowedFilters);
|
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) => {
|
router.get('/:id', isAuthenticated, checkPermissions('job', 'info'), async (req, res) => {
|
||||||
|
|||||||
@ -45,10 +45,24 @@ router.get('/properties', checkPermissions('printerProfile', 'list'), isAuthenti
|
|||||||
listPrinterProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPrinterProfilesByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('printerProfile', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('printerProfile', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPrinterProfilePropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('printerProfile', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('printerProfile', 'list'), isAuthenticated, async (req, res) => {
|
||||||
searchPrinterProfilesRouteHandler(req, res, req.query.search);
|
searchPrinterProfilesRouteHandler(req, res, req.query.search);
|
||||||
|
|||||||
@ -49,10 +49,24 @@ router.get('/properties', checkPermissions('printer', 'list'), isAuthenticated,
|
|||||||
listPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listPrintersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('printer', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('printer', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getPrinterPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('printer', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('printer', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchPrintersRouteHandler(req, res, search);
|
searchPrintersRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -56,10 +56,24 @@ router.get('/properties', checkPermissions('subJob', 'list'), isAuthenticated, a
|
|||||||
listSubJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listSubJobsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('subJob', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('subJob', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getSubJobPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('subJob', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('subJob', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchSubJobsRouteHandler(req, res, search);
|
searchSubJobsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -49,10 +49,24 @@ router.get('/properties', checkPermissions('client', 'list'), isAuthenticated, a
|
|||||||
listClientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listClientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('client', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('client', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getClientPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('client', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('client', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchClientsRouteHandler(req, res, search);
|
searchClientsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -76,7 +76,17 @@ router.get(
|
|||||||
checkPermissions('fulfillmentPolicy', 'list'),
|
checkPermissions('fulfillmentPolicy', 'list'),
|
||||||
isAuthenticated,
|
isAuthenticated,
|
||||||
async (req, res) => {
|
async (req, res) => {
|
||||||
getFulfillmentPolicyPropertyValuesRouteHandler(req, res, req.query.property);
|
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);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -84,10 +84,24 @@ router.get('/properties', checkPermissions('listing', 'list'), isAuthenticated,
|
|||||||
listListingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listListingsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('listing', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('listing', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getListingPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('listing', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('listing', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchListingsRouteHandler(req, res, search);
|
searchListingsRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import express from 'express';
|
|||||||
import { isAuthenticated } from '../../keycloak.js';
|
import { isAuthenticated } from '../../keycloak.js';
|
||||||
import { checkPermissions } from '../../database/permissions.js';
|
import { checkPermissions } from '../../database/permissions.js';
|
||||||
import { getFilter, convertPropertiesString, getSort } from '../../utils.js';
|
import { getFilter, convertPropertiesString, getSort } from '../../utils.js';
|
||||||
|
import { listingVarientModel } from '../../database/schemas/sales/listingvarient.schema.js';
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@ -19,7 +20,15 @@ const listAllowedFilters = [
|
|||||||
'updatedAt',
|
'updatedAt',
|
||||||
'_reference',
|
'_reference',
|
||||||
];
|
];
|
||||||
const listAllowedSorters = ['state', 'stockQuantity', 'price', 'lastSyncedAt', 'createdAt', 'updatedAt', '_id'];
|
const listAllowedSorters = [
|
||||||
|
'state',
|
||||||
|
'stockQuantity',
|
||||||
|
'price',
|
||||||
|
'lastSyncedAt',
|
||||||
|
'createdAt',
|
||||||
|
'updatedAt',
|
||||||
|
'_id',
|
||||||
|
];
|
||||||
const propertiesAllowedFilters = [
|
const propertiesAllowedFilters = [
|
||||||
'listing',
|
'listing',
|
||||||
'listing._id',
|
'listing._id',
|
||||||
@ -30,7 +39,7 @@ const propertiesAllowedFilters = [
|
|||||||
'state.type',
|
'state.type',
|
||||||
'createdAt',
|
'createdAt',
|
||||||
'updatedAt',
|
'updatedAt',
|
||||||
];
|
];
|
||||||
import {
|
import {
|
||||||
listListingVarientsRouteHandler,
|
listListingVarientsRouteHandler,
|
||||||
getListingVarientRouteHandler,
|
getListingVarientRouteHandler,
|
||||||
@ -44,17 +53,30 @@ import {
|
|||||||
unpublishListingVarientRouteHandler,
|
unpublishListingVarientRouteHandler,
|
||||||
searchListingVarientsRouteHandler,
|
searchListingVarientsRouteHandler,
|
||||||
getListingVarientPropertyValuesRouteHandler,
|
getListingVarientPropertyValuesRouteHandler,
|
||||||
|
getListingVarientNeighborsRouteHandler,
|
||||||
getListingVarientNeighborsRouteHandler
|
|
||||||
} from '../../services/sales/listingvarients.js';
|
} from '../../services/sales/listingvarients.js';
|
||||||
|
|
||||||
router.get('/', isAuthenticated, checkPermissions('listingVarient', 'list'), async (req, res) => {
|
router.get('/', isAuthenticated, checkPermissions('listingVarient', 'list'), async (req, res) => {
|
||||||
const { page, limit, property, search, sortProperty, sortOrder } = req.query;
|
const { page, limit, property, search, sortProperty, sortOrder } = req.query;
|
||||||
const filter = await getFilter(req.query, listAllowedFilters);
|
const filter = await getFilter(req.query, listAllowedFilters);
|
||||||
listListingVarientsRouteHandler(req, res, page, limit, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder);
|
listListingVarientsRouteHandler(
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
page,
|
||||||
|
limit,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
search,
|
||||||
|
getSort(sortProperty, listAllowedSorters),
|
||||||
|
sortOrder
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/properties', checkPermissions('listingVarient', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/properties',
|
||||||
|
checkPermissions('listingVarient', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
let properties = convertPropertiesString(req.query.properties);
|
let properties = convertPropertiesString(req.query.properties);
|
||||||
const filter = await getFilter(req.query, propertiesAllowedFilters, false);
|
const filter = await getFilter(req.query, propertiesAllowedFilters, false);
|
||||||
var masterFilter = {};
|
var masterFilter = {};
|
||||||
@ -62,21 +84,46 @@ router.get('/properties', checkPermissions('listingVarient', 'list'), isAuthenti
|
|||||||
masterFilter = JSON.parse(req.query.masterFilter);
|
masterFilter = JSON.parse(req.query.masterFilter);
|
||||||
}
|
}
|
||||||
listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listListingVarientsByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
router.get('/values', checkPermissions('listingVarient', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('listingVarient', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getListingVarientPropertyValuesRouteHandler(req, res, property);
|
const filter = await getFilter(req.query, listAllowedFilters, true, listingVarientModel);
|
||||||
});
|
var masterFilter = {};
|
||||||
router.get('/search', checkPermissions('listingVarient', 'list'), isAuthenticated, async (req, res) => {
|
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;
|
const { search } = req.query;
|
||||||
searchListingVarientsRouteHandler(req, res, search);
|
searchListingVarientsRouteHandler(req, res, search);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
router.post(
|
||||||
router.post('/', isAuthenticated, checkPermissions('listing', 'newListingVarient'), async (req, res) => {
|
'/',
|
||||||
|
isAuthenticated,
|
||||||
|
checkPermissions('listing', 'newListingVarient'),
|
||||||
|
async (req, res) => {
|
||||||
newListingVarientRouteHandler(req, res);
|
newListingVarientRouteHandler(req, res);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
router.get('/stats', isAuthenticated, async (req, res) => {
|
router.get('/stats', isAuthenticated, async (req, res) => {
|
||||||
getListingVarientStatsRouteHandler(req, res);
|
getListingVarientStatsRouteHandler(req, res);
|
||||||
@ -86,27 +133,56 @@ router.get('/history', isAuthenticated, async (req, res) => {
|
|||||||
getListingVarientHistoryRouteHandler(req, res);
|
getListingVarientHistoryRouteHandler(req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post('/:id/publish', isAuthenticated, checkPermissions('listingVarient', 'publish'), async (req, res) => {
|
router.post(
|
||||||
|
'/:id/publish',
|
||||||
|
isAuthenticated,
|
||||||
|
checkPermissions('listingVarient', 'publish'),
|
||||||
|
async (req, res) => {
|
||||||
publishListingVarientRouteHandler(req, res);
|
publishListingVarientRouteHandler(req, res);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
router.post('/:id/unpublish', isAuthenticated, checkPermissions('listingVarient', 'unpublish'), async (req, res) => {
|
router.post(
|
||||||
|
'/:id/unpublish',
|
||||||
|
isAuthenticated,
|
||||||
|
checkPermissions('listingVarient', 'unpublish'),
|
||||||
|
async (req, res) => {
|
||||||
unpublishListingVarientRouteHandler(req, res);
|
unpublishListingVarientRouteHandler(req, res);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
router.get('/neighbors', isAuthenticated, async (req, res) => {
|
router.get('/neighbors', isAuthenticated, async (req, res) => {
|
||||||
const { property, search, sortProperty, sortOrder, id } = req.query;
|
const { property, search, sortProperty, sortOrder, id } = req.query;
|
||||||
const filter = await getFilter(req.query, listAllowedFilters);
|
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) => {
|
router.get(
|
||||||
|
'/:id',
|
||||||
|
isAuthenticated,
|
||||||
|
checkPermissions('listingVarient', 'info'),
|
||||||
|
async (req, res) => {
|
||||||
getListingVarientRouteHandler(req, res);
|
getListingVarientRouteHandler(req, res);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
router.put('/:id', isAuthenticated, checkPermissions('listingVarient', 'edit'), async (req, res) => {
|
router.put(
|
||||||
|
'/:id',
|
||||||
|
isAuthenticated,
|
||||||
|
checkPermissions('listingVarient', 'edit'),
|
||||||
|
async (req, res) => {
|
||||||
editListingVarientRouteHandler(req, res);
|
editListingVarientRouteHandler(req, res);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
router.delete('/:id', isAuthenticated, async (req, res) => {
|
router.delete('/:id', isAuthenticated, async (req, res) => {
|
||||||
deleteListingVarientRouteHandler(req, res);
|
deleteListingVarientRouteHandler(req, res);
|
||||||
|
|||||||
@ -101,7 +101,16 @@ router.get(
|
|||||||
isAuthenticated,
|
isAuthenticated,
|
||||||
async (req, res) => {
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getMarketplacePropertyValuesRouteHandler(req, res, property);
|
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);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
router.get(
|
router.get(
|
||||||
|
|||||||
@ -81,7 +81,17 @@ router.get(
|
|||||||
checkPermissions('returnPolicy', 'list'),
|
checkPermissions('returnPolicy', 'list'),
|
||||||
isAuthenticated,
|
isAuthenticated,
|
||||||
async (req, res) => {
|
async (req, res) => {
|
||||||
getReturnPolicyPropertyValuesRouteHandler(req, res, req.query.property);
|
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);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -51,10 +51,24 @@ router.get('/properties', checkPermissions('salesOrder', 'list'), isAuthenticate
|
|||||||
listSalesOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
listSalesOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/values', checkPermissions('salesOrder', 'list'), isAuthenticated, async (req, res) => {
|
router.get(
|
||||||
|
'/values',
|
||||||
|
checkPermissions('salesOrder', 'list'),
|
||||||
|
isAuthenticated,
|
||||||
|
async (req, res) => {
|
||||||
const { property } = req.query;
|
const { property } = req.query;
|
||||||
getSalesOrderPropertyValuesRouteHandler(req, res, property);
|
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('/search', checkPermissions('salesOrder', 'list'), isAuthenticated, async (req, res) => {
|
router.get('/search', checkPermissions('salesOrder', 'list'), isAuthenticated, async (req, res) => {
|
||||||
const { search } = req.query;
|
const { search } = req.query;
|
||||||
searchSalesOrdersRouteHandler(req, res, search);
|
searchSalesOrdersRouteHandler(req, res, search);
|
||||||
|
|||||||
@ -95,10 +95,17 @@ export const listInvoicesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getInvoicePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getInvoicePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: invoiceModel,
|
model: invoiceModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -89,10 +89,17 @@ export const listPaymentPoliciesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPaymentPolicyPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPaymentPolicyPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: paymentPolicyModel,
|
model: paymentPolicyModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -84,10 +84,17 @@ export const listPaymentsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPaymentPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPaymentPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: paymentModel,
|
model: paymentModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -74,10 +74,17 @@ export const listTaxRecordsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getTaxRecordPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getTaxRecordPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: taxRecordModel,
|
model: taxRecordModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -82,10 +82,17 @@ export const listFilamentStocksByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getFilamentStockPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getFilamentStockPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: filamentStockModel,
|
model: filamentStockModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -173,10 +173,17 @@ export const listOrderItemsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getOrderItemPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getOrderItemPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: orderItemModel,
|
model: orderItemModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -85,10 +85,17 @@ export const listPartStocksByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPartStockPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPartStockPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: partStockModel,
|
model: partStockModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -144,10 +144,17 @@ export const listProductStocksByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getProductStockPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getProductStockPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: productStockModel,
|
model: productStockModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -81,10 +81,17 @@ export const listPurchaseOrdersByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPurchaseOrderPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPurchaseOrderPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: purchaseOrderModel,
|
model: purchaseOrderModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -82,10 +82,17 @@ export const listShipmentsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getShipmentPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getShipmentPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: shipmentModel,
|
model: shipmentModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -79,10 +79,17 @@ export const listStockEventsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getStockEventPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getStockEventPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: stockEventModel,
|
model: stockEventModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -76,10 +76,17 @@ export const listStockLocationsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getStockLocationPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getStockLocationPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: stockLocationModel,
|
model: stockLocationModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -281,10 +281,17 @@ export const listStockTransfersByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getStockTransferPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getStockTransferPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: stockTransferModel,
|
model: stockTransferModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -82,10 +82,17 @@ export const listAppPasswordsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getAppPasswordPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getAppPasswordPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: appPasswordModel,
|
model: appPasswordModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -74,10 +74,17 @@ export const listCouriersByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getCourierPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getCourierPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: courierModel,
|
model: courierModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -78,10 +78,17 @@ export const listCourierServicesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getCourierServicePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getCourierServicePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: courierServiceModel,
|
model: courierServiceModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -75,10 +75,17 @@ export const listDocumentJobsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getDocumentJobPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getDocumentJobPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: documentJobModel,
|
model: documentJobModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -78,10 +78,17 @@ export const listDocumentPrintersByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getDocumentPrinterPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getDocumentPrinterPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: documentPrinterModel,
|
model: documentPrinterModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -74,10 +74,17 @@ export const listDocumentSizesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getDocumentSizePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getDocumentSizePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: documentSizeModel,
|
model: documentSizeModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -112,10 +112,17 @@ export const listDocumentTemplatesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getDocumentTemplatePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getDocumentTemplatePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: documentTemplateModel,
|
model: documentTemplateModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -78,10 +78,17 @@ export const listFilamentsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getFilamentPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getFilamentPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: filamentModel,
|
model: filamentModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -76,10 +76,17 @@ export const listFilamentSkusByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getFilamentSkuPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getFilamentSkuPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: filamentSkuModel,
|
model: filamentSkuModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -111,10 +111,17 @@ export const listFilesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getFilePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getFilePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: fileModel,
|
model: fileModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -74,10 +74,17 @@ export const listHostsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getHostPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getHostPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: hostModel,
|
model: hostModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -76,10 +76,17 @@ export const listMaterialsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getMaterialPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getMaterialPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: materialModel,
|
model: materialModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -74,10 +74,17 @@ export const listNoteTypesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getNoteTypePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getNoteTypePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: noteTypeModel,
|
model: noteTypeModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -76,10 +76,17 @@ export const listPartsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPartPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPartPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: partModel,
|
model: partModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -82,10 +82,17 @@ export const listPartSkusByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPartSkuPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPartSkuPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: partSkuModel,
|
model: partSkuModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -77,10 +77,17 @@ export const listPermissionSettingsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPermissionSettingsPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPermissionSettingsPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: permissionSettingModel,
|
model: permissionSettingModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -79,10 +79,17 @@ export const listProductCategoriesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getProductCategoryPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getProductCategoryPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: productCategoryModel,
|
model: productCategoryModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -76,10 +76,17 @@ export const listProductsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getProductPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getProductPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: productModel,
|
model: productModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -85,10 +85,17 @@ export const listProductSkusByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getProductSkuPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getProductSkuPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: productSkuModel,
|
model: productSkuModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -80,10 +80,17 @@ export const listTaxRatesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getTaxRatePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getTaxRatePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: taxRateModel,
|
model: taxRateModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -83,10 +83,17 @@ export const listUserGroupsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getUserGroupPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getUserGroupPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: userGroupModel,
|
model: userGroupModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -78,10 +78,17 @@ export const listUsersByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getUserPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getUserPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: userModel,
|
model: userModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -74,10 +74,17 @@ export const listVendorsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getVendorPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getVendorPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: vendorModel,
|
model: vendorModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -225,10 +225,17 @@ export const listFilamentProfilesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getFilamentProfilePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getFilamentProfilePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: filamentProfileModel,
|
model: filamentProfileModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -76,10 +76,17 @@ export const listGCodeFilesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getGCodeFilePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getGCodeFilePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: gcodeFileModel,
|
model: gcodeFileModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -76,11 +76,17 @@ export const listJobsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getJobPropertyValuesRouteHandler = async (req, res, property, filter = {}) => {
|
export const getJobPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: jobModel,
|
model: jobModel,
|
||||||
property,
|
property,
|
||||||
filter,
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -113,10 +113,17 @@ export const listPrinterProfilesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPrinterProfilePropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPrinterProfilePropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: printerProfileModel,
|
model: printerProfileModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -77,10 +77,17 @@ export const listPrintersByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPrinterPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getPrinterPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: printerModel,
|
model: printerModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -71,10 +71,17 @@ export const listSubJobsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getSubJobPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getSubJobPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: subJobModel,
|
model: subJobModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -74,10 +74,17 @@ export const listClientsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getClientPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getClientPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: clientModel,
|
model: clientModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -95,10 +95,17 @@ export const listFulfillmentPoliciesByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getFulfillmentPolicyPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getFulfillmentPolicyPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: fulfillmentPolicyModel,
|
model: fulfillmentPolicyModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -144,10 +144,17 @@ export const listListingsByPropertiesRouteHandler = async (
|
|||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getListingPropertyValuesRouteHandler = async (req, res, property) => {
|
export const getListingPropertyValuesRouteHandler = async (
|
||||||
|
req,
|
||||||
|
res,
|
||||||
|
property,
|
||||||
|
filter,
|
||||||
|
masterFilter
|
||||||
|
) => {
|
||||||
const result = await getPropertyValues({
|
const result = await getPropertyValues({
|
||||||
model: listingModel,
|
model: listingModel,
|
||||||
property,
|
property,
|
||||||
|
filter: { ...filter, ...masterFilter },
|
||||||
});
|
});
|
||||||
res.send(result);
|
res.send(result);
|
||||||
};
|
};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user