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.models import User as AuthUser
 from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
 from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
 from django.http import HttpResponseRedirect
 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 django.core.urlresolvers import reverse
 
 
 from .forms import UserCreationForm
 from .forms import UserCreationForm
@@ -206,8 +206,8 @@ class AdhesionAdmin(AdtSearchMixin, admin.ModelAdmin):
     list_display = ('get_id', 'type', 'get_adherent_link',)
     list_display = ('get_id', 'type', 'get_adherent_link',)
     list_filter = (AdherentTypeFilter, 'active',)
     list_filter = (AdherentTypeFilter, 'active',)
     list_select_related = ('user', 'user__profile', 'corporation',)
     list_select_related = ('user', 'user__profile', 'corporation',)
-    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',)
+    readonly_fields = ('id', 'type', 'get_adherent_link', 'get_membership_link', 'get_antennas_link',)
     search_fields = ('=id', 'notes',) \
     search_fields = ('=id', 'notes',) \
                     + tuple(['user__%s' % f for f in UserAdmin.search_fields if '__' not in f]) \
                     + 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])
                     + 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)
         return format_html(u'<a href="{}">{}</a>', obj.membership.get_absolute_url(), obj.membership)
     get_membership_link.short_description = 'Cotisation'
     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):
     def get_actions(self, request):
         actions = super().get_actions(request)
         actions = super().get_actions(request)
         if 'delete_selected' in actions:
         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.core.exceptions import ValidationError
 from django.urls import reverse
 from django.urls import reverse
 from django.utils import timezone
 from django.utils import timezone
+from django.utils.html import format_html, mark_safe
 from django.core.exceptions import PermissionDenied
 from django.core.exceptions import PermissionDenied
 from django.core.validators import RegexValidator
 from django.core.validators import RegexValidator
 
 
@@ -166,6 +167,23 @@ class Antenna(models.Model):
         if self.orientation:
         if self.orientation:
             self.orientation = self.orientation % 360
             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:
     class Meta:
         verbose_name = 'antenne'
         verbose_name = 'antenne'