Generic profiles and migrations.
Creating profiles for BDS, COF and K-Fêt.
This commit is contained in:
parent
5aff771d9c
commit
f39d1545f0
9 changed files with 246 additions and 47 deletions
23
cof/admin.py
23
cof/admin.py
|
@ -131,7 +131,7 @@ def ProfileInfo(field, short_description, boolean=False):
|
|||
def getter(self):
|
||||
try:
|
||||
return getattr(self.profile, field)
|
||||
except CofProfile.DoesNotExist:
|
||||
except Profile.DoesNotExist:
|
||||
return ""
|
||||
getter.short_description = short_description
|
||||
getter.boolean = boolean
|
||||
|
@ -139,13 +139,14 @@ def ProfileInfo(field, short_description, boolean=False):
|
|||
|
||||
User.profile_login_clipper = FkeyLookup("profile__login_clipper",
|
||||
"Login clipper")
|
||||
User.profile_num = FkeyLookup("profile__num", "Numéro")
|
||||
User.profile_num = FkeyLookup("profile__cofprofile__num",
|
||||
"Numéro")
|
||||
User.profile_phone = ProfileInfo("phone", "Téléphone")
|
||||
User.profile_occupation = ProfileInfo("occupation", "Occupation")
|
||||
User.profile_departement = ProfileInfo("departement", "Departement")
|
||||
User.profile_mailing_cof = ProfileInfo("mailing_cof", "ML COF", True)
|
||||
User.profile_mailing_bda = ProfileInfo("mailing_bda", "ML BdA", True)
|
||||
User.profile_mailing_bda_revente = ProfileInfo("mailing_bda_revente",
|
||||
User.profile_mailing_cof = ProfileInfo("cof__mailing", "ML COF", True)
|
||||
User.profile_mailing_bda = ProfileInfo("cof__mailing_bda", "ML BdA", True)
|
||||
User.profile_mailing_bda_revente = ProfileInfo("cof__mailing_bda_revente",
|
||||
"ML BdA-R", True)
|
||||
|
||||
|
||||
|
@ -172,12 +173,14 @@ class UserProfileAdmin(UserAdmin):
|
|||
'profile_mailing_bda_revente', 'is_cof', 'is_buro', )
|
||||
list_display_links = ('username', 'email', 'first_name', 'last_name')
|
||||
list_filter = UserAdmin.list_filter \
|
||||
+ ('profile__is_cof', 'profile__is_buro', 'profile__mailing_cof',
|
||||
'profile__mailing_bda')
|
||||
+ ('profile__cof__is_cof',
|
||||
'profile__cof__is_buro',
|
||||
'profile__cof__mailing',
|
||||
'profile__cof__mailing_bda')
|
||||
search_fields = UserAdmin.search_fields + ('profile__phone',)
|
||||
inlines = [
|
||||
CofProfileInline,
|
||||
]
|
||||
# inlines = [
|
||||
# CofProfileInline,
|
||||
# ]
|
||||
|
||||
staff_fieldsets = [
|
||||
(None, {'fields': ['username', 'password']}),
|
||||
|
|
84
cof/migrations/0009_generic_profiles.py
Normal file
84
cof/migrations/0009_generic_profiles.py
Normal file
|
@ -0,0 +1,84 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
def create_profile(apps, schema_editor):
|
||||
CofProfile = apps.get_model("cof", "CofProfile")
|
||||
Profile = apps.get_model("gestion", "Profile")
|
||||
for p in CofProfile.objects.all():
|
||||
profile = Profile.objects.create(
|
||||
id=p.id,
|
||||
user=p.user,
|
||||
login_clipper=p.login_clipper,
|
||||
phone=p.phone,
|
||||
occupation=p.occupation,
|
||||
departement=p.departement,
|
||||
comments=p.comments
|
||||
)
|
||||
p.profile = profile
|
||||
p.save()
|
||||
|
||||
|
||||
def remove_profile(apps, schema_editor):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('gestion', '0001_initial'),
|
||||
('cof', '0008_py3'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='cofprofile',
|
||||
old_name='mailing_cof',
|
||||
new_name='mailing',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cofprofile',
|
||||
name='profile',
|
||||
field=models.OneToOneField(
|
||||
to='gestion.Profile',
|
||||
null=True,
|
||||
related_name='cof'
|
||||
),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.RunPython(create_profile, remove_profile),
|
||||
migrations.RemoveField(
|
||||
model_name='cofprofile',
|
||||
name='comments',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='cofprofile',
|
||||
name='departement',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='cofprofile',
|
||||
name='login_clipper',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='cofprofile',
|
||||
name='occupation',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='cofprofile',
|
||||
name='phone',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cofprofile',
|
||||
name='profile',
|
||||
field=models.OneToOneField(
|
||||
to='gestion.Profile',
|
||||
related_name='cof'
|
||||
),
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='cofprofile',
|
||||
name='user',
|
||||
),
|
||||
]
|
|
@ -12,20 +12,10 @@ from django.utils.encoding import python_2_unicode_compatible
|
|||
import django.utils.six as six
|
||||
from django.db.models.signals import post_save, post_delete
|
||||
|
||||
from .petits_cours_models import choices_length
|
||||
|
||||
from gestion.models import Profile
|
||||
from bda.models import Spectacle
|
||||
|
||||
OCCUPATION_CHOICES = (
|
||||
('exterieur', _("Extérieur")),
|
||||
('1A', _("1A")),
|
||||
('2A', _("2A")),
|
||||
('3A', _("3A")),
|
||||
('4A', _("4A")),
|
||||
('archicube', _("Archicube")),
|
||||
('doctorant', _("Doctorant")),
|
||||
('CST', _("CST")),
|
||||
)
|
||||
from .petits_cours_models import choices_length
|
||||
|
||||
TYPE_COTIZ_CHOICES = (
|
||||
('etudiant', _("Normalien étudiant")),
|
||||
|
@ -39,32 +29,26 @@ TYPE_COMMENT_FIELD = (
|
|||
)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class CofProfile(models.Model):
|
||||
user = models.OneToOneField(User, related_name="profile")
|
||||
login_clipper = models.CharField("Login clipper", max_length=8, blank=True)
|
||||
is_cof = models.BooleanField("Membre du COF", default=False)
|
||||
profile = models.OneToOneField(Profile,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="cof")
|
||||
|
||||
num = models.IntegerField("Numéro d'adhérent", blank=True, default=0)
|
||||
phone = models.CharField("Téléphone", max_length=20, blank=True)
|
||||
occupation = models.CharField(_("Occupation"),
|
||||
default="1A",
|
||||
choices=OCCUPATION_CHOICES,
|
||||
max_length=choices_length(
|
||||
OCCUPATION_CHOICES))
|
||||
departement = models.CharField(_("Département"), max_length=50,
|
||||
blank=True)
|
||||
type_cotiz = models.CharField(_("Type de cotisation"),
|
||||
default="normalien",
|
||||
choices=TYPE_COTIZ_CHOICES,
|
||||
max_length=choices_length(
|
||||
TYPE_COTIZ_CHOICES))
|
||||
mailing_cof = models.BooleanField("Recevoir les mails COF", default=False)
|
||||
mailing = models.BooleanField("Recevoir les mails COF", default=False)
|
||||
# XXX. remove the following and use django auth.
|
||||
is_buro = models.BooleanField("Membre du Burô", default=False)
|
||||
is_cof = models.BooleanField("Membre du COF", default=False)
|
||||
# XXX. remove the following and put in a BDA profile
|
||||
mailing_bda = models.BooleanField("Recevoir les mails BdA", default=False)
|
||||
mailing_bda_revente = models.BooleanField(
|
||||
"Recevoir les mails de revente de places BdA", default=False)
|
||||
comments = models.TextField(
|
||||
"Commentaires visibles par l'utilisateur", blank=True)
|
||||
is_buro = models.BooleanField("Membre du Burô", default=False)
|
||||
|
||||
petits_cours_accept = models.BooleanField(
|
||||
"Recevoir des petits cours", default=False)
|
||||
petits_cours_remarques = models.TextField(
|
||||
|
@ -76,7 +60,7 @@ class CofProfile(models.Model):
|
|||
verbose_name_plural = "Profils COF"
|
||||
|
||||
def __str__(self):
|
||||
return six.text_type(self.user.username)
|
||||
return self.user.username
|
||||
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue