diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py
index e4da445cb4..e5535e26f5 100644
--- a/src/backend/InvenTree/InvenTree/api.py
+++ b/src/backend/InvenTree/InvenTree/api.py
@@ -422,10 +422,11 @@ class BulkOperationMixin:
items = request.data.pop('items', None)
filters = request.data.pop('filters', None)
+ all_filter = request.GET.get('all', None)
queryset = model.objects.all()
- if not items and not filters:
+ if not items and not filters and all_filter is None:
raise ValidationError({
'non_field_errors': _(
'List of items or filters must be provided for bulk operation'
@@ -459,6 +460,11 @@ class BulkOperationMixin:
'non_field_errors': _('Invalid filters provided')
})
+ if all_filter and not helpers.str2bool(all_filter):
+ raise ValidationError({
+ 'non_field_errors': _('All filter must only be used with true')
+ })
+
if queryset.count() == 0:
raise ValidationError({
'non_field_errors': _('No items match the provided criteria')
diff --git a/src/frontend/src/tables/settings/PendingTasksTable.tsx b/src/frontend/src/tables/settings/PendingTasksTable.tsx
index 0c18fe78b8..82478c1290 100644
--- a/src/frontend/src/tables/settings/PendingTasksTable.tsx
+++ b/src/frontend/src/tables/settings/PendingTasksTable.tsx
@@ -3,6 +3,11 @@ import { useMemo } from 'react';
import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
import { apiUrl } from '@lib/functions/Api';
+import { UserRoles } from '@lib/index';
+import { notifications, showNotification } from '@mantine/notifications';
+import { IconTrashXFilled, IconX } from '@tabler/icons-react';
+import { api } from '../../App';
+import { ActionButton } from '../../components/buttons/ActionButton';
import { useTable } from '../../hooks/UseTable';
import { useUserState } from '../../states/UserState';
import type { TableColumn } from '../Column';
@@ -48,6 +53,41 @@ export default function PendingTasksTable({
];
}, []);
+ const tableActions = useMemo(() => {
+ return [
+ }
+ tooltip={t`Remove all pending tasks`}
+ onClick={() => {
+ api
+ .delete(`${apiUrl(ApiEndpoints.task_pending_list)}?all=true`)
+ .then(() => {
+ notifications.show({
+ id: 'notes',
+ title: t`Success`,
+ message: t`All pending tasks deleted`,
+ color: 'green'
+ });
+ table.refreshTable();
+ })
+ .catch((err) => {
+ showNotification({
+ title: t`Error while deleting all pending tasks`,
+ message:
+ err.response.data?.non_field_errors ??
+ err.message ??
+ t`Unknown error`,
+ color: 'red',
+ icon:
+ });
+ });
+ }}
+ hidden={!user.hasAddRole(UserRoles.admin)}
+ />
+ ];
+ }, [user]);
+
return (
);