Browse Source

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

Fabs 10 years ago
parent
commit
a33b3cb074

+ 8 - 38
coin/members/admin.py

@@ -20,50 +20,20 @@ class MembershipFeeInline(admin.TabularInline):
 
 
 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')
-    list_display_links = ('id', 'login', 'first_name', 'last_name')
+    list_display_links = ('id', 'username', 'first_name', 'last_name')
     list_filter = ('status', MembershipFeeFilter)
-    search_fields = ['login', 'first_name', 'last_name', 'email']
+    search_fields = ['username', 'first_name', 'last_name', 'email']
     ordering = ('last_name',)
     actions = ['set_as_member', 'set_as_non_member']
 
     form = MemberChangeForm
     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}
 
@@ -73,7 +43,7 @@ class MemberAdmin(UserAdmin):
     
     def get_readonly_fields(self, request, obj=None):
         if obj:
-            return ['login',]
+            return ['username',]
         else:
             return []
 
@@ -98,5 +68,5 @@ class MembershipFeeAdmin(admin.ModelAdmin):
 
 admin.site.register(Member, MemberAdmin)
 admin.site.register(MembershipFee, MembershipFeeAdmin)
-admin.site.unregister(Group)
+# admin.site.unregister(Group)
 # admin.site.register(LdapUser, LdapUserAdmin)

+ 35 - 3
coin/members/forms.py

@@ -10,7 +10,23 @@ class MemberCreationForm(forms.ModelForm):
 
     class Meta:
         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):
         """
@@ -20,7 +36,7 @@ class MemberCreationForm(forms.ModelForm):
         member.set_password(self.cleaned_data["password"])
         if commit:
             member.member()
-            member.set_ldap_password(self.cleaned_data["password"])
+            # member.set_ldap_password(self.cleaned_data["password"])
         return member
 
 
@@ -29,7 +45,23 @@ class MemberChangeForm(forms.ModelForm):
 
     class Meta:
         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):
         # 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 -*-
-import datetime
+from south.utils import datetime_utils as datetime
 from south.db import db
 from south.v2 import SchemaMigration
 from django.db import models
@@ -11,21 +11,48 @@ class Migration(SchemaMigration):
         # Adding model 'Member'
         db.create_table(u'members_member', (
             (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)),
-            ('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)),
             ('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'])
 
+        # 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'
         db.create_table(u'members_cryptokey', (
             (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'])
 
+        # 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):
         # Deleting model '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'
         db.delete_table(u'members_cryptokey')
 
+        # Deleting model 'MembershipFee'
+        db.delete_table(u'members_membershipfee')
+
 
     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'}),
@@ -52,25 +118,48 @@ class Migration(SchemaMigration):
             '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.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'}),
             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'}),
             '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.signals import pre_save
 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 south.modelsinspector import add_ignored_fields
 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.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', ]
 
     MEMBER_TYPE_CHOICES = (
@@ -74,26 +32,26 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
         ('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,
                               default='pending')
     type = models.CharField(max_length=20, choices=MEMBER_TYPE_CHOICES,
                             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,
                                          verbose_name='Nom de l\'organisme',
                                          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,
                                          verbose_name=u'Téléphone fixe')
     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 '
                                    '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):
         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)
 
     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
     def end_date_of_membership(self):
@@ -149,13 +112,21 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
         else:
             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()):
         """
@@ -166,9 +137,9 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
             Q(subscription_date__lte=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
         """
         # 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('-')]
         )
         # 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
-        login = unicodedata.normalize('NFD', login)\
+        username = unicodedata.normalize('NFD', username)\
             .encode('ascii', 'ignore')
         # Enlever ponctuation et espace
-        login = login.translate(None, string.punctuation + ' ')
+        username = username.translate(None, string.punctuation + ' ')
         # En minuscule
-        login = login.lower()
+        username = username.lower()
 
-        return login
+        return username
 
     def sync_to_ldap(self, creation):
         """
         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)
 
         if not creation:
-            ldap_user = LdapUser.objects.get(pk=self.login)
+            ldap_user = LdapUser.objects.get(pk=self.username)
 
         if creation:
             max_uid_number = LdapUser.objects.order_by('-uidNumber')[0].uidNumber
-
             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.last_name = self.last_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()
 
         if creation:
@@ -220,26 +196,26 @@ class Member(CoinLdapSyncMixin, AbstractBaseUser, PermissionsMixin):
         """
         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
         # correspondant est sorti du groupe "coin" afin qu'il n'ait plus
         # accès au SI
         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()
 
-    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:
         verbose_name = 'membre'
@@ -335,23 +311,23 @@ add_ignored_fields(["^ldapdb\.models\.fields"])
 
 
 @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
     """
-    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)