Parcourir la source

Switch from AbstractBaseUser to AbstractUser to simplify code as we don't really need so deep custumization

Fabs il y a 10 ans
Parent
commit
a33b3cb074

+ 8 - 38
coin/members/admin.py

@@ -20,50 +20,20 @@ class MembershipFeeInline(admin.TabularInline):
 
 
 
 
 class MemberAdmin(UserAdmin):
 class MemberAdmin(UserAdmin):
-    list_display = ('id', 'status', 'login', 'first_name', 'last_name',
+    list_display = ('id', 'status', 'username', 'first_name', 'last_name',
                     'organization_name', 'email', 'end_date_of_membership')
                     'organization_name', 'email', 'end_date_of_membership')
-    list_display_links = ('id', 'login', 'first_name', 'last_name')
+    list_display_links = ('id', 'username', 'first_name', 'last_name')
     list_filter = ('status', MembershipFeeFilter)
     list_filter = ('status', MembershipFeeFilter)
-    search_fields = ['login', 'first_name', 'last_name', 'email']
+    search_fields = ['username', 'first_name', 'last_name', 'email']
     ordering = ('last_name',)
     ordering = ('last_name',)
     actions = ['set_as_member', 'set_as_non_member']
     actions = ['set_as_member', 'set_as_non_member']
 
 
     form = MemberChangeForm
     form = MemberChangeForm
     add_form = MemberCreationForm
     add_form = MemberCreationForm
 
 
-    fieldsets = (
-                ('Adhérent', {'fields':(
-                    'status',
-                    'type',   
-                    ('first_name', 'last_name', 'organization_name'),
-                    ('entry_date', 'resign_date'))}),
-                ('Coordonnées', {'fields':(
-                    'email', 
-                    ('home_phone_number', 'mobile_phone_number'),
-                    'address',
-                    ('postal_code', 'city', 'country'))}),
-                ('Authentification', {'fields':(
-                    ('login', 'password'),)}),
-                ('Permissions', {'fields':(
-                    ('is_staff', 'is_superuser'))})
-                )
-
-    add_fieldsets = (
-                ('Adhérent', {'fields':(
-                    'status',
-                    'type',   
-                    ('first_name', 'last_name', 'organization_name'),
-                    ('entry_date', 'resign_date'))}),
-                ('Coordonnées', {'fields':(
-                    'email', 
-                    ('home_phone_number', 'mobile_phone_number'),
-                    'address',
-                    ('postal_code', 'city', 'country'))}),
-                ('Authentification', {'fields':(
-                    ('login','password'))}),
-                ('Permissions', {'fields':(
-                    ('is_staff', 'is_superuser'))})
-                )
+    
+
+    
 
 
     radio_fields = {"type": admin.HORIZONTAL}
     radio_fields = {"type": admin.HORIZONTAL}
 
 
@@ -73,7 +43,7 @@ class MemberAdmin(UserAdmin):
     
     
     def get_readonly_fields(self, request, obj=None):
     def get_readonly_fields(self, request, obj=None):
         if obj:
         if obj:
-            return ['login',]
+            return ['username',]
         else:
         else:
             return []
             return []
 
 
@@ -98,5 +68,5 @@ class MembershipFeeAdmin(admin.ModelAdmin):
 
 
 admin.site.register(Member, MemberAdmin)
 admin.site.register(Member, MemberAdmin)
 admin.site.register(MembershipFee, MembershipFeeAdmin)
 admin.site.register(MembershipFee, MembershipFeeAdmin)
-admin.site.unregister(Group)
+# admin.site.unregister(Group)
 # admin.site.register(LdapUser, LdapUserAdmin)
 # admin.site.register(LdapUser, LdapUserAdmin)

+ 35 - 3
coin/members/forms.py

