Convert device inventory items list to table

This commit is contained in:
Jeremy Stretch 2020-10-16 16:00:25 -04:00
parent 7c1316619b
commit 82c6fb6e19
4 changed files with 28 additions and 64 deletions

View File

@ -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
#

View File

@ -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,

View File

@ -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>

View File

@ -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>