From eed2e4a15bfb5c857e2115ff5a3b72b254be8ce4 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 16 Oct 2020 15:16:36 -0400 Subject: [PATCH] Convert device power outlets list to table --- netbox/dcim/tables/devices.py | 27 ++++++- netbox/dcim/tables/template_code.py | 10 +++ netbox/dcim/views.py | 5 +- netbox/templates/dcim/device.html | 28 +------ netbox/templates/dcim/inc/poweroutlet.html | 93 ---------------------- 5 files changed, 44 insertions(+), 119 deletions(-) delete mode 100644 netbox/templates/dcim/inc/poweroutlet.html diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 92d2be138..3c35ffd41 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -12,7 +12,7 @@ from utilities.tables import ( ) from .template_code import ( CABLETERMINATION, CONSOLEPORT_BUTTONS, CONSOLESERVERPORT_BUTTONS, DEVICE_LINK, INTERFACE_IPADDRESSES, - INTERFACE_TAGGED_VLANS, POWERPORT_BUTTONS, + INTERFACE_TAGGED_VLANS, POWEROUTLET_BUTTONS, POWERPORT_BUTTONS, ) __all__ = ( @@ -23,6 +23,7 @@ __all__ = ( 'DeviceConsoleServerPortTable', 'DeviceImportTable', 'DevicePowerPortTable', + 'DevicePowerOutletTable', 'DeviceRoleTable', 'DeviceTable', 'FrontPortTable', @@ -349,6 +350,30 @@ class PowerOutletTable(DeviceComponentTable, PathEndpointTable): default_columns = ('pk', 'device', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description') +class DevicePowerOutletTable(PowerOutletTable): + name = tables.TemplateColumn( + template_code=' {{ value }}' + ) + actions = ButtonsColumn( + model=PowerOutlet, + buttons=('edit', 'delete'), + prepend_template=POWEROUTLET_BUTTONS + ) + + class Meta(DeviceComponentTable.Meta): + model = PowerOutlet + fields = ( + 'pk', 'name', 'label', 'type', 'description', 'power_port', 'feed_leg', 'cable', 'cable_peer', 'connection', + 'tags', 'actions', + ) + default_columns = ( + 'pk', 'name', 'label', 'type', 'maximum_draw', 'power_port', 'feed_leg', 'cable', 'cable_peer', 'actions', + ) + row_attrs = { + 'class': lambda record: record.cable.get_status_class() if record.cable else '' + } + + class BaseInterfaceTable(BaseTable): enabled = BooleanColumn() ip_addresses = tables.TemplateColumn( diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 121b33bd3..b32d6264e 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -127,3 +127,13 @@ POWERPORT_BUTTONS = """ {% endif %} """ + +POWEROUTLET_BUTTONS = """ +{% if record.cable %} + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} +{% elif perms.dcim.add_cable %} + + + +{% endif %} +""" diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index aa00ad1ff..ed8652f5e 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1046,6 +1046,9 @@ class DeviceView(ObjectView): poweroutlets = PowerOutlet.objects.restrict(request.user, 'view').filter(device=device).prefetch_related( 'cable', 'power_port', '_path__destination', ) + poweroutlet_table = tables.DevicePowerOutletTable(poweroutlets, orderable=False) + if request.user.has_perm('dcim.change_poweroutlet') or request.user.has_perm('dcim.delete_poweroutlet'): + poweroutlet_table.columns.show('pk') # Interfaces interfaces = device.vc_interfaces.restrict(request.user, 'view').prefetch_related( @@ -1092,7 +1095,7 @@ class DeviceView(ObjectView): 'consoleport_table': consoleport_table, 'consoleserverport_table': consoleserverport_table, 'powerport_table': powerport_table, - 'poweroutlets': poweroutlets, + 'poweroutlet_table': poweroutlet_table, 'interfaces': interfaces, 'frontports': frontports, 'rearports': rearports, diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index d9c1e55b8..d1294ed5c 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -140,7 +140,7 @@ Power Ports {% badge powerport_table.rows|length %}
  • - Power Outlets {% badge poweroutlets|length %} + Power Outlets {% badge poweroutlet_table.rows|length %}
  • Device Bays {% badge devicebays|length %} @@ -780,29 +780,9 @@
    Power Outlets
    - - - - {% if perms.dcim.change_poweroutlet or perms.dcim.delete_poweroutlet %} - - {% endif %} - - - - - - - - - - - {% for po in poweroutlets %} - {% include 'dcim/inc/poweroutlet.html' %} - {% endfor %} - -
    NameTypeInput/LegDescriptionCableConnection
    + {% include 'responsive_table.html' with table=poweroutlet_table %}