@@ -10,7 +10,23 @@ class MemberCreationForm(forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = Member
         model = Member
-        fields = ('email', 'first_name', 'last_name')
+        # fields = ('email', 'first_name', 'last_name')
+        fieldsets = (
+                ('Adhérent', {'fields':(
+                    'status',
+                    'type',   
+                    ('first_name', 'last_name', 'organization_name'),
+                    ('entry_date', 'resign_date'))}),
+                ('Coordonnées', {'fields':(
+                    'email', 
+                    ('home_phone_number', 'mobile_phone_number'),
+                    'address',
+                    ('postal_code', 'city', 'country'))}),
+                ('Authentification', {'fields':(
+                    ('username', 'password'),)}),
+                ('Permissions', {'fields':(
+                    ('is_active', 'is_staff', 'is_superuser', 'date_joined'))})
+                )
 
 
     def save(self, commit=True):
     def save(self, commit=True):
         """
         """
@@ -20,7 +36,7 @@ class MemberCreationForm(forms.ModelForm):
         member.set_password(self.cleaned_data["password"])
         member.set_password(self.cleaned_data["password"])
         if commit:
         if commit:
             member.member()
             member.member()
-            member.set_ldap_password(self.cleaned_data["password"])
+            # member.set_ldap_password(self.cleaned_data["password"])
         return member
         return member
 
 
 
 
@@ -29,7 +45,23 @@ class MemberChangeForm(forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = Member
         model = Member
-        fields = ('password', 'first_name', 'last_name', 'is_active', 'is_staff')
+        # fields = ('password', 'first_name', 'last_name', 'is_active', 'is_staff')
+        fieldsets = (
+                ('Adhérent', {'fields':(
+                    'status',
+                    'type',   
+                    ('first_name', 'last_name', 'organization_name'),
+                    ('entry_date', 'resign_date'))}),
+                ('Coordonnées', {'fields':(
+                    'email', 
+                    ('home_phone_number', 'mobile_phone_number'),
+                    'address',
+                    ('postal_code', 'city', 'country'))}),
+                ('Authentification', {'fields':(
+                    ('username','password'))}),
+                ('Permissions', {'fields':(
+                    ('is_active', 'is_staff', 'is_superuser'))})
+                )
 
 
     def clean_password(self):
     def clean_password(self):
         # Regardless of what the user provides, return the initial value.
         # Regardless of what the user provides, return the initial value.

+ 108 - 19
coin/members/migrations/0001_initial.py

@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
-import datetime
+from south.utils import datetime_utils as datetime
 from south.db import db
 from south.db import db
 from south.v2 import SchemaMigration
 from south.v2 import SchemaMigration
 from django.db import models
 from django.db import models
@@ -11,21 +11,48 @@ class Migration(SchemaMigration):
         # Adding model 'Member'
         # Adding model 'Member'
         db.create_table(u'members_member', (
         db.create_table(u'members_member', (
             (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
             (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('type', self.gf('django.db.models.fields.CharField')(default='individual', max_length=11)),
-            ('gender', self.gf('django.db.models.fields.CharField')(max_length=6)),
-            ('first_name', self.gf('django.db.models.fields.CharField')(max_length=200)),
-            ('last_name', self.gf('django.db.models.fields.CharField')(max_length=200)),
+            ('password', self.gf('django.db.models.fields.CharField')(max_length=128)),
+            ('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
+            ('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)),
+            ('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)),
+            ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
+            ('last_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
+            ('email', self.gf('django.db.models.fields.EmailField')(max_length=75, blank=True)),
+            ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)),
+            ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)),
+            ('date_joined', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
+            ('status', self.gf('django.db.models.fields.CharField')(default='pending', max_length=50)),
+            ('type', self.gf('django.db.models.fields.CharField')(default='natural_person', max_length=20)),
             ('organization_name', self.gf('django.db.models.fields.CharField')(max_length=200, blank=True)),
             ('organization_name', self.gf('django.db.models.fields.CharField')(max_length=200, blank=True)),
-            ('email', self.gf('django.db.models.fields.EmailField')(max_length=254)),
             ('home_phone_number', self.gf('django.db.models.fields.CharField')(max_length=25, blank=True)),
             ('home_phone_number', self.gf('django.db.models.fields.CharField')(max_length=25, blank=True)),
             ('mobile_phone_number', self.gf('django.db.models.fields.CharField')(max_length=25, blank=True)),
             ('mobile_phone_number', self.gf('django.db.models.fields.CharField')(max_length=25, blank=True)),
-            ('address', self.gf('django.db.models.fields.CharField')(max_length=200)),
-            ('postal_code', self.gf('django.db.models.fields.CharField')(max_length=15)),
-            ('city', self.gf('django.db.models.fields.CharField')(max_length=200)),
-            ('country', self.gf('django.db.models.fields.CharField')(max_length=200)),
+            ('address', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('postal_code', self.gf('django.db.models.fields.CharField')(max_length=15, null=True, blank=True)),
+            ('city', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),
+            ('country', self.gf('django.db.models.fields.CharField')(default='France', max_length=200, null=True, blank=True)),
+            ('entry_date', self.gf('django.db.models.fields.DateField')(default=datetime.date.today)),
+            ('resign_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
         ))
         ))
         db.send_create_signal(u'members', ['Member'])
         db.send_create_signal(u'members', ['Member'])
 
 
+        # Adding M2M table for field groups on 'Member'
+        m2m_table_name = db.shorten_name(u'members_member_groups')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('member', models.ForeignKey(orm[u'members.member'], null=False)),
+            ('group', models.ForeignKey(orm[u'auth.group'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['member_id', 'group_id'])
+
+        # Adding M2M table for field user_permissions on 'Member'
+        m2m_table_name = db.shorten_name(u'members_member_user_permissions')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('member', models.ForeignKey(orm[u'members.member'], null=False)),
+            ('permission', models.ForeignKey(orm[u'auth.permission'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['member_id', 'permission_id'])
+
         # Adding model 'CryptoKey'
         # Adding model 'CryptoKey'
         db.create_table(u'members_cryptokey', (
         db.create_table(u'members_cryptokey', (
             (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
             (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
@@ -35,16 +62,55 @@ class Migration(SchemaMigration):
         ))
         ))
         db.send_create_signal(u'members', ['CryptoKey'])
         db.send_create_signal(u'members', ['CryptoKey'])
 
 
+        # Adding model 'MembershipFee'
+        db.create_table(u'members_membershipfee', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('member', self.gf('django.db.models.fields.related.ForeignKey')(related_name='membership_fees', to=orm['members.Member'])),
+            ('amount', self.gf('django.db.models.fields.IntegerField')(default='20')),
+            ('start_date', self.gf('django.db.models.fields.DateField')(default=datetime.date.today)),
+            ('end_date', self.gf('django.db.models.fields.DateField')(default=datetime.datetime(2015, 9, 1, 0, 0))),
+        ))
+        db.send_create_signal(u'members', ['MembershipFee'])
+
 
 
     def backwards(self, orm):
     def backwards(self, orm):
         # Deleting model 'Member'
         # Deleting model 'Member'
         db.delete_table(u'members_member')
         db.delete_table(u'members_member')
 
 
+        # Removing M2M table for field groups on 'Member'
+        db.delete_table(db.shorten_name(u'members_member_groups'))
+
+        # Removing M2M table for field user_permissions on 'Member'
+        db.delete_table(db.shorten_name(u'members_member_user_permissions'))
+
         # Deleting model 'CryptoKey'
         # Deleting model 'CryptoKey'
         db.delete_table(u'members_cryptokey')
         db.delete_table(u'members_cryptokey')
 
 
+        # Deleting model 'MembershipFee'
+        db.delete_table(u'members_membershipfee')
+
 
 
     models = {
     models = {
+        u'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        u'auth.permission': {
+            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
         u'members.cryptokey': {
         u'members.cryptokey': {
             'Meta': {'object_name': 'CryptoKey'},
             'Meta': {'object_name': 'CryptoKey'},
             u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
             u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
@@ -52,25 +118,48 @@ class Migration(SchemaMigration):
             'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
             'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
             'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
             'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
         },
         },
+        u'members.ldapgroup': {
+            'Meta': {'object_name': 'LdapGroup', 'managed': 'False'},
+            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+        },
         u'members.ldapuser': {
         u'members.ldapuser': {
             'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
             'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
             'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
             'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
         },
         },
         u'members.member': {
         u'members.member': {
             'Meta': {'object_name': 'Member'},
             'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'gender': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'city': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+            'country': ('django.db.models.fields.CharField', [], {'default': "'France'", 'max_length': '200', 'null': 'True', 'blank': 'True'}),
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'entry_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
             'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
             'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
             u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
             u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
             'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
             'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
             'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
             'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'individual'", 'max_length': '11'})
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
+            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '50'}),
+            'type': ('django.db.models.fields.CharField', [], {'default': "'natural_person'", 'max_length': '20'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        u'members.membershipfee': {
+            'Meta': {'object_name': 'MembershipFee'},
+            'amount': ('django.db.models.fields.IntegerField', [], {'default': "'20'"}),
+            'end_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2015, 9, 1, 0, 0)'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'member': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'membership_fees'", 'to': u"orm['members.Member']"}),
+            'start_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'})
         }
         }
     }
     }
 
 

+ 0 - 93
coin/members/migrations/0002_auto__del_field_member_gender__add_field_member_ldap_cn__add_field_mem.py

@@ -1,93 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Deleting field 'Member.gender'
-        db.delete_column(u'members_member', 'gender')
-
-        # Adding field 'Member.ldap_cn'
-        db.add_column(u'members_member', 'ldap_cn',
-                      self.gf('django.db.models.fields.CharField')(default='', max_length=200),
-                      keep_default=False)
-
-        # Adding field 'Member.status'
-        db.add_column(u'members_member', 'status',
-                      self.gf('django.db.models.fields.CharField')(default='non_adherent', max_length=50),
-                      keep_default=False)
-
-        # Adding field 'Member.entry_date'
-        db.add_column(u'members_member', 'entry_date',
-                      self.gf('django.db.models.fields.DateField')(null=True),
-                      keep_default=False)
-
-        # Adding field 'Member.resign_date'
-        db.add_column(u'members_member', 'resign_date',
-                      self.gf('django.db.models.fields.DateField')(null=True),
-                      keep_default=False)
-
-
-        # Changing field 'Member.address'
-        db.alter_column(u'members_member', 'address', self.gf('django.db.models.fields.TextField')())
-
-    def backwards(self, orm):
-        # Adding field 'Member.gender'
-        db.add_column(u'members_member', 'gender',
-                      self.gf('django.db.models.fields.CharField')(default='', max_length=6),
-                      keep_default=False)
-
-        # Deleting field 'Member.ldap_cn'
-        db.delete_column(u'members_member', 'ldap_cn')
-
-        # Deleting field 'Member.status'
-        db.delete_column(u'members_member', 'status')
-
-        # Deleting field 'Member.entry_date'
-        db.delete_column(u'members_member', 'entry_date')
-
-        # Deleting field 'Member.resign_date'
-        db.delete_column(u'members_member', 'resign_date')
-
-
-        # Changing field 'Member.address'
-        db.alter_column(u'members_member', 'address', self.gf('django.db.models.fields.CharField')(max_length=200))
-
-    models = {
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '200'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'individual'", 'max_length': '11'})
-        }
-    }
-
-    complete_apps = ['members']

+ 0 - 53
coin/members/migrations/0003_auto__chg_field_member_type.py

@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-
-        # Changing field 'Member.type'
-        db.alter_column(u'members_member', 'type', self.gf('django.db.models.fields.CharField')(max_length=20))
-
-    def backwards(self, orm):
-
-        # Changing field 'Member.type'
-        db.alter_column(u'members_member', 'type', self.gf('django.db.models.fields.CharField')(max_length=11))
-
-    models = {
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'personne_physique'", 'max_length': '20'})
-        }
-    }
-
-    complete_apps = ['members']

+ 0 - 66
coin/members/migrations/0004_auto__add_membershipfee.py

@@ -1,66 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding model 'MembershipFee'
-        db.create_table(u'members_membershipfee', (
-            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('member', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['members.Member'])),
-            ('amount', self.gf('django.db.models.fields.IntegerField')()),
-            ('date', self.gf('django.db.models.fields.DateField')()),
-        ))
-        db.send_create_signal(u'members', ['MembershipFee'])
-
-
-    def backwards(self, orm):
-        # Deleting model 'MembershipFee'
-        db.delete_table(u'members_membershipfee')
-
-
-    models = {
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'personne_physique'", 'max_length': '20'})
-        },
-        u'members.membershipfee': {
-            'Meta': {'object_name': 'MembershipFee'},
-            'amount': ('django.db.models.fields.IntegerField', [], {}),
-            'date': ('django.db.models.fields.DateField', [], {}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"})
-        }
-    }
-
-    complete_apps = ['members']

+ 0 - 60
coin/members/migrations/0005_entrydate_not_null.py

@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-class Migration(DataMigration):
-
-    def forwards(self, orm):
-        from datetime import date
-        
-        for member in orm.Member.objects.all():
-            member.entry_date = '2011-07-04'
-            member.save()
-
-    def backwards(self, orm):
-        "Write your backwards methods here."
-
-    models = {
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'personne_physique'", 'max_length': '20'})
-        },
-        u'members.membershipfee': {
-            'Meta': {'object_name': 'MembershipFee'},
-            'amount': ('django.db.models.fields.IntegerField', [], {}),
-            'date': ('django.db.models.fields.DateField', [], {}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"})
-        }
-    }
-
-    complete_apps = ['members']
-    symmetrical = True

+ 0 - 60
coin/members/migrations/0006_auto__chg_field_member_entry_date.py

@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-
-        # Changing field 'Member.entry_date'
-        db.alter_column(u'members_member', 'entry_date', self.gf('django.db.models.fields.DateField')())
-
-    def backwards(self, orm):
-
-        # Changing field 'Member.entry_date'
-        db.alter_column(u'members_member', 'entry_date', self.gf('django.db.models.fields.DateField')(null=True))
-
-    models = {
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'personne_physique'", 'max_length': '20'})
-        },
-        u'members.membershipfee': {
-            'Meta': {'object_name': 'MembershipFee'},
-            'amount': ('django.db.models.fields.IntegerField', [], {}),
-            'date': ('django.db.models.fields.DateField', [], {}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"})
-        }
-    }
-
-    complete_apps = ['members']

+ 0 - 79
coin/members/migrations/0007_auto__del_field_membershipfee_date__add_field_membershipfee_start_date.py

@@ -1,79 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Deleting field 'MembershipFee.date'
-        db.delete_column(u'members_membershipfee', 'date')
-
-        # Adding field 'MembershipFee.start_date'
-        db.add_column(u'members_membershipfee', 'start_date',
-                      self.gf('django.db.models.fields.DateField')(default=datetime.date.today),
-                      keep_default=False)
-
-        # Adding field 'MembershipFee.end_date'
-        db.add_column(u'members_membershipfee', 'end_date',
-                      self.gf('django.db.models.fields.DateField')(default=datetime.datetime(2014, 11, 9, 0, 0)),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Adding field 'MembershipFee.date'
-        db.add_column(u'members_membershipfee', 'date',
-                      self.gf('django.db.models.fields.DateField')(default='2011-07-04'),
-                      keep_default=False)
-
-        # Deleting field 'MembershipFee.start_date'
-        db.delete_column(u'members_membershipfee', 'start_date')
-
-        # Deleting field 'MembershipFee.end_date'
-        db.delete_column(u'members_membershipfee', 'end_date')
-
-
-    models = {
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'personne_physique'", 'max_length': '20'})
-        },
-        u'members.membershipfee': {
-            'Meta': {'object_name': 'MembershipFee'},
-            'amount': ('django.db.models.fields.IntegerField', [], {'default': "'20'"}),
-            'end_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 11, 9, 0, 0)'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'start_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'})
-        }
-    }
-
-    complete_apps = ['members']

+ 0 - 104
coin/members/migrations/0008_auto__add_field_member_user.py

@@ -1,104 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'Member.user'
-        db.add_column(u'members_member', 'user',
-                      self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['auth.User'], null=True, on_delete=models.SET_NULL),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'Member.user'
-        db.delete_column(u'members_member', 'user_id')
-
-
-    models = {
-        u'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        u'auth.permission': {
-            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        u'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        u'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapgroup': {
-            'Meta': {'object_name': 'LdapGroup', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'default': "'France'", 'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'personne_physique'", 'max_length': '20'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'on_delete': 'models.SET_NULL'})
-        },
-        u'members.membershipfee': {
-            'Meta': {'object_name': 'MembershipFee'},
-            'amount': ('django.db.models.fields.IntegerField', [], {'default': "'20'"}),
-            'end_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2015, 4, 20, 0, 0)'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'membership_fees'", 'to': u"orm['members.Member']"}),
-            'start_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'})
-        }
-    }
-
-    complete_apps = ['members']

+ 0 - 108
coin/members/migrations/0009_auto__chg_field_member_user__add_unique_member_user.py

@@ -1,108 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-
-        # Changing field 'Member.user'
-        db.alter_column(u'members_member', 'user_id', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True, null=True, on_delete=models.SET_NULL))
-        # Adding unique constraint on 'Member', fields ['user']
-        db.create_unique(u'members_member', ['user_id'])
-
-
-    def backwards(self, orm):
-        # Removing unique constraint on 'Member', fields ['user']
-        db.delete_unique(u'members_member', ['user_id'])
-
-
-        # Changing field 'Member.user'
-        db.alter_column(u'members_member', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, on_delete=models.SET_NULL))
-
-    models = {
-        u'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        u'auth.permission': {
-            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        u'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        u'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapgroup': {
-            'Meta': {'object_name': 'LdapGroup', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.CharField', [], {'default': "'France'", 'max_length': '200'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'ldap_cn': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'non_adherent'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'personne_physique'", 'max_length': '20'}),
-            'user': ('django.db.models.fields.related.OneToOneField', [], {'default': 'None', 'to': u"orm['auth.User']", 'unique': 'True', 'null': 'True', 'on_delete': 'models.SET_NULL'})
-        },
-        u'members.membershipfee': {
-            'Meta': {'object_name': 'MembershipFee'},
-            'amount': ('django.db.models.fields.IntegerField', [], {'default': "'20'"}),
-            'end_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2015, 4, 21, 0, 0)'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'membership_fees'", 'to': u"orm['members.Member']"}),
-            'start_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'})
-        }
-    }
-
-    complete_apps = ['members']

