Browse Source

Require first and last name only for physical members

Baptiste Jonglez 10 years ago
parent
commit
9e8ef23717
2 changed files with 42 additions and 9 deletions
  1. 24 0
      coin/members/migrations/0009_auto_20141008_2244.py
  2. 18 9
      coin/members/models.py

+ 24 - 0
coin/members/migrations/0009_auto_20141008_2244.py

@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('members', '0008_member_nickname'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='member',
+            name='first_name',
+            field=models.CharField(max_length=30, verbose_name='first name', blank=True),
+        ),
+        migrations.AlterField(
+            model_name='member',
+            name='last_name',
+            field=models.CharField(max_length=30, verbose_name='last name', blank=True),
+        ),
+    ]

+ 18 - 9
coin/members/models.py

@@ -12,6 +12,7 @@ from django.dispatch import receiver
 from django.contrib.auth.models import AbstractUser
 from django.conf import settings
 from django.core.validators import RegexValidator
+from django.core.exceptions import ValidationError
 from ldapdb.models.fields import CharField, IntegerField, ListField
 
 from coin.offers.models import OfferSubscription
@@ -78,11 +79,23 @@ class Member(CoinLdapSyncMixin, AbstractUser):
     # passwords for both ldap and local db
     _password_ldap = None
 
+    def clean(self):
+        if self.type == 'legal_entity':
+            if not self.organization_name:
+                raise ValidationError("Le nom de l'organisme est obligatoire "
+                                      "pour une personne morale")
+        elif self.type == 'natural_person':
+            if not (self.first_name and self.last_name):
+                raise ValidationError("Le nom et prénom sont obligatoires "
+                                      "pour une personne physique")
+
     def __unicode__(self):
-        name = self.first_name + ' ' + self.last_name
-        if self.organization_name:
-            name += ' (%s)' % self.organization_name
-        return name
+        if self.type == 'legal_entity':
+            return self.organization_name
+        elif self.nickname:
+            return self.nickname
+        else:
+            return self.first_name + ' ' + self.last_name
 
     def get_full_name(self):
         return '%s %s' % (self.first_name, self.last_name)
@@ -237,14 +250,10 @@ class Member(CoinLdapSyncMixin, AbstractUser):
     class Meta:
         verbose_name = 'membre'
 
-# Hack to force email, first_name ans last_name to be required by Member model
+# Hack to force email to be required by Member model
 Member._meta.get_field('email')._unique = True
 Member._meta.get_field('email').blank = False
 Member._meta.get_field('email').null = False
-Member._meta.get_field('first_name').blank = False
-Member._meta.get_field('first_name').null = False
-Member._meta.get_field('last_name').blank = False
-Member._meta.get_field('last_name').null = False
 
 
 class CryptoKey(models.Model):