Parcourir la source

Added CBVs for CircuitTypes

Jeremy Stretch il y a 9 ans
Parent
commit
558fb60c50

+ 15 - 0
netbox/circuits/forms.py

@@ -58,6 +58,21 @@ class ProviderBulkDeleteForm(ConfirmationForm):
 
 
 
 
 #
 #
+# Circuit types
+#
+
+class CircuitTypeForm(forms.ModelForm, BootstrapMixin):
+
+    class Meta:
+        model = CircuitType
+        fields = ['name', 'slug']
+
+
+class CircuitTypeBulkDeleteForm(ConfirmationForm):
+    pk = forms.ModelMultipleChoiceField(queryset=CircuitType.objects.all(), widget=forms.MultipleHiddenInput)
+
+
+#
 # Circuits
 # Circuits
 #
 #
 
 

+ 3 - 0
netbox/circuits/models.py

@@ -58,6 +58,9 @@ class CircuitType(models.Model):
     def __unicode__(self):
     def __unicode__(self):
         return self.name
         return self.name
 
 
+    def get_absolute_url(self):
+        return "{}?type={}".format(reverse('circuits:circuit_list'), self.slug)
+
 
 
 class Circuit(models.Model):
 class Circuit(models.Model):
     """
     """

+ 26 - 1
netbox/circuits/tables.py

@@ -1,7 +1,12 @@
 import django_tables2 as tables
 import django_tables2 as tables
 from django_tables2.utils import Accessor
 from django_tables2.utils import Accessor
 
 
-from .models import Circuit, Provider
+from .models import Circuit, CircuitType, Provider
+
+
+CIRCUITTYPE_EDIT_LINK = """
+{% if perms.circuit.change_circuittype %}<a href="{% url 'circuits:circuittype_edit' slug=record.slug %}">Edit</a>{% endif %}
+"""
 
 
 
 
 #
 #
@@ -24,6 +29,26 @@ class ProviderTable(tables.Table):
 
 
 
 
 #
 #
+# Circuit types
+#
+
+class CircuitTypeTable(tables.Table):
+    pk = tables.CheckBoxColumn(visible=False, default='')
+    name = tables.LinkColumn(verbose_name='Name')
+    circuit_count = tables.Column(verbose_name='Circuits')
+    slug = tables.Column(verbose_name='Slug')
+    edit = tables.TemplateColumn(template_code=CIRCUITTYPE_EDIT_LINK, verbose_name='')
+
+    class Meta:
+        model = CircuitType
+        fields = ('pk', 'name', 'circuit_count', 'slug', 'edit')
+        empty_text = "No circuit types found."
+        attrs = {
+            'class': 'table table-hover',
+        }
+
+
+#
 # Circuits
 # Circuits
 #
 #
 
 

+ 18 - 8
netbox/circuits/urls.py