+ 0 - 210
coin/members/migrations/0010_auto__del_field_member_ldap_cn__del_field_member_user__add_field_membe.py

@@ -1,210 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.utils import datetime_utils as datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Deleting field 'Member.ldap_cn'
-        db.delete_column(u'members_member', 'ldap_cn')
-
-        # Deleting field 'Member.user'
-        db.delete_column(u'members_member', 'user_id')
-
-        # Adding field 'Member.password'
-        db.add_column(u'members_member', 'password',
-                      self.gf('django.db.models.fields.CharField')(default='', max_length=128),
-                      keep_default=False)
-
-        # Adding field 'Member.last_login'
-        db.add_column(u'members_member', 'last_login',
-                      self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now),
-                      keep_default=False)
-
-        # Adding field 'Member.is_superuser'
-        db.add_column(u'members_member', 'is_superuser',
-                      self.gf('django.db.models.fields.BooleanField')(default=False),
-                      keep_default=False)
-
-        # Adding field 'Member.is_active'
-        db.add_column(u'members_member', 'is_active',
-                      self.gf('django.db.models.fields.BooleanField')(default=True),
-                      keep_default=False)
-
-        # Adding field 'Member.is_staff'
-        db.add_column(u'members_member', 'is_staff',
-                      self.gf('django.db.models.fields.BooleanField')(default=False),
-                      keep_default=False)
-
-        # Adding field 'Member.login'
-        db.add_column(u'members_member', 'login',
-                      self.gf('django.db.models.fields.CharField')(max_length=200, unique=True, null=True, blank=True),
-                      keep_default=False)
-
-        # Adding M2M table for field groups on 'Member'
-        m2m_table_name = db.shorten_name(u'members_member_groups')
-        db.create_table(m2m_table_name, (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('member', models.ForeignKey(orm[u'members.member'], null=False)),
-            ('group', models.ForeignKey(orm[u'auth.group'], null=False))
-        ))
-        db.create_unique(m2m_table_name, ['member_id', 'group_id'])
-
-        # Adding M2M table for field user_permissions on 'Member'
-        m2m_table_name = db.shorten_name(u'members_member_user_permissions')
-        db.create_table(m2m_table_name, (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('member', models.ForeignKey(orm[u'members.member'], null=False)),
-            ('permission', models.ForeignKey(orm[u'auth.permission'], null=False))
-        ))
-        db.create_unique(m2m_table_name, ['member_id', 'permission_id'])
-
-
-        # Changing field 'Member.city'
-        db.alter_column(u'members_member', 'city', self.gf('django.db.models.fields.CharField')(max_length=200, null=True))
-
-        # Changing field 'Member.country'
-        db.alter_column(u'members_member', 'country', self.gf('django.db.models.fields.CharField')(max_length=200, null=True))
-
-        # Changing field 'Member.postal_code'
-        db.alter_column(u'members_member', 'postal_code', self.gf('django.db.models.fields.CharField')(max_length=15, null=True))
-
-        # Changing field 'Member.address'
-        db.alter_column(u'members_member', 'address', self.gf('django.db.models.fields.TextField')(null=True))
-
-    def backwards(self, orm):
-        # Adding field 'Member.ldap_cn'
-        db.add_column(u'members_member', 'ldap_cn',
-                      self.gf('django.db.models.fields.CharField')(default='', max_length=200, blank=True),
-                      keep_default=False)
-
-        # Adding field 'Member.user'
-        db.add_column(u'members_member', 'user',
-                      self.gf('django.db.models.fields.related.OneToOneField')(default=None, to=orm['auth.User'], unique=True, null=True, on_delete=models.SET_NULL),
-                      keep_default=False)
-
-        # Deleting field 'Member.password'
-        db.delete_column(u'members_member', 'password')
-
-        # Deleting field 'Member.last_login'
-        db.delete_column(u'members_member', 'last_login')
-
-        # Deleting field 'Member.is_superuser'
-        db.delete_column(u'members_member', 'is_superuser')
-
-        # Deleting field 'Member.is_active'
-        db.delete_column(u'members_member', 'is_active')
-
-        # Deleting field 'Member.is_staff'
-        db.delete_column(u'members_member', 'is_staff')
-
-        # Deleting field 'Member.login'
-        db.delete_column(u'members_member', 'login')
-
-        # Removing M2M table for field groups on 'Member'
-        db.delete_table(db.shorten_name(u'members_member_groups'))
-
-        # Removing M2M table for field user_permissions on 'Member'
-        db.delete_table(db.shorten_name(u'members_member_user_permissions'))
-
-
-        # User chose to not deal with backwards NULL issues for 'Member.city'
-        raise RuntimeError("Cannot reverse this migration. 'Member.city' and its values cannot be restored.")
-        
-        # The following code is provided here to aid in writing a correct migration
-        # Changing field 'Member.city'
-        db.alter_column(u'members_member', 'city', self.gf('django.db.models.fields.CharField')(max_length=200))
-
-        # Changing field 'Member.country'
-        db.alter_column(u'members_member', 'country', self.gf('django.db.models.fields.CharField')(max_length=200))
-
-        # User chose to not deal with backwards NULL issues for 'Member.postal_code'
-        raise RuntimeError("Cannot reverse this migration. 'Member.postal_code' and its values cannot be restored.")
-        
-        # The following code is provided here to aid in writing a correct migration
-        # Changing field 'Member.postal_code'
-        db.alter_column(u'members_member', 'postal_code', self.gf('django.db.models.fields.CharField')(max_length=15))
-
-        # User chose to not deal with backwards NULL issues for 'Member.address'
-        raise RuntimeError("Cannot reverse this migration. 'Member.address' and its values cannot be restored.")
-        
-        # The following code is provided here to aid in writing a correct migration
-        # Changing field 'Member.address'
-        db.alter_column(u'members_member', 'address', self.gf('django.db.models.fields.TextField')())
-
-    models = {
-        u'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        u'auth.permission': {
-            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        u'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        u'members.cryptokey': {
-            'Meta': {'object_name': 'CryptoKey'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'key': ('django.db.models.fields.TextField', [], {}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['members.Member']"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '3'})
-        },
-        u'members.ldapgroup': {
-            'Meta': {'object_name': 'LdapGroup', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.ldapuser': {
-            'Meta': {'object_name': 'LdapUser', 'managed': 'False'},
-            'dn': ('django.db.models.fields.CharField', [], {'max_length': '200'})
-        },
-        u'members.member': {
-            'Meta': {'object_name': 'Member'},
-            'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
-            'country': ('django.db.models.fields.CharField', [], {'default': "'France'", 'max_length': '200', 'null': 'True', 'blank': 'True'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254'}),
-            'entry_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
-            'home_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'login': ('django.db.models.fields.CharField', [], {'max_length': '200', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
-            'mobile_phone_number': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
-            'organization_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}),
-            'resign_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '50'}),
-            'type': ('django.db.models.fields.CharField', [], {'default': "'natural_person'", 'max_length': '20'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"})
-        },
-        u'members.membershipfee': {
-            'Meta': {'object_name': 'MembershipFee'},
-            'amount': ('django.db.models.fields.IntegerField', [], {'default': "'20'"}),
-            'end_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2015, 8, 29, 0, 0)'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'member': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'membership_fees'", 'to': u"orm['members.Member']"}),
-            'start_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'})
-        }
-    }
-
-    complete_apps = ['members']

+ 76 - 100
coin/members/models.py

@@ -7,7 +7,7 @@ from django.db import models
 from django.db.models import Q
 from django.db.models import Q
 from django.db.models.signals import pre_save
 from django.db.models.signals import pre_save
 from django.dispatch import receiver
 from django.dispatch import receiver
-from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
+from django.contrib.auth.models import AbstractUser
 from ldapdb.models.fields import CharField, IntegerField, ListField
 from ldapdb.models.fields import CharField, IntegerField, ListField
 from south.modelsinspector import add_ignored_fields
 from south.modelsinspector import add_ignored_fields
 from coin.offers.models import OfferSubscription
 from coin.offers.models import OfferSubscription
@@ -16,52 +16,10 @@ from coin import utils
 from django.contrib.auth.signals import user_logged_in
 from django.contrib.auth.signals import user_logged_in
 from django.conf import settings
 from django.conf import settings
 
 
-class CoinUserManager(BaseUserManager):
-    def create_user(self, login, first_name, last_name, email, password=None):
-        """
-        """
-        if not login:
-            raise ValueError('Users must have a login')
-        if not email:
-            raise ValueError('Users must have an email address')
-        if not first_name:
-            raise ValueError('Users must have a first name')
-        if not last_name:
-            raise ValueError('Users must have a last name')
-        
-        user = self.model(
-            login=login,
-            email=self.normalize_email(email),
-            first_name=first_name,
-            last_name=last_name,
-        )
 
 
-        user.set_password(password)
-        user.save(using=self._db)
-        user.set_ldap_password(password)
-        return user
+class Member(CoinLdapSyncMixin, AbstractUser):
 
 
-    def create_superuser(self, login, first_name, last_name, email, password):
-        """
-        Creates and saves a superuser
-        """
-        user = self.create_user(
-            login=login,
-            email=email,
-            first_name=first_name,
-            last_name=last_name,
-            password=password
-        )
-        user.status = 'member'
-        user.is_superuser = True
-        user.is_staff = True
-        user.save(using=self._db)
-        return user
-
-
-class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
-
-    USERNAME_FIELD = 'login'
+    # USERNAME_FIELD = 'login'
     REQUIRED_FIELDS = ['first_name', 'last_name', 'email', ]
     REQUIRED_FIELDS = ['first_name', 'last_name', 'email', ]
 
 
     MEMBER_TYPE_CHOICES = (
     MEMBER_TYPE_CHOICES = (
@@ -74,26 +32,26 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
         ('pending', "Demande d'adhésion"),
         ('pending', "Demande d'adhésion"),
     )
     )
 
 
-    objects = CoinUserManager()
-    is_active = models.BooleanField(default=True)
-    is_staff = models.BooleanField(default=False, verbose_name='Administrateur COIN',
-                                    help_text='TODO')
+    # objects = CoinUserManager()
+    # is_active = models.BooleanField(default=True)
+    # is_staff = models.BooleanField(default=False, verbose_name='Administrateur COIN',
+    #                                 help_text='TODO')
 
 
     status = models.CharField(max_length=50, choices=MEMBER_STATUS_CHOICES,
     status = models.CharField(max_length=50, choices=MEMBER_STATUS_CHOICES,
                               default='pending')
                               default='pending')
     type = models.CharField(max_length=20, choices=MEMBER_TYPE_CHOICES,
     type = models.CharField(max_length=20, choices=MEMBER_TYPE_CHOICES,
                             default='natural_person')
                             default='natural_person')
-    first_name = models.CharField(max_length=200, verbose_name=u'Prénom')
-    last_name = models.CharField(max_length=200, verbose_name=u'Nom')
-    login = models.CharField(max_length=200, unique=True, null=True,
-                               blank=True,
-                               verbose_name='login',
-                               help_text='Clé avec le LDAP<br />Laisser vide pour '
-                               'le générer automatiquement')
+    # first_name = models.CharField(max_length=200, verbose_name=u'Prénom')
+    # last_name = models.CharField(max_length=200, verbose_name=u'Nom')
+    # login = models.CharField(max_length=200, unique=True, null=True,
+    #                            blank=True,
+    #                            verbose_name='login',
+    #                            help_text='Clé avec le LDAP<br />Laisser vide pour '
+    #                            'le générer automatiquement')
     organization_name = models.CharField(max_length=200, blank=True,
     organization_name = models.CharField(max_length=200, blank=True,
                                          verbose_name='Nom de l\'organisme',
                                          verbose_name='Nom de l\'organisme',
                                          help_text='Pour une personne morale')
                                          help_text='Pour une personne morale')
-    email = models.EmailField(max_length=254, verbose_name=u'Courriel')
+    # email = models.EmailField(max_length=254, verbose_name=u'Courriel')
     home_phone_number = models.CharField(max_length=25, blank=True,
     home_phone_number = models.CharField(max_length=25, blank=True,
                                          verbose_name=u'Téléphone fixe')
                                          verbose_name=u'Téléphone fixe')
     mobile_phone_number = models.CharField(max_length=25, blank=True,
     mobile_phone_number = models.CharField(max_length=25, blank=True,
@@ -118,6 +76,11 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
                                    verbose_name='Date de départ de '
                                    verbose_name='Date de départ de '
                                    'l\'association')
                                    'l\'association')
 
 
+    # This property is used to change password in LDAP. Used in sync_to_ldap.
+    # Should not be defined manually. Prefer use set_password method that hash
+    # passwords for both ldap and local db
+    _password_ldap = None
+
 
 
     def __unicode__(self):
     def __unicode__(self):
         name = self.first_name + ' ' + self.last_name
         name = self.first_name + ' ' + self.last_name
@@ -129,7 +92,7 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
         return '%s %s' % (self.first_name, self.last_name)
         return '%s %s' % (self.first_name, self.last_name)
 
 
     def get_short_name(self):
     def get_short_name(self):
-        return '%s' % self.login
+        return '%s' % self.username
 
 
     # Renvoie la date de fin de la dernière cotisation du membre
     # Renvoie la date de fin de la dernière cotisation du membre
     def end_date_of_membership(self):
     def end_date_of_membership(self):
@@ -149,13 +112,21 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
         else:
         else:
             return False
             return False
 
 
-    def set_ldap_password(self, new_password):
+    def set_password(self, new_password, *args, **kwargs):
         """
         """
-        Change password in LDAP
+        Définit le mot de passe a sauvegarder en base et dans le LDAP
         """
         """
-        ldap_user = LdapUser.objects.get(pk=self.login)
-        ldap_user.password = new_password
-        ldap_user.save()
+        super(Member, self).set_password(new_password, *args, **kwargs)
+        self._password_ldap = utils.ldap_hash(new_password)
+
+
+    # def set_ldap_password(self, new_password):
+    #     """
+    #     Change password in LDAP
+    #     """
+    #     ldap_user = LdapUser.objects.get(pk=self.username)
+    #     ldap_user.password = new_password
+    #     ldap_user.save()
         
         
     def get_active_subscriptions(self, date=datetime.date.today()):
     def get_active_subscriptions(self, date=datetime.date.today()):
         """
         """
@@ -166,9 +137,9 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
             Q(subscription_date__lte=date),
             Q(subscription_date__lte=date),
             Q(resign_date__isnull=True) | Q(resign_date__gte=date))
             Q(resign_date__isnull=True) | Q(resign_date__gte=date))
 
 
-    def get_automatic_login(self):
+    def get_automatic_username(self):
         """
         """
-        Calcul le login / ldap cn automatiquement en fonction
+        Calcul le username / ldap cn automatiquement en fonction
         du nom et du prénom
         du nom et du prénom
         """
         """
         # Première lettre de chaque partie du prénom
         # Première lettre de chaque partie du prénom
@@ -176,39 +147,44 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
             [c[0] for c in self.first_name.split('-')]
             [c[0] for c in self.first_name.split('-')]
         )
         )
         # Concaténer avec nom de famille
         # Concaténer avec nom de famille
