From 2a513bbd28ee0519ceb9f0fb4f1d6c46580de74e Mon Sep 17 00:00:00 2001 From: Mathieu Edouard Date: Sat, 15 Mar 2025 19:43:04 +0000 Subject: [PATCH 1/3] Add licenses card to Devices view initial --- netbox_lifecycle/template_content.py | 7 +- .../netbox_lifecycle/inc/licenses_info.html | 70 +++++++++++++++++++ 2 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py index 44837c7..f5cd4ff 100644 --- a/netbox_lifecycle/template_content.py +++ b/netbox_lifecycle/template_content.py @@ -3,12 +3,13 @@ from django.template import Template from netbox.plugins import PluginTemplateExtension -from .models import hardware, contract +from .models import hardware, contract, license class DeviceHardwareInfoExtension(PluginTemplateExtension): def right_page(self): object = self.context.get('object') + licenses = license.LicenseAssignment.objects.filter(device_id=self.context['object'].id) support_contract = contract.SupportContractAssignment.objects.filter(device_id=self.context['object'].id).first() match self.kind: case "device": @@ -23,8 +24,8 @@ def right_page(self): content_type = ContentType.objects.get(app_label="dcim", model=self.kind) lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id, assigned_object_type_id=content_type.id).first() - context = {'support_contract': support_contract, 'lifecycle_info': lifecycle_info} - return self.render('netbox_lifecycle/inc/support_contract_info.html', extra_context=context) + context = {'licenses': licenses, 'support_contract': support_contract, 'lifecycle_info': lifecycle_info} + return self.render('netbox_lifecycle/inc/licenses_info.html', extra_context=context) class TypeInfoExtension(PluginTemplateExtension): diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html new file mode 100644 index 0000000..d1fec6c --- /dev/null +++ b/netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html @@ -0,0 +1,70 @@ + +{% load filters %} +{% load helpers %} +{# renders panel on object (device) with licenses assigned to it #} + +
+
+ Licenses + +
+ + + + + + + + + + + + {% if licenses %} + + {% for license in licenses %} + + + + + + + + + {% endfor %} + + {% else %} + + + + + + {% endif %} +
VendorManufacturerNameQuantityDescription
{{ license.vendor|linkify|placeholder }}{{ license.license.manufacturer|linkify|placeholder }}{{ license.license|linkify|placeholder }}{{ license.quantity|placeholder }}{{ license.description|placeholder }} + + + + + + Toggle Dropdown + + + +
— No License Assigned —
+
+ +{% include "netbox_lifecycle/inc/support_contract_info.html" %} From 322bc3e8aaecf9fe0e5f63321ebbdea4d8aca114 Mon Sep 17 00:00:00 2001 From: Mathieu Edouard Date: Sat, 15 Mar 2025 23:06:56 +0000 Subject: [PATCH 2/3] Limit maximum licenses displayed in card --- netbox_lifecycle/template_content.py | 6 ++++-- .../templates/netbox_lifecycle/inc/licenses_info.html | 9 ++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/netbox_lifecycle/template_content.py b/netbox_lifecycle/template_content.py index f5cd4ff..0660960 100644 --- a/netbox_lifecycle/template_content.py +++ b/netbox_lifecycle/template_content.py @@ -9,7 +9,8 @@ class DeviceHardwareInfoExtension(PluginTemplateExtension): def right_page(self): object = self.context.get('object') - licenses = license.LicenseAssignment.objects.filter(device_id=self.context['object'].id) + max_items_display = 5 + licenses = license.LicenseAssignment.objects.filter(device_id=self.context['object'].id)[:max_items_display] support_contract = contract.SupportContractAssignment.objects.filter(device_id=self.context['object'].id).first() match self.kind: case "device": @@ -24,7 +25,8 @@ def right_page(self): content_type = ContentType.objects.get(app_label="dcim", model=self.kind) lifecycle_info = hardware.HardwareLifecycle.objects.filter(assigned_object_id=self.context['object'].id, assigned_object_type_id=content_type.id).first() - context = {'licenses': licenses, 'support_contract': support_contract, 'lifecycle_info': lifecycle_info} + context = {'max_items_display': max_items_display, 'licenses': licenses, 'support_contract': support_contract, + 'lifecycle_info': lifecycle_info} return self.render('netbox_lifecycle/inc/licenses_info.html', extra_context=context) diff --git a/netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html b/netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html index d1fec6c..a1f57ca 100644 --- a/netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html +++ b/netbox_lifecycle/templates/netbox_lifecycle/inc/licenses_info.html @@ -37,7 +37,7 @@
- + Toggle Dropdown