diff --git a/docs/release-notes/version-3.4.md b/docs/release-notes/version-3.4.md index 19860872a..36ed48a6a 100644 --- a/docs/release-notes/version-3.4.md +++ b/docs/release-notes/version-3.4.md @@ -130,6 +130,8 @@ This release introduces a new programmatic API that enables plugins and custom s * Renamed `content_type` field to `content_types` * extras.ExportTemplate * Renamed `content_type` field to `content_types` +* extras.JobResult + * Added the `scheduled` field * ipam.Aggregate * Added a `comments` field * ipam.ASN diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index 921720dea..dfca997d8 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -385,7 +385,8 @@ class JobResultSerializer(BaseModelSerializer): class Meta: model = JobResult fields = [ - 'id', 'url', 'display', 'created', 'completed', 'scheduled_time', 'name', 'obj_type', 'status', 'user', 'data', 'job_id', + 'id', 'url', 'display', 'status', 'created', 'scheduled', 'completed', 'name', 'obj_type', 'user', 'data', + 'job_id', ] diff --git a/netbox/extras/filtersets.py b/netbox/extras/filtersets.py index 8ed68e850..9609f45db 100644 --- a/netbox/extras/filtersets.py +++ b/netbox/extras/filtersets.py @@ -512,13 +512,13 @@ class JobResultFilterSet(BaseFilterSet): field_name='completed', lookup_expr='gte' ) - scheduled_time = django_filters.DateTimeFilter() - scheduled_time__before = django_filters.DateTimeFilter( - field_name='scheduled_time', + scheduled = django_filters.DateTimeFilter() + scheduled__before = django_filters.DateTimeFilter( + field_name='scheduled', lookup_expr='lte' ) - scheduled_time__after = django_filters.DateTimeFilter( - field_name='scheduled_time', + scheduled__after = django_filters.DateTimeFilter( + field_name='scheduled', lookup_expr='gte' ) status = django_filters.MultipleChoiceFilter( @@ -529,7 +529,7 @@ class JobResultFilterSet(BaseFilterSet): class Meta: model = JobResult fields = [ - 'id', 'created', 'completed', 'scheduled_time', 'status', 'user', 'obj_type', 'name' + 'id', 'status', 'created', 'scheduled', 'completed', 'user', 'obj_type', 'name' ] def search(self, queryset, name, value): diff --git a/netbox/extras/forms/filtersets.py b/netbox/extras/forms/filtersets.py index d63378f62..4464c227f 100644 --- a/netbox/extras/forms/filtersets.py +++ b/netbox/extras/forms/filtersets.py @@ -72,8 +72,10 @@ class JobResultFilterForm(SavedFiltersMixin, FilterForm): fieldsets = ( (None, ('q', 'filter_id')), ('Attributes', ('obj_type', 'status')), - ('Creation', ('created__before', 'created__after', 'completed__before', 'completed__after', - 'scheduled_time__before', 'scheduled_time__after', 'user')), + ('Creation', ( + 'created__before', 'created__after', 'completed__before', 'completed__after', 'scheduled__before', + 'scheduled__after', 'user', + )), ) obj_type = ContentTypeChoiceField( @@ -102,11 +104,11 @@ class JobResultFilterForm(SavedFiltersMixin, FilterForm): required=False, widget=DateTimePicker() ) - scheduled_time__after = forms.DateTimeField( + scheduled__after = forms.DateTimeField( required=False, widget=DateTimePicker() ) - scheduled_time__before = forms.DateTimeField( + scheduled__before = forms.DateTimeField( required=False, widget=DateTimePicker() ) diff --git a/netbox/extras/migrations/0079_jobresult_scheduled_time.py b/netbox/extras/migrations/0079_jobresult_scheduled.py similarity index 92% rename from netbox/extras/migrations/0079_jobresult_scheduled_time.py rename to netbox/extras/migrations/0079_jobresult_scheduled.py index c9646f13c..b970042c2 100644 --- a/netbox/extras/migrations/0079_jobresult_scheduled_time.py +++ b/netbox/extras/migrations/0079_jobresult_scheduled.py @@ -10,7 +10,7 @@ class Migration(migrations.Migration): operations = [ migrations.AddField( model_name='jobresult', - name='scheduled_time', + name='scheduled', field=models.DateTimeField(blank=True, null=True), ), migrations.AlterModelOptions( diff --git a/netbox/extras/migrations/0080_customlink_content_types.py b/netbox/extras/migrations/0080_customlink_content_types.py index 91fe453c3..539db3f0f 100644 --- a/netbox/extras/migrations/0080_customlink_content_types.py +++ b/netbox/extras/migrations/0080_customlink_content_types.py @@ -12,7 +12,7 @@ class Migration(migrations.Migration): dependencies = [ ('contenttypes', '0002_remove_content_type_name'), - ('extras', '0079_jobresult_scheduled_time'), + ('extras', '0079_jobresult_scheduled'), ] operations = [ diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index fa6bb3ab9..9f99d37ff 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -581,11 +581,11 @@ class JobResult(models.Model): created = models.DateTimeField( auto_now_add=True ) - completed = models.DateTimeField( + scheduled = models.DateTimeField( null=True, blank=True ) - scheduled_time = models.DateTimeField( + completed = models.DateTimeField( null=True, blank=True ) @@ -672,7 +672,7 @@ class JobResult(models.Model): if schedule_at: job_result.status = JobResultStatusChoices.STATUS_SCHEDULED - job_result.scheduled_time = schedule_at + job_result.scheduled = schedule_at job_result.save() queue.enqueue_at(schedule_at, func, job_id=str(job_result.job_id), job_result=job_result, **kwargs) diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 172fbfbf9..d918bdf5a 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -49,9 +49,9 @@ class JobResultTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = JobResult fields = ( - 'pk', 'id', 'name', 'obj_type', 'job_id', 'created', 'completed', 'scheduled_time', 'user', 'status', + 'pk', 'id', 'name', 'obj_type', 'status', 'created', 'scheduled', 'completed', 'user', 'job_id', ) - default_columns = ('pk', 'id', 'name', 'obj_type', 'status', 'created', 'completed', 'user',) + default_columns = ('pk', 'id', 'name', 'obj_type', 'status', 'created', 'scheduled', 'completed', 'user',) class CustomLinkTable(NetBoxTable): diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 283d37465..fec82a13b 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -673,7 +673,6 @@ class ReportView(ContentTypePermissionRequiredMixin, View): if report is None: raise Http404 - schedule_at = None form = ReportForm(request.POST) if form.is_valid(): diff --git a/netbox/templates/extras/htmx/report_result.html b/netbox/templates/extras/htmx/report_result.html index a51b2663d..cfa8b2523 100644 --- a/netbox/templates/extras/htmx/report_result.html +++ b/netbox/templates/extras/htmx/report_result.html @@ -2,8 +2,8 @@
Initiated: {{ result.created|annotated_date }} - {% if result.scheduled_time %} - Scheduled for: {{ result.scheduled_time|annotated_date }} + {% if result.scheduled %} + Scheduled for: {{ result.scheduled|annotated_date }} {% endif %} {% if result.completed %} Duration: {{ result.duration }} diff --git a/netbox/templates/extras/htmx/script_result.html b/netbox/templates/extras/htmx/script_result.html index d2af99c9b..ca658fa2e 100644 --- a/netbox/templates/extras/htmx/script_result.html +++ b/netbox/templates/extras/htmx/script_result.html @@ -3,8 +3,8 @@
Initiated: {{ result.created|annotated_date }} - {% if result.scheduled_time %} - Scheduled for: {{ result.scheduled_time|annotated_date }} + {% if result.scheduled %} + Scheduled for: {{ result.scheduled|annotated_date }} {% endif %} {% if result.completed %} Duration: {{ result.duration }}