Browse Source

show antennas on adhesion page

Élie Bouttier 7 years ago
parent
commit
b16bf85ef3
2 changed files with 25 additions and 3 deletions
  1. 7 3
      adhesions/admin.py
  2. 18 0
      services/models.py

+ 7 - 3
adhesions/admin.py

@@ -5,7 +5,7 @@ from django.contrib.contenttypes.models import ContentType
 from django.contrib.auth.models import User as AuthUser
 from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
 from django.http import HttpResponseRedirect
-from django.utils.html import format_html
+from django.utils.html import format_html, mark_safe
 from django.core.urlresolvers import reverse
 
 from .forms import UserCreationForm
@@ -206,8 +206,8 @@ class AdhesionAdmin(AdtSearchMixin, admin.ModelAdmin):
     list_display = ('get_id', 'type', 'get_adherent_link',)
     list_filter = (AdherentTypeFilter, 'active',)
     list_select_related = ('user', 'user__profile', 'corporation',)
-    fields = ('id', 'type', 'get_adherent_link', 'get_membership_link',)
-    readonly_fields = ('id', 'type', 'get_adherent_link', 'get_membership_link',)
+    fields = ('id', 'type', 'get_adherent_link', 'get_membership_link', 'get_antennas_link',)
+    readonly_fields = ('id', 'type', 'get_adherent_link', 'get_membership_link', 'get_antennas_link',)
     search_fields = ('=id', 'notes',) \
                     + tuple(['user__%s' % f for f in UserAdmin.search_fields if '__' not in f]) \
                     + tuple(['corporation__%s' % f for f in CorporationAdmin.search_fields if '__' not in f])
@@ -222,6 +222,10 @@ class AdhesionAdmin(AdtSearchMixin, admin.ModelAdmin):
         return format_html(u'<a href="{}">{}</a>', obj.membership.get_absolute_url(), obj.membership)
     get_membership_link.short_description = 'Cotisation'
 
+    def get_antennas_link(self, obj):
+        return mark_safe('<br />'.join(map(lambda antenna: antenna.get_absolute_link(), obj.antenna_set.all())))
+    get_antennas_link.short_description = 'Antennes'
+
     def get_actions(self, request):
         actions = super().get_actions(request)
         if 'delete_selected' in actions:

+ 18 - 0
services/models.py

@@ -8,6 +8,7 @@ from django.contrib.contenttypes.fields import GenericRelation
 from django.core.exceptions import ValidationError
 from django.urls import reverse
 from django.utils import timezone
+from django.utils.html import format_html, mark_safe
 from django.core.exceptions import PermissionDenied
 from django.core.validators import RegexValidator
 
@@ -166,6 +167,23 @@ class Antenna(models.Model):
         if self.orientation:
             self.orientation = self.orientation % 360
 
+    def get_absolute_url(self):
+        return reverse('admin:%s_%s_change' % (self._meta.app_label, self._meta.model_name), args=(self.pk,))
+
+    def get_absolute_link(self):
+        name = 'Antenne n°%d' % self.pk
+        if self.label:
+            name += ' : %s' % self.label
+        link = format_html('<a href="{}">{}</a>', self.get_absolute_url(), name)
+        if self.allocations.filter(active=True).exists():
+            link += ' ('
+            link += ', '.join(map(
+                            lambda alloc: format_html('<a href="http://{}">{}</a>', alloc.resource, alloc.resource),
+                            self.allocations.filter(active=True).all()
+            ))
+            link += ')'
+        return mark_safe(link)
+
     class Meta:
         verbose_name = 'antenne'