diff --git a/assets/admin.py b/assets/admin.py index 3e6c9d58..ca39ca3b 100644 --- a/assets/admin.py +++ b/assets/admin.py @@ -23,10 +23,15 @@ class SupplierAdmin(admin.ModelAdmin): @admin.register(assets.Asset) class AssetAdmin(admin.ModelAdmin): list_display = ['id', 'asset_id', 'description', 'category', 'status'] - list_filter = ['is_cable', 'category'] + list_filter = ['is_cable', 'category', 'status'] search_fields = ['id', 'asset_id', 'description'] +@admin.register(assets.CableType) +class CableTypeAdmin(admin.ModelAdmin): + list_display = ['id', '__str__', 'plug', 'socket', 'cores', 'circuits'] + + @admin.register(assets.Connector) class ConnectorAdmin(admin.ModelAdmin): list_display = ['id', '__str__', 'current_rating', 'voltage_rating', 'num_pins'] diff --git a/assets/forms.py b/assets/forms.py index ea05efd3..5afc82a3 100644 --- a/assets/forms.py +++ b/assets/forms.py @@ -34,3 +34,9 @@ class SupplierForm(forms.ModelForm): class SupplierSearchForm(forms.Form): query = forms.CharField(required=False) + + +class CableTypeForm(forms.ModelForm): + class Meta: + model = models.CableType + fields = '__all__' diff --git a/assets/models.py b/assets/models.py index b1a106fc..fc822137 100644 --- a/assets/models.py +++ b/assets/models.py @@ -3,6 +3,7 @@ from django.core.exceptions import ValidationError from django.db import models, connection from django.urls import reverse +from django.db.models import F from django.db.models.signals import pre_save from django.dispatch.dispatcher import receiver @@ -67,6 +68,9 @@ class Connector(models.Model): class CableType(models.Model): + class Meta: + ordering = ['plug', 'socket', '-circuits'] + circuits = models.IntegerField(blank=True, null=True) cores = models.IntegerField(blank=True, null=True) plug = models.ForeignKey(Connector, on_delete=models.SET_NULL, @@ -75,7 +79,7 @@ class CableType(models.Model): related_name='socket', blank=True, null=True) def __str__(self): - return self.plug.description + "--->" + self.socket.description + return "%s → %s" % (self.plug.description, self.socket.description) @reversion.register @@ -139,7 +143,7 @@ class Asset(models.Model, RevisionMixin): def __str__(self): out = str(self.asset_id) + ' - ' + self.description if self.is_cable: - out += '{} - {}m - {}'.format(self.plug, self.length, self.socket) + out += '{} - {}m - {}'.format(self.cable_type.plug, self.length, self.cable_type.socket) return out def clean(self): @@ -164,14 +168,16 @@ class Asset(models.Model, RevisionMixin): errdict["length"] = ["The length of a cable must be more than 0"] if not self.csa or self.csa <= 0: errdict["csa"] = ["The CSA of a cable must be more than 0"] - if not self.circuits or self.circuits <= 0: - errdict["circuits"] = ["There must be at least one circuit in a cable"] - if not self.cores or self.cores <= 0: - errdict["cores"] = ["There must be at least one core in a cable"] - if self.socket is None: - errdict["socket"] = ["A cable must have a socket"] - if self.plug is None: - errdict["plug"] = ["A cable must have a plug"] + if not self.cable_type: + errdict["cable_type"] = ["A cable must have a type"] + # if not self.circuits or self.circuits <= 0: + # errdict["circuits"] = ["There must be at least one circuit in a cable"] + # if not self.cores or self.cores <= 0: + # errdict["cores"] = ["There must be at least one core in a cable"] + # if self.socket is None: + # errdict["socket"] = ["A cable must have a socket"] + # if self.plug is None: + # errdict["plug"] = ["A cable must have a plug"] if errdict != {}: # If there was an error when validation raise ValidationError(errdict) diff --git a/assets/templates/cable_type_form.html b/assets/templates/cable_type_form.html index c72019e9..c8b792ad 100644 --- a/assets/templates/cable_type_form.html +++ b/assets/templates/cable_type_form.html @@ -1,12 +1,11 @@ {% extends 'base_assets.html' %} {% load widget_tweaks %} -{% block title %}Asset {{ object.asset_id }}{% endblock %} +{% block title %}Cable Type{% endblock %} {% block content %} -
@@ -15,6 +14,7 @@
+ {% if create or edit %}
{% render_field form.plug|add_class:'form-control'%} @@ -31,6 +31,26 @@ {% render_field form.cores|add_class:'form-control' value=object.cores %}
+
+ +
+ +
+ {% else %} +
+
Socket
+
{{ object.socket|default_if_none:'-' }}
+ +
Plug
+
{{ object.plug|default_if_none:'-' }}
+ +
Circuits
+
{{ object.circuits|default_if_none:'-' }}
+ +
Cores
+
{{ object.cores|default_if_none:'-' }}
+
+ {% endif %}
diff --git a/assets/templates/cable_type_list.html b/assets/templates/cable_type_list.html new file mode 100644 index 00000000..74e97407 --- /dev/null +++ b/assets/templates/cable_type_list.html @@ -0,0 +1,41 @@ +{% extends 'base_assets.html' %} +{% block title %}Supplier List{% endblock %} +{% load paginator from filters %} +{% load widget_tweaks %} + +{% block content %} + + + + + + + + + + + + + {% for item in object_list %} + + + + + + + {% endfor %} + +
Cable TypeCircuitsCoresQuick Links
{{ item }}{{ item.circuits }}{{ item.cores }} + View + Edit +
+ +{% if is_paginated %} +
+ {% paginator %} +
+{% endif %} + +{% endblock %} diff --git a/assets/templates/partials/cable_form.html b/assets/templates/partials/cable_form.html index 1a7001c2..e8aa7607 100644 --- a/assets/templates/partials/cable_form.html +++ b/assets/templates/partials/cable_form.html @@ -9,7 +9,6 @@
{% render_field form.cable_type|add_class:'form-control' %} - {{ form.length.help_text }}
@@ -28,23 +27,14 @@
{% else %}
-
Socket
-
{{ object.socket|default_if_none:'-' }}
- -
Plug
-
{{ object.plug|default_if_none:'-' }}
+
Cable Type
+
{{ object.cable_type|default_if_none:'-' }}
Length
{{ object.length|default_if_none:'-' }}m
Cross Sectional Area
-
{{ object.csa|default_if_none:'-' }}m^2
- -
Circuits
-
{{ object.circuits|default_if_none:'-' }}
- -
Cores
-
{{ object.cores|default_if_none:'-' }}
+
{{ object.csa|default_if_none:'-' }}mm²
{% endif %} diff --git a/assets/urls.py b/assets/urls.py index dc8e021c..8bc3c2a0 100644 --- a/assets/urls.py +++ b/assets/urls.py @@ -22,6 +22,11 @@ urlpatterns = [ path('activity', permission_required_with_403('assets.view_asset') (views.ActivityTable.as_view()), name='asset_activity_table'), + path('cabletype/list/', permission_required_with_403('assets.view_cable_type')(views.CableTypeList.as_view()), name='cable_type_list'), + path('cabletype/create/', permission_required_with_403('assets.add_cable_type')(views.CableTypeCreate.as_view()), name='cable_type_create'), + path('cabletype//update/', permission_required_with_403('assets.change_cable_type')(views.CableTypeUpdate.as_view()), name='cable_type_update'), + path('cabletype//detail/', permission_required_with_403('assets.view_cable_type')(views.CableTypeDetail.as_view()), name='cable_type_detail'), + path('asset/search/', views.AssetSearch.as_view(), name='asset_search_json'), path('asset/id//embed/', xframe_options_exempt( diff --git a/assets/views.py b/assets/views.py index 29eaa7aa..2bd3c115 100644 --- a/assets/views.py +++ b/assets/views.py @@ -252,3 +252,38 @@ class ActivityTable(versioning.ActivityTable): versions = versioning.RIGSVersion.objects.get_for_multiple_models( [models.Asset, models.Supplier]) return versions + + +class CableTypeList(generic.ListView): + model = models.CableType + template_name = 'cable_type_list.html' + paginate_by = 40 + # ordering = ['__str__'] + + +class CableTypeDetail(generic.DetailView): + model = models.CableType + template_name = 'cable_type_form.html' + + +class CableTypeCreate(generic.CreateView): + model = models.CableType + template_name = "cable_type_form.html" + form_class = forms.CableTypeForm + + def get_context_data(self, **kwargs): + context = super(CableTypeCreate, self).get_context_data(**kwargs) + context["create"] = True + + return context + +class CableTypeUpdate(generic.UpdateView): + model = models.CableType + template_name = "cable_type_form.html" + form_class = forms.CableTypeForm + + def get_context_data(self, **kwargs): + context = super(CableTypeUpdate, self).get_context_data(**kwargs) + context["edit"] = True + + return context diff --git a/templates/base_assets.html b/templates/base_assets.html index 636c70df..aad07820 100644 --- a/templates/base_assets.html +++ b/templates/base_assets.html @@ -10,29 +10,36 @@ {% endblock %} {% block titleelements %} - {# % if perms.assets.view_asset % #} - - {# % endif % #} - {# % if perms.assets.view_supplier % #} - - {# % endif % #} + + + {% if perms.assets.view_asset %}
  • Recent Changes
  • {% endif %}