-        login = ('%s%s' % (first_name_letters, self.last_name))
+        username = ('%s%s' % (first_name_letters, self.last_name))
         # Remplacer ou enlever les caractères non ascii
         # Remplacer ou enlever les caractères non ascii
-        login = unicodedata.normalize('NFD', login)\
+        username = unicodedata.normalize('NFD', username)\
             .encode('ascii', 'ignore')
             .encode('ascii', 'ignore')
         # Enlever ponctuation et espace
         # Enlever ponctuation et espace
-        login = login.translate(None, string.punctuation + ' ')
+        username = username.translate(None, string.punctuation + ' ')
         # En minuscule
         # En minuscule
-        login = login.lower()
+        username = username.lower()
 
 
-        return login
+        return username
 
 
     def sync_to_ldap(self, creation):
     def sync_to_ldap(self, creation):
         """
         """
         Update LDAP data when a member is saved
         Update LDAP data when a member is saved
         """
         """
 
 
-        assert self.login, ('Can\'t sync with LDAP because missing login '
+        assert self.username, ('Can\'t sync with LDAP because missing username '
                               'value for the Member : %s' % self)
                               'value for the Member : %s' % self)
 
 
         if not creation:
         if not creation:
-            ldap_user = LdapUser.objects.get(pk=self.login)
+            ldap_user = LdapUser.objects.get(pk=self.username)
 
 
         if creation:
         if creation:
             max_uid_number = LdapUser.objects.order_by('-uidNumber')[0].uidNumber
             max_uid_number = LdapUser.objects.order_by('-uidNumber')[0].uidNumber
