mirror of
https://github.com/netbox-community/netbox.git
synced 2025-12-12 03:19:36 -06:00
20683 remove swap Circuit Terminations
This commit is contained in:
parent
be74436884
commit
9b064e678d
@ -18,11 +18,6 @@ urlpatterns = [
|
|||||||
path('circuit-types/<int:pk>/', include(get_model_urls('circuits', 'circuittype'))),
|
path('circuit-types/<int:pk>/', include(get_model_urls('circuits', 'circuittype'))),
|
||||||
|
|
||||||
path('circuits/', include(get_model_urls('circuits', 'circuit', detail=False))),
|
path('circuits/', include(get_model_urls('circuits', 'circuit', detail=False))),
|
||||||
path(
|
|
||||||
'circuits/<int:pk>/terminations/swap/',
|
|
||||||
views.CircuitSwapTerminations.as_view(),
|
|
||||||
name='circuit_terminations_swap'
|
|
||||||
),
|
|
||||||
path('circuits/<int:pk>/', include(get_model_urls('circuits', 'circuit'))),
|
path('circuits/<int:pk>/', include(get_model_urls('circuits', 'circuit'))),
|
||||||
|
|
||||||
path('circuit-terminations/', include(get_model_urls('circuits', 'circuittermination', detail=False))),
|
path('circuit-terminations/', include(get_model_urls('circuits', 'circuittermination', detail=False))),
|
||||||
|
|||||||
@ -1,13 +1,8 @@
|
|||||||
from django.contrib import messages
|
|
||||||
from django.db import router, transaction
|
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
from dcim.views import PathTraceView
|
from dcim.views import PathTraceView
|
||||||
from ipam.models import ASN
|
from ipam.models import ASN
|
||||||
from netbox.object_actions import AddObject, BulkDelete, BulkEdit, BulkExport, BulkImport
|
from netbox.object_actions import AddObject, BulkDelete, BulkEdit, BulkExport, BulkImport
|
||||||
from netbox.views import generic
|
from netbox.views import generic
|
||||||
from utilities.forms import ConfirmationForm
|
|
||||||
from utilities.query import count_related
|
from utilities.query import count_related
|
||||||
from utilities.views import GetRelatedModelsMixin, register_model_view
|
from utilities.views import GetRelatedModelsMixin, register_model_view
|
||||||
from . import filtersets, forms, tables
|
from . import filtersets, forms, tables
|
||||||
@ -373,82 +368,6 @@ class CircuitBulkDeleteView(generic.BulkDeleteView):
|
|||||||
table = tables.CircuitTable
|
table = tables.CircuitTable
|
||||||
|
|
||||||
|
|
||||||
class CircuitSwapTerminations(generic.ObjectEditView):
|
|
||||||
"""
|
|
||||||
Swap the A and Z terminations of a circuit.
|
|
||||||
"""
|
|
||||||
queryset = Circuit.objects.all()
|
|
||||||
|
|
||||||
def get(self, request, pk):
|
|
||||||
circuit = get_object_or_404(self.queryset, pk=pk)
|
|
||||||
form = ConfirmationForm()
|
|
||||||
|
|
||||||
# Circuit must have at least one termination to swap
|
|
||||||
if not circuit.termination_a and not circuit.termination_z:
|
|
||||||
messages.error(request, _(
|
|
||||||
"No terminations have been defined for circuit {circuit}."
|
|
||||||
).format(circuit=circuit))
|
|
||||||
return redirect('circuits:circuit', pk=circuit.pk)
|
|
||||||
|
|
||||||
return render(request, 'circuits/circuit_terminations_swap.html', {
|
|
||||||
'circuit': circuit,
|
|
||||||
'termination_a': circuit.termination_a,
|
|
||||||
'termination_z': circuit.termination_z,
|
|
||||||
'form': form,
|
|
||||||
'panel_class': 'light',
|
|
||||||
'button_class': 'primary',
|
|
||||||
'return_url': circuit.get_absolute_url(),
|
|
||||||
})
|
|
||||||
|
|
||||||
def post(self, request, pk):
|
|
||||||
circuit = get_object_or_404(self.queryset, pk=pk)
|
|
||||||
form = ConfirmationForm(request.POST)
|
|
||||||
|
|
||||||
if form.is_valid():
|
|
||||||
|
|
||||||
termination_a = CircuitTermination.objects.filter(pk=circuit.termination_a_id).first()
|
|
||||||
termination_z = CircuitTermination.objects.filter(pk=circuit.termination_z_id).first()
|
|
||||||
|
|
||||||
if termination_a and termination_z:
|
|
||||||
# Use a placeholder to avoid an IntegrityError on the (circuit, term_side) unique constraint
|
|
||||||
with transaction.atomic(using=router.db_for_write(CircuitTermination)):
|
|
||||||
termination_a.term_side = '_'
|
|
||||||
termination_a.save()
|
|
||||||
termination_z.term_side = 'A'
|
|
||||||
termination_z.save()
|
|
||||||
termination_a.term_side = 'Z'
|
|
||||||
termination_a.save()
|
|
||||||
circuit.refresh_from_db()
|
|
||||||
circuit.termination_a = termination_z
|
|
||||||
circuit.termination_z = termination_a
|
|
||||||
circuit.save()
|
|
||||||
elif termination_a:
|
|
||||||
termination_a.term_side = 'Z'
|
|
||||||
termination_a.save()
|
|
||||||
circuit.refresh_from_db()
|
|
||||||
circuit.termination_a = None
|
|
||||||
circuit.save()
|
|
||||||
else:
|
|
||||||
termination_z.term_side = 'A'
|
|
||||||
termination_z.save()
|
|
||||||
circuit.refresh_from_db()
|
|
||||||
circuit.termination_z = None
|
|
||||||
circuit.save()
|
|
||||||
|
|
||||||
messages.success(request, _("Swapped terminations for circuit {circuit}.").format(circuit=circuit))
|
|
||||||
return redirect('circuits:circuit', pk=circuit.pk)
|
|
||||||
|
|
||||||
return render(request, 'circuits/circuit_terminations_swap.html', {
|
|
||||||
'circuit': circuit,
|
|
||||||
'termination_a': circuit.termination_a,
|
|
||||||
'termination_z': circuit.termination_z,
|
|
||||||
'form': form,
|
|
||||||
'panel_class': 'default',
|
|
||||||
'button_class': 'primary',
|
|
||||||
'return_url': circuit.get_absolute_url(),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Circuit terminations
|
# Circuit terminations
|
||||||
#
|
#
|
||||||
|
|||||||
@ -14,9 +14,6 @@
|
|||||||
<a href="{% url 'circuits:circuittermination_edit' pk=termination.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-ghost-warning">
|
<a href="{% url 'circuits:circuittermination_edit' pk=termination.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-ghost-warning">
|
||||||
<span class="mdi mdi-pencil" aria-hidden="true"></span> {% trans "Edit" %}
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> {% trans "Edit" %}
|
||||||
</a>
|
</a>
|
||||||
<a href="{% url 'circuits:circuit_terminations_swap' pk=object.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-ghost-primary">
|
|
||||||
<span class="mdi mdi-swap-vertical" aria-hidden="true"></span> {% trans "Swap" %}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if termination and perms.circuits.delete_circuittermination %}
|
{% if termination and perms.circuits.delete_circuittermination %}
|
||||||
<a href="{% url 'circuits:circuittermination_delete' pk=termination.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-ghost-danger">
|
<a href="{% url 'circuits:circuittermination_delete' pk=termination.pk %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-ghost-danger">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user