@@ -3,15 +3,8 @@ from django.conf.urls import url
 from . import views
 from . import views
 
 
 urlpatterns = [
 urlpatterns = [
-    url(r'^circuits/$', views.CircuitListView.as_view(), name='circuit_list'),
-    url(r'^circuits/add/$', views.CircuitAddView.as_view(), name='circuit_add'),
-    url(r'^circuits/import/$', views.CircuitBulkImportView.as_view(), name='circuit_import'),
-    url(r'^circuits/edit/$', views.CircuitBulkEditView.as_view(), name='circuit_bulk_edit'),
-    url(r'^circuits/delete/$', views.CircuitBulkDeleteView.as_view(), name='circuit_bulk_delete'),
-    url(r'^circuits/(?P<pk>\d+)/$', views.circuit, name='circuit'),
-    url(r'^circuits/(?P<pk>\d+)/edit/$', views.CircuitEditView.as_view(), name='circuit_edit'),
-    url(r'^circuits/(?P<pk>\d+)/delete/$', views.CircuitDeleteView.as_view(), name='circuit_delete'),
 
 
+    # Providers
     url(r'^providers/$', views.ProviderListView.as_view(), name='provider_list'),
     url(r'^providers/$', views.ProviderListView.as_view(), name='provider_list'),
     url(r'^providers/add/$', views.ProviderAddView.as_view(), name='provider_add'),
     url(r'^providers/add/$', views.ProviderAddView.as_view(), name='provider_add'),
     url(r'^providers/import/$', views.ProviderBulkImportView.as_view(), name='provider_import'),
     url(r'^providers/import/$', views.ProviderBulkImportView.as_view(), name='provider_import'),
@@ -20,4 +13,21 @@ urlpatterns = [
     url(r'^providers/(?P<slug>[\w-]+)/$', views.provider, name='provider'),
     url(r'^providers/(?P<slug>[\w-]+)/$', views.provider, name='provider'),
     url(r'^providers/(?P<slug>[\w-]+)/edit/$', views.ProviderEditView.as_view(), name='provider_edit'),
     url(r'^providers/(?P<slug>[\w-]+)/edit/$', views.ProviderEditView.as_view(), name='provider_edit'),
     url(r'^providers/(?P<slug>[\w-]+)/delete/$', views.ProviderDeleteView.as_view(), name='provider_delete'),
     url(r'^providers/(?P<slug>[\w-]+)/delete/$', views.ProviderDeleteView.as_view(), name='provider_delete'),
+
+    # Circuit types
+    url(r'^circuit-types/$', views.CircuitTypeListView.as_view(), name='circuittype_list'),
+    url(r'^circuit-types/add/$', views.CircuitTypeAddView.as_view(), name='circuittype_add'),
+    url(r'^circuit-types/delete/$', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'),
+    url(r'^circuit-types/(?P<slug>[\w-]+)/edit/$', views.CircuitTypeEditView.as_view(), name='circuittype_edit'),
+
+    # Circuits
+    url(r'^circuits/$', views.CircuitListView.as_view(), name='circuit_list'),
+    url(r'^circuits/add/$', views.CircuitAddView.as_view(), name='circuit_add'),
+    url(r'^circuits/import/$', views.CircuitBulkImportView.as_view(), name='circuit_import'),
+    url(r'^circuits/edit/$', views.CircuitBulkEditView.as_view(), name='circuit_bulk_edit'),
+    url(r'^circuits/delete/$', views.CircuitBulkDeleteView.as_view(), name='circuit_bulk_delete'),
+    url(r'^circuits/(?P<pk>\d+)/$', views.circuit, name='circuit'),
+    url(r'^circuits/(?P<pk>\d+)/edit/$', views.CircuitEditView.as_view(), name='circuit_edit'),
+    url(r'^circuits/(?P<pk>\d+)/delete/$', views.CircuitDeleteView.as_view(), name='circuit_delete'),
+
 ]
 ]

+ 37 - 4
netbox/circuits/views.py

@@ -7,10 +7,11 @@ from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, Object
     ObjectEditView, ObjectDeleteView
     ObjectEditView, ObjectDeleteView
 
 
 from .filters import CircuitFilter
 from .filters import CircuitFilter
-from .forms import CircuitForm, CircuitImportForm, CircuitBulkEditForm, CircuitBulkDeleteForm, CircuitFilterForm,\
-    ProviderForm, ProviderImportForm, ProviderBulkEditForm, ProviderBulkDeleteForm
-from .models import Circuit, Provider
-from .tables import CircuitTable, ProviderTable
+from .forms import CircuitTypeForm, CircuitTypeBulkDeleteForm, CircuitForm, CircuitImportForm, CircuitBulkEditForm,\
+    CircuitBulkDeleteForm, CircuitFilterForm, ProviderForm, ProviderImportForm, ProviderBulkEditForm,\
+    ProviderBulkDeleteForm
+from .models import Circuit, CircuitType, Provider
+from .tables import CircuitTable, CircuitTypeTable, ProviderTable
 
 
 
 
 #
 #
@@ -90,6 +91,38 @@ class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 
 
 
 
 #
 #
+# Circuit Types
+#
+
+class CircuitTypeListView(ObjectListView):
+    queryset = CircuitType.objects.annotate(circuit_count=Count('circuits'))
+    table = CircuitTypeTable
+    edit_permissions = ['circuits.change_circuittype', 'circuits.delete_circuittype']
+    template_name = 'circuits/circuittype_list.html'
+
+
+class CircuitTypeAddView(PermissionRequiredMixin, ObjectAddView):
+    permission_required = 'circuits.add_circuittype'
+    model = CircuitType
+    form_class = CircuitTypeForm
+    cancel_url = 'circuits:circuittype_list'
+
+
+class CircuitTypeEditView(PermissionRequiredMixin, ObjectEditView):
+    permission_required = 'circuits.change_circuittype'
+    model = CircuitType
+    form_class = CircuitTypeForm
+    return_url = 'circuits:circuittype_list'
+
+
+class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
+    permission_required = 'circuits.delete_circuittype'
+    cls = CircuitType
+    form = CircuitTypeBulkDeleteForm
+    default_redirect_url = 'circuits:circuittype_list'
+
+
+#
 # Circuits
 # Circuits
 #
 #
 
 

+ 7 - 0
netbox/templates/_base.html

@@ -149,6 +149,13 @@
                                 <li><a href="{% url 'circuits:circuit_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a Circuit</a></li>
                                 <li><a href="{% url 'circuits:circuit_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a Circuit</a></li>
                                 <li><a href="{% url 'circuits:circuit_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import Circuits</a></li>
                                 <li><a href="{% url 'circuits:circuit_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import Circuits</a></li>
                             {% endif %}
                             {% endif %}
+                            {% if perms.circuits.add_circuit or perms.circuits.add_circuittype %}
+                                <li class="divider"></li>
+                            {% endif %}
+                            <li><a href="{% url 'circuits:circuittype_list' %}"><i class="glyphicon glyphicon-search" aria-hidden="true"></i> Circuit Types</a></li>
+                            {% if perms.circuits.add_circuittype %}
+                                <li><a href="{% url 'circuits:circuittype_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a Circuit Type</a></li>
+                            {% endif %}
                         </ul>
                         </ul>
                     </li>
                     </li>
                     {% if request.user.is_authenticated %}
                     {% if request.user.is_authenticated %}

+ 21 - 0
netbox/templates/circuits/circuittype_list.html

@@ -0,0 +1,21 @@
+{% extends '_base.html' %}
+{% load helpers %}
+
+{% block title %}Circuit Types{% endblock %}
+
+{% block content %}
+<div class="pull-right">
+    {% if perms.circuits.add_circuittype %}
+        <a href="{% url 'circuits:circuittype_add' %}" class="btn btn-primary">
+            <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
+            Add a circuit type
+        </a>
+    {% endif %}
+</div>
+<h1>Circuit Types</h1>
+<div class="row">
+	<div class="col-md-12">
+        {% include 'circuits/inc/circuittype_table.html' %}
+    </div>
+</div>
+{% endblock %}

+ 14 - 0
netbox/templates/circuits/inc/circuittype_table.html

@@ -0,0 +1,14 @@
+{% load render_table from django_tables2 %}
+{% if perms.circuits.delete_circuittype %}
+    <form method="post" class="form form-horizontal">
+        {% csrf_token %}
+        <input type="hidden" name="redirect_url" value="{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" />
+        {% render_table table table_template|default:'table.html' %}
+        <button type="submit" name="_delete" formaction="{% url 'circuits:circuittype_bulk_delete' %}" class="btn btn-danger btn-sm">
+            <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
+            Delete Selected
+        </button>
+    </form>
+{% else %}
+    {% render_table table table_template|default:'table.html' %}
+{% endif %}

+ 2 - 0
netbox/utilities/views.py

@@ -147,6 +147,8 @@ class ObjectEditView(View):
                                                                                obj.get_absolute_url(), obj))
                                                                                obj.get_absolute_url(), obj))
             if '_addanother' in request.POST:
             if '_addanother' in request.POST:
                 return redirect(request.path)
                 return redirect(request.path)
+            elif self.return_url:
+                return redirect(self.return_url)
             else:
             else:
                 return redirect(obj.get_absolute_url())
                 return redirect(obj.get_absolute_url())