-
             ldap_user = LdapUser()
             ldap_user = LdapUser()
-            ldap_user.pk = self.login
-            ldap_user.uid = self.login
-            ldap_user.nick_name = self.login
+            ldap_user.pk = self.username
+            ldap_user.uid = self.username
+            ldap_user.nick_name = self.username
             ldap_user.uidNumber = max_uid_number + 1
             ldap_user.uidNumber = max_uid_number + 1
 
 
         ldap_user.last_name = self.last_name
         ldap_user.last_name = self.last_name
         ldap_user.first_name = self.first_name
         ldap_user.first_name = self.first_name
+        
+        #If a password is definied in _password_ldap, change it in LDAP
+        if self._password_ldap:
+            #Make sure password is hashed
+            ldap_user.password = utils.ldap_hash(self._password_ldap)
+
         ldap_user.save()
         ldap_user.save()
 
 
         if creation:
         if creation:
@@ -220,26 +196,26 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
         """
         """
         Delete member from the LDAP
         Delete member from the LDAP
         """
         """
-        assert self.login, ('Can\'t delete from LDAP because missing '
-                              'login value for the Member : %s' % self)
+        assert self.username, ('Can\'t delete from LDAP because missing '
+                              'username value for the Member : %s' % self)
 
 
         # Lorsqu'un membre est supprimé du SI, son utilisateur LDAP
         # Lorsqu'un membre est supprimé du SI, son utilisateur LDAP
         # correspondant est sorti du groupe "coin" afin qu'il n'ait plus
         # correspondant est sorti du groupe "coin" afin qu'il n'ait plus
         # accès au SI
         # accès au SI
         ldap_group = LdapGroup.objects.get(pk='coin')
         ldap_group = LdapGroup.objects.get(pk='coin')
