Repository: nautobot/nautobot

Issue:
Scheduled Jobs screen has checkbox for items but no actions to take on checked items
<!--
    NOTE: IF YOUR ISSUE DOES NOT FOLLOW THIS TEMPLATE, IT WILL BE CLOSED.

    This form is only for reporting reproducible bugs. If you need assistance
    with Nautobot installation, or if you have a general question, please start a
    discussion instead: https://github.com/nautobot/nautobot/discussions

    Please describe the environment in which you are running Nautobot. Be sure
    that you are running an unmodified instance of the latest stable release
    before submitting a bug report, and that any plugins have been disabled.
-->
### Environment
* Python version: 3.8
* Nautobot version: 1.2.0a1 (next branch)

<!--
    Describe in detail the exact steps that someone else can take to reproduce
    this bug using the current stable release of Nautobot. Begin with the
    creation of any necessary database objects and call out every operation
    being performed explicitly. If reporting a bug in the REST API, be sure to
    reconstruct the raw HTTP request(s) being made: Don't rely on a client
    library such as pynautobot.
-->
### Steps to Reproduce
1. Schedule some jobs
2. Go to Scheduled Jobs screen
3. There is a checkbox by each scheduled job, but no action to take on checked items appears on this screen

![image](https://user-images.githubusercontent.com/13647153/134408805-540bab0b-61ba-4c52-86b8-fa6d6398c30b.png)


<!-- What did you expect to happen? -->
### Expected Behavior
There would be actions/buttons on the Scheduled Jobs page to act on the checked item(s).  I'd expect that the `Delete` button would be available on this page


<!-- What happened instead? -->
### Observed Behavior

No actions can be taken on checked items on this screen.  For example, to delete this job, I had to click on the job and then on the screen for the specific job, I could delete it.

![image](https://user-images.githubusercontent.com/13647153/134409069-fa707f64-2b67-460e-9831-70542f65087c.png)




Discussion:

Resolving patch:
diff --git a/nautobot/extras/urls.py b/nautobot/extras/urls.py
--- a/nautobot/extras/urls.py
+++ b/nautobot/extras/urls.py
@@ -320,6 +320,11 @@
     path("jobs/scheduled-jobs/", views.ScheduledJobListView.as_view(), name="scheduledjob_list"),
     path("jobs/scheduled-jobs/<uuid:pk>/", views.ScheduledJobView.as_view(), name="scheduledjob"),
     path("jobs/scheduled-jobs/<uuid:pk>/delete/", views.ScheduledJobDeleteView.as_view(), name="scheduledjob_delete"),
+    path(
+        "jobs/scheduled-jobs/delete/",
+        views.ScheduledJobBulkDeleteView.as_view(),
+        name="scheduledjob_bulk_delete",
+    ),
     path(
         "jobs/scheduled-jobs/approval-queue/",
         views.ScheduledJobApprovalQueueListView.as_view(),
diff --git a/nautobot/extras/views.py b/nautobot/extras/views.py
--- a/nautobot/extras/views.py
+++ b/nautobot/extras/views.py
@@ -927,7 +927,13 @@ class ScheduledJobListView(generic.ObjectListView):
     table = tables.ScheduledJobTable
     filterset = filters.ScheduledJobFilterSet
     filterset_form = forms.ScheduledJobFilterForm
-    action_buttons = ()
+    action_buttons = ("delete",)
+
+
+class ScheduledJobBulkDeleteView(generic.BulkDeleteView):
+    queryset = ScheduledJob.objects.all()
+    table = tables.ScheduledJobTable
+    filterset = filters.ScheduledJobFilterSet
 
 
 class ScheduledJobApprovalQueueListView(generic.ObjectListView):


Test patch:
diff --git a/nautobot/extras/tests/test_views.py b/nautobot/extras/tests/test_views.py
--- a/nautobot/extras/tests/test_views.py
+++ b/nautobot/extras/tests/test_views.py
@@ -685,6 +685,7 @@ class ScheduledJobTestCase(
     ViewTestCases.GetObjectViewTestCase,
     ViewTestCases.ListObjectsViewTestCase,
     ViewTestCases.DeleteObjectViewTestCase,
+    ViewTestCases.BulkDeleteObjectsViewTestCase,
 ):
     model = ScheduledJob