1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Extend Cable model to support multiple A/B terminations

This commit is contained in:
jeremystretch
2022-04-25 17:10:15 -04:00
parent 6c290353c1
commit 4bb9b6ee26
16 changed files with 368 additions and 283 deletions

View File

@@ -5,85 +5,79 @@
{% load plugins %}
{% block content %}
<div class="row">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Cable
</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Type</th>
<td>{{ object.get_type_display|placeholder }}</td>
</tr>
<tr>
<th scope="row">Status</th>
<td>{% badge object.get_status_display bg_color=object.get_status_color %}</td>
</tr>
<tr>
<th scope="row">Tenant</th>
<td>
{% if object.tenant.group %}
{{ object.tenant.group|linkify }} /
{% endif %}
{{ object.tenant|linkify|placeholder }}
</td>
</tr>
<tr>
<th scope="row">Label</th>
<td>{{ object.label|placeholder }}</td>
</tr>
<tr>
<th scope="row">Color</th>
<td>
{% if object.color %}
<span class="color-label" style="background-color: #{{ object.color }}">&nbsp;</span>
{% else %}
<span class="text-muted">&mdash;</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Length</th>
<td>
{% if object.length %}
{{ object.length|floatformat }} {{ object.get_length_unit_display }}
{% else %}
<span class="text-muted">&mdash;</span>
{% endif %}
</td>
</tr>
</table>
</div>
</div>
{% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/tags.html' %}
{% plugin_left_page object %}
</div>
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Termination A
</h5>
<div class="card-body">
{% include 'dcim/inc/cable_termination.html' with termination=object.termination_a %}
</div>
</div>
<div class="card">
<h5 class="card-header">
Termination B
</h5>
<div class="card-body">
{% include 'dcim/inc/cable_termination.html' with termination=object.termination_b %}
</div>
</div>
{% plugin_right_page object %}
<div class="row">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">Cable</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Type</th>
<td>{{ object.get_type_display|placeholder }}</td>
</tr>
<tr>
<th scope="row">Status</th>
<td>{% badge object.get_status_display bg_color=object.get_status_color %}</td>
</tr>
<tr>
<th scope="row">Tenant</th>
<td>
{% if object.tenant.group %}
{{ object.tenant.group|linkify }} /
{% endif %}
{{ object.tenant|linkify|placeholder }}
</td>
</tr>
<tr>
<th scope="row">Label</th>
<td>{{ object.label|placeholder }}</td>
</tr>
<tr>
<th scope="row">Color</th>
<td>
{% if object.color %}
<span class="color-label" style="background-color: #{{ object.color }}">&nbsp;</span>
{% else %}
<span class="text-muted">&mdash;</span>
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Length</th>
<td>
{% if object.length %}
{{ object.length|floatformat }} {{ object.get_length_unit_display }}
{% else %}
<span class="text-muted">&mdash;</span>
{% endif %}
</td>
</tr>
</table>
</div>
</div>
{% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/tags.html' %}
{% plugin_left_page object %}
</div>
<div class="row">
<div class="col col-md-12">
{% plugin_full_width_page object %}
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">Termination A</h5>
<div class="card-body">
{% include 'dcim/inc/cable_termination.html' with termination=object.termination_a %}
</div>
</div>
<div class="card">
<h5 class="card-header">Termination B</h5>
<div class="card-body">
{% include 'dcim/inc/cable_termination.html' with termination=object.termination_b %}
</div>
</div>
{% plugin_right_page object %}
</div>
</div>
<div class="row">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>
{% endblock %}

View File

@@ -3,7 +3,7 @@
{% load helpers %}
{% load form_helpers %}
{% block title %}Connect {{ form.instance.termination_a.device }} {{ form.instance.termination_a }} to {{ termination_b_type|bettertitle }}{% endblock %}
{% block title %}Connect Cable to {{ termination_b_type|bettertitle }}{% endblock %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
@@ -15,7 +15,7 @@
{% block content-wrapper %}
<div class="tab-content">
{% with termination_a=form.instance.termination_a %}
{% with termination_a=form.instance.termination_a.0 %}
{% render_errors form %}
<form method="post">
{% csrf_token %}
@@ -92,7 +92,7 @@
</div>
</div>
{% endif %}
{% render_field form.termination_a_id %}
{% render_field form.termination_a_ids %}
</div>
</div>
</div>
@@ -148,7 +148,7 @@
<input class="form-control" value="{{ termination_b_type|capfirst }}" disabled />
</div>
</div>
{% render_field form.termination_b_id %}
{% render_field form.termination_b_ids %}
</div>
</div>
</div>

View File

@@ -1,42 +1,46 @@
{% load helpers %}
<table class="table table-hover panel-body attr-table">
{% if termination.device %}
{# Device component #}
<tr>
<td>Device</td>
<td>{{ termination.device|linkify }}</td>
</tr>
<tr>
<td>Site</td>
<td>{{ termination.device.site|linkify }}</td>
</tr>
{% if termination.device.rack %}
<tr>
<td>Rack</td>
<td>{{ termination.device.rack|linkify }}</td>
</tr>
{% endif %}
<tr>
<td>Type</td>
<td>{{ termination|meta:"verbose_name"|capfirst }}</td>
</tr>
<tr>
<td>Component</td>
<td>{{ termination|linkify }}</td>
</tr>
{% else %}
{# Circuit termination #}
<tr>
<td>Provider</td>
<td>{{ termination.circuit.provider|linkify }}</td>
</tr>
<tr>
<td>Circuit</td>
<td>{{ termination.circuit|linkify }}</td>
</tr>
<tr>
<td>Termination</td>
<td>{{ termination }}</td>
</tr>
{% if termination.0.device %}
{# Device component #}
<tr>
<td>Device</td>
<td>{{ termination.0.device|linkify }}</td>
</tr>
<tr>
<td>Site</td>
<td>{{ termination.0.device.site|linkify }}</td>
</tr>
{% if termination.0.device.rack %}
<tr>
<td>Rack</td>
<td>{{ termination.0.device.rack|linkify }}</td>
</tr>
{% endif %}
<tr>
<td>Type</td>
<td>{{ termination.0|meta:"verbose_name"|capfirst }}</td>
</tr>
<tr>
<td>Component(s)</td>
<td>
{% for term in termination %}
{{ term|linkify }}{% if not forloop.last %},{% endif %}
{% endfor %}
</td>
</tr>
{% else %}
{# Circuit termination #}
<tr>
<td>Provider</td>
<td>{{ termination.0.circuit.provider|linkify }}</td>
</tr>
<tr>
<td>Circuit</td>
<td>
{% for term in termination %}
{{ term.circuit|linkify }} ({{ term }}){% if not forloop.last %},{% endif %}
{% endfor %}
</td>
</tr>
{% endif %}
</table>