-        if self.login in ldap_group.members:
-            ldap_group.members.remove(self.login)
+        if self.username in ldap_group.members:
+            ldap_group.members.remove(self.username)
             ldap_group.save()
             ldap_group.save()
 
 
-    def has_perm(self, perm, obj=None):
-        "Does the user have a specific permission?"
-        # Simplest possible answer: Yes, always
-        return True
+    # def has_perm(self, perm, obj=None):
+    #     "Does the user have a specific permission?"
+    #     # Simplest possible answer: Yes, always
+    #     return True
 
 
-    def has_module_perms(self, app_label):
-        "Does the user have permissions to view the app `app_label`?"
-        # Simplest possible answer: Yes, always
-        return True
+    # def has_module_perms(self, app_label):
+    #     "Does the user have permissions to view the app `app_label`?"
+    #     # Simplest possible answer: Yes, always
+    #     return True
 
 
     class Meta:
     class Meta:
         verbose_name = 'membre'
         verbose_name = 'membre'
@@ -335,23 +311,23 @@ add_ignored_fields(["^ldapdb\.models\.fields"])
 
 
 
 
 @receiver(pre_save, sender=Member)
 @receiver(pre_save, sender=Member)
-def define_login(sender, instance, **kwargs):
+def define_username(sender, instance, **kwargs):
     """
     """
