Compare commits

...

5 Commits

Author SHA1 Message Date
Yohann D'ANELLO f597b6dbd8 Prevent creating club when there exists an alias that is similar to the name of the club 2020-07-28 23:16:38 +02:00
Yohann D'ANELLO 3a4145e4d9 Woops, roles didn't have the permissions 2020-07-28 20:56:22 +02:00
Yohann D'ANELLO 54ce157019 Store clothing cut and size in WEI registration 2020-07-28 20:49:32 +02:00
Yohann D'ANELLO 7c6bab88f4 Update permissions to see buses 2020-07-28 20:22:10 +02:00
Yohann D'ANELLO 12ebf9d12a Before checking membership roles, we wait before the creation of the membership 2020-07-28 19:38:25 +02:00
9 changed files with 231 additions and 103 deletions

View File

@ -5,7 +5,7 @@ from django import forms
from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from note.models import NoteSpecial from note.models import NoteSpecial, Alias
from note_kfet.inputs import Autocomplete, AmountInput, DatePickerInput from note_kfet.inputs import Autocomplete, AmountInput, DatePickerInput
from permission.models import PermissionMask, Role from permission.models import PermissionMask, Role
@ -38,6 +38,15 @@ class ProfileForm(forms.ModelForm):
class ClubForm(forms.ModelForm): class ClubForm(forms.ModelForm):
def clean(self):
cleaned_data = super().clean()
if not self.instance.pk: # Creating a club
if Alias.objects.filter(normalized_name=Alias.normalize(self.cleaned_data["name"])).exists():
self.add_error('name', _("An alias with a similar name already exists."))
return cleaned_data
class Meta: class Meta:
model = Club model = Club
fields = '__all__' fields = '__all__'

View File

@ -302,12 +302,13 @@ class Membership(models.Model):
if not Membership.objects.filter(user=self.user, club=self.club.parent_club).exists(): if not Membership.objects.filter(user=self.user, club=self.club.parent_club).exists():
raise ValidationError(_('User is not a member of the parent club') + ' ' + self.club.parent_club.name) raise ValidationError(_('User is not a member of the parent club') + ' ' + self.club.parent_club.name)
for role in self.roles.all(): if self.pk:
club = role.for_club for role in self.roles.all():
if club is not None: club = role.for_club
if club.pk != self.club_id: if club is not None:
raise ValidationError(_('The role {role} does not apply to the club {club}.') if club.pk != self.club_id:
.format(role=role.name, club=club.name)) raise ValidationError(_('The role {role} does not apply to the club {club}.')
.format(role=role.name, club=club.name))
created = not self.pk created = not self.pk
if created: if created:

View File

@ -1743,7 +1743,7 @@
"wei", "wei",
"bus" "bus"
], ],
"query": "[\"AND\", {\"wei\": [\"club\"]}, [\"OR\", [\"NOT\", [\"membership\", \"registration\", \"first_year\"]], {\"wei__date_end__lte\": [\"today\"]}]]", "query": "[\"AND\", {\"wei\": [\"club\"]}, [\"OR\", [\"NOT\", [\"membership\", \"weimembership\", \"registration\", \"first_year\"]], {\"wei__date_end__lte\": [\"today\"]}]]",
"type": "view", "type": "view",
"mask": 1, "mask": 1,
"field": "", "field": "",
@ -1759,7 +1759,7 @@
"wei", "wei",
"busteam" "busteam"
], ],
"query": "[\"AND\", {\"bus__wei\": [\"club\"]}, [\"OR\", [\"NOT\", [\"membership\", \"registration\", \"first_year\"]], {\"bus__wei__date_end__lte\": [\"today\"]}]]", "query": "[\"AND\", {\"bus__wei\": [\"club\"]}, [\"OR\", [\"NOT\", [\"membership\", \"weimembership\", \"registration\", \"first_year\"]], {\"bus__wei__date_end__lte\": [\"today\"]}]]",
"type": "view", "type": "view",
"mask": 1, "mask": 1,
"field": "", "field": "",
@ -2055,6 +2055,70 @@
"description": "Update validation status of a club transaction if possible" "description": "Update validation status of a club transaction if possible"
} }
}, },
{
"model": "permission.permission",
"pk": 128,
"fields": {
"model": [
"wei",
"weiregistration"
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 1,
"field": "clothing_cut",
"permanent": false,
"description": "Update the clothing cut field of any WEI Registration"
}
},
{
"model": "permission.permission",
"pk": 129,
"fields": {
"model": [
"wei",
"weiregistration"
],
"query": "[\"AND\", {\"user\": [\"user\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"]}, [\"OR\", {\"wei\": [\"club\"]}, {\"wei__year\": [\"today\", \"year\"], \"membership\": null}]]",
"type": "change",
"mask": 1,
"field": "clothing_cut",
"permanent": false,
"description": "Update the clothing cut field of my own WEI Registration"
}
},
{
"model": "permission.permission",
"pk": 130,
"fields": {
"model": [
"wei",
"weiregistration"
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 1,
"field": "clothing_size",
"permanent": false,
"description": "Update the clothing size field of any WEI Registration"
}
},
{
"model": "permission.permission",
"pk": 131,
"fields": {
"model": [
"wei",
"weiregistration"
],
"query": "[\"AND\", {\"user\": [\"user\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"]}, [\"OR\", {\"wei\": [\"club\"]}, {\"wei__year\": [\"today\", \"year\"], \"membership\": null}]]",
"type": "change",
"mask": 1,
"field": "clothing_size",
"permanent": false,
"description": "Update the clothing size field of my own WEI Registration"
}
},
{ {
"model": "permission.role", "model": "permission.role",
"pk": 1, "pk": 1,
@ -2431,7 +2495,9 @@
110, 110,
111, 111,
112, 112,
113 113,
130,
131
] ]
} }
}, },
@ -2510,7 +2576,9 @@
101, 101,
108, 108,
109, 109,
114 114,
128,
130
] ]
} }
}, },

