diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index b2426e928..c592ae06a 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -13,6 +13,7 @@ from utilities.forms.widgets import DatePicker, NumberWithOptions __all__ = ( 'CircuitFilterForm', + 'CircuitTerminationFilterForm', 'CircuitTypeFilterForm', 'ProviderFilterForm', 'ProviderAccountFilterForm', @@ -186,3 +187,11 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi ) ) tag = TagFilterField(model) + + +class CircuitTerminationFilterForm(NetBoxModelFilterSetForm): + model = CircuitTermination + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + ) + tag = TagFilterField(model) diff --git a/netbox/circuits/tables/circuits.py b/netbox/circuits/tables/circuits.py index 6ae727eca..b7c308269 100644 --- a/netbox/circuits/tables/circuits.py +++ b/netbox/circuits/tables/circuits.py @@ -10,6 +10,7 @@ from .columns import CommitRateColumn __all__ = ( 'CircuitTable', + 'CircuitTerminationTable', 'CircuitTypeTable', ) @@ -88,3 +89,13 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): default_columns = ( 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description', ) + + +class CircuitTerminationTable(NetBoxTable): + + class Meta(NetBoxTable.Meta): + model = CircuitTermination + fields = ( + 'pk', 'id', 'circuit', 'term_side', 'created', 'last_updated', 'actions', + ) + default_columns = ('pk', 'id', 'circuit', 'term_side') diff --git a/netbox/circuits/urls.py b/netbox/circuits/urls.py index 55a192c64..45eaa385e 100644 --- a/netbox/circuits/urls.py +++ b/netbox/circuits/urls.py @@ -48,6 +48,7 @@ urlpatterns = [ path('circuits//', include(get_model_urls('circuits', 'circuit'))), # Circuit terminations + path('circuit-terminations/', views.CircuitTerminationListView.as_view(), name='circuittermination_list'), path('circuit-terminations/add/', views.CircuitTerminationEditView.as_view(), name='circuittermination_add'), path('circuit-terminations//', include(get_model_urls('circuits', 'circuittermination'))), diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 54f875975..7caaa3050 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -408,6 +408,18 @@ class CircuitContactsView(ObjectContactsView): # Circuit terminations # +class CircuitTerminationListView(generic.ObjectListView): + queryset = CircuitTermination.objects.all() + filterset = filtersets.CircuitTerminationFilterSet + filterset_form = forms.CircuitTerminationFilterForm + table = tables.CircuitTerminationTable + + +@register_model_view(CircuitTermination) +class CircuitTerminationView(generic.ObjectView): + queryset = CircuitTermination.objects.all() + + @register_model_view(CircuitTermination, 'edit') class CircuitTerminationEditView(generic.ObjectEditView): queryset = CircuitTermination.objects.all() diff --git a/netbox/netbox/navigation/menu.py b/netbox/netbox/navigation/menu.py index 4fe16e773..e38b3e92e 100644 --- a/netbox/netbox/navigation/menu.py +++ b/netbox/netbox/navigation/menu.py @@ -258,6 +258,7 @@ CIRCUITS_MENU = Menu( items=( get_model_item('circuits', 'circuit', _('Circuits')), get_model_item('circuits', 'circuittype', _('Circuit Types')), + get_model_item('circuits', 'circuittermination', _('Circuit Terminations'), actions=['add']), ), ), MenuGroup(