-    Lors de la sauvegarde d'un membre. Si le champ login n'est pas définit,
+    Lors de la sauvegarde d'un membre. Si le champ username n'est pas définit,
     le calcul automatiquement en fonction du nom et du prénom
     le calcul automatiquement en fonction du nom et du prénom
     """
     """
-    if not instance.login and not instance.pk:
-        instance.login = instance.get_automatic_login()
+    if not instance.username and not instance.pk:
+        instance.username = instance.get_automatic_username()
 
 
 
 
-@receiver(pre_save, sender=LdapUser)
-def change_password(sender, instance, **kwargs):
-    """
-    Lors de la sauvegarde d'un utilisateur Ldap, cette fonction est exécutée
-    avant la sauvegarde pour chiffrer le mot de passe s'il est définit
-    et s'il n'est pas déjà chiffré
-    """
-    instance.password = utils.ldap_hash(instance.password)
+# @receiver(pre_save, sender=LdapUser)
+# def change_password(sender, instance, **kwargs):
+#     """
+#     Lors de la sauvegarde d'un utilisateur Ldap, cette fonction est exécutée
+#     avant la sauvegarde pour chiffrer le mot de passe s'il est définit
+#     et s'il n'est pas déjà chiffré
+#     """
+#     instance.password = utils.ldap_hash(instance.password)
 
 
 
 
 @receiver(pre_save, sender=LdapUser)
 @receiver(pre_save, sender=LdapUser)