From c679066504dae94a4781f9233114fe3b673e0189 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Sun, 13 Sep 2026 17:12:59 +0100 Subject: [PATCH] Add bulk delete functionality for various entities with filter support This commit introduces a new `deleteObjects` function in the database module, allowing for bulk deletion of objects based on specified filters and states. Additionally, new route handlers for deleting invoices, payment policies, payments, tax records, filament stocks, order items, part stocks, product stocks, purchase orders, shipments, stock audits, stock locations, stock transfers, app passwords, couriers, courier services, document printers, document sizes, document templates, email accounts, email templates, filaments, filament SKUs, files, hosts, materials, note types, parts, part SKUs, permission settings, product categories, products, and vendor entities are added. Each route supports deletion based on filters, enhancing the application's data management capabilities. --- src/database/database.js | 67 +++++++++++++++++++ src/routes/finance/invoices.js | 20 ++++++ src/routes/finance/paymentpolicies.js | 20 ++++++ src/routes/finance/payments.js | 20 ++++++ src/routes/finance/taxrecords.js | 20 ++++++ src/routes/inventory/filamentstocks.js | 20 ++++++ src/routes/inventory/orderitems.js | 20 ++++++ src/routes/inventory/partstocks.js | 20 ++++++ src/routes/inventory/productstocks.js | 20 ++++++ src/routes/inventory/purchaseorders.js | 20 ++++++ src/routes/inventory/shipments.js | 20 ++++++ src/routes/inventory/stockaudits.js | 20 ++++++ src/routes/inventory/stocklocations.js | 20 ++++++ src/routes/inventory/stocktransfers.js | 20 ++++++ src/routes/management/apppasswords.js | 20 ++++++ src/routes/management/courier.js | 20 ++++++ src/routes/management/courierservice.js | 20 ++++++ src/routes/management/documentprinters.js | 20 ++++++ src/routes/management/documentsizes.js | 20 ++++++ src/routes/management/documenttemplates.js | 20 ++++++ src/routes/management/emailaccounts.js | 19 ++++++ src/routes/management/emailtemplates.js | 19 ++++++ src/routes/management/filaments.js | 20 ++++++ src/routes/management/filamentskus.js | 20 ++++++ src/routes/management/files.js | 20 ++++++ src/routes/management/hosts.js | 20 ++++++ src/routes/management/materials.js | 25 +++++++ src/routes/management/notetypes.js | 20 ++++++ src/routes/management/parts.js | 20 ++++++ src/routes/management/partskus.js | 20 ++++++ src/routes/management/permissionsetting.js | 20 ++++++ src/routes/management/productcategories.js | 20 ++++++ src/routes/management/products.js | 20 ++++++ src/routes/management/productskus.js | 20 ++++++ src/routes/management/stockauditlevels.js | 20 ++++++ src/routes/management/taxrates.js | 20 ++++++ src/routes/management/usergroups.js | 20 ++++++ src/routes/management/vendors.js | 20 ++++++ src/routes/production/filamentprofiles.js | 20 ++++++ src/routes/production/gcodefiles.js | 22 +++++- src/routes/production/jobs.js | 20 ++++++ src/routes/production/printerprofiles.js | 20 ++++++ src/routes/production/printers.js | 20 ++++++ src/routes/sales/clients.js | 20 ++++++ src/routes/sales/fulfillmentpolicies.js | 20 ++++++ src/routes/sales/listings.js | 20 ++++++ src/routes/sales/listingvarients.js | 22 ++++++ src/routes/sales/marketplaces.js | 20 ++++++ src/routes/sales/returnpolicies.js | 20 ++++++ src/routes/sales/salesorders.js | 20 ++++++ .../finance/__tests__/invoices.test.js | 1 + .../finance/__tests__/payments.test.js | 1 + .../finance/__tests__/taxrecords.test.js | 1 + src/services/finance/invoices.js | 21 ++++++ src/services/finance/paymentpolicies.js | 21 ++++++ src/services/finance/payments.js | 21 ++++++ src/services/finance/taxrecords.js | 21 ++++++ .../__tests__/filamentstocks.test.js | 1 + .../inventory/__tests__/orderitems.test.js | 1 + .../inventory/__tests__/partstocks.test.js | 1 + .../__tests__/purchaseorders.test.js | 1 + .../inventory/__tests__/shipments.test.js | 1 + .../inventory/__tests__/stockaudits.test.js | 1 + src/services/inventory/filamentstocks.js | 22 ++++++ src/services/inventory/orderitems.js | 21 ++++++ src/services/inventory/partstocks.js | 22 ++++++ src/services/inventory/productstocks.js | 22 ++++++ src/services/inventory/purchaseorders.js | 21 ++++++ src/services/inventory/shipments.js | 21 ++++++ src/services/inventory/stockaudits.js | 22 ++++++ src/services/inventory/stocklocations.js | 21 ++++++ src/services/inventory/stocktransfers.js | 22 ++++++ .../management/__tests__/courier.test.js | 1 + .../__tests__/courierservice.test.js | 1 + .../__tests__/documentprinters.test.js | 1 + .../__tests__/documentsizes.test.js | 1 + .../__tests__/documenttemplates.test.js | 1 + .../__tests__/emailaccounts.test.js | 1 + .../__tests__/emailtemplates.test.js | 1 + .../management/__tests__/filaments.test.js | 1 + .../management/__tests__/files.test.js | 1 + .../management/__tests__/hosts.test.js | 1 + .../management/__tests__/materials.test.js | 52 +++++++++++++- .../management/__tests__/notetypes.test.js | 1 + .../management/__tests__/parts.test.js | 1 + .../__tests__/permissionsetting.test.js | 1 + .../management/__tests__/products.test.js | 1 + .../__tests__/stockauditlevels.test.js | 1 + .../management/__tests__/taxrates.test.js | 1 + .../management/__tests__/usergroups.test.js | 1 + .../management/__tests__/vendors.test.js | 1 + src/services/management/apppasswords.js | 21 ++++++ src/services/management/courier.js | 21 ++++++ src/services/management/courierservice.js | 21 ++++++ src/services/management/documentprinters.js | 21 ++++++ src/services/management/documentsizes.js | 21 ++++++ src/services/management/documenttemplates.js | 21 ++++++ src/services/management/emailaccounts.js | 22 ++++++ src/services/management/emailtemplates.js | 22 ++++++ src/services/management/filaments.js | 22 ++++++ src/services/management/filamentskus.js | 21 ++++++ src/services/management/files.js | 33 +++++++++ src/services/management/hosts.js | 21 ++++++ src/services/management/materials.js | 39 +++++++++++ src/services/management/notetypes.js | 21 ++++++ src/services/management/parts.js | 21 ++++++ src/services/management/partskus.js | 21 ++++++ src/services/management/permissionsetting.js | 21 ++++++ src/services/management/productcategories.js | 21 ++++++ src/services/management/products.js | 21 ++++++ src/services/management/productskus.js | 21 ++++++ src/services/management/stockauditlevels.js | 21 ++++++ src/services/management/taxrates.js | 21 ++++++ src/services/management/usergroups.js | 21 ++++++ src/services/management/vendors.js | 21 ++++++ .../__tests__/filamentprofiles.test.js | 1 + .../production/__tests__/gcodefiles.test.js | 1 + .../production/__tests__/jobs.test.js | 1 + .../__tests__/printerprofiles.test.js | 1 + .../production/__tests__/printers.test.js | 1 + src/services/production/filamentprofiles.js | 21 ++++++ src/services/production/gcodefiles.js | 21 ++++++ src/services/production/jobs.js | 21 ++++++ src/services/production/printerprofiles.js | 21 ++++++ src/services/production/printers.js | 21 ++++++ src/services/sales/__tests__/clients.test.js | 1 + src/services/sales/__tests__/listings.test.js | 1 + .../sales/__tests__/salesorders.test.js | 1 + src/services/sales/clients.js | 21 ++++++ src/services/sales/fulfillmentpolicies.js | 21 ++++++ src/services/sales/listings.js | 53 +++++++++++++++ src/services/sales/listingvarients.js | 21 ++++++ src/services/sales/marketplaces.js | 21 ++++++ src/services/sales/returnpolicies.js | 21 ++++++ src/services/sales/salesorders.js | 21 ++++++ 135 files changed, 2238 insertions(+), 2 deletions(-) diff --git a/src/database/database.js b/src/database/database.js index 5d22250..3e305ed 100644 --- a/src/database/database.js +++ b/src/database/database.js @@ -1643,6 +1643,73 @@ export const deleteObject = async ( } }; +export const deleteObjects = async ({ + model, + filter = {}, + user = null, + checkUnused = false, + states, +}) => { + try { + const convertedFilter = + filter && Object.keys(filter).length > 0 + ? convertObjectIdStringsInFilter(filter) + : {}; + const objects = await model.find(convertedFilter); + const errors = []; + let deletedCount = 0; + + for (const object of objects) { + const id = object._id; + const state = object.state?.type ?? object.state; + + if (Array.isArray(states) && !states.includes(state)) { + errors.push({ + id: String(id), + status: 400, + error: `Object must be in one of these states: ${states.join(', ')}.`, + }); + continue; + } + + try { + const result = await deleteObject({ + model, + id, + user, + checkUnused, + }); + if (result?.error) { + errors.push({ + id: String(id), + status: result.code || 500, + ...result, + }); + continue; + } + + deletedCount += 1; + } catch (error) { + errors.push({ + id: String(id), + status: 500, + error: error.message || 'Delete failed.', + }); + } + } + + return { + matchedCount: objects.length, + deletedCount, + failedCount: errors.length, + errors, + }; + } catch (error) { + logger.error('deleteObjects error:', error); + return { error: error.message, code: 500 }; + } +}; + export const flushFile = async ({ id, user }) => { try { logger.info(`Starting file deletion process for file ID: ${id}`); diff --git a/src/routes/finance/invoices.js b/src/routes/finance/invoices.js index 2f51cf0..ff00b88 100644 --- a/src/routes/finance/invoices.js +++ b/src/routes/finance/invoices.js @@ -38,6 +38,7 @@ import { editMultipleInvoicesRouteHandler, newInvoiceRouteHandler, deleteInvoiceRouteHandler, + deleteInvoiceByFilterRouteHandler, listInvoicesByPropertiesRouteHandler, getInvoiceStatsRouteHandler, getInvoiceHistoryRouteHandler, @@ -141,6 +142,25 @@ router.put('/:id', isAuthenticated, checkPermissions('invoice', 'edit'), async ( editInvoiceRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('invoice', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteInvoiceByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteInvoiceRouteHandler(req, res); }); diff --git a/src/routes/finance/paymentpolicies.js b/src/routes/finance/paymentpolicies.js index 964b942..b5d3757 100644 --- a/src/routes/finance/paymentpolicies.js +++ b/src/routes/finance/paymentpolicies.js @@ -8,6 +8,7 @@ import { editPaymentPolicyRouteHandler, newPaymentPolicyRouteHandler, deletePaymentPolicyRouteHandler, + deletePaymentPolicyByFilterRouteHandler, listPaymentPoliciesByPropertiesRouteHandler, getPaymentPolicyStatsRouteHandler, getPaymentPolicyHistoryRouteHandler, @@ -122,6 +123,25 @@ router.put('/:id', isAuthenticated, checkPermissions('paymentPolicy', 'edit'), a editPaymentPolicyRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('paymentPolicy', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePaymentPolicyByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deletePaymentPolicyRouteHandler(req, res); }); diff --git a/src/routes/finance/payments.js b/src/routes/finance/payments.js index 484f8e3..e2a46d3 100644 --- a/src/routes/finance/payments.js +++ b/src/routes/finance/payments.js @@ -35,6 +35,7 @@ import { editMultiplePaymentsRouteHandler, newPaymentRouteHandler, deletePaymentRouteHandler, + deletePaymentByFilterRouteHandler, listPaymentsByPropertiesRouteHandler, getPaymentStatsRouteHandler, getPaymentHistoryRouteHandler, @@ -122,6 +123,25 @@ router.put('/:id', isAuthenticated, checkPermissions('payment', 'edit'), async ( editPaymentRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('payment', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePaymentByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deletePaymentRouteHandler(req, res); }); diff --git a/src/routes/finance/taxrecords.js b/src/routes/finance/taxrecords.js index cef97cb..6a0f932 100644 --- a/src/routes/finance/taxrecords.js +++ b/src/routes/finance/taxrecords.js @@ -24,6 +24,7 @@ import { editTaxRecordRouteHandler, newTaxRecordRouteHandler, deleteTaxRecordRouteHandler, + deleteTaxRecordByFilterRouteHandler, listTaxRecordsByPropertiesRouteHandler, getTaxRecordStatsRouteHandler, getTaxRecordHistoryRouteHandler, @@ -102,6 +103,25 @@ router.put('/:id', isAuthenticated, checkPermissions('taxRecord', 'edit'), async editTaxRecordRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('taxRecord', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteTaxRecordByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteTaxRecordRouteHandler(req, res); }); diff --git a/src/routes/inventory/filamentstocks.js b/src/routes/inventory/filamentstocks.js index 21aca5f..6935fd1 100644 --- a/src/routes/inventory/filamentstocks.js +++ b/src/routes/inventory/filamentstocks.js @@ -34,6 +34,7 @@ import { editMultipleFilamentStocksRouteHandler, newFilamentStockRouteHandler, deleteFilamentStockRouteHandler, + deleteFilamentStockByFilterRouteHandler, postFilamentStockRouteHandler, listFilamentStocksByPropertiesRouteHandler, getFilamentStockStatsRouteHandler, @@ -118,6 +119,25 @@ router.put('/:id', isAuthenticated, checkPermissions('filamentStock', 'edit'), a editFilamentStockRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('filamentStock', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteFilamentStockByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteFilamentStockRouteHandler(req, res); }); diff --git a/src/routes/inventory/orderitems.js b/src/routes/inventory/orderitems.js index f4685d8..83f8f42 100644 --- a/src/routes/inventory/orderitems.js +++ b/src/routes/inventory/orderitems.js @@ -39,6 +39,7 @@ import { editMultipleOrderItemsRouteHandler, newOrderItemRouteHandler, deleteOrderItemRouteHandler, + deleteOrderItemByFilterRouteHandler, listOrderItemsByPropertiesRouteHandler, getOrderItemStatsRouteHandler, getOrderItemHistoryRouteHandler, @@ -139,6 +140,25 @@ router.put('/:id', isAuthenticated, checkPermissions('orderItem', 'edit'), async editOrderItemRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('orderItem', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteOrderItemByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteOrderItemRouteHandler(req, res); }); diff --git a/src/routes/inventory/partstocks.js b/src/routes/inventory/partstocks.js index 329678f..43c2a27 100644 --- a/src/routes/inventory/partstocks.js +++ b/src/routes/inventory/partstocks.js @@ -34,6 +34,7 @@ import { editMultiplePartStocksRouteHandler, newPartStockRouteHandler, deletePartStockRouteHandler, + deletePartStockByFilterRouteHandler, postPartStockRouteHandler, listPartStocksByPropertiesRouteHandler, getPartStockStatsRouteHandler, @@ -118,6 +119,25 @@ router.put('/:id', isAuthenticated, checkPermissions('partStock', 'edit'), async editPartStockRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('partStock', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePartStockByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deletePartStockRouteHandler(req, res); }); diff --git a/src/routes/inventory/productstocks.js b/src/routes/inventory/productstocks.js index 5c19861..9d4d08c 100644 --- a/src/routes/inventory/productstocks.js +++ b/src/routes/inventory/productstocks.js @@ -35,6 +35,7 @@ import { editMultipleProductStocksRouteHandler, newProductStockRouteHandler, deleteProductStockRouteHandler, + deleteProductStockByFilterRouteHandler, postProductStockRouteHandler, listProductStocksByPropertiesRouteHandler, getProductStockStatsRouteHandler, @@ -115,6 +116,25 @@ router.put('/:id', isAuthenticated, checkPermissions('productStock', 'edit'), as editProductStockRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('productStock', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteProductStockByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteProductStockRouteHandler(req, res); }); diff --git a/src/routes/inventory/purchaseorders.js b/src/routes/inventory/purchaseorders.js index 20a6016..b2dee38 100644 --- a/src/routes/inventory/purchaseorders.js +++ b/src/routes/inventory/purchaseorders.js @@ -50,6 +50,7 @@ import { editMultiplePurchaseOrdersRouteHandler, newPurchaseOrderRouteHandler, deletePurchaseOrderRouteHandler, + deletePurchaseOrderByFilterRouteHandler, listPurchaseOrdersByPropertiesRouteHandler, getPurchaseOrderStatsRouteHandler, getPurchaseOrderHistoryRouteHandler, @@ -134,6 +135,25 @@ router.put('/:id', isAuthenticated, checkPermissions('purchaseOrder', 'edit'), a editPurchaseOrderRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('purchaseOrder', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePurchaseOrderByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deletePurchaseOrderRouteHandler(req, res); }); diff --git a/src/routes/inventory/shipments.js b/src/routes/inventory/shipments.js index 820ea45..498b595 100644 --- a/src/routes/inventory/shipments.js +++ b/src/routes/inventory/shipments.js @@ -41,6 +41,7 @@ import { editMultipleShipmentsRouteHandler, newShipmentRouteHandler, deleteShipmentRouteHandler, + deleteShipmentByFilterRouteHandler, listShipmentsByPropertiesRouteHandler, getShipmentStatsRouteHandler, getShipmentHistoryRouteHandler, @@ -148,6 +149,25 @@ router.put('/:id', isAuthenticated, checkPermissions('shipment', 'edit'), async editShipmentRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('shipment', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteShipmentByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteShipmentRouteHandler(req, res); }); diff --git a/src/routes/inventory/stockaudits.js b/src/routes/inventory/stockaudits.js index f15aa06..b53ba79 100644 --- a/src/routes/inventory/stockaudits.js +++ b/src/routes/inventory/stockaudits.js @@ -24,6 +24,7 @@ import { newStockAuditRouteHandler, updateStockAuditRouteHandler, deleteStockAuditRouteHandler, + deleteStockAuditByFilterRouteHandler, getStockAuditStatsRouteHandler, getStockAuditHistoryRouteHandler, searchStockAuditsRouteHandler, @@ -114,6 +115,25 @@ router.put('/:id', isAuthenticated, checkPermissions('stockAudit', 'edit'), asyn updateStockAuditRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('stockAudit', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteStockAuditByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteStockAuditRouteHandler(req, res); }); diff --git a/src/routes/inventory/stocklocations.js b/src/routes/inventory/stocklocations.js index b054589..f8e7b5e 100644 --- a/src/routes/inventory/stocklocations.js +++ b/src/routes/inventory/stocklocations.js @@ -15,6 +15,7 @@ import { editMultipleStockLocationsRouteHandler, newStockLocationRouteHandler, deleteStockLocationRouteHandler, + deleteStockLocationByFilterRouteHandler, listStockLocationsByPropertiesRouteHandler, getStockLocationStatsRouteHandler, getStockLocationHistoryRouteHandler, @@ -82,6 +83,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getStockLocationNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('stockLocation', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteStockLocationByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, checkPermissions('stockLocation', 'info'), async (req, res) => { getStockLocationRouteHandler(req, res); }); diff --git a/src/routes/inventory/stocktransfers.js b/src/routes/inventory/stocktransfers.js index 0ddd07c..743a4d7 100644 --- a/src/routes/inventory/stocktransfers.js +++ b/src/routes/inventory/stocktransfers.js @@ -24,6 +24,7 @@ import { editMultipleStockTransfersRouteHandler, newStockTransferRouteHandler, deleteStockTransferRouteHandler, + deleteStockTransferByFilterRouteHandler, postStockTransferRouteHandler, listStockTransfersByPropertiesRouteHandler, getStockTransferStatsRouteHandler, @@ -104,6 +105,25 @@ router.put('/:id', isAuthenticated, checkPermissions('stockTransfer', 'edit'), a editStockTransferRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('stockTransfer', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteStockTransferByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteStockTransferRouteHandler(req, res); }); diff --git a/src/routes/management/apppasswords.js b/src/routes/management/apppasswords.js index 015511b..ebd03d7 100644 --- a/src/routes/management/apppasswords.js +++ b/src/routes/management/apppasswords.js @@ -23,6 +23,7 @@ import { editAppPasswordRouteHandler, newAppPasswordRouteHandler, deleteAppPasswordRouteHandler, + deleteAppPasswordByFilterRouteHandler, listAppPasswordsByPropertiesRouteHandler, getAppPasswordStatsRouteHandler, getAppPasswordHistoryRouteHandler, @@ -92,6 +93,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getAppPasswordNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('appPassword', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteAppPasswordByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, async (req, res) => { getAppPasswordRouteHandler(req, res); }); diff --git a/src/routes/management/courier.js b/src/routes/management/courier.js index f5252b9..c96a540 100644 --- a/src/routes/management/courier.js +++ b/src/routes/management/courier.js @@ -24,6 +24,7 @@ import { editCourierRouteHandler, newCourierRouteHandler, deleteCourierRouteHandler, + deleteCourierByFilterRouteHandler, listCouriersByPropertiesRouteHandler, getCourierStatsRouteHandler, getCourierHistoryRouteHandler, @@ -102,6 +103,25 @@ router.put('/:id', isAuthenticated, checkPermissions('courier', 'edit'), async ( editCourierRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('courier', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteCourierByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteCourierRouteHandler(req, res); }); diff --git a/src/routes/management/courierservice.js b/src/routes/management/courierservice.js index 88f9de3..18b3caa 100644 --- a/src/routes/management/courierservice.js +++ b/src/routes/management/courierservice.js @@ -55,6 +55,7 @@ import { editCourierServiceRouteHandler, newCourierServiceRouteHandler, deleteCourierServiceRouteHandler, + deleteCourierServiceByFilterRouteHandler, listCourierServicesByPropertiesRouteHandler, getCourierServiceStatsRouteHandler, getCourierServiceHistoryRouteHandler, @@ -133,6 +134,25 @@ router.put('/:id', isAuthenticated, checkPermissions('courierService', 'edit'), editCourierServiceRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('courierService', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteCourierServiceByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteCourierServiceRouteHandler(req, res); }); diff --git a/src/routes/management/documentprinters.js b/src/routes/management/documentprinters.js index de61fc0..c4ab1d8 100644 --- a/src/routes/management/documentprinters.js +++ b/src/routes/management/documentprinters.js @@ -32,6 +32,7 @@ import { editDocumentPrinterRouteHandler, newDocumentPrinterRouteHandler, deleteDocumentPrinterRouteHandler, + deleteDocumentPrinterByFilterRouteHandler, listDocumentPrintersByPropertiesRouteHandler, getDocumentPrinterStatsRouteHandler, getDocumentPrinterHistoryRouteHandler, @@ -102,6 +103,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getDocumentPrinterNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('documentPrinter', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteDocumentPrinterByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, async (req, res) => { getDocumentPrinterRouteHandler(req, res); }); diff --git a/src/routes/management/documentsizes.js b/src/routes/management/documentsizes.js index 41187e8..2571590 100644 --- a/src/routes/management/documentsizes.js +++ b/src/routes/management/documentsizes.js @@ -38,6 +38,7 @@ import { editDocumentSizeRouteHandler, newDocumentSizeRouteHandler, deleteDocumentSizeRouteHandler, + deleteDocumentSizeByFilterRouteHandler, listDocumentSizesByPropertiesRouteHandler, getDocumentSizeStatsRouteHandler, getDocumentSizeHistoryRouteHandler, @@ -108,6 +109,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getDocumentSizeNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('documentSize', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteDocumentSizeByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, async (req, res) => { getDocumentSizeRouteHandler(req, res); }); diff --git a/src/routes/management/documenttemplates.js b/src/routes/management/documenttemplates.js index 33c4464..aa482e5 100644 --- a/src/routes/management/documenttemplates.js +++ b/src/routes/management/documenttemplates.js @@ -38,6 +38,7 @@ import { editDocumentTemplateRouteHandler, newDocumentTemplateRouteHandler, deleteDocumentTemplateRouteHandler, + deleteDocumentTemplateByFilterRouteHandler, listDocumentTemplatesByPropertiesRouteHandler, getDocumentTemplateStatsRouteHandler, getDocumentTemplateHistoryRouteHandler, @@ -115,6 +116,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getDocumentTemplateNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('documentTemplate', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteDocumentTemplateByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.post('/:id/intellisense', isAuthenticated, checkPermissions('documentTemplate', 'design'), async (req, res) => { intellisenseDocumentTemplateRouteHandler(req, res); }); diff --git a/src/routes/management/emailaccounts.js b/src/routes/management/emailaccounts.js index abd82aa..ae5df1f 100644 --- a/src/routes/management/emailaccounts.js +++ b/src/routes/management/emailaccounts.js @@ -3,6 +3,7 @@ import { isAuthenticated } from '../../keycloak.js'; import { checkPermissions } from '../../database/permissions.js'; import { convertPropertiesString, getFilter, getSort } from '../../utils.js'; import { + deleteEmailAccountByFilterRouteHandler, deleteEmailAccountRouteHandler, editEmailAccountRouteHandler, getEmailAccountRouteHandler, @@ -75,6 +76,24 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { ); }); router.post('/', isAuthenticated, checkPermissions('emailAccount', 'new'), newEmailAccountRouteHandler); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('emailAccount', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + filters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + filters, + true + ); + deleteEmailAccountByFilterRouteHandler(req, res, filter, masterFilter); + } +); router.get('/:id', isAuthenticated, getEmailAccountRouteHandler); router.put('/:id', isAuthenticated, checkPermissions('emailAccount', 'edit'), editEmailAccountRouteHandler); router.delete('/:id', isAuthenticated, checkPermissions('emailAccount', 'delete'), deleteEmailAccountRouteHandler); diff --git a/src/routes/management/emailtemplates.js b/src/routes/management/emailtemplates.js index ba05cc1..20964b9 100644 --- a/src/routes/management/emailtemplates.js +++ b/src/routes/management/emailtemplates.js @@ -3,6 +3,7 @@ import { isAuthenticated } from '../../keycloak.js'; import { checkPermissions } from '../../database/permissions.js'; import { convertPropertiesString, getFilter, getSort } from '../../utils.js'; import { + deleteEmailTemplateByFilterRouteHandler, deleteEmailTemplateRouteHandler, editEmailTemplateRouteHandler, formatEmailTemplateRouteHandler, @@ -94,6 +95,24 @@ router.post('/', isAuthenticated, checkPermissions('emailTemplate', 'new'), newE router.post('/format', isAuthenticated, checkPermissions('emailTemplate', 'design'), formatEmailTemplateRouteHandler); router.post('/:id/intellisense', isAuthenticated, checkPermissions('emailTemplate', 'design'), intellisenseEmailTemplateRouteHandler); router.post('/:id/preview', isAuthenticated, checkPermissions('emailTemplate', 'design'), previewEmailTemplateRouteHandler); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('emailTemplate', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + filters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + filters, + true + ); + deleteEmailTemplateByFilterRouteHandler(req, res, filter, masterFilter); + } +); router.get('/:id', isAuthenticated, getEmailTemplateRouteHandler); router.put('/:id', isAuthenticated, checkPermissions('emailTemplate', 'edit'), editEmailTemplateRouteHandler); router.delete('/:id', isAuthenticated, checkPermissions('emailTemplate', 'delete'), deleteEmailTemplateRouteHandler); diff --git a/src/routes/management/filaments.js b/src/routes/management/filaments.js index 484e25b..5173613 100644 --- a/src/routes/management/filaments.js +++ b/src/routes/management/filaments.js @@ -40,6 +40,7 @@ import { editMultipleFilamentsRouteHandler, newFilamentRouteHandler, deleteFilamentRouteHandler, + deleteFilamentByFilterRouteHandler, getFilamentStatsRouteHandler, getFilamentHistoryRouteHandler, searchFilamentsRouteHandler, @@ -134,6 +135,25 @@ router.put('/:id', isAuthenticated, checkPermissions('filament', 'edit'), async editFilamentRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('filament', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteFilamentByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteFilamentRouteHandler(req, res); }); diff --git a/src/routes/management/filamentskus.js b/src/routes/management/filamentskus.js index 78c4b53..89f5c6f 100644 --- a/src/routes/management/filamentskus.js +++ b/src/routes/management/filamentskus.js @@ -37,6 +37,7 @@ import { editFilamentSkuRouteHandler, newFilamentSkuRouteHandler, deleteFilamentSkuRouteHandler, + deleteFilamentSkuByFilterRouteHandler, listFilamentSkusByPropertiesRouteHandler, getFilamentSkuStatsRouteHandler, getFilamentSkuHistoryRouteHandler, @@ -140,6 +141,25 @@ router.put('/:id', isAuthenticated, checkPermissions('filamentSku', 'edit'), asy editFilamentSkuRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('filamentSku', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteFilamentSkuByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteFilamentSkuRouteHandler(req, res); }); diff --git a/src/routes/management/files.js b/src/routes/management/files.js index 3abd2e2..016eb80 100644 --- a/src/routes/management/files.js +++ b/src/routes/management/files.js @@ -26,6 +26,7 @@ import { newFileRouteHandler, flushFileRouteHandler, deleteFileRouteHandler, + deleteFileByFilterRouteHandler, listFilesByPropertiesRouteHandler, getFileStatsRouteHandler, getFileHistoryRouteHandler, @@ -116,6 +117,25 @@ router.put('/:id', isAuthenticated, checkPermissions('file', 'edit'), async (req editFileRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('file', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteFileByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteFileRouteHandler(req, res); }); diff --git a/src/routes/management/hosts.js b/src/routes/management/hosts.js index 21888b0..12f80d2 100644 --- a/src/routes/management/hosts.js +++ b/src/routes/management/hosts.js @@ -23,6 +23,7 @@ import { editHostRouteHandler, newHostRouteHandler, deleteHostRouteHandler, + deleteHostByFilterRouteHandler, listHostsByPropertiesRouteHandler, getHostStatsRouteHandler, getHostHistoryRouteHandler, @@ -100,6 +101,25 @@ router.put('/:id', isAuthenticated, checkPermissions('host', 'edit'), async (req editHostRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('host', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteHostByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteHostRouteHandler(req, res); }); diff --git a/src/routes/management/materials.js b/src/routes/management/materials.js index 43b7a3a..8b3ef0b 100644 --- a/src/routes/management/materials.js +++ b/src/routes/management/materials.js @@ -14,6 +14,8 @@ import { getMaterialRouteHandler, editMaterialRouteHandler, newMaterialRouteHandler, + deleteMaterialRouteHandler, + deleteMaterialByFilterRouteHandler, getMaterialStatsRouteHandler, getMaterialHistoryRouteHandler, searchMaterialsRouteHandler, @@ -101,4 +103,27 @@ router.put('/:id', isAuthenticated, checkPermissions('material', 'edit'), async editMaterialRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('material', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteMaterialByFilterRouteHandler(req, res, filter, masterFilter); + } +); + +router.delete('/:id', isAuthenticated, checkPermissions('material', 'delete'), async (req, res) => { + deleteMaterialRouteHandler(req, res); +}); + export default router; diff --git a/src/routes/management/notetypes.js b/src/routes/management/notetypes.js index 96fb09e..6682d34 100644 --- a/src/routes/management/notetypes.js +++ b/src/routes/management/notetypes.js @@ -22,6 +22,7 @@ import { editNoteTypeRouteHandler, newNoteTypeRouteHandler, deleteNoteTypeRouteHandler, + deleteNoteTypeByFilterRouteHandler, listNoteTypesByPropertiesRouteHandler, getNoteTypeStatsRouteHandler, getNoteTypeHistoryRouteHandler, @@ -92,6 +93,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getNoteTypeNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('noteType', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteNoteTypeByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, async (req, res) => { getNoteTypeRouteHandler(req, res); }); diff --git a/src/routes/management/parts.js b/src/routes/management/parts.js index 511fa00..18584af 100644 --- a/src/routes/management/parts.js +++ b/src/routes/management/parts.js @@ -37,6 +37,7 @@ import { editPartRouteHandler, newPartRouteHandler, deletePartRouteHandler, + deletePartByFilterRouteHandler, listPartsByPropertiesRouteHandler, getPartStatsRouteHandler, getPartHistoryRouteHandler, @@ -116,6 +117,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { ); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('part', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePartByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, async (req, res) => { getPartRouteHandler(req, res); }); diff --git a/src/routes/management/partskus.js b/src/routes/management/partskus.js index 61b7800..de558ff 100644 --- a/src/routes/management/partskus.js +++ b/src/routes/management/partskus.js @@ -43,6 +43,7 @@ import { editPartSkuRouteHandler, newPartSkuRouteHandler, deletePartSkuRouteHandler, + deletePartSkuByFilterRouteHandler, listPartSkusByPropertiesRouteHandler, getPartSkuStatsRouteHandler, getPartSkuHistoryRouteHandler, @@ -131,6 +132,25 @@ router.put('/:id', isAuthenticated, checkPermissions('partSku', 'edit'), async ( editPartSkuRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('partSku', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePartSkuByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deletePartSkuRouteHandler(req, res); }); diff --git a/src/routes/management/permissionsetting.js b/src/routes/management/permissionsetting.js index 1423f16..2dadb9d 100644 --- a/src/routes/management/permissionsetting.js +++ b/src/routes/management/permissionsetting.js @@ -14,6 +14,7 @@ import { editPermissionSettingsRouteHandler, newPermissionSettingsRouteHandler, deletePermissionSettingsRouteHandler, + deletePermissionSettingsByFilterRouteHandler, listPermissionSettingsByPropertiesRouteHandler, getPermissionSettingsStatsRouteHandler, getPermissionSettingsHistoryRouteHandler, @@ -148,6 +149,25 @@ router.put( } ); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('permissionSetting', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePermissionSettingsByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete( '/:id', isAuthenticated, diff --git a/src/routes/management/productcategories.js b/src/routes/management/productcategories.js index 3a08bb6..9fbfe5b 100644 --- a/src/routes/management/productcategories.js +++ b/src/routes/management/productcategories.js @@ -4,6 +4,7 @@ import { checkPermissions } from '../../database/permissions.js'; import { convertPropertiesString, getFilter, getSort } from '../../utils.js'; import { deleteProductCategoryRouteHandler, + deleteProductCategoryByFilterRouteHandler, editProductCategoryRouteHandler, getProductCategoryHistoryRouteHandler, getProductCategoryRouteHandler, @@ -96,6 +97,25 @@ router.put('/:id', isAuthenticated, checkPermissions('productCategory', 'edit'), editProductCategoryRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('productCategory', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteProductCategoryByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteProductCategoryRouteHandler(req, res); }); diff --git a/src/routes/management/products.js b/src/routes/management/products.js index bee8b1a..23195d0 100644 --- a/src/routes/management/products.js +++ b/src/routes/management/products.js @@ -41,6 +41,7 @@ import { editProductRouteHandler, newProductRouteHandler, deleteProductRouteHandler, + deleteProductByFilterRouteHandler, listProductsByPropertiesRouteHandler, getProductStatsRouteHandler, getProductHistoryRouteHandler, @@ -111,6 +112,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getProductNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('product', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteProductByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, async (req, res) => { getProductRouteHandler(req, res); }); diff --git a/src/routes/management/productskus.js b/src/routes/management/productskus.js index e0d56b9..99171ac 100644 --- a/src/routes/management/productskus.js +++ b/src/routes/management/productskus.js @@ -43,6 +43,7 @@ import { editProductSkuRouteHandler, newProductSkuRouteHandler, deleteProductSkuRouteHandler, + deleteProductSkuByFilterRouteHandler, listProductSkusByPropertiesRouteHandler, getProductSkuStatsRouteHandler, getProductSkuHistoryRouteHandler, @@ -136,6 +137,25 @@ router.put('/:id', isAuthenticated, checkPermissions('productSku', 'edit'), asyn editProductSkuRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('productSku', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteProductSkuByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteProductSkuRouteHandler(req, res); }); diff --git a/src/routes/management/stockauditlevels.js b/src/routes/management/stockauditlevels.js index d42ada8..3a418ae 100644 --- a/src/routes/management/stockauditlevels.js +++ b/src/routes/management/stockauditlevels.js @@ -15,6 +15,7 @@ import { editStockAuditLevelRouteHandler, newStockAuditLevelRouteHandler, deleteStockAuditLevelRouteHandler, + deleteStockAuditLevelByFilterRouteHandler, listStockAuditLevelsByPropertiesRouteHandler, getStockAuditLevelStatsRouteHandler, getStockAuditLevelHistoryRouteHandler, @@ -124,6 +125,25 @@ router.put( } ); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('stockAuditLevel', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteStockAuditLevelByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteStockAuditLevelRouteHandler(req, res); }); diff --git a/src/routes/management/taxrates.js b/src/routes/management/taxrates.js index 294b751..b6bdd82 100644 --- a/src/routes/management/taxrates.js +++ b/src/routes/management/taxrates.js @@ -34,6 +34,7 @@ import { editTaxRateRouteHandler, newTaxRateRouteHandler, deleteTaxRateRouteHandler, + deleteTaxRateByFilterRouteHandler, listTaxRatesByPropertiesRouteHandler, getTaxRateStatsRouteHandler, getTaxRateHistoryRouteHandler, @@ -112,6 +113,25 @@ router.put('/:id', isAuthenticated, checkPermissions('taxRate', 'edit'), async ( editTaxRateRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('taxRate', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteTaxRateByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteTaxRateRouteHandler(req, res); }); diff --git a/src/routes/management/usergroups.js b/src/routes/management/usergroups.js index ddcb7d0..52a799b 100644 --- a/src/routes/management/usergroups.js +++ b/src/routes/management/usergroups.js @@ -14,6 +14,7 @@ import { editUserGroupRouteHandler, newUserGroupRouteHandler, deleteUserGroupRouteHandler, + deleteUserGroupByFilterRouteHandler, listUserGroupsByPropertiesRouteHandler, getUserGroupStatsRouteHandler, getUserGroupHistoryRouteHandler, @@ -107,6 +108,25 @@ router.put('/:id', isAuthenticated, checkPermissions('userGroup', 'edit'), async editUserGroupRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('userGroup', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteUserGroupByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteUserGroupRouteHandler(req, res); }); diff --git a/src/routes/management/vendors.js b/src/routes/management/vendors.js index 9241323..6528fc7 100644 --- a/src/routes/management/vendors.js +++ b/src/routes/management/vendors.js @@ -22,6 +22,7 @@ import { editVendorRouteHandler, newVendorRouteHandler, deleteVendorRouteHandler, + deleteVendorByFilterRouteHandler, listVendorsByPropertiesRouteHandler, getVendorStatsRouteHandler, getVendorHistoryRouteHandler, @@ -100,6 +101,25 @@ router.put('/:id', isAuthenticated, checkPermissions('vendor', 'edit'), async (r editVendorRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('vendor', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteVendorByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteVendorRouteHandler(req, res); }); diff --git a/src/routes/production/filamentprofiles.js b/src/routes/production/filamentprofiles.js index 4a95342..1e79a41 100644 --- a/src/routes/production/filamentprofiles.js +++ b/src/routes/production/filamentprofiles.js @@ -4,6 +4,7 @@ import { checkPermissions } from '../../database/permissions.js'; import { convertPropertiesString, getFilter, getSort } from '../../utils.js'; import { deleteFilamentProfileRouteHandler, + deleteFilamentProfileByFilterRouteHandler, editFilamentProfileRouteHandler, getFilamentProfileRouteHandler, listFilamentProfilesByPropertiesRouteHandler, @@ -106,6 +107,25 @@ router.put( } ); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('filamentProfile', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteFilamentProfileByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteFilamentProfileRouteHandler(req, res); }); diff --git a/src/routes/production/gcodefiles.js b/src/routes/production/gcodefiles.js index 6385747..5798452 100644 --- a/src/routes/production/gcodefiles.js +++ b/src/routes/production/gcodefiles.js @@ -28,7 +28,8 @@ import { searchGCodeFilesRouteHandler, getGCodeFilePropertyValuesRouteHandler, - getGCodeFileNeighborsRouteHandler + getGCodeFileNeighborsRouteHandler, + deleteGCodeFileByFilterRouteHandler } from '../../services/production/gcodefiles.js'; import { convertPropertiesString, getFilter, getSort } from '../../utils.js'; @@ -89,6 +90,25 @@ router.get('/neighbors', isAuthenticated, async (req, res) => { getGCodeFileNeighborsRouteHandler(req, res, property, filter, search, getSort(sortProperty, listAllowedSorters), sortOrder, id); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('gcodeFile', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteGCodeFileByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, checkPermissions('gcodeFile', 'info'), async (req, res) => { getGCodeFileRouteHandler(req, res); }); diff --git a/src/routes/production/jobs.js b/src/routes/production/jobs.js index 471a0e6..3befe13 100644 --- a/src/routes/production/jobs.js +++ b/src/routes/production/jobs.js @@ -32,6 +32,7 @@ import { getJobRouteHandler, newJobRouteHandler, deleteJobRouteHandler, + deleteJobByFilterRouteHandler, editJobRouteHandler, getJobStatsRouteHandler, getJobHistoryRouteHandler, @@ -125,6 +126,25 @@ router.put('/:id', isAuthenticated, checkPermissions('job', 'edit'), async (req, editJobRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('job', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteJobByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteJobRouteHandler(req, res); }); diff --git a/src/routes/production/printerprofiles.js b/src/routes/production/printerprofiles.js index 2a40f89..0f63957 100644 --- a/src/routes/production/printerprofiles.js +++ b/src/routes/production/printerprofiles.js @@ -4,6 +4,7 @@ import { checkPermissions } from '../../database/permissions.js'; import { convertPropertiesString, getFilter, getSort } from '../../utils.js'; import { deletePrinterProfileRouteHandler, + deletePrinterProfileByFilterRouteHandler, editPrinterProfileRouteHandler, getPrinterProfileRouteHandler, listPrinterProfilesByPropertiesRouteHandler, @@ -86,6 +87,25 @@ router.put('/:id', isAuthenticated, checkPermissions('printerProfile', 'edit'), editPrinterProfileRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('printerProfile', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePrinterProfileByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deletePrinterProfileRouteHandler(req, res); }); diff --git a/src/routes/production/printers.js b/src/routes/production/printers.js index 048c9b3..419c3e8 100644 --- a/src/routes/production/printers.js +++ b/src/routes/production/printers.js @@ -14,6 +14,7 @@ import { searchPrintersRouteHandler, getPrinterPropertyValuesRouteHandler, getPrinterNeighborsRouteHandler, + deletePrinterByFilterRouteHandler, } from '../../services/production/printers.js'; import { convertPropertiesString, getFilter, getSort } from '../../utils.js'; @@ -93,6 +94,25 @@ router.get('/stats', isAuthenticated, async (req, res) => { getPrinterStatsRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('printer', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deletePrinterByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.get('/:id', isAuthenticated, checkPermissions('printer', 'info'), async (req, res) => { getPrinterRouteHandler(req, res); }); diff --git a/src/routes/sales/clients.js b/src/routes/sales/clients.js index 1ac7357..a113aa7 100644 --- a/src/routes/sales/clients.js +++ b/src/routes/sales/clients.js @@ -31,6 +31,7 @@ import { editClientRouteHandler, newClientRouteHandler, deleteClientRouteHandler, + deleteClientByFilterRouteHandler, listClientsByPropertiesRouteHandler, getClientStatsRouteHandler, getClientHistoryRouteHandler, @@ -109,6 +110,25 @@ router.put('/:id', isAuthenticated, checkPermissions('client', 'edit'), async (r editClientRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('client', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteClientByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteClientRouteHandler(req, res); }); diff --git a/src/routes/sales/fulfillmentpolicies.js b/src/routes/sales/fulfillmentpolicies.js index 6dcfdc1..dca7423 100644 --- a/src/routes/sales/fulfillmentpolicies.js +++ b/src/routes/sales/fulfillmentpolicies.js @@ -8,6 +8,7 @@ import { editFulfillmentPolicyRouteHandler, newFulfillmentPolicyRouteHandler, deleteFulfillmentPolicyRouteHandler, + deleteFulfillmentPolicyByFilterRouteHandler, listFulfillmentPoliciesByPropertiesRouteHandler, getFulfillmentPolicyStatsRouteHandler, getFulfillmentPolicyHistoryRouteHandler, @@ -139,6 +140,25 @@ router.put( } ); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('fulfillmentPolicy', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteFulfillmentPolicyByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteFulfillmentPolicyRouteHandler(req, res); }); diff --git a/src/routes/sales/listings.js b/src/routes/sales/listings.js index d0a67cf..73ad60d 100644 --- a/src/routes/sales/listings.js +++ b/src/routes/sales/listings.js @@ -59,6 +59,7 @@ import { editListingRouteHandler, newListingRouteHandler, deleteListingRouteHandler, + deleteListingByFilterRouteHandler, listListingsByPropertiesRouteHandler, getListingStatsRouteHandler, getListingHistoryRouteHandler, @@ -167,6 +168,25 @@ router.put('/:id', isAuthenticated, checkPermissions('listing', 'edit'), async ( editListingRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('listing', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteListingByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteListingRouteHandler(req, res); }); diff --git a/src/routes/sales/listingvarients.js b/src/routes/sales/listingvarients.js index 1114654..5141181 100644 --- a/src/routes/sales/listingvarients.js +++ b/src/routes/sales/listingvarients.js @@ -46,6 +46,7 @@ import { editListingVarientRouteHandler, newListingVarientRouteHandler, deleteListingVarientRouteHandler, + deleteListingVarientByFilterRouteHandler, listListingVarientsByPropertiesRouteHandler, getListingVarientStatsRouteHandler, getListingVarientHistoryRouteHandler, @@ -184,6 +185,27 @@ router.put( } ); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('listingVarient', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true, + listingVarientModel + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true, + listingVarientModel + ); + deleteListingVarientByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteListingVarientRouteHandler(req, res); }); diff --git a/src/routes/sales/marketplaces.js b/src/routes/sales/marketplaces.js index 907e63e..57a3006 100644 --- a/src/routes/sales/marketplaces.js +++ b/src/routes/sales/marketplaces.js @@ -41,6 +41,7 @@ import { editMarketplaceRouteHandler, newMarketplaceRouteHandler, deleteMarketplaceRouteHandler, + deleteMarketplaceByFilterRouteHandler, listMarketplacesByPropertiesRouteHandler, getMarketplaceStatsRouteHandler, getMarketplaceHistoryRouteHandler, @@ -295,6 +296,25 @@ router.put('/:id', isAuthenticated, checkPermissions('marketplace', 'edit'), asy editMarketplaceRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('marketplace', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteMarketplaceByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteMarketplaceRouteHandler(req, res); }); diff --git a/src/routes/sales/returnpolicies.js b/src/routes/sales/returnpolicies.js index 3e70d30..14dffaf 100644 --- a/src/routes/sales/returnpolicies.js +++ b/src/routes/sales/returnpolicies.js @@ -8,6 +8,7 @@ import { editReturnPolicyRouteHandler, newReturnPolicyRouteHandler, deleteReturnPolicyRouteHandler, + deleteReturnPolicyByFilterRouteHandler, listReturnPoliciesByPropertiesRouteHandler, getReturnPolicyStatsRouteHandler, getReturnPolicyHistoryRouteHandler, @@ -137,6 +138,25 @@ router.put('/:id', isAuthenticated, checkPermissions('returnPolicy', 'edit'), as editReturnPolicyRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('returnPolicy', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteReturnPolicyByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteReturnPolicyRouteHandler(req, res); }); diff --git a/src/routes/sales/salesorders.js b/src/routes/sales/salesorders.js index 6fdbd2a..04ffce3 100644 --- a/src/routes/sales/salesorders.js +++ b/src/routes/sales/salesorders.js @@ -23,6 +23,7 @@ import { editMultipleSalesOrdersRouteHandler, newSalesOrderRouteHandler, deleteSalesOrderRouteHandler, + deleteSalesOrderByFilterRouteHandler, listSalesOrdersByPropertiesRouteHandler, getSalesOrderStatsRouteHandler, getSalesOrderHistoryRouteHandler, @@ -107,6 +108,25 @@ router.put('/:id', isAuthenticated, checkPermissions('salesOrder', 'edit'), asyn editSalesOrderRouteHandler(req, res); }); +router.delete( + '/delete', + isAuthenticated, + checkPermissions('salesOrder', 'delete'), + async (req, res) => { + const filter = await getFilter( + req.query.filter ? JSON.parse(req.query.filter) : {}, + listAllowedFilters, + true + ); + const masterFilter = await getFilter( + req.query.masterFilter ? JSON.parse(req.query.masterFilter) : {}, + listAllowedFilters, + true + ); + deleteSalesOrderByFilterRouteHandler(req, res, filter, masterFilter); + } +); + router.delete('/:id', isAuthenticated, async (req, res) => { deleteSalesOrderRouteHandler(req, res); }); diff --git a/src/services/finance/__tests__/invoices.test.js b/src/services/finance/__tests__/invoices.test.js index 2c00fcd..0bcebd3 100644 --- a/src/services/finance/__tests__/invoices.test.js +++ b/src/services/finance/__tests__/invoices.test.js @@ -10,6 +10,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/finance/__tests__/payments.test.js b/src/services/finance/__tests__/payments.test.js index a2041fb..328d338 100644 --- a/src/services/finance/__tests__/payments.test.js +++ b/src/services/finance/__tests__/payments.test.js @@ -9,6 +9,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/finance/__tests__/taxrecords.test.js b/src/services/finance/__tests__/taxrecords.test.js index e3dff06..a2aab39 100644 --- a/src/services/finance/__tests__/taxrecords.test.js +++ b/src/services/finance/__tests__/taxrecords.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/finance/invoices.js b/src/services/finance/invoices.js index 0ba7f40..64f5240 100644 --- a/src/services/finance/invoices.js +++ b/src/services/finance/invoices.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -322,6 +323,26 @@ export const newInvoiceRouteHandler = async (req, res) => { res.send(result); }; +export const deleteInvoiceByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: invoiceModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Invoice:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteInvoiceRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/finance/paymentpolicies.js b/src/services/finance/paymentpolicies.js index d2d7df7..d02b38e 100644 --- a/src/services/finance/paymentpolicies.js +++ b/src/services/finance/paymentpolicies.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -171,6 +172,26 @@ export const newPaymentPolicyRouteHandler = async (req, res) => { res.send(result); }; +export const deletePaymentPolicyByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: paymentPolicyModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered PaymentPolicy:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePaymentPolicyRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); const result = await deleteObject({ diff --git a/src/services/finance/payments.js b/src/services/finance/payments.js index 1cc78cd..39075a2 100644 --- a/src/services/finance/payments.js +++ b/src/services/finance/payments.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -240,6 +241,26 @@ export const newPaymentRouteHandler = async (req, res) => { res.send(result); }; +export const deletePaymentByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: paymentModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Payment:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePaymentRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/finance/taxrecords.js b/src/services/finance/taxrecords.js index c58b923..3aab039 100644 --- a/src/services/finance/taxrecords.js +++ b/src/services/finance/taxrecords.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -170,6 +171,26 @@ export const newTaxRecordRouteHandler = async (req, res) => { res.send(result); }; +export const deleteTaxRecordByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: taxRecordModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered TaxRecord:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteTaxRecordRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/__tests__/filamentstocks.test.js b/src/services/inventory/__tests__/filamentstocks.test.js index 3fdedf3..48b01f5 100644 --- a/src/services/inventory/__tests__/filamentstocks.test.js +++ b/src/services/inventory/__tests__/filamentstocks.test.js @@ -10,6 +10,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/inventory/__tests__/orderitems.test.js b/src/services/inventory/__tests__/orderitems.test.js index ae41d1d..ffe2056 100644 --- a/src/services/inventory/__tests__/orderitems.test.js +++ b/src/services/inventory/__tests__/orderitems.test.js @@ -9,6 +9,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/inventory/__tests__/partstocks.test.js b/src/services/inventory/__tests__/partstocks.test.js index 635144b..265f8cf 100644 --- a/src/services/inventory/__tests__/partstocks.test.js +++ b/src/services/inventory/__tests__/partstocks.test.js @@ -9,6 +9,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/inventory/__tests__/purchaseorders.test.js b/src/services/inventory/__tests__/purchaseorders.test.js index a3b83f2..3d8b33c 100644 --- a/src/services/inventory/__tests__/purchaseorders.test.js +++ b/src/services/inventory/__tests__/purchaseorders.test.js @@ -9,6 +9,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/inventory/__tests__/shipments.test.js b/src/services/inventory/__tests__/shipments.test.js index 06d3369..4fcae73 100644 --- a/src/services/inventory/__tests__/shipments.test.js +++ b/src/services/inventory/__tests__/shipments.test.js @@ -9,6 +9,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/inventory/__tests__/stockaudits.test.js b/src/services/inventory/__tests__/stockaudits.test.js index 9981007..db40906 100644 --- a/src/services/inventory/__tests__/stockaudits.test.js +++ b/src/services/inventory/__tests__/stockaudits.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/inventory/filamentstocks.js b/src/services/inventory/filamentstocks.js index 06593f4..12dc0c1 100644 --- a/src/services/inventory/filamentstocks.js +++ b/src/services/inventory/filamentstocks.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -229,6 +230,27 @@ export const newFilamentStockRouteHandler = async (req, res) => { res.send(result); }; +export const deleteFilamentStockByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: filamentStockModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + states: ['draft'], + }); + + if (result.error) { + logger.error('Failed to delete filtered FilamentStock:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteFilamentStockRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/orderitems.js b/src/services/inventory/orderitems.js index 39981cb..27f8eba 100644 --- a/src/services/inventory/orderitems.js +++ b/src/services/inventory/orderitems.js @@ -5,6 +5,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -380,6 +381,26 @@ export const newOrderItemRouteHandler = async (req, res) => { res.send(result); }; +export const deleteOrderItemByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: orderItemModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered OrderItem:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteOrderItemRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/partstocks.js b/src/services/inventory/partstocks.js index fa0e09f..c585576 100644 --- a/src/services/inventory/partstocks.js +++ b/src/services/inventory/partstocks.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -218,6 +219,27 @@ export const newPartStockRouteHandler = async (req, res) => { res.send(result); }; +export const deletePartStockByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: partStockModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + states: ['draft'], + }); + + if (result.error) { + logger.error('Failed to delete filtered PartStock:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePartStockRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/productstocks.js b/src/services/inventory/productstocks.js index 8010cfb..d085f39 100644 --- a/src/services/inventory/productstocks.js +++ b/src/services/inventory/productstocks.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -290,6 +291,27 @@ export const newProductStockRouteHandler = async (req, res) => { res.send(result); }; +export const deleteProductStockByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: productStockModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + states: ['draft'], + }); + + if (result.error) { + logger.error('Failed to delete filtered ProductStock:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteProductStockRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/purchaseorders.js b/src/services/inventory/purchaseorders.js index ff923f2..2983e55 100644 --- a/src/services/inventory/purchaseorders.js +++ b/src/services/inventory/purchaseorders.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -213,6 +214,26 @@ export const newPurchaseOrderRouteHandler = async (req, res) => { res.send(result); }; +export const deletePurchaseOrderByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: purchaseOrderModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered PurchaseOrder:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePurchaseOrderRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/shipments.js b/src/services/inventory/shipments.js index 049710d..c0afbcf 100644 --- a/src/services/inventory/shipments.js +++ b/src/services/inventory/shipments.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -219,6 +220,26 @@ export const newShipmentRouteHandler = async (req, res) => { res.send(result); }; +export const deleteShipmentByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: shipmentModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Shipment:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteShipmentRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/stockaudits.js b/src/services/inventory/stockaudits.js index b43c38c..c6fec5f 100644 --- a/src/services/inventory/stockaudits.js +++ b/src/services/inventory/stockaudits.js @@ -11,6 +11,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -445,6 +446,27 @@ export const newStockAuditRouteHandler = async (req, res) => { res.send(result); }; +export const deleteStockAuditByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: stockAuditModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + states: ['draft'], + }); + + if (result.error) { + logger.error('Failed to delete filtered StockAudit:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteStockAuditRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/stocklocations.js b/src/services/inventory/stocklocations.js index 12ccf72..174ec1a 100644 --- a/src/services/inventory/stocklocations.js +++ b/src/services/inventory/stocklocations.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -182,6 +183,26 @@ export const newStockLocationRouteHandler = async (req, res) => { res.send(result); }; +export const deleteStockLocationByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: stockLocationModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered StockLocation:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteStockLocationRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/inventory/stocktransfers.js b/src/services/inventory/stocktransfers.js index aec2962..493ca19 100644 --- a/src/services/inventory/stocktransfers.js +++ b/src/services/inventory/stocktransfers.js @@ -9,6 +9,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -432,6 +433,27 @@ export const newStockTransferRouteHandler = async (req, res) => { res.send(result); }; +export const deleteStockTransferByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: stockTransferModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + states: ['draft'], + }); + + if (result.error) { + logger.error('Failed to delete filtered StockTransfer:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteStockTransferRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/__tests__/courier.test.js b/src/services/management/__tests__/courier.test.js index 9db8ae1..0171829 100644 --- a/src/services/management/__tests__/courier.test.js +++ b/src/services/management/__tests__/courier.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/courierservice.test.js b/src/services/management/__tests__/courierservice.test.js index 946d8f8..7b8ff59 100644 --- a/src/services/management/__tests__/courierservice.test.js +++ b/src/services/management/__tests__/courierservice.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/documentprinters.test.js b/src/services/management/__tests__/documentprinters.test.js index d320da8..cf078df 100644 --- a/src/services/management/__tests__/documentprinters.test.js +++ b/src/services/management/__tests__/documentprinters.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/documentsizes.test.js b/src/services/management/__tests__/documentsizes.test.js index 4fecc78..68c6ea7 100644 --- a/src/services/management/__tests__/documentsizes.test.js +++ b/src/services/management/__tests__/documentsizes.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/documenttemplates.test.js b/src/services/management/__tests__/documenttemplates.test.js index 0984bc7..a4e475b 100644 --- a/src/services/management/__tests__/documenttemplates.test.js +++ b/src/services/management/__tests__/documenttemplates.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/emailaccounts.test.js b/src/services/management/__tests__/emailaccounts.test.js index dcdaf27..b6b5cfb 100644 --- a/src/services/management/__tests__/emailaccounts.test.js +++ b/src/services/management/__tests__/emailaccounts.test.js @@ -6,6 +6,7 @@ jest.unstable_mockModule('../../../database/schemas/management/emailaccount.sche })); jest.unstable_mockModule('../../../database/database.js', () => ({ deleteObject: jest.fn(), + deleteObjects: jest.fn(), editObject: jest.fn(), getObject: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/emailtemplates.test.js b/src/services/management/__tests__/emailtemplates.test.js index 5e24c64..3cda456 100644 --- a/src/services/management/__tests__/emailtemplates.test.js +++ b/src/services/management/__tests__/emailtemplates.test.js @@ -5,6 +5,7 @@ jest.unstable_mockModule('../../../database/schemas/management/emailtemplate.sch })); jest.unstable_mockModule('../../../database/database.js', () => ({ deleteObject: jest.fn(), + deleteObjects: jest.fn(), editObject: jest.fn(), getObject: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/filaments.test.js b/src/services/management/__tests__/filaments.test.js index 4f6ce23..4717c83 100644 --- a/src/services/management/__tests__/filaments.test.js +++ b/src/services/management/__tests__/filaments.test.js @@ -9,6 +9,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/files.test.js b/src/services/management/__tests__/files.test.js index 21dd55d..9231dcd 100644 --- a/src/services/management/__tests__/files.test.js +++ b/src/services/management/__tests__/files.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), flushFile: jest.fn(), getModelStats: jest.fn(), diff --git a/src/services/management/__tests__/hosts.test.js b/src/services/management/__tests__/hosts.test.js index 395f0d7..5d3cf5c 100644 --- a/src/services/management/__tests__/hosts.test.js +++ b/src/services/management/__tests__/hosts.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/materials.test.js b/src/services/management/__tests__/materials.test.js index 8ac7f88..746f6df 100644 --- a/src/services/management/__tests__/materials.test.js +++ b/src/services/management/__tests__/materials.test.js @@ -8,6 +8,8 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ getObject: jest.fn(), editObject: jest.fn(), newObject: jest.fn(), + deleteObject: jest.fn(), + deleteObjects: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), getObjectNeighbors: jest.fn(), @@ -33,9 +35,13 @@ const { listMaterialsRouteHandler, getMaterialRouteHandler, newMaterialRouteHandler, + deleteMaterialRouteHandler, + deleteMaterialByFilterRouteHandler, } = await import('../materials.js'); -const { listObjects, getObject, newObject } = await import('../../../database/database.js'); +const { listObjects, getObject, deleteObject, deleteObjects } = await import( + '../../../database/database.js' +); const { materialModel } = await import('../../../database/schemas/management/material.schema.js'); describe('Material Service Route Handlers', () => { @@ -79,5 +85,49 @@ describe('Material Service Route Handlers', () => { expect(res.send).toHaveBeenCalledWith(mockMaterial); }); }); + + describe('deleteMaterialRouteHandler', () => { + it('should delete a material by ID', async () => { + req.params.id = '507f1f77bcf86cd799439011'; + const deletedMaterial = { _id: req.params.id, name: 'PLA' }; + deleteObject.mockResolvedValue(deletedMaterial); + + await deleteMaterialRouteHandler(req, res); + + expect(deleteObject).toHaveBeenCalledWith( + expect.objectContaining({ + model: materialModel, + user: req.user, + }) + ); + expect(res.send).toHaveBeenCalledWith(deletedMaterial); + }); + }); + + describe('deleteMaterialByFilterRouteHandler', () => { + it('should delete materials matching the merged filters', async () => { + const result = { + matchedCount: 2, + deletedCount: 2, + failedCount: 0, + errors: [], + }; + deleteObjects.mockResolvedValue(result); + + await deleteMaterialByFilterRouteHandler( + req, + res, + { name: 'PLA' }, + { tags: 'stock' } + ); + + expect(deleteObjects).toHaveBeenCalledWith({ + model: materialModel, + filter: { tags: 'stock', name: 'PLA' }, + user: req.user, + }); + expect(res.send).toHaveBeenCalledWith(result); + }); + }); }); diff --git a/src/services/management/__tests__/notetypes.test.js b/src/services/management/__tests__/notetypes.test.js index cf68173..e6a2df8 100644 --- a/src/services/management/__tests__/notetypes.test.js +++ b/src/services/management/__tests__/notetypes.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/parts.test.js b/src/services/management/__tests__/parts.test.js index 9870f74..48c1018 100644 --- a/src/services/management/__tests__/parts.test.js +++ b/src/services/management/__tests__/parts.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/permissionsetting.test.js b/src/services/management/__tests__/permissionsetting.test.js index 907ea33..21d0090 100644 --- a/src/services/management/__tests__/permissionsetting.test.js +++ b/src/services/management/__tests__/permissionsetting.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/products.test.js b/src/services/management/__tests__/products.test.js index 09608d7..02d6cf2 100644 --- a/src/services/management/__tests__/products.test.js +++ b/src/services/management/__tests__/products.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/stockauditlevels.test.js b/src/services/management/__tests__/stockauditlevels.test.js index dedf72e..74a0551 100644 --- a/src/services/management/__tests__/stockauditlevels.test.js +++ b/src/services/management/__tests__/stockauditlevels.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/taxrates.test.js b/src/services/management/__tests__/taxrates.test.js index ae85760..a409ca3 100644 --- a/src/services/management/__tests__/taxrates.test.js +++ b/src/services/management/__tests__/taxrates.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/usergroups.test.js b/src/services/management/__tests__/usergroups.test.js index 3e84651..fdaa5c3 100644 --- a/src/services/management/__tests__/usergroups.test.js +++ b/src/services/management/__tests__/usergroups.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/__tests__/vendors.test.js b/src/services/management/__tests__/vendors.test.js index 13f508a..3c9cc15 100644 --- a/src/services/management/__tests__/vendors.test.js +++ b/src/services/management/__tests__/vendors.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/management/apppasswords.js b/src/services/management/apppasswords.js index cf8e9b9..fae24d6 100644 --- a/src/services/management/apppasswords.js +++ b/src/services/management/apppasswords.js @@ -11,6 +11,7 @@ import { editObject, newObject, deleteObject, + deleteObjects, getModelStats, getModelHistory, searchObjects, @@ -178,6 +179,26 @@ export const newAppPasswordRouteHandler = async (req, res) => { res.send(result); }; +export const deleteAppPasswordByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: appPasswordModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered AppPassword:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteAppPasswordRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/courier.js b/src/services/management/courier.js index 0531264..d0ad968 100644 --- a/src/services/management/courier.js +++ b/src/services/management/courier.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -171,6 +172,26 @@ export const newCourierRouteHandler = async (req, res) => { res.send(result); }; +export const deleteCourierByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: courierModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Courier:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteCourierRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/courierservice.js b/src/services/management/courierservice.js index 61dc8b6..2ae2c76 100644 --- a/src/services/management/courierservice.js +++ b/src/services/management/courierservice.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -193,6 +194,26 @@ export const newCourierServiceRouteHandler = async (req, res) => { res.send(result); }; +export const deleteCourierServiceByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: courierServiceModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered CourierService:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteCourierServiceRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/documentprinters.js b/src/services/management/documentprinters.js index 7fe5509..e40f1ab 100644 --- a/src/services/management/documentprinters.js +++ b/src/services/management/documentprinters.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -182,6 +183,26 @@ export const newDocumentPrinterRouteHandler = async (req, res) => { res.send(result); }; +export const deleteDocumentPrinterByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: documentPrinterModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered DocumentPrinter:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteDocumentPrinterRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/documentsizes.js b/src/services/management/documentsizes.js index d0bda34..101eb56 100644 --- a/src/services/management/documentsizes.js +++ b/src/services/management/documentsizes.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -176,6 +177,26 @@ export const newDocumentSizeRouteHandler = async (req, res) => { res.send(result); }; +export const deleteDocumentSizeByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: documentSizeModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered DocumentSize:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteDocumentSizeRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/documenttemplates.js b/src/services/management/documenttemplates.js index 0dd30da..5aef997 100644 --- a/src/services/management/documenttemplates.js +++ b/src/services/management/documenttemplates.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -239,6 +240,26 @@ export const newDocumentTemplateRouteHandler = async (req, res) => { res.send(result); }; +export const deleteDocumentTemplateByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: documentTemplateModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered DocumentTemplate:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteDocumentTemplateRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/emailaccounts.js b/src/services/management/emailaccounts.js index 667c639..a3034ce 100644 --- a/src/services/management/emailaccounts.js +++ b/src/services/management/emailaccounts.js @@ -9,6 +9,7 @@ import { editObject, newObject, deleteObject, + deleteObjects, getModelStats, getModelHistory, searchObjects, @@ -182,6 +183,27 @@ export const newEmailAccountRouteHandler = async (req, res) => { res.send(result); }; +export const deleteEmailAccountByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: emailAccountModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + checkUnused: true, + }); + + if (result.error) { + logger.error('Failed to delete filtered EmailAccount:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteEmailAccountRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/emailtemplates.js b/src/services/management/emailtemplates.js index ddbc262..b0c056d 100644 --- a/src/services/management/emailtemplates.js +++ b/src/services/management/emailtemplates.js @@ -9,6 +9,7 @@ import { editObject, newObject, deleteObject, + deleteObjects, getModelStats, getModelHistory, searchObjects, @@ -222,6 +223,27 @@ export const newEmailTemplateRouteHandler = async (req, res) => { res.send(result); }; +export const deleteEmailTemplateByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: emailTemplateModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + checkUnused: true, + }); + + if (result.error) { + logger.error('Failed to delete filtered EmailTemplate:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteEmailTemplateRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/filaments.js b/src/services/management/filaments.js index 0d95e48..aeb8b73 100644 --- a/src/services/management/filaments.js +++ b/src/services/management/filaments.js @@ -10,6 +10,7 @@ import { editObjects, newObject, deleteObject, + deleteObjects, getModelStats, getModelHistory, searchObjects, @@ -227,6 +228,27 @@ export const newFilamentRouteHandler = async (req, res) => { res.send(result); }; +export const deleteFilamentByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: filamentModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + checkUnused: true, + }); + + if (result.error) { + logger.error('Failed to delete filtered Filament:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteFilamentRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/filamentskus.js b/src/services/management/filamentskus.js index eaf9b24..0bfa496 100644 --- a/src/services/management/filamentskus.js +++ b/src/services/management/filamentskus.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -181,6 +182,26 @@ export const newFilamentSkuRouteHandler = async (req, res) => { res.send(result); }; +export const deleteFilamentSkuByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: filamentSkuModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered FilamentSku:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteFilamentSkuRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/files.js b/src/services/management/files.js index 782307f..7ba5e1a 100644 --- a/src/services/management/files.js +++ b/src/services/management/files.js @@ -7,6 +7,7 @@ import fs from 'fs'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -260,6 +261,38 @@ export const newFileRouteHandler = async (req, res) => { } }; +export const deleteFileByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const mergedFilter = { ...masterFilter, ...filter }; + const files = await fileModel.find(mergedFilter); + + for (const file of files) { + if (!file.cephBucket || !file.cephKey) continue; + try { + await deleteCephFile(file.cephBucket, file.cephKey); + } catch (error) { + logger.warn(`Failed to delete file from Ceph: ${error.message}`); + } + } + + const result = await deleteObjects({ + model: fileModel, + filter: mergedFilter, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered File:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteFileRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/hosts.js b/src/services/management/hosts.js index 4b378a8..0ab1533 100644 --- a/src/services/management/hosts.js +++ b/src/services/management/hosts.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -167,6 +168,26 @@ export const newHostRouteHandler = async (req, res) => { res.send(result); }; +export const deleteHostByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: hostModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Host:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteHostRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/materials.js b/src/services/management/materials.js index 85f6729..88d6c0d 100644 --- a/src/services/management/materials.js +++ b/src/services/management/materials.js @@ -8,6 +8,8 @@ import { listObjectsByProperties, editObject, newObject, + deleteObject, + deleteObjects, getModelStats, getModelHistory, searchObjects, @@ -166,6 +168,43 @@ export const newMaterialRouteHandler = async (req, res) => { res.send(result); }; +export const deleteMaterialByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: materialModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Material:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + +export const deleteMaterialRouteHandler = async (req, res) => { + const id = new mongoose.Types.ObjectId(req.params.id); + const result = await deleteObject({ + model: materialModel, + id, + user: req.user, + }); + + if (result.error) { + logger.error('No material deleted:', result.error); + return res.status(result.code).send(result); + } + + logger.debug(`Deleted material with ID: ${result._id}`); + res.send(result); +}; + export const getMaterialStatsRouteHandler = async (req, res) => { const result = await getModelStats({ model: materialModel }); if (result?.error) { diff --git a/src/services/management/notetypes.js b/src/services/management/notetypes.js index f59ba4f..f874c85 100644 --- a/src/services/management/notetypes.js +++ b/src/services/management/notetypes.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -164,6 +165,26 @@ export const newNoteTypeRouteHandler = async (req, res) => { res.send(result); }; +export const deleteNoteTypeByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: noteTypeModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered NoteType:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteNoteTypeRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/parts.js b/src/services/management/parts.js index 429c97b..33778a0 100644 --- a/src/services/management/parts.js +++ b/src/services/management/parts.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -183,6 +184,26 @@ export const newPartRouteHandler = async (req, res) => { res.send(result); }; +export const deletePartByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: partModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Part:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePartRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/partskus.js b/src/services/management/partskus.js index 30ac0e4..2b95383 100644 --- a/src/services/management/partskus.js +++ b/src/services/management/partskus.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -199,6 +200,26 @@ export const newPartSkuRouteHandler = async (req, res) => { res.send(result); }; +export const deletePartSkuByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: partSkuModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered PartSku:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePartSkuRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/permissionsetting.js b/src/services/management/permissionsetting.js index 524d6f4..9583cd1 100644 --- a/src/services/management/permissionsetting.js +++ b/src/services/management/permissionsetting.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -163,6 +164,26 @@ export const newPermissionSettingsRouteHandler = async (req, res) => { res.send(result); }; +export const deletePermissionSettingsByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: permissionSettingModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered PermissionSettings:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePermissionSettingsRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/productcategories.js b/src/services/management/productcategories.js index 6eb68be..f638211 100644 --- a/src/services/management/productcategories.js +++ b/src/services/management/productcategories.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, editObject, getModelHistory, getModelStats, @@ -169,6 +170,26 @@ export const newProductCategoryRouteHandler = async (req, res) => { res.send(result); }; +export const deleteProductCategoryByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: productCategoryModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered ProductCategory:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteProductCategoryRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/products.js b/src/services/management/products.js index d574bc1..d0549c1 100644 --- a/src/services/management/products.js +++ b/src/services/management/products.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -189,6 +190,26 @@ export const newProductRouteHandler = async (req, res) => { res.send(result); }; +export const deleteProductByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: productModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Product:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteProductRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/productskus.js b/src/services/management/productskus.js index 7c0d3cc..3c20cfd 100644 --- a/src/services/management/productskus.js +++ b/src/services/management/productskus.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -204,6 +205,26 @@ export const newProductSkuRouteHandler = async (req, res) => { res.send(result); }; +export const deleteProductSkuByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: productSkuModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered ProductSku:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteProductSkuRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/stockauditlevels.js b/src/services/management/stockauditlevels.js index 42e4d30..564828f 100644 --- a/src/services/management/stockauditlevels.js +++ b/src/services/management/stockauditlevels.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -169,6 +170,26 @@ export const newStockAuditLevelRouteHandler = async (req, res) => { res.send(result); }; +export const deleteStockAuditLevelByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: stockAuditLevelModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered StockAuditLevel:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteStockAuditLevelRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/taxrates.js b/src/services/management/taxrates.js index 1257392..fa1af0e 100644 --- a/src/services/management/taxrates.js +++ b/src/services/management/taxrates.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -196,6 +197,26 @@ export const newTaxRateRouteHandler = async (req, res) => { res.send(result); }; +export const deleteTaxRateByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: taxRateModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered TaxRate:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteTaxRateRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/usergroups.js b/src/services/management/usergroups.js index dd63a92..a943f17 100644 --- a/src/services/management/usergroups.js +++ b/src/services/management/usergroups.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -172,6 +173,26 @@ export const newUserGroupRouteHandler = async (req, res) => { res.send(result); }; +export const deleteUserGroupByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: userGroupModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered UserGroup:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteUserGroupRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/management/vendors.js b/src/services/management/vendors.js index cf3ed3c..77249ef 100644 --- a/src/services/management/vendors.js +++ b/src/services/management/vendors.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -174,6 +175,26 @@ export const newVendorRouteHandler = async (req, res) => { res.send(result); }; +export const deleteVendorByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: vendorModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Vendor:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteVendorRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/production/__tests__/filamentprofiles.test.js b/src/services/production/__tests__/filamentprofiles.test.js index 0d1a6e8..d996186 100644 --- a/src/services/production/__tests__/filamentprofiles.test.js +++ b/src/services/production/__tests__/filamentprofiles.test.js @@ -2,6 +2,7 @@ import { jest } from '@jest/globals'; jest.unstable_mockModule('../../../database/database.js', () => ({ deleteObject: jest.fn(), + deleteObjects: jest.fn(), editObject: jest.fn(), getObject: jest.fn(), listObjects: jest.fn(), diff --git a/src/services/production/__tests__/gcodefiles.test.js b/src/services/production/__tests__/gcodefiles.test.js index bc6d290..76e2375 100644 --- a/src/services/production/__tests__/gcodefiles.test.js +++ b/src/services/production/__tests__/gcodefiles.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getObjectNeighbors: jest.fn(), })); diff --git a/src/services/production/__tests__/jobs.test.js b/src/services/production/__tests__/jobs.test.js index 156cdb2..98cb5e7 100644 --- a/src/services/production/__tests__/jobs.test.js +++ b/src/services/production/__tests__/jobs.test.js @@ -9,6 +9,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ newObject: jest.fn(), editObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/production/__tests__/printerprofiles.test.js b/src/services/production/__tests__/printerprofiles.test.js index b73e566..23d5865 100644 --- a/src/services/production/__tests__/printerprofiles.test.js +++ b/src/services/production/__tests__/printerprofiles.test.js @@ -2,6 +2,7 @@ import { jest } from '@jest/globals'; jest.unstable_mockModule('../../../database/database.js', () => ({ deleteObject: jest.fn(), + deleteObjects: jest.fn(), editObject: jest.fn(), getObject: jest.fn(), listObjects: jest.fn(), diff --git a/src/services/production/__tests__/printers.test.js b/src/services/production/__tests__/printers.test.js index 9df5429..b816035 100644 --- a/src/services/production/__tests__/printers.test.js +++ b/src/services/production/__tests__/printers.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/production/filamentprofiles.js b/src/services/production/filamentprofiles.js index 6f8d109..67496d1 100644 --- a/src/services/production/filamentprofiles.js +++ b/src/services/production/filamentprofiles.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, editObject, getObject, listObjects, @@ -306,6 +307,26 @@ export const newFilamentProfileRouteHandler = async (req, res) => { res.send(result); }; +export const deleteFilamentProfileByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: filamentProfileModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered FilamentProfile:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteFilamentProfileRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); const result = await deleteObject({ diff --git a/src/services/production/gcodefiles.js b/src/services/production/gcodefiles.js index dc770e8..94c6964 100644 --- a/src/services/production/gcodefiles.js +++ b/src/services/production/gcodefiles.js @@ -3,6 +3,7 @@ import { gcodeFileModel } from '../../database/schemas/production/gcodefile.sche import log4js from 'log4js'; import { deleteObject, + deleteObjects, editObject, getObject, listObjects, @@ -189,6 +190,26 @@ export const newGCodeFileRouteHandler = async (req, res) => { res.send(result); }; +export const deleteGCodeFileByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: gcodeFileModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered GCodeFile:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteGCodeFileRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/production/jobs.js b/src/services/production/jobs.js index ccd2154..beb2067 100644 --- a/src/services/production/jobs.js +++ b/src/services/production/jobs.js @@ -4,6 +4,7 @@ import { jobModel } from '../../database/schemas/production/job.schema.js'; import log4js from 'log4js'; import { deleteObject, + deleteObjects, getObject, listObjects, listObjectsByProperties, @@ -183,6 +184,26 @@ export const editJobRouteHandler = async (req, res) => { res.send(result); }; +export const deleteJobByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: jobModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Job:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteJobRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/production/printerprofiles.js b/src/services/production/printerprofiles.js index 9447835..5836725 100644 --- a/src/services/production/printerprofiles.js +++ b/src/services/production/printerprofiles.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, editObject, getObject, listObjects, @@ -194,6 +195,26 @@ export const newPrinterProfileRouteHandler = async (req, res) => { res.send(result); }; +export const deletePrinterProfileByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: printerProfileModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered PrinterProfile:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePrinterProfileRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); const result = await deleteObject({ diff --git a/src/services/production/printers.js b/src/services/production/printers.js index 4f22ec8..47c9ee0 100644 --- a/src/services/production/printers.js +++ b/src/services/production/printers.js @@ -3,6 +3,7 @@ import { printerModel } from '../../database/schemas/production/printer.schema.j import log4js from 'log4js'; import { deleteObject, + deleteObjects, editObject, getObject, listObjects, @@ -183,6 +184,26 @@ export const newPrinterRouteHandler = async (req, res) => { res.send(result); }; +export const deletePrinterByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: printerModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Printer:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deletePrinterRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/sales/__tests__/clients.test.js b/src/services/sales/__tests__/clients.test.js index ab6e178..d9d8981 100644 --- a/src/services/sales/__tests__/clients.test.js +++ b/src/services/sales/__tests__/clients.test.js @@ -8,6 +8,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObject: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/sales/__tests__/listings.test.js b/src/services/sales/__tests__/listings.test.js index e568635..88dcda3 100644 --- a/src/services/sales/__tests__/listings.test.js +++ b/src/services/sales/__tests__/listings.test.js @@ -12,6 +12,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/sales/__tests__/salesorders.test.js b/src/services/sales/__tests__/salesorders.test.js index 94c3863..81b9a67 100644 --- a/src/services/sales/__tests__/salesorders.test.js +++ b/src/services/sales/__tests__/salesorders.test.js @@ -10,6 +10,7 @@ jest.unstable_mockModule('../../../database/database.js', () => ({ editObjects: jest.fn(), newObject: jest.fn(), deleteObject: jest.fn(), + deleteObjects: jest.fn(), listObjectsByProperties: jest.fn(), getModelStats: jest.fn(), getModelHistory: jest.fn(), diff --git a/src/services/sales/clients.js b/src/services/sales/clients.js index af742ab..08a2d4b 100644 --- a/src/services/sales/clients.js +++ b/src/services/sales/clients.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -174,6 +175,26 @@ export const newClientRouteHandler = async (req, res) => { res.send(result); }; +export const deleteClientByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: clientModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Client:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteClientRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/sales/fulfillmentpolicies.js b/src/services/sales/fulfillmentpolicies.js index e36586f..e4892fb 100644 --- a/src/services/sales/fulfillmentpolicies.js +++ b/src/services/sales/fulfillmentpolicies.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -177,6 +178,26 @@ export const newFulfillmentPolicyRouteHandler = async (req, res) => { res.send(result); }; +export const deleteFulfillmentPolicyByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: fulfillmentPolicyModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered FulfillmentPolicy:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteFulfillmentPolicyRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); const result = await deleteObject({ diff --git a/src/services/sales/listings.js b/src/services/sales/listings.js index 1079c0c..4774822 100644 --- a/src/services/sales/listings.js +++ b/src/services/sales/listings.js @@ -6,6 +6,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -274,6 +275,58 @@ export const newListingRouteHandler = async (req, res) => { res.send(result); }; +export const deleteListingByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const mergedFilter = { ...masterFilter, ...filter }; + const listings = await listingModel.find(mergedFilter); + + for (const listing of listings) { + const varients = await listingVarientModel.find({ + listing: listing._id, + }); + for (const varient of varients) { + const deleteResult = await deleteObject({ + model: listingVarientModel, + id: varient._id, + user: req.user, + }); + if (deleteResult?.error) { + logger.warn( + `Failed to delete listing varient ${varient._id}: ${deleteResult.error}` + ); + } + } + } + + const result = await deleteObjects({ + model: listingModel, + filter: mergedFilter, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Listing:', result.error); + return res.status(result.code || 500).send(result); + } + + const failedIds = new Set(result.errors.map((error) => String(error.id))); + for (const listing of listings) { + if (failedIds.has(String(listing._id))) continue; + const marketplaceId = listing.marketplace?._id || listing.marketplace; + if (marketplaceId) { + pushToMarketplace(marketplaceId, listing, req.user, { + isDelete: true, + }); + } + } + + res.send(result); +}; + export const deleteListingRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/sales/listingvarients.js b/src/services/sales/listingvarients.js index fda69dc..c5f0038 100644 --- a/src/services/sales/listingvarients.js +++ b/src/services/sales/listingvarients.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -236,6 +237,26 @@ export const newListingVarientRouteHandler = async (req, res) => { res.send(result); }; +export const deleteListingVarientByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: listingVarientModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered ListingVarient:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteListingVarientRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/sales/marketplaces.js b/src/services/sales/marketplaces.js index 4ad39a1..1838ae7 100644 --- a/src/services/sales/marketplaces.js +++ b/src/services/sales/marketplaces.js @@ -5,6 +5,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -183,6 +184,26 @@ export const newMarketplaceRouteHandler = async (req, res) => { res.send(result); }; +export const deleteMarketplaceByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: marketplaceModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered Marketplace:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteMarketplaceRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); diff --git a/src/services/sales/returnpolicies.js b/src/services/sales/returnpolicies.js index ccc6171..0183256 100644 --- a/src/services/sales/returnpolicies.js +++ b/src/services/sales/returnpolicies.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -178,6 +179,26 @@ export const newReturnPolicyRouteHandler = async (req, res) => { res.send(result); }; +export const deleteReturnPolicyByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: returnPolicyModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered ReturnPolicy:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteReturnPolicyRouteHandler = async (req, res) => { const id = new mongoose.Types.ObjectId(req.params.id); const result = await deleteObject({ diff --git a/src/services/sales/salesorders.js b/src/services/sales/salesorders.js index 8a3e2bf..eb7adb4 100644 --- a/src/services/sales/salesorders.js +++ b/src/services/sales/salesorders.js @@ -4,6 +4,7 @@ import log4js from 'log4js'; import mongoose from 'mongoose'; import { deleteObject, + deleteObjects, listObjects, getObject, editObject, @@ -216,6 +217,26 @@ export const newSalesOrderRouteHandler = async (req, res) => { res.send(result); }; +export const deleteSalesOrderByFilterRouteHandler = async ( + req, + res, + filter = {}, + masterFilter = {} +) => { + const result = await deleteObjects({ + model: salesOrderModel, + filter: { ...masterFilter, ...filter }, + user: req.user, + }); + + if (result.error) { + logger.error('Failed to delete filtered SalesOrder:', result.error); + return res.status(result.code || 500).send(result); + } + + res.send(result); +}; + export const deleteSalesOrderRouteHandler = async (req, res) => { // Get ID from params const id = new mongoose.Types.ObjectId(req.params.id);