2
0

circuit_termination.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. {% load helpers %}
  2. <div class="card">
  3. <div class="card-header">
  4. <div class="float-md-end">
  5. {% if not termination and perms.circuits.add_circuittermination %}
  6. <a href="{% url 'circuits:circuittermination_add' %}?circuit={{ object.pk }}&term_side={{ side }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-success lh-1">
  7. <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add
  8. </a>
  9. {% endif %}
  10. {% if termination and perms.circuits.change_circuittermination %}
  11. <a href="{% url 'circuits:circuittermination_edit' pk=termination.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-warning lh-1">
  12. <span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
  13. </a>
  14. <a href="{% url 'circuits:circuit_terminations_swap' pk=object.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary lh-1">
  15. <span class="mdi mdi-swap-vertical" aria-hidden="true"></span> Swap
  16. </a>
  17. {% endif %}
  18. {% if termination and perms.circuits.delete_circuittermination %}
  19. <a href="{% url 'circuits:circuittermination_delete' pk=termination.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-danger lh-1">
  20. <span class="mdi mdi-trash-can-outline" aria-hidden="true"></span> Delete
  21. </a>
  22. {% endif %}
  23. </div>
  24. <h5>Termination {{ side }}</h5>
  25. </div>
  26. <div class="card-body">
  27. {% if termination %}
  28. <table class="table table-hover attr-table">
  29. {% if termination.site %}
  30. <tr>
  31. <td>Site</td>
  32. <td>
  33. {% if termination.site.region %}
  34. {{ termination.site.region|linkify }} /
  35. {% endif %}
  36. {{ termination.site|linkify }}
  37. </td>
  38. </tr>
  39. <tr>
  40. <td>Termination</td>
  41. <td>
  42. {% if termination.mark_connected %}
  43. <span class="text-success"><i class="mdi mdi-check-bold"></i></span>
  44. <span class="text-muted">Marked as connected</span>
  45. {% elif termination.cable %}
  46. <a class="d-block d-md-inline" href="{{ termination.cable.get_absolute_url }}">{{ termination.cable }}</a> to
  47. {% for peer in termination.link_peers %}
  48. {% if peer.device %}
  49. {{ peer.device|linkify }}<br/>
  50. {% elif peer.circuit %}
  51. {{ peer.circuit|linkify }}<br/>
  52. {% endif %}
  53. {{ peer|linkify }}{% if not forloop.last %},{% endif %}
  54. {% endfor %}
  55. <div class="mt-1">
  56. <a href="{% url 'circuits:circuittermination_trace' pk=termination.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
  57. <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i> Trace
  58. </a>
  59. {% if perms.dcim.change_cable %}
  60. <a href="{% url 'dcim:cable_edit' pk=termination.cable.pk %}?return_url={{ termination.circuit.get_absolute_url }}" title="Edit cable" class="btn btn-warning btn-sm">
  61. <i class="mdi mdi-ethernet-cable" aria-hidden="true"></i> Edit
  62. </a>
  63. {% endif %}
  64. {% if perms.dcim.delete_cable %}
  65. <a href="{% url 'dcim:cable_delete' pk=termination.cable.pk %}?return_url={{ termination.circuit.get_absolute_url }}" title="Remove cable" class="btn btn-danger btn-sm lh-1">
  66. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i> Disconnect
  67. </a>
  68. {% endif %}
  69. </div>
  70. {% elif perms.dcim.add_cable %}
  71. <div class="dropdown">
  72. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  73. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span> Connect
  74. </button>
  75. <ul class="dropdown-menu">
  76. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=circuits.circuittermination&a_terminations={{ termination.pk }}&b_terminations_type=dcim.interface&termination_b_site={{ termination.site.pk }}&return_url={{ object.get_absolute_url }}">Interface</a></li>
  77. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=circuits.circuittermination&a_terminations={{ termination.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ termination.site.pk }}&return_url={{ object.get_absolute_url }}">Front Port</a></li>
  78. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=circuits.circuittermination&a_terminations={{ termination.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ termination.site.pk }}&return_url={{ object.get_absolute_url }}">Rear Port</a></li>
  79. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=circuits.circuittermination&a_terminations={{ termination.pk }}&b_terminations_type=circuits.circuittermination&termination_b_site={{ termination.site.pk }}&return_url={{ object.get_absolute_url }}">Circuit Termination</a></li>
  80. </ul>
  81. </div>
  82. {% endif %}
  83. </td>
  84. </tr>
  85. {% else %}
  86. <tr>
  87. <td>Provider Network</td>
  88. <td>{{ termination.provider_network.provider|linkify }} / {{ termination.provider_network|linkify }}</td>
  89. </tr>
  90. {% endif %}
  91. <tr>
  92. <td>Speed</td>
  93. <td>
  94. {% if termination.port_speed and termination.upstream_speed %}
  95. <i class="mdi mdi-arrow-down-bold" title="Downstream"></i> {{ termination.port_speed|humanize_speed }} &nbsp;
  96. <i class="mdi mdi-arrow-up-bold" title="Upstream"></i> {{ termination.upstream_speed|humanize_speed }}
  97. {% elif termination.port_speed %}
  98. {{ termination.port_speed|humanize_speed }}
  99. {% else %}
  100. {{ ''|placeholder }}
  101. {% endif %}
  102. </td>
  103. </tr>
  104. <tr>
  105. <td>Cross-Connect</td>
  106. <td>{{ termination.xconnect_id|placeholder }}</td>
  107. </tr>
  108. <tr>
  109. <td>Patch Panel/Port</td>
  110. <td>{{ termination.pp_info|placeholder }}</td>
  111. </tr>
  112. <tr>
  113. <td>Description</td>
  114. <td>{{ termination.description|placeholder }}</td>
  115. </tr>
  116. <tr>
  117. <td>Tags</td>
  118. <td>
  119. {% for tag in termination.tags.all %}
  120. {% tag tag %}
  121. {% empty %}
  122. {{ ''|placeholder }}
  123. {% endfor %}
  124. </td>
  125. </tr>
  126. {% for group_name, fields in termination.get_custom_fields_by_group.items %}
  127. <tr>
  128. <td colspan="2">
  129. <strong>{{ group_name|default:"Custom Fields" }}</strong>
  130. </td>
  131. </tr>
  132. {% for field, value in fields.items %}
  133. <tr>
  134. <td>
  135. <span title="{{ field.description|escape }}">{{ field }}</span>
  136. </td>
  137. <td>
  138. {% customfield_value field value %}
  139. </td>
  140. </tr>
  141. {% endfor %}
  142. {% endfor %}
  143. </table>
  144. {% else %}
  145. <span class="text-muted">None</span>
  146. {% endif %}
  147. </div>
  148. </div>