Browse Source

utilisateur/personne morale: affichage n° adhérent

Élie Bouttier 8 years ago
parent
commit
af42157bac
3 changed files with 35 additions and 4 deletions
  1. 8 0
      accounts/admin.py
  2. 7 0
      adhesions/admin.py
  3. 20 4
      adhesions/models.py

+ 8 - 0
accounts/admin.py

@@ -9,6 +9,14 @@ from adhesions.admin import ProfileInline, AdherentInline
 
 
 class UserAdmin(AuthUserAdmin):
+    list_display = AuthUserAdmin.list_display + ('adherent_id',)
+
+    def adherent_id(self, user):
+        adherent = user.profile.adherent
+        if adherent:
+            return adherent.id
+    adherent_id.short_description = 'Numéro d’adhérent'
+
     def get_readonly_fields(self, request, obj=None):
         readonly_fields = super().get_readonly_fields(request, obj)
         if obj and not request.user.is_superuser:

+ 7 - 0
adhesions/admin.py

@@ -61,8 +61,15 @@ class AdherentAdmin(admin.ModelAdmin):
 
 
 class CorporationAdmin(admin.ModelAdmin):
+    list_display = ('social_reason', 'adherent_id')
     inlines = (AdherentInline,)
 
+    def adherent_id(self, corporation):
+        adherent = corporation.adherent
+        if adherent:
+            return adherent.id
+    adherent_id.short_description = 'Numéro d’adhérent'
+
 
 admin.site.register(Corporation, CorporationAdmin)
 admin.site.register(Adherent, AdherentAdmin)

+ 20 - 4
adhesions/models.py

@@ -55,6 +55,16 @@ class Profile(AdhesionMixin, models.Model):
     class Meta:
         verbose_name = 'profil'
 
+    @property
+    def adherent(self):
+        ctype = ContentType.objects.get_for_model(User)
+        try:
+            adherent = Adherent.objects.get(adherent_type=ctype, adherent_id=self.user.pk)
+        except Adherent.DoesNotExist:
+            return None
+        else:
+            return adherent
+
     def __str__(self):
         return self.user.get_full_name() or self.user.username
 
@@ -64,14 +74,20 @@ class Corporation(AdhesionMixin, models.Model):
     description = models.TextField(blank=True, default='')
     address = models.TextField(blank=True, default='', verbose_name='Adresse')
     members = models.ManyToManyField(User, blank=True, verbose_name='Membres')
-    adhesions = GenericRelation(Adherent,
-                                content_type_field='adherent_type',
-                                object_id_field='adherent_id',
-                                related_query_name='corporation')
 
     class Meta:
         verbose_name = 'personne morale'
         verbose_name_plural = 'personnes morales'
 
+    @property
+    def adherent(self):
+        ctype = ContentType.objects.get_for_model(self)
+        try:
+            adherent = Adherent.objects.get(adherent_type=ctype, adherent_id=self.pk)
+        except Adherent.DoesNotExist:
+            return None
+        else:
+            return adherent
+
     def __str__(self):
         return self.social_reason