\n"
@@ -20,7 +20,8 @@ msgstr "activité"
#: apps/activity/forms.py:45 apps/activity/models.py:217
msgid "You can't invite someone once the activity is started."
-msgstr "Vous ne pouvez pas inviter quelqu'un une fois que l'activité a démarré."
+msgstr ""
+"Vous ne pouvez pas inviter quelqu'un une fois que l'activité a démarré."
#: apps/activity/forms.py:48 apps/activity/models.py:220
msgid "This activity is not validated yet."
@@ -39,9 +40,9 @@ msgid "You can't invite more than 3 people to this activity."
msgstr "Vous ne pouvez pas inviter plus de 3 personnes à cette activité."
#: apps/activity/models.py:23 apps/activity/models.py:48
-#: apps/member/models.py:64 apps/member/models.py:122
+#: apps/member/models.py:66 apps/member/models.py:169
#: apps/note/models/notes.py:188 apps/note/models/transactions.py:24
-#: apps/note/models/transactions.py:44 apps/note/models/transactions.py:231
+#: apps/note/models/transactions.py:44 apps/note/models/transactions.py:232
#: templates/member/club_info.html:13 templates/member/profile_info.html:14
msgid "name"
msgstr "nom"
@@ -63,7 +64,7 @@ msgid "activity types"
msgstr "types d'activité"
#: apps/activity/models.py:53 apps/note/models/transactions.py:69
-#: apps/permission/models.py:90 templates/activity/activity_detail.html:16
+#: apps/permission/models.py:103 templates/activity/activity_detail.html:16
msgid "description"
msgstr "description"
@@ -73,7 +74,7 @@ msgstr "description"
msgid "type"
msgstr "type"
-#: apps/activity/models.py:66 apps/logs/models.py:21
+#: apps/activity/models.py:66 apps/logs/models.py:21 apps/member/models.py:190
#: apps/note/models/notes.py:117
msgid "user"
msgstr "utilisateur"
@@ -164,11 +165,11 @@ msgstr "supprimer"
msgid "Type"
msgstr "Type"
-#: apps/activity/tables.py:77 apps/treasury/forms.py:120
+#: apps/activity/tables.py:77 apps/treasury/forms.py:121
msgid "Last name"
msgstr "Nom de famille"
-#: apps/activity/tables.py:79 apps/treasury/forms.py:122
+#: apps/activity/tables.py:79 apps/treasury/forms.py:123
#: templates/note/transaction_form.html:92
msgid "First name"
msgstr "Prénom"
@@ -181,11 +182,11 @@ msgstr "Note"
msgid "Balance"
msgstr "Solde du compte"
-#: apps/activity/views.py:44 templates/base.html:94
+#: apps/activity/views.py:45 templates/base.html:94
msgid "Activities"
msgstr "Activités"
-#: apps/activity/views.py:149
+#: apps/activity/views.py:153
msgid "Entry for activity \"{}\""
msgstr "Entrées pour l'activité « {} »"
@@ -246,65 +247,77 @@ msgstr "Les logs ne peuvent pas être détruits."
msgid "member"
msgstr "adhérent"
-#: apps/member/models.py:26
+#: apps/member/models.py:28
msgid "phone number"
msgstr "numéro de téléphone"
-#: apps/member/models.py:32 templates/member/profile_info.html:27
+#: apps/member/models.py:34 templates/member/profile_info.html:27
msgid "section"
msgstr "section"
-#: apps/member/models.py:33
+#: apps/member/models.py:35
msgid "e.g. \"1A0\", \"9A♥\", \"SAPHIRE\""
msgstr "e.g. \"1A0\", \"9A♥\", \"SAPHIRE\""
-#: apps/member/models.py:39 templates/member/profile_info.html:30
+#: apps/member/models.py:41 templates/member/profile_info.html:30
msgid "address"
msgstr "adresse"
-#: apps/member/models.py:45
+#: apps/member/models.py:47
msgid "paid"
msgstr "payé"
-#: apps/member/models.py:50 apps/member/models.py:51
+#: apps/member/models.py:52 apps/member/models.py:53
msgid "user profile"
msgstr "profil utilisateur"
-#: apps/member/models.py:69 templates/member/club_info.html:36
+#: apps/member/models.py:71 templates/member/club_info.html:46
msgid "email"
msgstr "courriel"
-#: apps/member/models.py:76
+#: apps/member/models.py:78
msgid "parent club"
msgstr "club parent"
-#: apps/member/models.py:81 templates/member/club_info.html:30
-msgid "membership fee"
-msgstr "cotisation pour adhérer"
+#: apps/member/models.py:87
+msgid "require memberships"
+msgstr "nécessite des adhésions"
-#: apps/member/models.py:85 templates/member/club_info.html:27
+#: apps/member/models.py:88
+msgid "Uncheck if this club don't require memberships."
+msgstr "Décochez si ce club n'utilise pas d'adhésions."
+
+#: apps/member/models.py:93 templates/member/club_info.html:35
+msgid "membership fee (paid students)"
+msgstr "cotisation pour adhérer (normalien élève)"
+
+#: apps/member/models.py:98 templates/member/club_info.html:38
+msgid "membership fee (unpaid students)"
+msgstr "cotisation pour adhérer (normalien étudiant)"
+
+#: apps/member/models.py:104 templates/member/club_info.html:28
msgid "membership duration"
msgstr "durée de l'adhésion"
-#: apps/member/models.py:86
-msgid "The longest time a membership can last (NULL = infinite)."
-msgstr "La durée maximale d'une adhésion (NULL = infinie)."
+#: apps/member/models.py:105
+msgid "The longest time (in days) a membership can last (NULL = infinite)."
+msgstr "La durée maximale (en jours) d'une adhésion (NULL = infinie)."
-#: apps/member/models.py:91 templates/member/club_info.html:21
+#: apps/member/models.py:112 templates/member/club_info.html:22
msgid "membership start"
msgstr "début de l'adhésion"
-#: apps/member/models.py:92
+#: apps/member/models.py:113
msgid "How long after January 1st the members can renew their membership."
msgstr ""
"Combien de temps après le 1er Janvier les adhérents peuvent renouveler leur "
"adhésion."
-#: apps/member/models.py:97 templates/member/club_info.html:24
+#: apps/member/models.py:120 templates/member/club_info.html:25
msgid "membership end"
msgstr "fin de l'adhésion"
-#: apps/member/models.py:98
+#: apps/member/models.py:121
msgid ""
"How long the membership can last after January 1st of the next year after "
"members can renew their membership."
@@ -312,59 +325,91 @@ msgstr ""
"Combien de temps l'adhésion peut durer après le 1er Janvier de l'année "
"suivante avant que les adhérents peuvent renouveler leur adhésion."
-#: apps/member/models.py:104 apps/note/models/notes.py:139
+#: apps/member/models.py:154 apps/member/models.py:196
+#: apps/note/models/notes.py:139
msgid "club"
msgstr "club"
-#: apps/member/models.py:105
+#: apps/member/models.py:155
msgid "clubs"
msgstr "clubs"
-#: apps/member/models.py:128 apps/permission/models.py:275
+#: apps/member/models.py:175 apps/permission/models.py:288
msgid "role"
msgstr "rôle"
-#: apps/member/models.py:129
+#: apps/member/models.py:176 apps/member/models.py:201
msgid "roles"
msgstr "rôles"
-#: apps/member/models.py:153
+#: apps/member/models.py:205
msgid "membership starts on"
msgstr "l'adhésion commence le"
-#: apps/member/models.py:156
+#: apps/member/models.py:209
msgid "membership ends on"
-msgstr "l'adhésion finie le"
+msgstr "l'adhésion finit le"
-#: apps/member/models.py:160
+#: apps/member/models.py:214
msgid "fee"
msgstr "cotisation"
-#: apps/member/models.py:172
+#: apps/member/models.py:226 apps/member/views.py:383
msgid "User is not a member of the parent club"
msgstr "L'utilisateur n'est pas membre du club parent"
-#: apps/member/models.py:176
+#: apps/member/models.py:236 apps/member/views.py:392
+msgid "User is already a member of the club"
+msgstr "L'utilisateur est déjà membre du club"
+
+#: apps/member/models.py:271
+#, python-brace-format
+msgid "Membership of {user} for the club {club}"
+msgstr "Adhésion de {user} pour le club {club}"
+
+#: apps/member/models.py:274
msgid "membership"
msgstr "adhésion"
-#: apps/member/models.py:177
+#: apps/member/models.py:275
msgid "memberships"
msgstr "adhésions"
-#: apps/member/views.py:76 templates/member/profile_info.html:45
+#: apps/member/tables.py:73
+msgid "Renew"
+msgstr ""
+
+#: apps/member/views.py:80 templates/member/profile_info.html:45
msgid "Update Profile"
msgstr "Modifier le profil"
-#: apps/member/views.py:89
+#: apps/member/views.py:93
msgid "An alias with a similar name already exists."
msgstr "Un alias avec un nom similaire existe déjà."
+#: apps/member/views.py:379
+msgid ""
+"This user don't have enough money to join this club, and can't have a "
+"negative balance."
+msgstr ""
+
+#: apps/member/views.py:396 apps/member/views.py:428
+msgid "The membership must start after {:%m-%d-%Y}."
+msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}."
+
+#: apps/member/views.py:401 apps/member/views.py:433
+msgid "The membership must begin before {:%m-%d-%Y}."
+msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}."
+
+#: apps/member/views.py:455
+msgid "This membership is already renewed"
+msgstr "Cette adhésion est déjà renouvelée"
+
#: apps/note/admin.py:120 apps/note/models/transactions.py:94
msgid "source"
msgstr "source"
-#: apps/note/admin.py:128 apps/note/admin.py:156
+#: apps/note/admin.py:128 apps/note/admin.py:163
#: apps/note/models/transactions.py:53 apps/note/models/transactions.py:107
msgid "destination"
msgstr "destination"
@@ -462,7 +507,7 @@ msgstr "Alias invalide"
msgid "alias"
msgstr "alias"
-#: apps/note/models/notes.py:211 templates/member/club_info.html:33
+#: apps/note/models/notes.py:211 templates/member/club_info.html:43
#: templates/member/profile_info.html:36
msgid "aliases"
msgstr "alias"
@@ -524,45 +569,45 @@ msgstr "raison"
msgid "invalidity reason"
msgstr "Motif d'invalidité"
-#: apps/note/models/transactions.py:146
+#: apps/note/models/transactions.py:147
msgid "transaction"
msgstr "transaction"
-#: apps/note/models/transactions.py:147
+#: apps/note/models/transactions.py:148
msgid "transactions"
msgstr "transactions"
-#: apps/note/models/transactions.py:201 templates/base.html:84
+#: apps/note/models/transactions.py:202 templates/base.html:84
#: templates/note/transaction_form.html:19
#: templates/note/transaction_form.html:140
msgid "Transfer"
msgstr "Virement"
-#: apps/note/models/transactions.py:221
+#: apps/note/models/transactions.py:222
msgid "Template"
msgstr "Bouton"
-#: apps/note/models/transactions.py:236
+#: apps/note/models/transactions.py:237
msgid "first_name"
msgstr "prénom"
-#: apps/note/models/transactions.py:241
+#: apps/note/models/transactions.py:242
msgid "bank"
msgstr "banque"
-#: apps/note/models/transactions.py:247 templates/note/transaction_form.html:24
+#: apps/note/models/transactions.py:248 templates/note/transaction_form.html:24
msgid "Credit"
msgstr "Crédit"
-#: apps/note/models/transactions.py:247 templates/note/transaction_form.html:28
+#: apps/note/models/transactions.py:248 templates/note/transaction_form.html:28
msgid "Debit"
msgstr "Débit"
-#: apps/note/models/transactions.py:263 apps/note/models/transactions.py:268
+#: apps/note/models/transactions.py:264 apps/note/models/transactions.py:269
msgid "membership transaction"
msgstr "transaction d'adhésion"
-#: apps/note/models/transactions.py:264
+#: apps/note/models/transactions.py:265
msgid "membership transactions"
msgstr "transactions d'adhésion"
@@ -578,29 +623,29 @@ msgstr "Cliquez pour valider"
msgid "No reason specified"
msgstr "Pas de motif spécifié"
-#: apps/note/views.py:41
+#: apps/note/views.py:39
msgid "Transfer money"
msgstr "Transférer de l'argent"
-#: apps/note/views.py:102 templates/base.html:79
+#: apps/note/views.py:100 templates/base.html:79
msgid "Consumptions"
msgstr "Consommations"
-#: apps/permission/models.py:69 apps/permission/models.py:262
+#: apps/permission/models.py:82 apps/permission/models.py:275
#, python-brace-format
msgid "Can {type} {model}.{field} in {query}"
msgstr ""
-#: apps/permission/models.py:71 apps/permission/models.py:264
+#: apps/permission/models.py:84 apps/permission/models.py:277
#, python-brace-format
msgid "Can {type} {model} in {query}"
msgstr ""
-#: apps/permission/models.py:84
+#: apps/permission/models.py:97
msgid "rank"
msgstr "Rang"
-#: apps/permission/models.py:147
+#: apps/permission/models.py:160
msgid "Specifying field applies only to view and change permission types."
msgstr ""
@@ -608,31 +653,32 @@ msgstr ""
msgid "Treasury"
msgstr "Trésorerie"
-#: apps/treasury/forms.py:84 apps/treasury/forms.py:132
+#: apps/treasury/forms.py:85 apps/treasury/forms.py:133
#: templates/activity/activity_form.html:9
#: templates/activity/activity_invite.html:8
#: templates/django_filters/rest_framework/form.html:5
-#: templates/member/club_form.html:9 templates/treasury/invoice_form.html:46
+#: templates/member/add_members.html:14 templates/member/club_form.html:9
+#: templates/treasury/invoice_form.html:46
msgid "Submit"
msgstr "Envoyer"
-#: apps/treasury/forms.py:86
+#: apps/treasury/forms.py:87
msgid "Close"
msgstr "Fermer"
-#: apps/treasury/forms.py:95
+#: apps/treasury/forms.py:96
msgid "Remittance is already closed."
msgstr "La remise est déjà fermée."
-#: apps/treasury/forms.py:100
+#: apps/treasury/forms.py:101
msgid "You can't change the type of the remittance."
msgstr "Vous ne pouvez pas changer le type de la remise."
-#: apps/treasury/forms.py:124 templates/note/transaction_form.html:98
+#: apps/treasury/forms.py:125 templates/note/transaction_form.html:98
msgid "Bank"
msgstr "Banque"
-#: apps/treasury/forms.py:126 apps/treasury/tables.py:47
+#: apps/treasury/forms.py:127 apps/treasury/tables.py:47
#: templates/note/transaction_form.html:128
#: templates/treasury/remittance_form.html:18
msgid "Amount"
@@ -881,19 +927,23 @@ msgstr "Ajouter un alias"
msgid "Club Parent"
msgstr "Club parent"
-#: templates/member/club_info.html:41
+#: templates/member/club_info.html:29
+msgid "days"
+msgstr "jours"
+
+#: templates/member/club_info.html:32
+msgid "membership fee"
+msgstr "cotisation pour adhérer"
+
+#: templates/member/club_info.html:52
msgid "Add member"
msgstr "Ajouter un membre"
-#: templates/member/club_info.html:42 templates/note/conso_form.html:121
+#: templates/member/club_info.html:55 templates/note/conso_form.html:121
msgid "Edit"
msgstr "Éditer"
-#: templates/member/club_info.html:43
-msgid "Add roles"
-msgstr "Ajouter des rôles"
-
-#: templates/member/club_info.html:46 templates/member/profile_info.html:48
+#: templates/member/club_info.html:59 templates/member/profile_info.html:48
msgid "View Profile"
msgstr "Voir le profil"
@@ -902,8 +952,8 @@ msgid "search clubs"
msgstr "Chercher un club"
#: templates/member/club_list.html:12
-msgid "Créer un club"
-msgstr ""
+msgid "Create club"
+msgstr "Créer un club"
#: templates/member/club_list.html:19
msgid "club listing "
diff --git a/note_kfet/inputs.py b/note_kfet/inputs.py
index a3170007..ecd758e0 100644
--- a/note_kfet/inputs.py
+++ b/note_kfet/inputs.py
@@ -299,4 +299,4 @@ class YearPickerInput(BasePickerInput):
def _link_to(self, linked_picker):
"""Customize the options when linked with other date-time input"""
yformat = self.config['options']['format'].replace('-01-01', '-12-31')
- self.config['options']['format'] = yformat
\ No newline at end of file
+ self.config['options']['format'] = yformat
diff --git a/static/js/base.js b/static/js/base.js
index 22d1366a..7febd3d6 100644
--- a/static/js/base.js
+++ b/static/js/base.js
@@ -70,7 +70,7 @@ function refreshBalance() {
* @param fun For each found note with the matched alias `alias`, fun(note, alias) is called.
*/
function getMatchedNotes(pattern, fun) {
- $.getJSON("/api/note/alias/?format=json&alias=" + pattern + "&search=user|club&ordering=normalized_name", fun);
+ $.getJSON("/api/note/alias/?format=json&alias=" + pattern + "&search=user|club|activity&ordering=normalized_name", fun);
}
/**
diff --git a/templates/activity/activity_detail.html b/templates/activity/activity_detail.html
index 0ed3c719..84182065 100644
--- a/templates/activity/activity_detail.html
+++ b/templates/activity/activity_detail.html
@@ -25,7 +25,7 @@
{% trans 'end date'|capfirst %}
{{ activity.date_end }}
- {% if "view_"|has_perm:activity.creater %}
+ {% if ".view_"|has_perm:activity.creater %}
{% trans 'creater'|capfirst %}
{{ activity.creater }}
{% endif %}
@@ -53,17 +53,17 @@
diff --git a/templates/member/noteowner_detail.html b/templates/member/noteowner_detail.html
index ad329aee..fc781549 100644
--- a/templates/member/noteowner_detail.html
+++ b/templates/member/noteowner_detail.html
@@ -19,7 +19,7 @@
{% block extrajavascript %}
{% endblock %}