View File

@ -238,6 +238,9 @@ class Permission(models.Model):
field = Permission.compute_param(value[i], **kwargs) field = Permission.compute_param(value[i], **kwargs)
continue continue
if not hasattr(field, value[i][0]):
return False
field = getattr(field, value[i][0]) field = getattr(field, value[i][0])
params = [] params = []
call_kwargs = {} call_kwargs = {}
@ -251,6 +254,9 @@ class Permission(models.Model):
params.append(param) params.append(param)
field = field(*params, **call_kwargs) field = field(*params, **call_kwargs)
else: else:
if not hasattr(field, value[i]):
return False
field = getattr(field, value[i]) field = getattr(field, value[i])
return field return field
@ -275,7 +281,7 @@ class Permission(models.Model):
elif query[0] == 'NOT': elif query[0] == 'NOT':
return ~Permission._about(query[1], **kwargs) return ~Permission._about(query[1], **kwargs)
else: else:
return Q(pk=F("pk")) return Q(pk=F("pk")) if Permission.compute_param(query, **kwargs) else ~Q(pk=F("pk"))
elif isinstance(query, dict): elif isinstance(query, dict):
q_kwargs = {} q_kwargs = {}
for key in query: for key in query:

View File

@ -76,7 +76,7 @@ class PermissionQueryTestCase(TestCase):
model = perm.model.model_class() model = perm.model.model_class()
model.objects.filter(query).all() model.objects.filter(query).all()
# print("Good query for permission", perm) # print("Good query for permission", perm)
except (FieldError, AttributeError, ValueError): except (FieldError, AttributeError, ValueError, TypeError):
print("Query error for permission", perm) print("Query error for permission", perm)
print("Query:", perm.query) print("Query:", perm.query)
if instanced.query: if instanced.query:

View File

