Browse Source

Convert device inventory items list to table

Jeremy Stretch 5 years ago
parent
commit
82c6fb6e19

+ 21 - 0
netbox/dcim/tables/devices.py

@@ -26,6 +26,7 @@ __all__ = (
     'DeviceFrontPortTable',
     'DeviceImportTable',
     'DeviceInterfaceTable',
+    'DeviceInventoryItemTable',
     'DevicePowerPortTable',
     'DevicePowerOutletTable',
     'DeviceRearPortTable',
@@ -566,6 +567,26 @@ class InventoryItemTable(DeviceComponentTable):
         default_columns = ('pk', 'device', 'name', 'label', 'manufacturer', 'part_id', 'serial', 'asset_tag')
 
 
+class DeviceInventoryItemTable(DeviceBayTable):
+    name = tables.TemplateColumn(
+        template_code='<a href="{{ record.get_absolute_url }}" style="padding-left: {{ record.level }}0px">'
+                      '{{ value }}</a>'
+    )
+    actions = ButtonsColumn(
+        model=InventoryItem,
+        buttons=('edit', 'delete')
+    )
+
+    class Meta(DeviceComponentTable.Meta):
+        model = InventoryItem
+        fields = (
+            'pk', 'name', 'label', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'description', 'tags', 'actions',
+        )
+        default_columns = (
+            'pk', 'name', 'label', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'description', 'actions',
+        )
+
+
 #
 # Virtual chassis
 #

+ 4 - 1
netbox/dcim/views.py

@@ -1086,6 +1086,9 @@ class DeviceView(ObjectView):
         inventoryitems = InventoryItem.objects.restrict(request.user, 'view').filter(
             device=device
         ).prefetch_related('manufacturer')
+        inventoryitem_table = tables.DeviceInventoryItemTable(inventoryitems, orderable=False)
+        if request.user.has_perm('dcim.change_inventoryitem') or request.user.has_perm('dcim.delete_inventoryitem'):
+            devicebay_table.columns.show('pk')
 
         # Services
         services = Service.objects.restrict(request.user, 'view').filter(device=device)
@@ -1112,7 +1115,7 @@ class DeviceView(ObjectView):
             'frontport_table': frontport_table,
             'rearport_table': rearport_table,
             'devicebay_table': devicebay_table,
-            'inventoryitems': inventoryitems,
+            'inventoryitem_table': inventoryitem_table,
             'services': services,
             'secrets': secrets,
             'vc_members': vc_members,

+ 3 - 23
netbox/templates/dcim/device.html

@@ -146,7 +146,7 @@
                     <a href="#devicebays" role="tab" data-toggle="tab">Device Bays {% badge devicebay_table.rows|length %}</a>
                 </li>
                 <li role="presentation">
-                    <a href="#inventoryitems" role="tab" data-toggle="tab">Inventory {% badge inventoryitems|length %}</a>
+                    <a href="#inventoryitems" role="tab" data-toggle="tab">Inventory {% badge inventoryitem_table.rows|length %}</a>
                 </li>
             </ul>
             <div class="tab-content">
@@ -785,28 +785,7 @@
                             <div class="panel-heading">
                                 <strong>Inventory Items</strong>
                             </div>
-                            <table class="table table-hover table-condensed panel-body" id="hardware">
-                                <thead>
-                                    <tr>
-                                        {% if perms.dcim.change_inventoryitem or perms.dcim.delete_inventoryitem %}
-                                            <th class="pk"><input type="checkbox" class="toggle" title="Toggle all" /></th>
-                                        {% endif %}
-                                        <th>Name</th>
-                                        <th>Manufacturer</th>
-                                        <th>Part ID</th>
-                                        <th>Serial Number</th>
-                                        <th>Asset Tag</th>
-                                        <th>Discovered</th>
-                                        <th>Description</th>
-                                        <th></th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                    {% for item in inventoryitems %}
-                                        {% include 'dcim/inc/inventoryitem.html' %}
-                                    {% endfor %}
-                                </tbody>
-                            </table>
+                            {% include 'responsive_table.html' with table=inventoryitem_table %}
                             <div class="panel-footer noprint">
                                 {% if inventoryitems and perms.dcim.change_inventoryitem %}
                                     <button type="submit" name="_rename" formaction="{% url 'dcim:inventoryitem_bulk_rename' %}?return_url={{ device.get_absolute_url }}" class="btn btn-warning btn-xs">
@@ -828,6 +807,7 @@
                                         </a>
                                     </div>
                                 {% endif %}
+                                <div class="clearfix"></div>
                             </div>
                         </div>
                     </form>

+ 0 - 40
netbox/templates/dcim/inc/inventoryitem.html

@@ -1,40 +0,0 @@
-{% load helpers %}
-<tr>
-
-    {# Checkbox #}
-    {% if perms.dcim.change_inventoryitem or perms.dcim.delete_inventoryitem %}
-        <td class="pk">
-            <input name="pk" type="checkbox" value="{{ item.pk }}" />
-        </td>
-    {% endif %}
-
-    <td style="padding-left: {{ item.level }}0px">
-        <a href="{{ item.get_absolute_url }}">{{ item }}</a>
-    </td>
-    <td>
-        {% if item.manufacturer %}
-            <a href="{{ item.manufacturer.get_absolute_url }}">{{ item.manufacturer }}</a>
-        {% else %}
-            <span class="text-muted">&mdash;</span>
-        {% endif %}
-    </td>
-    <td>{{ item.part_id|placeholder }}</td>
-    <td>{{ item.serial|placeholder }}</td>
-    <td>{{ item.asset_tag|placeholder }}</td>
-    <td>
-        {% if item.discovered %}
-            <span class="text-success"><i class="fa fa-check"></i></span>
-        {% else %}
-            <span class="text-muted">&mdash;</span>
-        {% endif %}
-    </td>
-    <td>{{ item.description|placeholder }}</td>
-    <td class="text-right noprint">
-        {% if perms.dcim.change_inventoryitem %}
-            <a href="{% url 'dcim:inventoryitem_edit' pk=item.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-xs btn-warning"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
-        {% endif %}
-        {% if perms.dcim.delete_inventoryitem %}
-            <a href="{% url 'dcim:inventoryitem_delete' pk=item.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
-        {% endif %}
-    </td>
-</tr>