All checks were successful
farmcontrol/farmcontrol-api/pipeline/head This commit looks good
This update introduces a new utility function, `getSort`, to validate and apply sorting based on allowed sorters across multiple routes in the inventory and management modules. The function is integrated into route handlers for invoices, payments, tax records, filament stocks, order items, part stocks, product stocks, purchase orders, shipments, and various management entities. This enhancement improves the flexibility and consistency of sorting operations throughout the application.
139 lines
4.1 KiB
JavaScript
139 lines
4.1 KiB
JavaScript
import express from 'express';
|
|
import { isAuthenticated } from '../../keycloak.js';
|
|
import { getFilter, convertPropertiesString, getSort } from '../../utils.js';
|
|
|
|
const router = express.Router();
|
|
|
|
const listAllowedFilters = [
|
|
'vendor',
|
|
'vendor._id',
|
|
'state',
|
|
'value',
|
|
'totalAmount',
|
|
'totalAmountWithTax',
|
|
'totalTaxAmount',
|
|
'shippingAmount',
|
|
'shippingAmountWithTax',
|
|
'grandTotalAmount',
|
|
'createdAt',
|
|
'updatedAt',
|
|
'_reference',
|
|
];
|
|
const listAllowedSorters = [
|
|
'createdAt',
|
|
'state',
|
|
'updatedAt',
|
|
'totalAmount',
|
|
'totalAmountWithTax',
|
|
'totalTaxAmount',
|
|
'shippingAmount',
|
|
'shippingAmountWithTax',
|
|
'grandTotalAmount',
|
|
];
|
|
const propertiesAllowedFilters = [
|
|
'vendor',
|
|
'state.type',
|
|
'value',
|
|
'vendor._id',
|
|
'totalAmount',
|
|
'totalAmountWithTax',
|
|
'totalTaxAmount',
|
|
'shippingAmount',
|
|
'shippingAmountWithTax',
|
|
'grandTotalAmount',
|
|
];
|
|
import {
|
|
listPurchaseOrdersRouteHandler,
|
|
getPurchaseOrderRouteHandler,
|
|
editPurchaseOrderRouteHandler,
|
|
editMultiplePurchaseOrdersRouteHandler,
|
|
newPurchaseOrderRouteHandler,
|
|
deletePurchaseOrderRouteHandler,
|
|
listPurchaseOrdersByPropertiesRouteHandler,
|
|
getPurchaseOrderStatsRouteHandler,
|
|
getPurchaseOrderHistoryRouteHandler,
|
|
postPurchaseOrderRouteHandler,
|
|
acknowledgePurchaseOrderRouteHandler,
|
|
cancelPurchaseOrderRouteHandler,
|
|
searchPurchaseOrdersRouteHandler,
|
|
getPurchaseOrderPropertyValuesRouteHandler,
|
|
getPurchaseOrderNeighborsRouteHandler,
|
|
} from '../../services/inventory/purchaseorders.js';
|
|
|
|
// list of purchase orders
|
|
router.get('/', isAuthenticated, async (req, res) => {
|
|
const { page, limit, property, search, sort, order } = req.query;
|
|
const filter = await getFilter(req.query, listAllowedFilters);
|
|
listPurchaseOrdersRouteHandler(req, res, page, limit, property, filter, search, getSort(sort, listAllowedSorters), order);
|
|
});
|
|
|
|
router.get('/properties', isAuthenticated, async (req, res) => {
|
|
let properties = convertPropertiesString(req.query.properties);
|
|
const filter = await getFilter(req.query, propertiesAllowedFilters, false);
|
|
var masterFilter = {};
|
|
if (req.query.masterFilter) {
|
|
masterFilter = await getFilter(JSON.parse(req.query.masterFilter), propertiesAllowedFilters, true);
|
|
}
|
|
listPurchaseOrdersByPropertiesRouteHandler(req, res, properties, filter, masterFilter);
|
|
});
|
|
|
|
router.get('/values', isAuthenticated, async (req, res) => {
|
|
const { property } = req.query;
|
|
getPurchaseOrderPropertyValuesRouteHandler(req, res, property);
|
|
});
|
|
router.get('/search', isAuthenticated, async (req, res) => {
|
|
const { search } = req.query;
|
|
searchPurchaseOrdersRouteHandler(req, res, search);
|
|
});
|
|
|
|
router.post('/', isAuthenticated, async (req, res) => {
|
|
newPurchaseOrderRouteHandler(req, res);
|
|
});
|
|
|
|
// get purchase order stats
|
|
router.get('/stats', isAuthenticated, async (req, res) => {
|
|
getPurchaseOrderStatsRouteHandler(req, res);
|
|
});
|
|
|
|
// get purchase order history
|
|
router.get('/history', isAuthenticated, async (req, res) => {
|
|
getPurchaseOrderHistoryRouteHandler(req, res);
|
|
});
|
|
|
|
router.get('/neighbors', isAuthenticated, async (req, res) => {
|
|
const { property, search, sort, order, id } = req.query;
|
|
const filter = await getFilter(req.query, listAllowedFilters);
|
|
getPurchaseOrderNeighborsRouteHandler(req, res, property, filter, search, getSort(sort, listAllowedSorters), order, id);
|
|
});
|
|
|
|
router.get('/:id', isAuthenticated, async (req, res) => {
|
|
getPurchaseOrderRouteHandler(req, res);
|
|
});
|
|
|
|
// update multiple purchase orders
|
|
router.put('/', isAuthenticated, async (req, res) => {
|
|
editMultiplePurchaseOrdersRouteHandler(req, res);
|
|
});
|
|
|
|
router.put('/:id', isAuthenticated, async (req, res) => {
|
|
editPurchaseOrderRouteHandler(req, res);
|
|
});
|
|
|
|
router.delete('/:id', isAuthenticated, async (req, res) => {
|
|
deletePurchaseOrderRouteHandler(req, res);
|
|
});
|
|
|
|
router.post('/:id/post', isAuthenticated, async (req, res) => {
|
|
postPurchaseOrderRouteHandler(req, res);
|
|
});
|
|
|
|
router.post('/:id/acknowledge', isAuthenticated, async (req, res) => {
|
|
acknowledgePurchaseOrderRouteHandler(req, res);
|
|
});
|
|
|
|
router.post('/:id/cancel', isAuthenticated, async (req, res) => {
|
|
cancelPurchaseOrderRouteHandler(req, res);
|
|
});
|
|
|
|
export default router;
|