@ -190,6 +190,28 @@ class WEIRegistration(models.Model):
verbose_name=_("gender"), verbose_name=_("gender"),
) )
clothing_cut = models.CharField(
max_length=16,
choices=(
('male', _("Male")),
('female', _("Female")),
),
verbose_name=_("clothing cut"),
)
clothing_size = models.CharField(
max_length=4,
choices=(
('XS',"XS"),
('S', "S"),
('M', "M"),
('L', "L"),
('XL', "XL"),
('XXL', "XXL"),
),
verbose_name=_("clothing size"),
)
health_issues = models.TextField( health_issues = models.TextField(
blank=True, blank=True,
default="", default="",

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-25 19:55+0200\n" "POT-Creation-Date: 2020-07-28 20:42+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -46,7 +46,7 @@ msgstr ""
#: apps/activity/models.py:23 apps/activity/models.py:48 #: apps/activity/models.py:23 apps/activity/models.py:48
#: apps/member/models.py:151 apps/note/models/notes.py:188 #: apps/member/models.py:151 apps/note/models/notes.py:188
#: apps/note/models/transactions.py:25 apps/note/models/transactions.py:45 #: apps/note/models/transactions.py:25 apps/note/models/transactions.py:45
#: apps/note/models/transactions.py:261 apps/permission/models.py:315 #: apps/note/models/transactions.py:261 apps/permission/models.py:321
#: apps/wei/models.py:65 apps/wei/models.py:117 #: apps/wei/models.py:65 apps/wei/models.py:117
#: templates/member/club_info.html:13 templates/member/profile_info.html:14 #: templates/member/club_info.html:13 templates/member/profile_info.html:14
#: templates/registration/future_profile_detail.html:16 #: templates/registration/future_profile_detail.html:16
@ -205,11 +205,11 @@ msgstr ""
msgid "Balance" msgid "Balance"
msgstr "" msgstr ""
#: apps/activity/views.py:44 templates/base.html:120 #: apps/activity/views.py:47 templates/base.html:120
msgid "Activities" msgid "Activities"
msgstr "" msgstr ""
#: apps/activity/views.py:160 #: apps/activity/views.py:163
msgid "Entry for activity \"{}\"" msgid "Entry for activity \"{}\""
msgstr "" msgstr ""
@ -505,29 +505,29 @@ msgstr ""
msgid "fee" msgid "fee"
msgstr "" msgstr ""
#: apps/member/models.py:303 apps/member/views.py:527 apps/wei/views.py:768 #: apps/member/models.py:303 apps/member/views.py:527 apps/wei/views.py:770
msgid "User is not a member of the parent club" msgid "User is not a member of the parent club"
msgstr "" msgstr ""
#: apps/member/models.py:309 #: apps/member/models.py:310
#, python-brace-format #, python-brace-format
msgid "The role {role} does not apply to the club {club}." msgid "The role {role} does not apply to the club {club}."
msgstr "" msgstr ""
#: apps/member/models.py:320 apps/member/views.py:536 #: apps/member/models.py:321 apps/member/views.py:536
msgid "User is already a member of the club" msgid "User is already a member of the club"
msgstr "" msgstr ""
#: apps/member/models.py:371 #: apps/member/models.py:372
#, python-brace-format #, python-brace-format
msgid "Membership of {user} for the club {club}" msgid "Membership of {user} for the club {club}"
msgstr "" msgstr ""
#: apps/member/models.py:374 #: apps/member/models.py:375
msgid "membership" msgid "membership"
msgstr "" msgstr ""
#: apps/member/models.py:375 #: apps/member/models.py:376
msgid "memberships" msgid "memberships"
msgstr "" msgstr ""
@ -553,7 +553,7 @@ msgstr ""
msgid "Search user" msgid "Search user"
msgstr "" msgstr ""
#: apps/member/views.py:522 apps/wei/views.py:759 #: apps/member/views.py:522 apps/wei/views.py:761
msgid "" msgid ""
"This user don't have enough money to join this club, and can't have a " "This user don't have enough money to join this club, and can't have a "
"negative balance." "negative balance."
@ -883,7 +883,7 @@ msgstr ""
msgid "permission" msgid "permission"
msgstr "" msgstr ""
#: apps/permission/models.py:187 apps/permission/models.py:320 #: apps/permission/models.py:187 apps/permission/models.py:326
msgid "permissions" msgid "permissions"
msgstr "" msgstr ""
@ -891,11 +891,11 @@ msgstr ""
msgid "Specifying field applies only to view and change permission types." msgid "Specifying field applies only to view and change permission types."
msgstr "" msgstr ""
#: apps/permission/models.py:325 #: apps/permission/models.py:331
msgid "for club" msgid "for club"
msgstr "" msgstr ""
#: apps/permission/models.py:335 apps/permission/models.py:336 #: apps/permission/models.py:341 apps/permission/models.py:342
msgid "role permissions" msgid "role permissions"
msgstr "" msgstr ""
@ -1178,7 +1178,7 @@ msgid "WEI"
msgstr "" msgstr ""
#: apps/wei/forms/registration.py:47 apps/wei/models.py:112 #: apps/wei/forms/registration.py:47 apps/wei/models.py:112
#: apps/wei/models.py:275 #: apps/wei/models.py:297
msgid "bus" msgid "bus"
msgstr "" msgstr ""
@ -1271,11 +1271,11 @@ msgstr ""
msgid "birth date" msgid "birth date"
msgstr "" msgstr ""
#: apps/wei/models.py:186 #: apps/wei/models.py:186 apps/wei/models.py:196
msgid "Male" msgid "Male"
msgstr "" msgstr ""
#: apps/wei/models.py:187 #: apps/wei/models.py:187 apps/wei/models.py:197
msgid "Female" msgid "Female"
msgstr "" msgstr ""
@ -1287,75 +1287,83 @@ msgstr ""
msgid "gender" msgid "gender"
msgstr "" msgstr ""
#: apps/wei/models.py:196 templates/wei/weimembership_form.html:65 #: apps/wei/models.py:199
msgid "clothing cut"
msgstr ""
#: apps/wei/models.py:212
msgid "clothing size"
msgstr ""
#: apps/wei/models.py:218 templates/wei/weimembership_form.html:65
msgid "health issues" msgid "health issues"
msgstr "" msgstr ""
#: apps/wei/models.py:201 templates/wei/weimembership_form.html:68 #: apps/wei/models.py:223 templates/wei/weimembership_form.html:68
msgid "emergency contact name" msgid "emergency contact name"
msgstr "" msgstr ""
#: apps/wei/models.py:206 templates/wei/weimembership_form.html:71 #: apps/wei/models.py:228 templates/wei/weimembership_form.html:71
msgid "emergency contact phone" msgid "emergency contact phone"
msgstr "" msgstr ""
#: apps/wei/models.py:211 templates/wei/weimembership_form.html:74 #: apps/wei/models.py:233 templates/wei/weimembership_form.html:74
msgid "" msgid ""
"Register on the mailing list to stay informed of the events of the campus (1 " "Register on the mailing list to stay informed of the events of the campus (1 "
"mail/week)" "mail/week)"
msgstr "" msgstr ""
#: apps/wei/models.py:216 templates/wei/weimembership_form.html:77 #: apps/wei/models.py:238 templates/wei/weimembership_form.html:77
msgid "" msgid ""
"Register on the mailing list to stay informed of the sport events of the " "Register on the mailing list to stay informed of the sport events of the "
"campus (1 mail/week)" "campus (1 mail/week)"
msgstr "" msgstr ""
#: apps/wei/models.py:221 templates/wei/weimembership_form.html:80 #: apps/wei/models.py:243 templates/wei/weimembership_form.html:80
msgid "" msgid ""
"Register on the mailing list to stay informed of the art events of the " "Register on the mailing list to stay informed of the art events of the "
"campus (1 mail/week)" "campus (1 mail/week)"
msgstr "" msgstr ""
#: apps/wei/models.py:226 templates/wei/weimembership_form.html:56 #: apps/wei/models.py:248 templates/wei/weimembership_form.html:56
msgid "first year" msgid "first year"
msgstr "" msgstr ""
#: apps/wei/models.py:227 #: apps/wei/models.py:249
msgid "Tells if the user is new in the school." msgid "Tells if the user is new in the school."
msgstr "" msgstr ""
#: apps/wei/models.py:232 #: apps/wei/models.py:254
msgid "registration information" msgid "registration information"
msgstr "" msgstr ""
#: apps/wei/models.py:233 #: apps/wei/models.py:255
msgid "" msgid ""
"Information about the registration (buses for old members, survey fot the " "Information about the registration (buses for old members, survey fot the "
"new members), encoded in JSON" "new members), encoded in JSON"
msgstr "" msgstr ""
#: apps/wei/models.py:264 #: apps/wei/models.py:286
msgid "WEI User" msgid "WEI User"
msgstr "" msgstr ""
#: apps/wei/models.py:265 #: apps/wei/models.py:287
msgid "WEI Users" msgid "WEI Users"
msgstr "" msgstr ""
#: apps/wei/models.py:285 #: apps/wei/models.py:307
msgid "team" msgid "team"
msgstr "" msgstr ""
#: apps/wei/models.py:295 #: apps/wei/models.py:317
msgid "WEI registration" msgid "WEI registration"
msgstr "" msgstr ""
#: apps/wei/models.py:299 #: apps/wei/models.py:321
msgid "WEI membership" msgid "WEI membership"
msgstr "" msgstr ""
#: apps/wei/models.py:300 #: apps/wei/models.py:322
msgid "WEI memberships" msgid "WEI memberships"
msgstr "" msgstr ""
@ -1381,45 +1389,45 @@ msgstr ""
msgid "members" msgid "members"
msgstr "" msgstr ""
#: apps/wei/views.py:201 #: apps/wei/views.py:203
msgid "Find WEI Membership" msgid "Find WEI Membership"
msgstr "" msgstr ""
#: apps/wei/views.py:236 #: apps/wei/views.py:238
msgid "Find WEI Registration" msgid "Find WEI Registration"
msgstr "" msgstr ""
#: apps/wei/views.py:445 templates/wei/weiclub_info.html:62 #: apps/wei/views.py:447 templates/wei/weiclub_info.html:62
msgid "Register 1A" msgid "Register 1A"
msgstr "" msgstr ""
#: apps/wei/views.py:466 apps/wei/views.py:535 #: apps/wei/views.py:468 apps/wei/views.py:537
msgid "This user is already registered to this WEI." msgid "This user is already registered to this WEI."
msgstr "" msgstr ""
#: apps/wei/views.py:471 #: apps/wei/views.py:473
msgid "" msgid ""
"This user can't be in her/his first year since he/she has already participed " "This user can't be in her/his first year since he/she has already participed "
"to a WEI." "to a WEI."
msgstr "" msgstr ""
#: apps/wei/views.py:499 templates/wei/weiclub_info.html:65 #: apps/wei/views.py:501 templates/wei/weiclub_info.html:65
msgid "Register 2A+" msgid "Register 2A+"
msgstr "" msgstr ""
#: apps/wei/views.py:517 apps/wei/views.py:604 #: apps/wei/views.py:519 apps/wei/views.py:606
msgid "You already opened an account in the Société générale." msgid "You already opened an account in the Société générale."
msgstr "" msgstr ""
#: apps/wei/views.py:664 #: apps/wei/views.py:666
msgid "You don't have the right to delete this WEI registration." msgid "You don't have the right to delete this WEI registration."
msgstr "" msgstr ""
#: apps/wei/views.py:763 #: apps/wei/views.py:765
msgid "This user didn't give her/his caution check." msgid "This user didn't give her/his caution check."
msgstr "" msgstr ""
#: apps/wei/views.py:837 apps/wei/views.py:857 apps/wei/views.py:867 #: apps/wei/views.py:839 apps/wei/views.py:859 apps/wei/views.py:869
#: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12
#: templates/wei/survey_end.html:12 #: templates/wei/survey_end.html:12
msgid "Survey WEI" msgid "Survey WEI"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-25 19:55+0200\n" "POT-Creation-Date: 2020-07-28 20:42+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -47,7 +47,7 @@ msgstr "Vous ne pouvez pas inviter plus de 3 personnes à cette activité."
#: apps/activity/models.py:23 apps/activity/models.py:48 #: apps/activity/models.py:23 apps/activity/models.py:48
#: apps/member/models.py:151 apps/note/models/notes.py:188 #: apps/member/models.py:151 apps/note/models/notes.py:188
#: apps/note/models/transactions.py:25 apps/note/models/transactions.py:45 #: apps/note/models/transactions.py:25 apps/note/models/transactions.py:45
#: apps/note/models/transactions.py:261 apps/permission/models.py:315 #: apps/note/models/transactions.py:261 apps/permission/models.py:321
#: apps/wei/models.py:65 apps/wei/models.py:117 #: apps/wei/models.py:65 apps/wei/models.py:117
#: templates/member/club_info.html:13 templates/member/profile_info.html:14 #: templates/member/club_info.html:13 templates/member/profile_info.html:14
#: templates/registration/future_profile_detail.html:16 #: templates/registration/future_profile_detail.html:16
@ -206,11 +206,11 @@ msgstr "Note"
msgid "Balance" msgid "Balance"
msgstr "Solde du compte" msgstr "Solde du compte"
#: apps/activity/views.py:44 templates/base.html:120 #: apps/activity/views.py:47 templates/base.html:120
msgid "Activities" msgid "Activities"
msgstr "Activités" msgstr "Activités"
#: apps/activity/views.py:160 #: apps/activity/views.py:163
msgid "Entry for activity \"{}\"" msgid "Entry for activity \"{}\""
msgstr "Entrées pour l'activité « {} »" msgstr "Entrées pour l'activité « {} »"
@ -510,29 +510,29 @@ msgstr "l'adhésion finit le"
msgid "fee" msgid "fee"
msgstr "cotisation" msgstr "cotisation"
#: apps/member/models.py:303 apps/member/views.py:527 apps/wei/views.py:768 #: apps/member/models.py:303 apps/member/views.py:527 apps/wei/views.py:770
msgid "User is not a member of the parent club" msgid "User is not a member of the parent club"
msgstr "L'utilisateur n'est pas membre du club parent" msgstr "L'utilisateur n'est pas membre du club parent"
#: apps/member/models.py:309 #: apps/member/models.py:310
#, python-brace-format #, python-brace-format
msgid "The role {role} does not apply to the club {club}." msgid "The role {role} does not apply to the club {club}."
msgstr "Le rôle {role} ne s'applique pas au club {club}." msgstr "Le rôle {role} ne s'applique pas au club {club}."
#: apps/member/models.py:320 apps/member/views.py:536 #: apps/member/models.py:321 apps/member/views.py:536
msgid "User is already a member of the club" msgid "User is already a member of the club"
msgstr "L'utilisateur est déjà membre du club" msgstr "L'utilisateur est déjà membre du club"
#: apps/member/models.py:371 #: apps/member/models.py:372
#, python-brace-format #, python-brace-format
msgid "Membership of {user} for the club {club}" msgid "Membership of {user} for the club {club}"
msgstr "Adhésion de {user} pour le club {club}" msgstr "Adhésion de {user} pour le club {club}"
#: apps/member/models.py:374 #: apps/member/models.py:375
msgid "membership" msgid "membership"
msgstr "adhésion" msgstr "adhésion"
#: apps/member/models.py:375 #: apps/member/models.py:376
msgid "memberships" msgid "memberships"
msgstr "adhésions" msgstr "adhésions"
@ -558,7 +558,7 @@ msgstr "Un alias avec un nom similaire existe déjà."
msgid "Search user" msgid "Search user"
msgstr "Chercher un utilisateur" msgstr "Chercher un utilisateur"
#: apps/member/views.py:522 apps/wei/views.py:759 #: apps/member/views.py:522 apps/wei/views.py:761
msgid "" msgid ""
"This user don't have enough money to join this club, and can't have a " "This user don't have enough money to join this club, and can't have a "
"negative balance." "negative balance."
@ -766,8 +766,8 @@ msgid ""
"The transaction can't be saved since the source note or the destination note " "The transaction can't be saved since the source note or the destination note "
"is not active." "is not active."
msgstr "" msgstr ""
"La transaction ne peut pas être sauvegardée puisque la note source ou la note " "La transaction ne peut pas être sauvegardée puisque la note source ou la "
"de destination n'est pas active." "note de destination n'est pas active."
#: apps/note/models/transactions.py:228 #: apps/note/models/transactions.py:228
#: templates/activity/activity_entry.html:13 templates/base.html:98 #: templates/activity/activity_entry.html:13 templates/base.html:98
@ -803,8 +803,8 @@ msgid ""
"A special transaction is only possible between a Note associated to a " "A special transaction is only possible between a Note associated to a "
"payment method and a User or a Club" "payment method and a User or a Club"
msgstr "" msgstr ""
"Une transaction spéciale n'est possible que entre une note associée à " "Une transaction spéciale n'est possible que entre une note associée à un "
"un mode de paiement et un utilisateur ou un club." "mode de paiement et un utilisateur ou un club."
#: apps/note/models/transactions.py:305 apps/note/models/transactions.py:310 #: apps/note/models/transactions.py:305 apps/note/models/transactions.py:310
msgid "membership transaction" msgid "membership transaction"
@ -897,7 +897,7 @@ msgstr "permanent"
msgid "permission" msgid "permission"
msgstr "permission" msgstr "permission"
#: apps/permission/models.py:187 apps/permission/models.py:320 #: apps/permission/models.py:187 apps/permission/models.py:326
msgid "permissions" msgid "permissions"
msgstr "permissions" msgstr "permissions"
@ -907,11 +907,11 @@ msgstr ""
"Spécifie le champ concerné, ne fonctionne que pour les permissions view et " "Spécifie le champ concerné, ne fonctionne que pour les permissions view et "
"change." "change."
#: apps/permission/models.py:325 #: apps/permission/models.py:331
msgid "for club" msgid "for club"
msgstr "s'applique au club" msgstr "s'applique au club"
#: apps/permission/models.py:335 apps/permission/models.py:336 #: apps/permission/models.py:341 apps/permission/models.py:342
msgid "role permissions" msgid "role permissions"
msgstr "Permissions par rôles" msgstr "Permissions par rôles"
@ -1207,7 +1207,7 @@ msgid "WEI"
msgstr "WEI" msgstr "WEI"
#: apps/wei/forms/registration.py:47 apps/wei/models.py:112 #: apps/wei/forms/registration.py:47 apps/wei/models.py:112
#: apps/wei/models.py:275 #: apps/wei/models.py:297
msgid "bus" msgid "bus"
msgstr "Bus" msgstr "Bus"
@ -1307,11 +1307,11 @@ msgstr "Chèque de caution donné"
msgid "birth date" msgid "birth date"
msgstr "date de naissance" msgstr "date de naissance"
#: apps/wei/models.py:186 #: apps/wei/models.py:186 apps/wei/models.py:196
msgid "Male" msgid "Male"
msgstr "Homme" msgstr "Homme"
#: apps/wei/models.py:187 #: apps/wei/models.py:187 apps/wei/models.py:197
msgid "Female" msgid "Female"
msgstr "Femme" msgstr "Femme"
@ -1323,19 +1323,27 @@ msgstr "Non-binaire"
msgid "gender" msgid "gender"
msgstr "genre" msgstr "genre"
#: apps/wei/models.py:196 templates/wei/weimembership_form.html:65 #: apps/wei/models.py:199
msgid "clothing cut"
msgstr "coupe de vêtement"
#: apps/wei/models.py:212
msgid "clothing size"
msgstr "taille de vêtement"
#: apps/wei/models.py:218 templates/wei/weimembership_form.html:65
msgid "health issues" msgid "health issues"
msgstr "problèmes de santé" msgstr "problèmes de santé"
#: apps/wei/models.py:201 templates/wei/weimembership_form.html:68 #: apps/wei/models.py:223 templates/wei/weimembership_form.html:68
msgid "emergency contact name" msgid "emergency contact name"
msgstr "Nom du contact en cas d'urgence" msgstr "Nom du contact en cas d'urgence"
#: apps/wei/models.py:206 templates/wei/weimembership_form.html:71 #: apps/wei/models.py:228 templates/wei/weimembership_form.html:71
msgid "emergency contact phone" msgid "emergency contact phone"
msgstr "Téléphone du contact en cas d'urgence" msgstr "Téléphone du contact en cas d'urgence"
#: apps/wei/models.py:211 templates/wei/weimembership_form.html:74 #: apps/wei/models.py:233 templates/wei/weimembership_form.html:74
msgid "" msgid ""
"Register on the mailing list to stay informed of the events of the campus (1 " "Register on the mailing list to stay informed of the events of the campus (1 "
"mail/week)" "mail/week)"
@ -1343,7 +1351,7 @@ msgstr ""
"S'inscrire sur la liste de diffusion pour rester informé des événements sur " "S'inscrire sur la liste de diffusion pour rester informé des événements sur "
"le campus (1 mail par semaine)" "le campus (1 mail par semaine)"
#: apps/wei/models.py:216 templates/wei/weimembership_form.html:77 #: apps/wei/models.py:238 templates/wei/weimembership_form.html:77
msgid "" msgid ""
"Register on the mailing list to stay informed of the sport events of the " "Register on the mailing list to stay informed of the sport events of the "
"campus (1 mail/week)" "campus (1 mail/week)"
@ -1351,7 +1359,7 @@ msgstr ""
"S'inscrire sur la liste de diffusion pour rester informé des actualités " "S'inscrire sur la liste de diffusion pour rester informé des actualités "
"sportives sur le campus (1 mail par semaine)" "sportives sur le campus (1 mail par semaine)"
#: apps/wei/models.py:221 templates/wei/weimembership_form.html:80 #: apps/wei/models.py:243 templates/wei/weimembership_form.html:80
msgid "" msgid ""
"Register on the mailing list to stay informed of the art events of the " "Register on the mailing list to stay informed of the art events of the "
"campus (1 mail/week)" "campus (1 mail/week)"
@ -1359,19 +1367,19 @@ msgstr ""
"S'inscrire sur la liste de diffusion pour rester informé des actualités " "S'inscrire sur la liste de diffusion pour rester informé des actualités "
"artistiques sur le campus (1 mail par semaine)" "artistiques sur le campus (1 mail par semaine)"
#: apps/wei/models.py:226 templates/wei/weimembership_form.html:56 #: apps/wei/models.py:248 templates/wei/weimembership_form.html:56
msgid "first year" msgid "first year"
msgstr "première année" msgstr "première année"
#: apps/wei/models.py:227 #: apps/wei/models.py:249
msgid "Tells if the user is new in the school." msgid "Tells if the user is new in the school."
msgstr "Indique si l'utilisateur est nouveau dans l'école." msgstr "Indique si l'utilisateur est nouveau dans l'école."
#: apps/wei/models.py:232 #: apps/wei/models.py:254
msgid "registration information" msgid "registration information"
msgstr "informations sur l'inscription" msgstr "informations sur l'inscription"
#: apps/wei/models.py:233 #: apps/wei/models.py:255
msgid "" msgid ""
"Information about the registration (buses for old members, survey fot the " "Information about the registration (buses for old members, survey fot the "
"new members), encoded in JSON" "new members), encoded in JSON"
@ -1379,27 +1387,27 @@ msgstr ""
"Informations sur l'inscription (bus pour les 2A+, questionnaire pour les " "Informations sur l'inscription (bus pour les 2A+, questionnaire pour les "
"1A), encodées en JSON" "1A), encodées en JSON"
#: apps/wei/models.py:264 #: apps/wei/models.py:286
msgid "WEI User" msgid "WEI User"
msgstr "Participant au WEI" msgstr "Participant au WEI"
#: apps/wei/models.py:265 #: apps/wei/models.py:287
msgid "WEI Users" msgid "WEI Users"
msgstr "Participants au WEI" msgstr "Participants au WEI"
#: apps/wei/models.py:285 #: apps/wei/models.py:307
msgid "team" msgid "team"
msgstr "équipe" msgstr "équipe"
#: apps/wei/models.py:295 #: apps/wei/models.py:317
msgid "WEI registration" msgid "WEI registration"
msgstr "inscription au WEI" msgstr "inscription au WEI"
#: apps/wei/models.py:299 #: apps/wei/models.py:321
msgid "WEI membership" msgid "WEI membership"
msgstr "adhésion au WEI" msgstr "adhésion au WEI"
#: apps/wei/models.py:300 #: apps/wei/models.py:322
msgid "WEI memberships" msgid "WEI memberships"
msgstr "adhésions au WEI" msgstr "adhésions au WEI"
@ -1425,23 +1433,23 @@ msgstr "Nombre de membres"
msgid "members" msgid "members"
msgstr "adhérents" msgstr "adhérents"
#: apps/wei/views.py:201 #: apps/wei/views.py:203
msgid "Find WEI Membership" msgid "Find WEI Membership"
msgstr "Trouver une adhésion au WEI" msgstr "Trouver une adhésion au WEI"
#: apps/wei/views.py:236 #: apps/wei/views.py:238
msgid "Find WEI Registration" msgid "Find WEI Registration"
msgstr "Trouver une inscription au WEI" msgstr "Trouver une inscription au WEI"
#: apps/wei/views.py:445 templates/wei/weiclub_info.html:62 #: apps/wei/views.py:447 templates/wei/weiclub_info.html:62
msgid "Register 1A" msgid "Register 1A"
msgstr "Inscrire un 1A" msgstr "Inscrire un 1A"
#: apps/wei/views.py:466 apps/wei/views.py:535 #: apps/wei/views.py:468 apps/wei/views.py:537
msgid "This user is already registered to this WEI." msgid "This user is already registered to this WEI."
msgstr "Cette personne est déjà inscrite au WEI." msgstr "Cette personne est déjà inscrite au WEI."
#: apps/wei/views.py:471 #: apps/wei/views.py:473
msgid "" msgid ""
"This user can't be in her/his first year since he/she has already participed " "This user can't be in her/his first year since he/she has already participed "
"to a WEI." "to a WEI."
@ -1449,23 +1457,23 @@ msgstr ""
"Cet utilisateur ne peut pas être en première année puisqu'iel a déjà " "Cet utilisateur ne peut pas être en première année puisqu'iel a déjà "
"participé à un WEI." "participé à un WEI."
#: apps/wei/views.py:499 templates/wei/weiclub_info.html:65 #: apps/wei/views.py:501 templates/wei/weiclub_info.html:65
msgid "Register 2A+" msgid "Register 2A+"
msgstr "Inscrire un 2A+" msgstr "Inscrire un 2A+"
#: apps/wei/views.py:517 apps/wei/views.py:604 #: apps/wei/views.py:519 apps/wei/views.py:606
msgid "You already opened an account in the Société générale." msgid "You already opened an account in the Société générale."
msgstr "Vous avez déjà ouvert un compte auprès de la société générale." msgstr "Vous avez déjà ouvert un compte auprès de la société générale."
#: apps/wei/views.py:664 #: apps/wei/views.py:666
msgid "You don't have the right to delete this WEI registration." msgid "You don't have the right to delete this WEI registration."
msgstr "Vous n'avez pas la permission de supprimer cette inscription au WEI." msgstr "Vous n'avez pas la permission de supprimer cette inscription au WEI."
#: apps/wei/views.py:763 #: apps/wei/views.py:765
msgid "This user didn't give her/his caution check." msgid "This user didn't give her/his caution check."
msgstr "Cet utilisateur n'a pas donné son chèque de caution." msgstr "Cet utilisateur n'a pas donné son chèque de caution."
#: apps/wei/views.py:837 apps/wei/views.py:857 apps/wei/views.py:867 #: apps/wei/views.py:839 apps/wei/views.py:859 apps/wei/views.py:869
#: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12
#: templates/wei/survey_end.html:12 #: templates/wei/survey_end.html:12
msgid "Survey WEI" msgid "Survey WEI"

View File

@ -59,6 +59,12 @@
<dt class="col-xl-6">{% trans 'gender'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'gender'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.gender }}</dd> <dd class="col-xl-6">{{ registration.gender }}</dd>
<dt class="col-xl-6">{% trans 'clothing cut'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.clothing_cut }}</dd>
<dt class="col-xl-6">{% trans 'clothing size'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.clothing_size }}</dd>
<dt class="col-xl-6">{% trans 'birth date'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'birth date'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.birth_date }}</dd> <dd class="col-xl-6">{{ registration.birth_date }}</dd>