diff --git a/core/templates/core/500.jinja b/core/templates/core/500.jinja
new file mode 100644
index 00000000..493d64ba
--- /dev/null
+++ b/core/templates/core/500.jinja
@@ -0,0 +1,15 @@
+{% extends "core/base.jinja" %}
+{% block head %}
+{{ super() }}
+
+{% endblock head %}
+
+{% block content %}
+
{% trans %}500, Server Error{% endtrans %}
+ {% if request.sentry_dsn %}
+
+{% endif %}
+{% endblock content %}
diff --git a/core/views/__init__.py b/core/views/__init__.py
index 7045b7f7..1b9b33e2 100644
--- a/core/views/__init__.py
+++ b/core/views/__init__.py
@@ -24,8 +24,14 @@
import types
+from sentry_sdk import last_event_id
from django.shortcuts import render
-from django.http import HttpResponseForbidden, HttpResponseNotFound
+from django.http import (
+ HttpResponseForbidden,
+ HttpResponseNotFound,
+ HttpResponseServerError,
+)
+from django.template import RequestContext
from django.core.exceptions import (
PermissionDenied,
ObjectDoesNotExist,
@@ -65,6 +71,12 @@ def not_found(request):
return HttpResponseNotFound(render(request, "core/404.jinja"))
+def internal_servor_error(request):
+ request.sentry_dsn = settings.SENTRY_DSN
+ request.sentry_last_event_id = last_event_id
+ return HttpResponseServerError(render(request, "core/500.jinja"))
+
+
def can_edit_prop(obj, user):
if obj is None or user.is_owner(obj):
return True
diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index cd7fe02a..e8bb944d 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-09-20 14:41+0200\n"
+"POT-Creation-Date: 2018-10-10 02:17+0200\n"
"PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia \n"
"Language-Team: AE info \n"
@@ -16,168 +16,169 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: accounting/models.py:59 accounting/models.py:108 accounting/models.py:136
-#: accounting/models.py:195 club/models.py:47 com/models.py:198
-#: com/models.py:212 core/templates/core/base.jinja:297 counter/models.py:113
-#: counter/models.py:140 counter/models.py:184 forum/models.py:54
-#: launderette/models.py:38 launderette/models.py:84 launderette/models.py:110
-#: stock/models.py:38 stock/models.py:54 stock/models.py:77 stock/models.py:97
+#: accounting/models.py:61 accounting/models.py:110 accounting/models.py:138
+#: accounting/models.py:203 club/models.py:48 com/models.py:231
+#: com/models.py:248 core/templates/core/base.jinja:296 counter/models.py:119
+#: counter/models.py:147 counter/models.py:209 forum/models.py:58
+#: launderette/models.py:38 launderette/models.py:90 launderette/models.py:125
+#: stock/models.py:40 stock/models.py:60 stock/models.py:100
+#: stock/models.py:127
msgid "name"
msgstr "nom"
-#: accounting/models.py:60
+#: accounting/models.py:62
msgid "street"
msgstr "rue"
-#: accounting/models.py:61
+#: accounting/models.py:63
msgid "city"
msgstr "ville"
-#: accounting/models.py:62
+#: accounting/models.py:64
msgid "postcode"
msgstr "code postal"
-#: accounting/models.py:63
+#: accounting/models.py:65
msgid "country"
msgstr "pays"
-#: accounting/models.py:64 core/models.py:198
+#: accounting/models.py:66 core/models.py:258
msgid "phone"
msgstr "téléphone"
-#: accounting/models.py:65
+#: accounting/models.py:67
msgid "email"
msgstr "email"
-#: accounting/models.py:66
+#: accounting/models.py:68
msgid "website"
msgstr "site internet"
-#: accounting/models.py:69
+#: accounting/models.py:71
msgid "company"
msgstr "entreprise"
-#: accounting/models.py:109
+#: accounting/models.py:111
msgid "iban"
msgstr "IBAN"
-#: accounting/models.py:110
+#: accounting/models.py:112
msgid "account number"
msgstr "numero de compte"
-#: accounting/models.py:111 accounting/models.py:137 club/models.py:227
-#: com/models.py:73 com/models.py:187 com/models.py:214 counter/models.py:149
-#: counter/models.py:185 trombi/models.py:149
+#: accounting/models.py:113 accounting/models.py:139 club/models.py:266
+#: com/models.py:75 com/models.py:219 com/models.py:252 counter/models.py:164
+#: counter/models.py:210 trombi/models.py:205
msgid "club"
msgstr "club"
-#: accounting/models.py:114
+#: accounting/models.py:116
msgid "Bank account"
msgstr "Compte en banque"
-#: accounting/models.py:138
+#: accounting/models.py:141
msgid "bank account"
msgstr "compte en banque"
-#: accounting/models.py:141
+#: accounting/models.py:145
msgid "Club account"
msgstr "Compte club"
-#: accounting/models.py:186
+#: accounting/models.py:190
#, python-format
msgid "%(club_account)s on %(bank_account)s"
msgstr "%(club_account)s sur %(bank_account)s"
-#: accounting/models.py:193 club/models.py:228 counter/models.py:466
-#: election/models.py:17 launderette/models.py:148
+#: accounting/models.py:201 club/models.py:268 counter/models.py:589
+#: election/models.py:18 launderette/models.py:180
msgid "start date"
msgstr "date de début"
-#: accounting/models.py:194 club/models.py:229 counter/models.py:467
-#: election/models.py:18
+#: accounting/models.py:202 club/models.py:269 counter/models.py:590
+#: election/models.py:19
msgid "end date"
msgstr "date de fin"
-#: accounting/models.py:196
+#: accounting/models.py:204
msgid "is closed"
msgstr "est fermé"
-#: accounting/models.py:197 accounting/models.py:421
+#: accounting/models.py:206 accounting/models.py:521
msgid "club account"
msgstr "compte club"
-#: accounting/models.py:198 accounting/models.py:255 counter/models.py:53
-#: counter/models.py:298
+#: accounting/models.py:208 accounting/models.py:268 counter/models.py:54
+#: counter/models.py:346
msgid "amount"
msgstr "montant"
-#: accounting/models.py:199
+#: accounting/models.py:209
msgid "effective_amount"
msgstr "montant effectif"
-#: accounting/models.py:202
+#: accounting/models.py:212
msgid "General journal"
msgstr "Classeur"
-#: accounting/models.py:253
+#: accounting/models.py:264
msgid "number"
msgstr "numéro"
-#: accounting/models.py:254
+#: accounting/models.py:266
msgid "journal"
msgstr "classeur"
-#: accounting/models.py:256 core/models.py:657 core/models.py:1117
-#: core/models.py:1161 core/models.py:1188 counter/models.py:301
-#: counter/models.py:351 counter/models.py:484 eboutic/models.py:39
-#: eboutic/models.py:73 forum/models.py:248 forum/models.py:323
-#: stock/models.py:76
+#: accounting/models.py:269 core/models.py:805 core/models.py:1341
+#: core/models.py:1387 core/models.py:1416 counter/models.py:351
+#: counter/models.py:444 counter/models.py:613 eboutic/models.py:42
+#: eboutic/models.py:85 forum/models.py:298 forum/models.py:391
+#: stock/models.py:99
msgid "date"
msgstr "date"
-#: accounting/models.py:257 counter/models.py:115 counter/models.py:485
-#: stock/models.py:79
+#: accounting/models.py:270 counter/models.py:121 counter/models.py:614
+#: stock/models.py:102
msgid "comment"
msgstr "commentaire"
-#: accounting/models.py:258 counter/models.py:302 counter/models.py:352
-#: subscription/models.py:59
+#: accounting/models.py:272 counter/models.py:353 counter/models.py:446
+#: subscription/models.py:64
msgid "payment method"
msgstr "méthode de paiement"
-#: accounting/models.py:259
+#: accounting/models.py:277
msgid "cheque number"
msgstr "numéro de chèque"
-#: accounting/models.py:260 eboutic/models.py:144
+#: accounting/models.py:282 eboutic/models.py:166
msgid "invoice"
msgstr "facture"
-#: accounting/models.py:261
+#: accounting/models.py:286
msgid "is done"
msgstr "est fait"
-#: accounting/models.py:263
+#: accounting/models.py:290
msgid "simple type"
msgstr "type simplifié"
-#: accounting/models.py:265 accounting/models.py:374
+#: accounting/models.py:297 accounting/models.py:462
msgid "accounting type"
msgstr "type comptable"
-#: accounting/models.py:267 accounting/models.py:369 accounting/models.py:396
-#: accounting/models.py:420 core/models.py:1187 counter/models.py:343
+#: accounting/models.py:304 accounting/models.py:450 accounting/models.py:485
+#: accounting/models.py:519 core/models.py:1415 counter/models.py:410
msgid "label"
msgstr "étiquette"
-#: accounting/models.py:268
+#: accounting/models.py:310
msgid "target type"
msgstr "type de cible"
-#: accounting/models.py:269 club/models.py:329
+#: accounting/models.py:313 club/models.py:422
#: club/templates/club/club_members.jinja:8
#: club/templates/club/club_old_members.jinja:8
-#: club/templates/club/mailing.jinja:28 club/views.py:86
+#: club/templates/club/mailing.jinja:28 club/views.py:111
#: counter/templates/counter/cash_summary_list.jinja:32
#: counter/templates/counter/stats.jinja:15
#: counter/templates/counter/stats.jinja:52
@@ -186,7 +187,7 @@ msgstr "type de cible"
msgid "User"
msgstr "Utilisateur"
-#: accounting/models.py:269 club/models.py:270
+#: accounting/models.py:314 club/models.py:329
#: club/templates/club/club_detail.jinja:12
#: com/templates/com/mailing_admin.jinja:11
#: com/templates/com/news_admin_list.jinja:23
@@ -210,36 +211,36 @@ msgstr "Utilisateur"
msgid "Club"
msgstr "Club"
-#: accounting/models.py:269 core/views/user.py:220
+#: accounting/models.py:315 core/views/user.py:295
msgid "Account"
msgstr "Compte"
-#: accounting/models.py:269
+#: accounting/models.py:316
msgid "Company"
msgstr "Entreprise"
-#: accounting/models.py:269 sith/settings.py:378
+#: accounting/models.py:317 sith/settings.py:377
#: stock/templates/stock/shopping_list_items.jinja:37
msgid "Other"
msgstr "Autre"
-#: accounting/models.py:270
+#: accounting/models.py:320
msgid "target id"
msgstr "id de la cible"
-#: accounting/models.py:271
+#: accounting/models.py:322
msgid "target label"
msgstr "nom de la cible"
-#: accounting/models.py:272
+#: accounting/models.py:327
msgid "linked operation"
msgstr "opération liée"
-#: accounting/models.py:288
+#: accounting/models.py:346
msgid "The date must be set."
msgstr "La date doit être indiquée."
-#: accounting/models.py:290
+#: accounting/models.py:350
#, python-format
msgid ""
"The date can not be before the start date of the journal, which is\n"
@@ -248,16 +249,16 @@ msgstr ""
"La date ne peut pas être avant la date de début du journal, qui est\n"
"%(start_date)s."
-#: accounting/models.py:293
+#: accounting/models.py:360
msgid "Target does not exists"
msgstr "La cible n'existe pas."
-#: accounting/models.py:295
+#: accounting/models.py:363
msgid "Please add a target label if you set no existing target"
msgstr ""
"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante"
-#: accounting/models.py:297
+#: accounting/models.py:368
msgid ""
"You need to provide ether a simplified accounting type or a standard "
"accounting type"
@@ -265,41 +266,41 @@ msgstr ""
"Vous devez fournir soit un type comptable simplifié ou un type comptable "
"standard"
-#: accounting/models.py:364 counter/models.py:144
+#: accounting/models.py:442 counter/models.py:157
msgid "code"
msgstr "code"
-#: accounting/models.py:366
+#: accounting/models.py:446
msgid "An accounting type code contains only numbers"
msgstr "Un code comptable ne contient que des numéros"
-#: accounting/models.py:370
+#: accounting/models.py:452
msgid "movement type"
msgstr "type de mouvement"
-#: accounting/models.py:370
+#: accounting/models.py:454
#: accounting/templates/accounting/journal_statement_nature.jinja:9
#: accounting/templates/accounting/journal_statement_person.jinja:12
-#: accounting/views.py:482
+#: accounting/views.py:602
msgid "Credit"
msgstr "Crédit"
-#: accounting/models.py:370
+#: accounting/models.py:455
#: accounting/templates/accounting/journal_statement_nature.jinja:28
#: accounting/templates/accounting/journal_statement_person.jinja:40
-#: accounting/views.py:482
+#: accounting/views.py:602
msgid "Debit"
msgstr "Débit"
-#: accounting/models.py:371
+#: accounting/models.py:456
msgid "Neutral"
msgstr "Neutre"
-#: accounting/models.py:398
+#: accounting/models.py:489
msgid "simplified accounting types"
msgstr "type simplifié"
-#: accounting/models.py:401
+#: accounting/models.py:493
msgid "simplified type"
msgstr "type simplifié"
@@ -374,7 +375,7 @@ msgstr "Compte en banque : "
#: election/templates/election/election_detail.jinja:401
#: forum/templates/forum/macros.jinja:21 forum/templates/forum/macros.jinja:123
#: launderette/templates/launderette/launderette_admin.jinja:16
-#: launderette/views.py:182 sas/templates/sas/album.jinja:26
+#: launderette/views.py:226 sas/templates/sas/album.jinja:26
#: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74
#: sas/templates/sas/picture.jinja:124
#: stock/templates/stock/stock_shopping_list.jinja:43
@@ -385,7 +386,7 @@ msgid "Delete"
msgstr "Supprimer"
#: accounting/templates/accounting/bank_account_details.jinja:18
-#: club/views.py:101 core/views/user.py:166 sas/templates/sas/picture.jinja:86
+#: club/views.py:128 core/views/user.py:205 sas/templates/sas/picture.jinja:86
msgid "Infos"
msgstr "Infos"
@@ -404,7 +405,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_details.jinja:27
#: accounting/templates/accounting/bank_account_list.jinja:22
#: accounting/templates/accounting/club_account_details.jinja:58
-#: accounting/templates/accounting/journal_details.jinja:89 club/views.py:129
+#: accounting/templates/accounting/journal_details.jinja:89 club/views.py:174
#: com/templates/com/news_admin_list.jinja:39
#: com/templates/com/news_admin_list.jinja:68
#: com/templates/com/news_admin_list.jinja:115
@@ -418,7 +419,7 @@ msgstr "Nouveau compte club"
#: com/templates/com/screen_list.jinja:26 com/templates/com/weekmail.jinja:32
#: com/templates/com/weekmail.jinja:61 core/templates/core/file.jinja:38
#: core/templates/core/page.jinja:35 core/templates/core/poster_list.jinja:40
-#: core/templates/core/user_tools.jinja:41 core/views/user.py:188
+#: core/templates/core/user_tools.jinja:41 core/views/user.py:237
#: counter/templates/counter/cash_summary_list.jinja:53
#: counter/templates/counter/counter_list.jinja:17
#: counter/templates/counter/counter_list.jinja:33
@@ -619,7 +620,7 @@ msgstr "No"
#: core/templates/core/user_account_detail.jinja:78
#: counter/templates/counter/cash_summary_list.jinja:34
#: counter/templates/counter/last_ops.jinja:14
-#: counter/templates/counter/last_ops.jinja:39 sas/views.py:285
+#: counter/templates/counter/last_ops.jinja:39 sas/views.py:353
#: stock/templates/stock/stock_shopping_list.jinja:25
#: stock/templates/stock/stock_shopping_list.jinja:54
#: trombi/templates/trombi/user_profile.jinja:40
@@ -655,7 +656,7 @@ msgid "Done"
msgstr "Effectuées"
#: accounting/templates/accounting/journal_details.jinja:41
-#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:855
+#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:1091
#: trombi/templates/trombi/comment.jinja:4
#: trombi/templates/trombi/comment.jinja:8
#: trombi/templates/trombi/user_tools.jinja:50
@@ -785,7 +786,7 @@ msgstr "Sauver"
#: accounting/templates/accounting/refound_account.jinja:4
#: accounting/templates/accounting/refound_account.jinja:9
-#: accounting/views.py:758
+#: accounting/views.py:933
msgid "Refound account"
msgstr "Remboursement de compte"
@@ -806,95 +807,95 @@ msgstr "Types simplifiés"
msgid "New simplified type"
msgstr "Nouveau type simplifié"
-#: accounting/views.py:208 accounting/views.py:215 accounting/views.py:465
+#: accounting/views.py:247 accounting/views.py:257 accounting/views.py:577
msgid "Journal"
msgstr "Classeur"
-#: accounting/views.py:220
+#: accounting/views.py:267
msgid "Statement by nature"
msgstr "Bilan par nature"
-#: accounting/views.py:225
+#: accounting/views.py:277
msgid "Statement by person"
msgstr "Bilan par personne"
-#: accounting/views.py:230
+#: accounting/views.py:287
msgid "Accounting statement"
msgstr "Bilan comptable"
-#: accounting/views.py:307
+#: accounting/views.py:391
msgid "Link this operation to the target account"
msgstr "Lier cette opération au compte cible"
-#: accounting/views.py:327
+#: accounting/views.py:421
msgid "The target must be set."
msgstr "La cible doit être indiquée."
-#: accounting/views.py:339
+#: accounting/views.py:436
msgid "The amount must be set."
msgstr "Le montant doit être indiqué."
-#: accounting/views.py:459 accounting/views.py:465
+#: accounting/views.py:571 accounting/views.py:577
msgid "Operation"
msgstr "Opération"
-#: accounting/views.py:475
+#: accounting/views.py:586
msgid "Financial proof: "
msgstr "Justificatif de libellé : "
-#: accounting/views.py:476
+#: accounting/views.py:589
#, python-format
msgid "Club: %(club_name)s"
msgstr "Club : %(club_name)s"
-#: accounting/views.py:477
+#: accounting/views.py:594
#, python-format
msgid "Label: %(op_label)s"
msgstr "Libellé : %(op_label)s"
-#: accounting/views.py:478
+#: accounting/views.py:597
#, python-format
msgid "Date: %(date)s"
msgstr "Date : %(date)s"
-#: accounting/views.py:484
+#: accounting/views.py:605
#, python-format
msgid "Amount: %(amount).2f €"
msgstr "Montant : %(amount).2f €"
-#: accounting/views.py:496
+#: accounting/views.py:620
msgid "Debtor"
msgstr "Débiteur"
-#: accounting/views.py:496
+#: accounting/views.py:620
msgid "Creditor"
msgstr "Créditeur"
-#: accounting/views.py:498
+#: accounting/views.py:625
msgid "Comment:"
msgstr "Commentaire :"
-#: accounting/views.py:517
+#: accounting/views.py:650
msgid "Signature:"
msgstr "Signature :"
-#: accounting/views.py:574
+#: accounting/views.py:718
msgid "General statement"
msgstr "Bilan général"
-#: accounting/views.py:577
+#: accounting/views.py:725
msgid "No label operations"
msgstr "Opérations sans étiquette"
-#: accounting/views.py:719
+#: accounting/views.py:889
msgid "Refound this account"
msgstr "Rembourser ce compte"
-#: club/models.py:49
+#: club/models.py:51
msgid "unix name"
msgstr "nom unix"
-#: club/models.py:53
+#: club/models.py:58
msgid ""
"Enter a valid unix name. This value may contain only letters, numbers ./-/_ "
"characters."
@@ -902,98 +903,98 @@ msgstr ""
"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des "
"lettres, des nombres, et les caractères ./-/_"
-#: club/models.py:58
+#: club/models.py:63
msgid "A club with that unix name already exists."
msgstr "Un club avec ce nom UNIX existe déjà."
-#: club/models.py:61
+#: club/models.py:66
msgid "logo"
msgstr "logo"
-#: club/models.py:62
+#: club/models.py:68
msgid "is active"
msgstr "actif"
-#: club/models.py:63
+#: club/models.py:70
msgid "short description"
msgstr "description courte"
-#: club/models.py:64 core/models.py:200
+#: club/models.py:72 core/models.py:260
msgid "address"
msgstr "Adresse"
-#: club/models.py:70 core/models.py:161
+#: club/models.py:89 core/models.py:173
msgid "home"
msgstr "home"
-#: club/models.py:87
+#: club/models.py:111
msgid "You can not make loops in clubs"
msgstr "Vous ne pouvez pas faire de boucles dans les clubs"
-#: club/models.py:101
+#: club/models.py:125
msgid "A club with that unix_name already exists"
msgstr "Un club avec ce nom UNIX existe déjà."
-#: club/models.py:226 counter/models.py:464 counter/models.py:482
-#: eboutic/models.py:38 eboutic/models.py:72 election/models.py:154
-#: launderette/models.py:114 launderette/models.py:152 sas/models.py:185
-#: trombi/models.py:148
+#: club/models.py:260 counter/models.py:585 counter/models.py:608
+#: eboutic/models.py:40 eboutic/models.py:83 election/models.py:180
+#: launderette/models.py:134 launderette/models.py:190 sas/models.py:239
+#: trombi/models.py:203
msgid "user"
msgstr "nom d'utilisateur"
-#: club/models.py:230 core/models.py:180 election/models.py:153
-#: election/models.py:174 trombi/models.py:150
+#: club/models.py:271 core/models.py:224 election/models.py:178
+#: election/models.py:204 trombi/models.py:206
msgid "role"
msgstr "rôle"
-#: club/models.py:232 core/models.py:66 counter/models.py:114
-#: counter/models.py:141 election/models.py:14 election/models.py:99
-#: election/models.py:155 forum/models.py:55 forum/models.py:194
+#: club/models.py:276 core/models.py:73 counter/models.py:120
+#: counter/models.py:148 election/models.py:15 election/models.py:117
+#: election/models.py:182 forum/models.py:59 forum/models.py:231
msgid "description"
msgstr "description"
-#: club/models.py:237
+#: club/models.py:282
msgid "User must be subscriber to take part to a club"
msgstr "L'utilisateur doit être cotisant pour faire partie d'un club"
-#: club/models.py:239
+#: club/models.py:289
msgid "User is already member of that club"
msgstr "L'utilisateur est déjà membre de ce club"
-#: club/models.py:243
+#: club/models.py:298
msgid "past member"
msgstr "Anciens membres"
-#: club/models.py:271 club/models.py:330
+#: club/models.py:332 club/models.py:427
msgid "Email address"
msgstr "Adresse email"
-#: club/models.py:274
+#: club/models.py:340
msgid "Enter a valid address. Only the root of the address is needed."
msgstr ""
"Entrez une adresse valide. Seule la racine de l'adresse est nécessaire."
-#: club/models.py:276 com/models.py:75 com/models.py:219 core/models.py:658
+#: club/models.py:344 com/models.py:79 com/models.py:260 core/models.py:806
msgid "is moderated"
msgstr "est modéré"
-#: club/models.py:277 com/models.py:76 com/models.py:220
+#: club/models.py:346 com/models.py:81 com/models.py:264
msgid "moderator"
msgstr "modérateur"
-#: club/models.py:328 club/templates/club/mailing.jinja:14
+#: club/models.py:415 club/templates/club/mailing.jinja:14
msgid "Mailing"
msgstr "Liste de diffusion"
-#: club/models.py:337
+#: club/models.py:434
msgid "At least user or email is required"
msgstr "Au moins un utilisateur ou un email est nécessaire"
-#: club/models.py:342
+#: club/models.py:442
msgid "This email is already suscribed in this mailing"
msgstr "Cet email est déjà abonné à cette mailing"
-#: club/models.py:366 club/templates/club/mailing.jinja:36
+#: club/models.py:471 club/templates/club/mailing.jinja:36
msgid "Unregistered user"
msgstr "Désabonner un utilisateur"
@@ -1047,8 +1048,8 @@ msgid "Mark as old"
msgstr "Marquer comme ancien"
#: club/templates/club/club_members.jinja:30
-#: core/templates/core/file_detail.jinja:19 core/views/forms.py:254
-#: launderette/views.py:182 trombi/templates/trombi/detail.jinja:19
+#: core/templates/core/file_detail.jinja:19 core/views/forms.py:334
+#: launderette/views.py:226 trombi/templates/trombi/detail.jinja:19
msgid "Add"
msgstr "Ajouter"
@@ -1066,8 +1067,8 @@ msgstr "Du"
msgid "To"
msgstr "Au"
-#: club/templates/club/club_sellings.jinja:5 club/views.py:140
-#: club/views.py:374 counter/templates/counter/counter_main.jinja:19
+#: club/templates/club/club_sellings.jinja:5 club/views.py:194
+#: club/views.py:478 counter/templates/counter/counter_main.jinja:19
#: counter/templates/counter/last_ops.jinja:35
msgid "Sellings"
msgstr "Ventes"
@@ -1093,10 +1094,10 @@ msgstr "unités"
msgid "Benefit: "
msgstr "Bénéfice : "
-#: club/templates/club/club_sellings.jinja:21 club/views.py:322
+#: club/templates/club/club_sellings.jinja:21 club/views.py:417
#: core/templates/core/user_account_detail.jinja:18
#: core/templates/core/user_account_detail.jinja:51
-#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:134
+#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:168
msgid "Counter"
msgstr "Comptoir"
@@ -1241,99 +1242,99 @@ msgstr "Aucune page n'existe pour ce club"
msgid "Club stats"
msgstr "Statistiques du club"
-#: club/views.py:107
+#: club/views.py:138
msgid "Members"
msgstr "Membres"
-#: club/views.py:112
+#: club/views.py:147
msgid "Old members"
msgstr "Anciens membres"
-#: club/views.py:118 core/templates/core/page.jinja:33
+#: club/views.py:157 core/templates/core/page.jinja:33
msgid "History"
msgstr "Historique"
-#: club/views.py:124 core/templates/core/base.jinja:115 core/views/user.py:182
-#: sas/templates/sas/picture.jinja:95 trombi/views.py:55
+#: club/views.py:165 core/templates/core/base.jinja:115 core/views/user.py:228
+#: sas/templates/sas/picture.jinja:95 trombi/views.py:60
msgid "Tools"
msgstr "Outils"
-#: club/views.py:135
+#: club/views.py:185
msgid "Edit club page"
msgstr "Éditer la page de club"
-#: club/views.py:145
+#: club/views.py:201
msgid "Mailing list"
msgstr "Listes de diffusion"
-#: club/views.py:150 com/views.py:116
+#: club/views.py:210 com/views.py:141
msgid "Posters list"
msgstr "Liste d'affiches"
-#: club/views.py:156 counter/templates/counter/counter_list.jinja:21
+#: club/views.py:220 counter/templates/counter/counter_list.jinja:21
#: counter/templates/counter/counter_list.jinja:43
#: counter/templates/counter/counter_list.jinja:59
msgid "Props"
msgstr "Propriétés"
-#: club/views.py:251 core/views/forms.py:255 counter/views.py:91
-#: trombi/views.py:124
+#: club/views.py:322 core/views/forms.py:337 counter/views.py:113
+#: trombi/views.py:141
msgid "Select user"
msgstr "Choisir un utilisateur"
-#: club/views.py:298 sas/views.py:97 sas/views.py:150 sas/views.py:228
+#: club/views.py:381 sas/views.py:129 sas/views.py:195 sas/views.py:286
msgid "You do not have the permission to do that"
msgstr "Vous n'avez pas la permission de faire cela"
-#: club/views.py:320 counter/views.py:1097
+#: club/views.py:406 counter/views.py:1481
msgid "Begin date"
msgstr "Date de début"
-#: club/views.py:321 com/views.py:65 com/views.py:177 counter/views.py:1098
-#: election/views.py:135 subscription/views.py:47
+#: club/views.py:412 com/views.py:85 com/views.py:210 counter/views.py:1487
+#: election/views.py:190 subscription/views.py:51
msgid "End date"
msgstr "Date de fin"
-#: club/views.py:336 core/templates/core/user_stats.jinja:27
-#: counter/views.py:1188
+#: club/views.py:435 core/templates/core/user_stats.jinja:27
+#: counter/views.py:1635
msgid "Product"
msgstr "Produit"
-#: com/models.py:47
+#: com/models.py:46
msgid "alert message"
msgstr "message d'alerte"
-#: com/models.py:48
+#: com/models.py:47
msgid "info message"
msgstr "message d'info"
-#: com/models.py:49
+#: com/models.py:48
msgid "index page"
msgstr "page d'accueil"
-#: com/models.py:50
+#: com/models.py:49
msgid "weekmail destinations"
msgstr "destinataires du weekmail"
-#: com/models.py:60
+#: com/models.py:59
msgid "Notice"
msgstr "Information"
-#: com/models.py:61
+#: com/models.py:60
msgid "Event"
msgstr "Événement"
-#: com/models.py:62
+#: com/models.py:61
msgid "Weekly"
msgstr "Hebdomadaire"
-#: com/models.py:63
+#: com/models.py:62
msgid "Call"
msgstr "Appel"
-#: com/models.py:69 com/models.py:133 com/models.py:184 election/models.py:13
-#: election/models.py:98 election/models.py:134 forum/models.py:198
-#: forum/models.py:246
+#: com/models.py:69 com/models.py:155 com/models.py:213 election/models.py:14
+#: election/models.py:116 election/models.py:156 forum/models.py:242
+#: forum/models.py:296
msgid "title"
msgstr "titre"
@@ -1341,73 +1342,73 @@ msgstr "titre"
msgid "summary"
msgstr "résumé"
-#: com/models.py:71 com/models.py:185 trombi/models.py:135
+#: com/models.py:71 com/models.py:214 trombi/models.py:188
msgid "content"
msgstr "contenu"
-#: com/models.py:72 core/models.py:1160 launderette/models.py:86
-#: launderette/models.py:112 launderette/models.py:149 stock/models.py:59
-#: stock/models.py:98
+#: com/models.py:73 core/models.py:1385 launderette/models.py:95
+#: launderette/models.py:130 launderette/models.py:182 stock/models.py:77
+#: stock/models.py:131
msgid "type"
msgstr "type"
-#: com/models.py:74 com/models.py:186 trombi/models.py:133
+#: com/models.py:77 com/models.py:216 trombi/models.py:183
msgid "author"
msgstr "auteur"
-#: com/models.py:121
+#: com/models.py:142
msgid "news_date"
msgstr "date de la nouvelle"
-#: com/models.py:122
+#: com/models.py:143
msgid "start_date"
msgstr "date de début"
-#: com/models.py:123
+#: com/models.py:144
msgid "end_date"
msgstr "date de fin"
-#: com/models.py:134
+#: com/models.py:156
msgid "intro"
msgstr "intro"
-#: com/models.py:135
+#: com/models.py:157
msgid "joke"
msgstr "blague"
-#: com/models.py:136
+#: com/models.py:158
msgid "protip"
msgstr "astuce"
-#: com/models.py:137
+#: com/models.py:159
msgid "conclusion"
msgstr "conclusion"
-#: com/models.py:138
+#: com/models.py:160
msgid "sent"
msgstr "envoyé"
-#: com/models.py:183
+#: com/models.py:211
msgid "weekmail"
msgstr "weekmail"
-#: com/models.py:188
+#: com/models.py:221
msgid "rank"
msgstr "rang"
-#: com/models.py:213 core/models.py:648 core/models.py:664
+#: com/models.py:250 core/models.py:776 core/models.py:820
msgid "file"
msgstr "fichier"
-#: com/models.py:218
+#: com/models.py:258
msgid "display time"
msgstr "temps d'affichage"
-#: com/models.py:231
+#: com/models.py:285
msgid "Begin date should be before end date"
msgstr "La date de début doit être avant celle de fin"
-#: com/templates/com/mailing_admin.jinja:4 com/views.py:111
+#: com/templates/com/mailing_admin.jinja:4 com/views.py:134
#: core/templates/core/user_tools.jinja:89
msgid "Mailing lists administration"
msgstr "Administration des mailing listes"
@@ -1477,7 +1478,7 @@ msgstr "Informations affichées"
#: com/templates/com/news_admin_list.jinja:248
#: com/templates/com/news_admin_list.jinja:285
#: launderette/templates/launderette/launderette_admin.jinja:42
-#: launderette/views.py:184
+#: launderette/views.py:233
msgid "Type"
msgstr "Type"
@@ -1490,9 +1491,9 @@ msgstr "Type"
#: com/templates/com/news_admin_list.jinja:249
#: com/templates/com/news_admin_list.jinja:286
#: com/templates/com/weekmail.jinja:19 com/templates/com/weekmail.jinja:48
-#: core/templates/core/base.jinja:307 forum/templates/forum/forum.jinja:29
+#: core/templates/core/base.jinja:306 forum/templates/forum/forum.jinja:29
#: forum/templates/forum/forum.jinja:48 forum/templates/forum/main.jinja:26
-#: forum/views.py:175
+#: forum/views.py:192
msgid "Title"
msgstr "Titre"
@@ -1723,7 +1724,7 @@ msgid "Slideshow"
msgstr "Diaporama"
#: com/templates/com/weekmail.jinja:5 com/templates/com/weekmail.jinja:9
-#: com/views.py:86 core/templates/core/user_tools.jinja:81
+#: com/views.py:108 core/templates/core/user_tools.jinja:81
msgid "Weekmail"
msgstr "Weekmail"
@@ -1766,7 +1767,7 @@ msgstr "Supprimer du Weekmail"
#: com/templates/com/weekmail_preview.jinja:9
#: core/templates/core/user_account_detail.jinja:11
-#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:182
+#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:226
#: stock/templates/stock/shopping_list_items.jinja:9
#: trombi/templates/trombi/comment_moderation.jinja:10
#: trombi/templates/trombi/export.jinja:9
@@ -1810,90 +1811,90 @@ msgstr "Astuce"
msgid "Final word"
msgstr "Le mot de la fin"
-#: com/views.py:63 com/views.py:176 election/views.py:133
-#: subscription/views.py:44
+#: com/views.py:78 com/views.py:204 election/views.py:185
+#: subscription/views.py:45
msgid "Start date"
msgstr "Date de début"
-#: com/views.py:79
+#: com/views.py:103
msgid "Communication administration"
msgstr "Administration de la communication"
-#: com/views.py:91 core/templates/core/user_tools.jinja:82
+#: com/views.py:114 core/templates/core/user_tools.jinja:82
msgid "Weekmail destinations"
msgstr "Destinataires du Weekmail"
-#: com/views.py:96
+#: com/views.py:118
msgid "Index page"
msgstr "Page d'accueil"
-#: com/views.py:101
+#: com/views.py:121
msgid "Info message"
msgstr "Message d'info"
-#: com/views.py:106
+#: com/views.py:127
msgid "Alert message"
msgstr "Message d'alerte"
-#: com/views.py:121
+#: com/views.py:148
msgid "Screens list"
msgstr "Liste d'écrans"
-#: com/views.py:178
+#: com/views.py:215
msgid "Until"
msgstr "Jusqu'à"
-#: com/views.py:179
+#: com/views.py:217
msgid "Automoderation"
msgstr "Automodération"
-#: com/views.py:185 com/views.py:187 com/views.py:191
+#: com/views.py:224 com/views.py:228 com/views.py:238
msgid "This field is required."
msgstr "Ce champ est obligatoire."
-#: com/views.py:189
+#: com/views.py:234
msgid "You crazy? You can not finish an event before starting it."
msgstr "T'es fou? Un événement ne peut pas finir avant même de commencer."
-#: com/views.py:371
+#: com/views.py:463
msgid "Delete and save to regenerate"
msgstr "Supprimer et sauver pour regénérer"
-#: com/views.py:379
+#: com/views.py:472
msgid "Weekmail of the "
msgstr "Weekmail du "
-#: com/views.py:459
+#: com/views.py:574
msgid ""
"You must be a board member of the selected club to post in the Weekmail."
msgstr ""
"Vous devez êtres un membre du bureau du club sélectionné pour poster dans le "
"Weekmail."
-#: core/models.py:62
+#: core/models.py:69
msgid "meta group status"
msgstr "status du meta-groupe"
-#: core/models.py:64
+#: core/models.py:71
msgid "Whether a group is a meta group or not"
msgstr "Si un groupe est un meta-groupe ou pas"
-#: core/models.py:101
+#: core/models.py:108
#, python-format
msgid "%(value)s is not a valid promo (between 0 and %(end)s)"
msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)"
-#: core/models.py:118
+#: core/models.py:126
msgid "username"
msgstr "nom d'utilisateur"
-#: core/models.py:121
+#: core/models.py:130
msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only."
msgstr ""
"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./"
"+/-/_"
-#: core/models.py:125
+#: core/models.py:136
msgid ""
"Enter a valid username. This value may contain only letters, numbers and ./"
"+/-/_ characters."
@@ -1901,43 +1902,43 @@ msgstr ""
"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./"
"+/-/_"
-#: core/models.py:130
+#: core/models.py:142
msgid "A user with that username already exists."
msgstr "Un utilisateur de ce nom existe déjà"
-#: core/models.py:133
+#: core/models.py:144
msgid "first name"
msgstr "Prénom"
-#: core/models.py:134
+#: core/models.py:145
msgid "last name"
msgstr "Nom"
-#: core/models.py:135
+#: core/models.py:146
msgid "email address"
msgstr "adresse email"
-#: core/models.py:136
+#: core/models.py:147
msgid "date of birth"
msgstr "date de naissance"
-#: core/models.py:137
+#: core/models.py:148
msgid "nick name"
msgstr "surnom"
-#: core/models.py:139
+#: core/models.py:150
msgid "staff status"
msgstr "status \"staff\""
-#: core/models.py:141
+#: core/models.py:152
msgid "Designates whether the user can log into this admin site."
msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site."
-#: core/models.py:144
+#: core/models.py:155
msgid "active"
msgstr "actif"
-#: core/models.py:147
+#: core/models.py:158
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
@@ -1945,159 +1946,159 @@ msgstr ""
"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au "
"lieu de supprimer les comptes."
-#: core/models.py:151
+#: core/models.py:162
msgid "date joined"
msgstr "date d'inscription"
-#: core/models.py:152
+#: core/models.py:163
msgid "last update"
msgstr "dernière mise à jour"
-#: core/models.py:154
+#: core/models.py:165
msgid "superuser"
msgstr "super-utilisateur"
-#: core/models.py:157
+#: core/models.py:167
msgid "Designates whether this user is a superuser. "
msgstr "Est-ce que l'utilisateur est super-utilisateur."
-#: core/models.py:163
+#: core/models.py:181
msgid "profile"
msgstr "profil"
-#: core/models.py:165
+#: core/models.py:189
msgid "avatar"
msgstr "avatar"
-#: core/models.py:167
+#: core/models.py:197
msgid "scrub"
msgstr "blouse"
-#: core/models.py:169
+#: core/models.py:203
msgid "sex"
msgstr "sexe"
-#: core/models.py:169 matmat/views.py:73
+#: core/models.py:205 matmat/views.py:73
msgid "Man"
msgstr "Homme"
-#: core/models.py:169 matmat/views.py:74
+#: core/models.py:205 matmat/views.py:73
msgid "Woman"
msgstr "Femme"
-#: core/models.py:170
+#: core/models.py:209
msgid "tshirt size"
msgstr "taille de tshirt"
-#: core/models.py:171
+#: core/models.py:212
msgid "-"
msgstr "-"
-#: core/models.py:172
+#: core/models.py:213
msgid "XS"
msgstr "XS"
-#: core/models.py:173 core/templates/core/base.jinja:320
+#: core/models.py:214 core/templates/core/base.jinja:319
msgid "S"
msgstr "S"
-#: core/models.py:174
+#: core/models.py:215
msgid "M"
msgstr "M"
-#: core/models.py:175
+#: core/models.py:216
msgid "L"
msgstr "L"
-#: core/models.py:176
+#: core/models.py:217
msgid "XL"
msgstr "XL"
-#: core/models.py:177
+#: core/models.py:218
msgid "XXL"
msgstr "XXL"
-#: core/models.py:178
+#: core/models.py:219
msgid "XXXL"
msgstr "XXXL"
-#: core/models.py:181
+#: core/models.py:227
msgid "Student"
msgstr "Étudiant"
-#: core/models.py:182
+#: core/models.py:228
msgid "Administrative agent"
msgstr "Personnel administratif"
-#: core/models.py:183
+#: core/models.py:229
msgid "Teacher"
msgstr "Enseignant"
-#: core/models.py:184
+#: core/models.py:230
msgid "Agent"
msgstr "Personnel"
-#: core/models.py:185
+#: core/models.py:231
msgid "Doctor"
msgstr "Doctorant"
-#: core/models.py:186
+#: core/models.py:232
msgid "Former student"
msgstr "Ancien étudiant"
-#: core/models.py:187
+#: core/models.py:233
msgid "Service"
msgstr "Service"
-#: core/models.py:189
+#: core/models.py:239
msgid "department"
msgstr "département"
-#: core/models.py:191
+#: core/models.py:246
msgid "dpt option"
msgstr "Filière"
-#: core/models.py:192
+#: core/models.py:248
msgid "semester"
msgstr "semestre"
-#: core/models.py:193
+#: core/models.py:249
msgid "quote"
msgstr "citation"
-#: core/models.py:194
+#: core/models.py:250
msgid "school"
msgstr "école"
-#: core/models.py:195
+#: core/models.py:252
msgid "promo"
msgstr "promo"
-#: core/models.py:196
+#: core/models.py:255
msgid "forum signature"
msgstr "signature du forum"
-#: core/models.py:197
+#: core/models.py:257
msgid "second email address"
msgstr "adresse email secondaire"
-#: core/models.py:199
+#: core/models.py:259
msgid "parent phone"
msgstr "téléphone des parents"
-#: core/models.py:201
+#: core/models.py:262
msgid "parent address"
msgstr "adresse des parents"
-#: core/models.py:202
+#: core/models.py:265
msgid "is subscriber viewable"
msgstr "profil visible par les cotisants"
-#: core/models.py:369
+#: core/models.py:476
msgid "A user with that username already exists"
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
-#: core/models.py:494 core/templates/core/macros.jinja:72
+#: core/models.py:614 core/templates/core/macros.jinja:72
#: core/templates/core/macros.jinja:74 core/templates/core/macros.jinja:75
#: core/templates/core/user_detail.jinja:79
#: core/templates/core/user_detail.jinja:80
@@ -2115,109 +2116,109 @@ msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
msgid "Profile"
msgstr "Profil"
-#: core/models.py:604
+#: core/models.py:734
msgid "Visitor"
msgstr "Visiteur"
-#: core/models.py:610
+#: core/models.py:740
msgid "do you want to receive the weekmail"
msgstr "voulez-vous recevoir le Weekmail"
-#: core/models.py:614
+#: core/models.py:742
msgid "show your stats to others"
msgstr "montrez vos statistiques aux autres"
-#: core/models.py:618
+#: core/models.py:744
msgid "get a notification for every click"
msgstr "recevez une notification pour chaque click"
-#: core/models.py:622
+#: core/models.py:747
msgid "get a notification for every refilling"
msgstr "recevez une notification pour chaque rechargement"
-#: core/models.py:646
+#: core/models.py:770
msgid "file name"
msgstr "nom du fichier"
-#: core/models.py:647 core/models.py:919
+#: core/models.py:772 core/models.py:1111
msgid "parent"
msgstr "parent"
-#: core/models.py:649
+#: core/models.py:783
msgid "compressed file"
msgstr "version allégée"
-#: core/models.py:650
+#: core/models.py:790
msgid "thumbnail"
msgstr "miniature"
-#: core/models.py:651 core/models.py:659
+#: core/models.py:795 core/models.py:810
msgid "owner"
msgstr "propriétaire"
-#: core/models.py:652 core/models.py:927 core/views/files.py:149
+#: core/models.py:797 core/models.py:1130 core/views/files.py:193
msgid "edit group"
msgstr "groupe d'édition"
-#: core/models.py:653 core/models.py:928 core/views/files.py:150
+#: core/models.py:800 core/models.py:1133 core/views/files.py:196
msgid "view group"
msgstr "groupe de vue"
-#: core/models.py:654
+#: core/models.py:802
msgid "is folder"
msgstr "est un dossier"
-#: core/models.py:655
+#: core/models.py:803
msgid "mime type"
msgstr "type mime"
-#: core/models.py:656
+#: core/models.py:804
msgid "size"
msgstr "taille"
-#: core/models.py:660
+#: core/models.py:814
msgid "asked for removal"
msgstr "retrait demandé"
-#: core/models.py:661
+#: core/models.py:816
msgid "is in the SAS"
msgstr "est dans le SAS"
-#: core/models.py:700
+#: core/models.py:858
msgid "Character '/' not authorized in name"
msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier"
-#: core/models.py:703 core/models.py:708
+#: core/models.py:860 core/models.py:864
msgid "Loop in folder tree"
msgstr "Boucle dans l'arborescence des dossiers"
-#: core/models.py:712
+#: core/models.py:867
msgid "You can not make a file be a children of a non folder file"
msgstr ""
"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas "
"un dossier"
-#: core/models.py:716
+#: core/models.py:878
msgid "Duplicate file"
msgstr "Un fichier de ce nom existe déjà"
-#: core/models.py:730
+#: core/models.py:895
msgid "You must provide a file"
msgstr "Vous devez fournir un fichier"
-#: core/models.py:857
+#: core/models.py:1035
msgid "Folder: "
msgstr "Dossier : "
-#: core/models.py:859
+#: core/models.py:1037
msgid "File: "
msgstr "Fichier : "
-#: core/models.py:911
+#: core/models.py:1094
msgid "page unix name"
msgstr "nom unix de la page"
-#: core/models.py:915
+#: core/models.py:1100
msgid ""
"Enter a valid page name. This value may contain only unaccented letters, "
"numbers and ./+/-/_ characters."
@@ -2225,51 +2226,51 @@ msgstr ""
"Entrez un nom de page correct. Uniquement des lettres non accentuées, "
"numéros, et ./+/-/_"
-#: core/models.py:922
+#: core/models.py:1118
msgid "page name"
msgstr "nom de la page"
-#: core/models.py:925
+#: core/models.py:1126
msgid "owner group"
msgstr "groupe propriétaire"
-#: core/models.py:929
+#: core/models.py:1138
msgid "lock user"
msgstr "utilisateur bloquant"
-#: core/models.py:930
+#: core/models.py:1144
msgid "lock_timeout"
msgstr "décompte du déblocage"
-#: core/models.py:957
+#: core/models.py:1175
msgid "Duplicate page"
msgstr "Une page de ce nom existe déjà"
-#: core/models.py:963
+#: core/models.py:1178
msgid "Loop in page tree"
msgstr "Boucle dans l'arborescence des pages"
-#: core/models.py:1114
+#: core/models.py:1338
msgid "revision"
msgstr "révision"
-#: core/models.py:1115
+#: core/models.py:1339
msgid "page title"
msgstr "titre de la page"
-#: core/models.py:1116
+#: core/models.py:1340
msgid "page content"
msgstr "contenu de la page"
-#: core/models.py:1158
+#: core/models.py:1382
msgid "url"
msgstr "url"
-#: core/models.py:1159
+#: core/models.py:1383
msgid "param"
msgstr "param"
-#: core/models.py:1162
+#: core/models.py:1388
msgid "viewed"
msgstr "vue"
@@ -2281,6 +2282,10 @@ msgstr "403, Non autorisé"
msgid "404, Not Found"
msgstr "404. Non trouvé"
+#: core/templates/core/500.jinja:8
+msgid "500, Server Error"
+msgstr "500, Erreur Serveur"
+
#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4
msgid "Welcome!"
msgstr "Bienvenue!"
@@ -2327,7 +2332,7 @@ msgid "Main"
msgstr "Accueil"
#: core/templates/core/base.jinja:152 core/templates/core/search.jinja:18
-#: core/views/user.py:199 counter/templates/counter/stats.jinja:17
+#: core/views/user.py:256 counter/templates/counter/stats.jinja:17
msgid "Clubs"
msgstr "Clubs"
@@ -2360,7 +2365,7 @@ msgid "Services"
msgstr "Services"
#: core/templates/core/base.jinja:158 core/templates/core/file.jinja:20
-#: core/views/files.py:75
+#: core/views/files.py:86
msgid "Files"
msgstr "Fichiers"
@@ -2372,67 +2377,67 @@ msgstr "Partenaires"
msgid "Help"
msgstr "Aide"
-#: core/templates/core/base.jinja:200
+#: core/templates/core/base.jinja:199
msgid "Contacts"
msgstr "Contacts"
-#: core/templates/core/base.jinja:201
+#: core/templates/core/base.jinja:200
msgid "Legal notices"
msgstr "Mentions légales"
-#: core/templates/core/base.jinja:202
+#: core/templates/core/base.jinja:201
msgid "Intellectual property"
msgstr "Propriété intellectuelle"
-#: core/templates/core/base.jinja:203
+#: core/templates/core/base.jinja:202
msgid "Help & Documentation"
msgstr "Aide & Documentation"
-#: core/templates/core/base.jinja:204
+#: core/templates/core/base.jinja:203
msgid "R&D"
msgstr "R&D"
-#: core/templates/core/base.jinja:205
+#: core/templates/core/base.jinja:204
msgid "Former website"
msgstr "Ancien site"
-#: core/templates/core/base.jinja:207
+#: core/templates/core/base.jinja:206
msgid "Site made by good people"
msgstr "Site réalisé par des gens bons"
-#: core/templates/core/base.jinja:304
+#: core/templates/core/base.jinja:303
msgid "https://path/to/image.gif"
msgstr "https://chemin/vers/image.gif"
-#: core/templates/core/base.jinja:306
+#: core/templates/core/base.jinja:305
msgid "alternative text"
msgstr "texte alternatif"
-#: core/templates/core/base.jinja:316
+#: core/templates/core/base.jinja:315
msgid "Image"
msgstr "Image"
-#: core/templates/core/base.jinja:317
+#: core/templates/core/base.jinja:316
msgid "Link"
msgstr "Lien"
-#: core/templates/core/base.jinja:318
+#: core/templates/core/base.jinja:317
msgid "sup"
msgstr "exp"
-#: core/templates/core/base.jinja:319
+#: core/templates/core/base.jinja:318
msgid "sub"
msgstr "ind"
-#: core/templates/core/base.jinja:321
+#: core/templates/core/base.jinja:320
msgid "U"
msgstr "S"
-#: core/templates/core/base.jinja:322
+#: core/templates/core/base.jinja:321
msgid "I"
msgstr "I"
-#: core/templates/core/base.jinja:323
+#: core/templates/core/base.jinja:322
msgid "B"
msgstr "G"
@@ -2620,7 +2625,7 @@ msgstr "Cotisant jusqu'au %(subscription_end)s"
msgid "Account number: "
msgstr "Numero de compte : "
-#: core/templates/core/macros.jinja:88 launderette/models.py:155
+#: core/templates/core/macros.jinja:88 launderette/models.py:193
msgid "Slot"
msgstr "Créneau"
@@ -2893,7 +2898,7 @@ msgid "Eboutic invoices"
msgstr "Facture eboutic"
#: core/templates/core/user_account.jinja:57
-#: core/templates/core/user_tools.jinja:35 counter/views.py:601
+#: core/templates/core/user_tools.jinja:35 counter/views.py:745
msgid "Etickets"
msgstr "Etickets"
@@ -3049,8 +3054,8 @@ msgstr "Parrains de %(user_name)s"
msgid "Show family picture"
msgstr "Voir une image de la famille"
-#: core/templates/core/user_godfathers.jinja:12 core/views/user.py:171
-#: core/views/user.py:395
+#: core/templates/core/user_godfathers.jinja:12 core/views/user.py:214
+#: core/views/user.py:486
msgid "Godfathers"
msgstr "Parrains"
@@ -3063,7 +3068,7 @@ msgstr "Voir l'arbre des ancêtres"
msgid "No godfathers"
msgstr "Pas de parrains"
-#: core/templates/core/user_godfathers.jinja:25 core/views/user.py:393
+#: core/templates/core/user_godfathers.jinja:25 core/views/user.py:484
msgid "Godchildren"
msgstr "Fillots"
@@ -3119,11 +3124,11 @@ msgid "%(user_name)s's pictures"
msgstr "Photos de %(user_name)s"
#: core/templates/core/user_preferences.jinja:4
-#: core/templates/core/user_preferences.jinja:8 core/views/user.py:193
+#: core/templates/core/user_preferences.jinja:8 core/views/user.py:246
msgid "Preferences"
msgstr "Préférences"
-#: core/templates/core/user_preferences.jinja:14 trombi/views.py:48
+#: core/templates/core/user_preferences.jinja:14 trombi/views.py:55
msgid "Trombi"
msgstr "Trombi"
@@ -3166,7 +3171,7 @@ msgstr "Outils utilisateurs"
msgid "Sith management"
msgstr "Gestion de Sith"
-#: core/templates/core/user_tools.jinja:14 core/views/user.py:205
+#: core/templates/core/user_tools.jinja:14 core/views/user.py:266
msgid "Groups"
msgstr "Groupes"
@@ -3184,8 +3189,8 @@ msgstr "Cotisations"
msgid "Subscription stats"
msgstr "Statistiques de cotisation"
-#: core/templates/core/user_tools.jinja:27 counter/views.py:571
-#: counter/views.py:737
+#: core/templates/core/user_tools.jinja:27 counter/views.py:715
+#: counter/views.py:923
msgid "Counters"
msgstr "Comptoirs"
@@ -3202,16 +3207,16 @@ msgid "Product types management"
msgstr "Gestion des types de produit"
#: core/templates/core/user_tools.jinja:33
-#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:591
+#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:735
msgid "Cash register summaries"
msgstr "Relevés de caisse"
#: core/templates/core/user_tools.jinja:34
-#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:596
+#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:740
msgid "Invoices call"
msgstr "Appels à facture"
-#: core/templates/core/user_tools.jinja:42 core/views/user.py:215
+#: core/templates/core/user_tools.jinja:42 core/views/user.py:286
#: counter/templates/counter/counter_list.jinja:18
#: counter/templates/counter/counter_list.jinja:34
#: counter/templates/counter/counter_list.jinja:56
@@ -3302,42 +3307,42 @@ msgstr "Convertir de la syntaxe dokuwiki/BBcode vers Markdown"
msgid "Trombi tools"
msgstr "Outils Trombi"
-#: core/views/files.py:74
+#: core/views/files.py:82
msgid "Add a new folder"
msgstr "Ajouter un nouveau dossier"
-#: core/views/files.py:87
+#: core/views/files.py:103
#, python-format
msgid "Error creating folder %(folder_name)s: %(msg)s"
msgstr "Erreur de création du dossier %(folder_name)s : %(msg)s"
-#: core/views/files.py:97 core/views/forms.py:229 core/views/forms.py:233
-#: sas/views.py:70
+#: core/views/files.py:123 core/views/forms.py:302 core/views/forms.py:309
+#: sas/views.py:93
#, python-format
msgid "Error uploading file %(file_name)s: %(msg)s"
msgstr "Erreur d'envoi du fichier %(file_name)s : %(msg)s"
-#: core/views/files.py:151 sas/views.py:288
+#: core/views/files.py:198 sas/views.py:356
msgid "Apply rights recursively"
msgstr "Appliquer les droits récursivement"
-#: core/views/forms.py:89
+#: core/views/forms.py:101
msgid "Help on the syntax"
msgstr "Aide sur la syntaxe"
-#: core/views/forms.py:103 core/views/forms.py:106
+#: core/views/forms.py:118 core/views/forms.py:126
msgid "Choose file"
msgstr "Choisir un fichier"
-#: core/views/forms.py:118 core/views/forms.py:121
+#: core/views/forms.py:142 core/views/forms.py:150
msgid "Choose user"
msgstr "Choisir un utilisateur"
-#: core/views/forms.py:145
+#: core/views/forms.py:182
msgid "Username, email, or account number"
msgstr "Nom d'utilisateur, email, ou numéro de compte AE"
-#: core/views/forms.py:187
+#: core/views/forms.py:248
msgid ""
"Profile: you need to be visible on the picture, in order to be recognized (e."
"g. by the barmen)"
@@ -3345,199 +3350,199 @@ msgstr ""
"Photo de profil: vous devez être visible sur la photo afin d'être reconnu "
"(par exemple par les barmen)"
-#: core/views/forms.py:188
+#: core/views/forms.py:250
msgid "Avatar: used on the forum"
msgstr "Avatar : utilisé sur le forum"
-#: core/views/forms.py:189
+#: core/views/forms.py:251
msgid "Scrub: let other know how your scrub looks like!"
msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !"
-#: core/views/forms.py:234
+#: core/views/forms.py:313
msgid "Bad image format, only jpeg, png, and gif are accepted"
msgstr "Mauvais format d'image, seuls les jpeg, png, et gif sont acceptés"
-#: core/views/forms.py:254
+#: core/views/forms.py:333
msgid "Godfather"
msgstr "Parrain"
-#: core/views/forms.py:254
+#: core/views/forms.py:333
msgid "Godchild"
msgstr "Fillot"
-#: core/views/forms.py:265 core/views/forms.py:278 election/models.py:22
-#: election/views.py:128
+#: core/views/forms.py:350 core/views/forms.py:368 election/models.py:24
+#: election/views.py:167
msgid "edit groups"
msgstr "groupe d'édition"
-#: core/views/forms.py:266 core/views/forms.py:279 election/models.py:26
-#: election/views.py:129
+#: core/views/forms.py:353 core/views/forms.py:371 election/models.py:31
+#: election/views.py:170
msgid "view groups"
msgstr "groupe de vue"
-#: core/views/user.py:176 trombi/templates/trombi/export.jinja:25
+#: core/views/user.py:223 trombi/templates/trombi/export.jinja:25
#: trombi/templates/trombi/user_profile.jinja:11
msgid "Pictures"
msgstr "Photos"
-#: core/views/user.py:397
+#: core/views/user.py:488
msgid "Family"
msgstr "Famille"
-#: core/views/user.py:480
+#: core/views/user.py:630
msgid "User already has a profile picture"
msgstr "L'utilisateur a déjà une photo de profil"
-#: counter/migrations/0013_customer_recorded_products.py:23
+#: counter/migrations/0013_customer_recorded_products.py:26
msgid "Ecocup regularization"
msgstr "Régularization des ecocups"
-#: counter/models.py:52
+#: counter/models.py:53
msgid "account id"
msgstr "numéro de compte"
-#: counter/models.py:54
+#: counter/models.py:55
msgid "recorded product"
msgstr "produits consignés"
-#: counter/models.py:57
+#: counter/models.py:58
msgid "customer"
msgstr "client"
-#: counter/models.py:58
+#: counter/models.py:59
msgid "customers"
msgstr "clients"
-#: counter/models.py:90 counter/templates/counter/counter_click.jinja:48
+#: counter/models.py:95 counter/templates/counter/counter_click.jinja:48
#: counter/templates/counter/counter_click.jinja:82
msgid "Not enough money"
msgstr "Solde insuffisant"
-#: counter/models.py:119 counter/models.py:142
+#: counter/models.py:125 counter/models.py:152
msgid "product type"
msgstr "type du produit"
-#: counter/models.py:145
+#: counter/models.py:158
msgid "purchase price"
msgstr "prix d'achat"
-#: counter/models.py:146
+#: counter/models.py:159
msgid "selling price"
msgstr "prix de vente"
-#: counter/models.py:147
+#: counter/models.py:160
msgid "special selling price"
msgstr "prix de vente spécial"
-#: counter/models.py:148
+#: counter/models.py:162
msgid "icon"
msgstr "icône"
-#: counter/models.py:150
+#: counter/models.py:165
msgid "limit age"
msgstr "âge limite"
-#: counter/models.py:151
+#: counter/models.py:166
msgid "tray price"
msgstr "prix plateau"
-#: counter/models.py:152
+#: counter/models.py:170
msgid "parent product"
msgstr "produit parent"
-#: counter/models.py:154
+#: counter/models.py:176
msgid "buying groups"
msgstr "groupe d'achat"
-#: counter/models.py:155 election/models.py:37
+#: counter/models.py:178 election/models.py:52
msgid "archived"
msgstr "archivé"
-#: counter/models.py:158 counter/models.py:567
+#: counter/models.py:181 counter/models.py:700
msgid "product"
msgstr "produit"
-#: counter/models.py:186
+#: counter/models.py:212
msgid "products"
msgstr "produits"
-#: counter/models.py:187
+#: counter/models.py:215
msgid "counter type"
msgstr "type de comptoir"
-#: counter/models.py:189
+#: counter/models.py:217
msgid "Bar"
msgstr "Bar"
-#: counter/models.py:189
+#: counter/models.py:217
msgid "Office"
msgstr "Bureau"
-#: counter/models.py:189 counter/templates/counter/counter_list.jinja:11
+#: counter/models.py:217 counter/templates/counter/counter_list.jinja:11
#: eboutic/templates/eboutic/eboutic_main.jinja:4
#: eboutic/templates/eboutic/eboutic_main.jinja:24
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:8
#: eboutic/templates/eboutic/eboutic_payment_result.jinja:4
-#: sith/settings.py:377 sith/settings.py:385
+#: sith/settings.py:376 sith/settings.py:384
msgid "Eboutic"
msgstr "Eboutic"
-#: counter/models.py:190
+#: counter/models.py:220
msgid "sellers"
msgstr "vendeurs"
-#: counter/models.py:193 launderette/models.py:151
+#: counter/models.py:228 launderette/models.py:188
msgid "token"
msgstr "jeton"
-#: counter/models.py:196 counter/models.py:465 counter/models.py:483
-#: launderette/models.py:39 stock/models.py:39
+#: counter/models.py:231 counter/models.py:587 counter/models.py:611
+#: launderette/models.py:40 stock/models.py:42
msgid "counter"
msgstr "comptoir"
-#: counter/models.py:304
+#: counter/models.py:359
msgid "bank"
msgstr "banque"
-#: counter/models.py:306 counter/models.py:354
+#: counter/models.py:361 counter/models.py:451
msgid "is validated"
msgstr "est validé"
-#: counter/models.py:309
+#: counter/models.py:364
msgid "refilling"
msgstr "rechargement"
-#: counter/models.py:347 eboutic/models.py:129
+#: counter/models.py:428 eboutic/models.py:146
msgid "unit price"
msgstr "prix unitaire"
-#: counter/models.py:348 counter/models.py:556 eboutic/models.py:130
+#: counter/models.py:429 counter/models.py:687 eboutic/models.py:147
msgid "quantity"
msgstr "quantité"
-#: counter/models.py:353
+#: counter/models.py:448
msgid "Sith account"
msgstr "Compte utilisateur"
-#: counter/models.py:353 sith/settings.py:370 sith/settings.py:375
-#: sith/settings.py:397
+#: counter/models.py:448 sith/settings.py:369 sith/settings.py:374
+#: sith/settings.py:392
msgid "Credit card"
msgstr "Carte bancaire"
-#: counter/models.py:357
+#: counter/models.py:454
msgid "selling"
msgstr "vente"
-#: counter/models.py:376
+#: counter/models.py:477
msgid "Unknown event"
msgstr "Événement inconnu"
-#: counter/models.py:377
+#: counter/models.py:478
#, python-format
msgid "Eticket bought for the event %(event)s"
msgstr "Eticket acheté pour l'événement %(event)s"
-#: counter/models.py:379 counter/models.py:391
+#: counter/models.py:480 counter/models.py:494
#, python-format
msgid ""
"You bought an eticket for the event %(event)s.\n"
@@ -3546,51 +3551,51 @@ msgstr ""
"Vous avez acheté un Eticket pour l'événement %(event)s.\n"
"Vous pouvez le télécharger sur cette page: %(url)s"
-#: counter/models.py:468
+#: counter/models.py:591
msgid "last activity date"
msgstr "dernière activité"
-#: counter/models.py:471
+#: counter/models.py:594
msgid "permanency"
msgstr "permanence"
-#: counter/models.py:486
+#: counter/models.py:615
msgid "emptied"
msgstr "coffre vidée"
-#: counter/models.py:489
+#: counter/models.py:618
msgid "cash register summary"
msgstr "relevé de caisse"
-#: counter/models.py:554
+#: counter/models.py:684
msgid "cash summary"
msgstr "relevé"
-#: counter/models.py:555
+#: counter/models.py:686
msgid "value"
msgstr "valeur"
-#: counter/models.py:557
+#: counter/models.py:688
msgid "check"
msgstr "chèque"
-#: counter/models.py:560
+#: counter/models.py:691
msgid "cash register summary item"
msgstr "élément de relevé de caisse"
-#: counter/models.py:568
+#: counter/models.py:703
msgid "banner"
msgstr "bannière"
-#: counter/models.py:569
+#: counter/models.py:705
msgid "event date"
msgstr "date de l'événement"
-#: counter/models.py:570
+#: counter/models.py:707
msgid "event title"
msgstr "titre de l'événement"
-#: counter/models.py:571
+#: counter/models.py:709
msgid "secret"
msgstr "secret"
@@ -3642,7 +3647,7 @@ msgstr "Liste des relevés de caisse"
msgid "Theoric sums"
msgstr "Sommes théoriques"
-#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:856
+#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:1092
msgid "Emptied"
msgstr "Coffre vidé"
@@ -3861,149 +3866,149 @@ msgstr "Temps"
msgid "Top 100 barman %(counter_name)s (all semesters)"
msgstr "Top 100 barman %(counter_name)s (tous les semestres)"
-#: counter/views.py:105
+#: counter/views.py:130
msgid "User not found"
msgstr "Utilisateur non trouvé"
-#: counter/views.py:141
+#: counter/views.py:187
msgid "Cash summary"
msgstr "Relevé de caisse"
-#: counter/views.py:147
+#: counter/views.py:201
msgid "Last operations"
msgstr "Dernières opérations"
-#: counter/views.py:154
+#: counter/views.py:216
msgid "Take items from stock"
msgstr "Prendre des éléments du stock"
-#: counter/views.py:191
+#: counter/views.py:269
msgid "Bad credentials"
msgstr "Mauvais identifiants"
-#: counter/views.py:193
+#: counter/views.py:271
msgid "User is not barman"
msgstr "L'utilisateur n'est pas barman."
-#: counter/views.py:197
+#: counter/views.py:276
msgid "Bad location, someone is already logged in somewhere else"
msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs"
-#: counter/views.py:425
+#: counter/views.py:544
msgid "END"
msgstr "FIN"
-#: counter/views.py:427
+#: counter/views.py:546
msgid "CAN"
msgstr "ANN"
-#: counter/views.py:450
+#: counter/views.py:569
msgid "You have not enough money to buy all the basket"
msgstr "Vous n'avez pas assez d'argent pour acheter le panier"
-#: counter/views.py:561
+#: counter/views.py:709
msgid "Counter administration"
msgstr "Administration des comptoirs"
-#: counter/views.py:566
+#: counter/views.py:711
msgid "Stocks"
msgstr "Stocks"
-#: counter/views.py:576
+#: counter/views.py:720
msgid "Products"
msgstr "Produits"
-#: counter/views.py:581
+#: counter/views.py:725
msgid "Archived products"
msgstr "Produits archivés"
-#: counter/views.py:586
+#: counter/views.py:730
msgid "Product types"
msgstr "Types de produit"
-#: counter/views.py:734
+#: counter/views.py:909
msgid "Parent product"
msgstr "Produit parent"
-#: counter/views.py:735
+#: counter/views.py:915
msgid "Buying groups"
msgstr "Groupes d'achat"
-#: counter/views.py:835
+#: counter/views.py:1049
msgid "10 cents"
msgstr "10 centimes"
-#: counter/views.py:836
+#: counter/views.py:1050
msgid "20 cents"
msgstr "20 centimes"
-#: counter/views.py:837
+#: counter/views.py:1051
msgid "50 cents"
msgstr "50 centimes"
-#: counter/views.py:838
+#: counter/views.py:1052
msgid "1 euro"
msgstr "1 €"
-#: counter/views.py:839
+#: counter/views.py:1053
msgid "2 euros"
msgstr "2 €"
-#: counter/views.py:840
+#: counter/views.py:1054
msgid "5 euros"
msgstr "5 €"
-#: counter/views.py:841
+#: counter/views.py:1055
msgid "10 euros"
msgstr "10 €"
-#: counter/views.py:842
+#: counter/views.py:1056
msgid "20 euros"
msgstr "20 €"
-#: counter/views.py:843
+#: counter/views.py:1057
msgid "50 euros"
msgstr "50 €"
-#: counter/views.py:844
+#: counter/views.py:1059
msgid "100 euros"
msgstr "100 €"
-#: counter/views.py:845 counter/views.py:847 counter/views.py:849
-#: counter/views.py:851 counter/views.py:853
+#: counter/views.py:1062 counter/views.py:1068 counter/views.py:1074
+#: counter/views.py:1080 counter/views.py:1086
msgid "Check amount"
msgstr "Montant du chèque"
-#: counter/views.py:846 counter/views.py:848 counter/views.py:850
-#: counter/views.py:852 counter/views.py:854
+#: counter/views.py:1065 counter/views.py:1071 counter/views.py:1077
+#: counter/views.py:1083 counter/views.py:1089
msgid "Check quantity"
msgstr "Nombre de chèque"
-#: counter/views.py:1262
+#: counter/views.py:1725
msgid "people(s)"
msgstr "personne(s)"
-#: eboutic/models.py:74
+#: eboutic/models.py:86
msgid "validated"
msgstr "validé"
-#: eboutic/models.py:87
+#: eboutic/models.py:99
msgid "Invoice already validated"
msgstr "Facture déjà validée"
-#: eboutic/models.py:126
+#: eboutic/models.py:143
msgid "product id"
msgstr "ID du produit"
-#: eboutic/models.py:127
+#: eboutic/models.py:144
msgid "product name"
msgstr "nom du produit"
-#: eboutic/models.py:128
+#: eboutic/models.py:145
msgid "product type id"
msgstr "id du type du produit"
-#: eboutic/models.py:140
+#: eboutic/models.py:161
msgid "basket"
msgstr "panier"
@@ -4042,39 +4047,39 @@ msgstr "Le paiement a été effectué"
msgid "Return to eboutic"
msgstr "Retourner à l'eboutic"
-#: eboutic/views.py:168
+#: eboutic/views.py:217
msgid "You do not have enough money to buy the basket"
msgstr "Vous n'avez pas assez d'argent pour acheter le panier"
-#: election/models.py:15
+#: election/models.py:16
msgid "start candidature"
msgstr "début des candidatures"
-#: election/models.py:16
+#: election/models.py:17
msgid "end candidature"
msgstr "fin des candidatures"
-#: election/models.py:30 election/views.py:130
+#: election/models.py:38 election/views.py:173
msgid "vote groups"
msgstr "groupe de vote"
-#: election/models.py:34 election/views.py:131
+#: election/models.py:45 election/views.py:180
msgid "candidature groups"
msgstr "groupe de candidature"
-#: election/models.py:97 election/models.py:135
+#: election/models.py:114 election/models.py:158
msgid "election"
msgstr "élection"
-#: election/models.py:100
+#: election/models.py:118
msgid "max choice"
msgstr "nombre de choix maxi"
-#: election/models.py:156
+#: election/models.py:184
msgid "election list"
msgstr "liste électorale"
-#: election/models.py:175
+#: election/models.py:206
msgid "candidature"
msgstr "candidature"
@@ -4122,7 +4127,7 @@ msgstr "Vous avez déjà soumis votre vote."
msgid "You have voted in this election."
msgstr "Vous avez déjà voté pour cette élection."
-#: election/templates/election/election_detail.jinja:266 election/views.py:84
+#: election/templates/election/election_detail.jinja:266 election/views.py:106
msgid "Blank vote"
msgstr "Vote blanc"
@@ -4191,87 +4196,87 @@ msgstr "au"
msgid "Polls open from"
msgstr "Votes ouverts du"
-#: election/views.py:45
+#: election/views.py:57
msgid "You have selected too much candidates."
msgstr "Vous avez sélectionné trop de candidats."
-#: election/views.py:60
+#: election/views.py:73
msgid "User to candidate"
msgstr "Utilisateur se présentant"
-#: election/views.py:104
+#: election/views.py:131
msgid "This role already exists for this election"
msgstr "Ce rôle existe déjà pour cette élection"
-#: election/views.py:137
+#: election/views.py:194
msgid "Start candidature"
msgstr "Début des candidatures"
-#: election/views.py:139
+#: election/views.py:200
msgid "End candidature"
msgstr "Fin des candidatures"
-#: forum/models.py:56
+#: forum/models.py:60
msgid "is a category"
msgstr "est une catégorie"
-#: forum/models.py:58
+#: forum/models.py:65
msgid "owner club"
msgstr "club propriétaire"
-#: forum/models.py:64
+#: forum/models.py:81
msgid "number to choose a specific forum ordering"
msgstr "numéro spécifiant l'ordre d'affichage"
-#: forum/models.py:66 forum/models.py:196
+#: forum/models.py:86 forum/models.py:238
msgid "the last message"
msgstr "le dernier message"
-#: forum/models.py:67
+#: forum/models.py:90
msgid "number of topics"
msgstr "nombre de sujets"
-#: forum/models.py:144
+#: forum/models.py:177
msgid "You can not make loops in forums"
msgstr "Vous ne pouvez pas faire de boucles dans les forums"
-#: forum/models.py:195
+#: forum/models.py:233
msgid "subscribed users"
msgstr "utilisateurs abonnés"
-#: forum/models.py:199
+#: forum/models.py:243
msgid "number of messages"
msgstr "nombre de messages"
-#: forum/models.py:247
+#: forum/models.py:297
msgid "message"
msgstr "message"
-#: forum/models.py:249
+#: forum/models.py:300
msgid "readers"
msgstr "lecteurs"
-#: forum/models.py:250
+#: forum/models.py:302
msgid "is deleted"
msgstr "est supprimé"
-#: forum/models.py:314
+#: forum/models.py:382
msgid "Message edited by"
msgstr "Message édité par"
-#: forum/models.py:315
+#: forum/models.py:383
msgid "Message deleted by"
msgstr "Message supprimé par"
-#: forum/models.py:316
+#: forum/models.py:384
msgid "Message undeleted by"
msgstr "Message restauré par"
-#: forum/models.py:324
+#: forum/models.py:392
msgid "action"
msgstr "action"
-#: forum/models.py:339
+#: forum/models.py:409
msgid "last read date"
msgstr "dernière date de lecture"
@@ -4347,47 +4352,47 @@ msgstr "Enlever des favoris"
msgid "Mark as favorite"
msgstr "Ajouter aux favoris"
-#: forum/views.py:122
+#: forum/views.py:138
msgid "Apply rights and club owner recursively"
msgstr "Appliquer les droits et le club propriétaire récursivement"
-#: forum/views.py:312
+#: forum/views.py:356
#, python-format
msgid "%(author)s said"
msgstr "Citation de %(author)s"
-#: launderette/models.py:42
+#: launderette/models.py:44
#: launderette/templates/launderette/launderette_book.jinja:5
#: launderette/templates/launderette/launderette_book_choose.jinja:4
#: launderette/templates/launderette/launderette_main.jinja:4
msgid "Launderette"
msgstr "Laverie"
-#: launderette/models.py:85 launderette/models.py:111
+#: launderette/models.py:92 launderette/models.py:127
msgid "launderette"
msgstr "laverie"
-#: launderette/models.py:87
+#: launderette/models.py:97
msgid "is working"
msgstr "fonctionne"
-#: launderette/models.py:90
+#: launderette/models.py:100
msgid "Machine"
msgstr "Machine"
-#: launderette/models.py:113
+#: launderette/models.py:132
msgid "borrow date"
msgstr "date d'emprunt"
-#: launderette/models.py:117
+#: launderette/models.py:138
msgid "Token"
msgstr "Jeton"
-#: launderette/models.py:123
+#: launderette/models.py:144
msgid "Token name can not be blank"
msgstr "Le nom du jeton ne peut pas être vide"
-#: launderette/models.py:150
+#: launderette/models.py:185
msgid "machine"
msgstr "machine"
@@ -4412,12 +4417,12 @@ msgid "Washing and drying"
msgstr "Lavage et séchage"
#: launderette/templates/launderette/launderette_book.jinja:27
-#: sith/settings.py:575
+#: sith/settings.py:520
msgid "Washing"
msgstr "Lavage"
#: launderette/templates/launderette/launderette_book.jinja:31
-#: sith/settings.py:575
+#: sith/settings.py:520
msgid "Drying"
msgstr "Séchage"
@@ -4442,29 +4447,29 @@ msgstr "Éditer la page de présentation"
msgid "Book launderette slot"
msgstr "Réserver un créneau de laverie"
-#: launderette/views.py:183
+#: launderette/views.py:228
msgid "Action"
msgstr "Action"
-#: launderette/views.py:186
+#: launderette/views.py:240
msgid "Tokens, separated by spaces"
msgstr "Jetons, séparés par des espaces"
-#: launderette/views.py:201 launderette/views.py:215
+#: launderette/views.py:260 launderette/views.py:282
#, python-format
msgid "Token %(token_name)s does not exists"
msgstr "Le jeton %(token_name)s n'existe pas"
-#: launderette/views.py:209
+#: launderette/views.py:271
#, python-format
msgid "Token %(token_name)s already exists"
msgstr "Un jeton %(token_name)s existe déjà"
-#: launderette/views.py:267
+#: launderette/views.py:338
msgid "User has booked no slot"
msgstr "L'utilisateur n'a pas réservé de créneau"
-#: launderette/views.py:360
+#: launderette/views.py:452
msgid "Token not found"
msgstr "Jeton non trouvé"
@@ -4489,7 +4494,7 @@ msgstr "Recherche inversée"
msgid "Quick search"
msgstr "Recherche rapide"
-#: matmat/views.py:75
+#: matmat/views.py:73
msgid "Indifferent"
msgstr "Indifferent"
@@ -4497,7 +4502,7 @@ msgstr "Indifferent"
msgid "Sex"
msgstr "Sexe"
-#: matmat/views.py:78
+#: matmat/views.py:79
msgid "Last/First name or nickname"
msgstr "Nom de famille, prénom ou surnom"
@@ -4509,15 +4514,15 @@ msgstr "Fusionner deux utilisateurs"
msgid "Merge"
msgstr "Fusion"
-#: rootplace/views.py:91
+#: rootplace/views.py:92
msgid "User that will be kept"
msgstr "Utilisateur qui sera conservé"
-#: rootplace/views.py:92
+#: rootplace/views.py:95
msgid "User that will be deleted"
msgstr "Utilisateur qui sera supprimé"
-#: sas/models.py:186
+#: sas/models.py:243
msgid "picture"
msgstr "photo"
@@ -4575,24 +4580,24 @@ msgstr "Demander le retrait"
msgid "Asked for removal"
msgstr "Retrait demandé"
-#: sas/views.py:47
+#: sas/views.py:48
msgid "Add a new album"
msgstr "Ajouter un nouvel album"
-#: sas/views.py:48
+#: sas/views.py:52
msgid "Upload images"
msgstr "Envoyer les images"
-#: sas/views.py:58
+#: sas/views.py:70
#, python-format
msgid "Error creating album %(album)s: %(msg)s"
msgstr "Erreur de création de l'album %(album)s : %(msg)s"
-#: sas/views.py:78 trombi/templates/trombi/detail.jinja:15
+#: sas/views.py:105 trombi/templates/trombi/detail.jinja:15
msgid "Add user"
msgstr "Ajouter une personne"
-#: sith/settings.py:214
+#: sith/settings.py:215
msgid "English"
msgstr "Anglais"
@@ -4600,267 +4605,267 @@ msgstr "Anglais"
msgid "French"
msgstr "Français"
-#: sith/settings.py:351
+#: sith/settings.py:350
msgid "TC"
msgstr "TC"
-#: sith/settings.py:352
+#: sith/settings.py:351
msgid "IMSI"
msgstr "IMSI"
-#: sith/settings.py:353
+#: sith/settings.py:352
msgid "IMAP"
msgstr "IMAP"
-#: sith/settings.py:354
+#: sith/settings.py:353
msgid "INFO"
msgstr "INFO"
-#: sith/settings.py:355
+#: sith/settings.py:354
msgid "GI"
msgstr "GI"
-#: sith/settings.py:356
+#: sith/settings.py:355
msgid "E"
msgstr "E"
-#: sith/settings.py:357
+#: sith/settings.py:356
msgid "EE"
msgstr "EE"
-#: sith/settings.py:358
+#: sith/settings.py:357
msgid "GESC"
msgstr "GESC"
-#: sith/settings.py:359
+#: sith/settings.py:358
msgid "GMC"
msgstr "GMC"
-#: sith/settings.py:360
+#: sith/settings.py:359
msgid "MC"
msgstr "MC"
-#: sith/settings.py:361
+#: sith/settings.py:360
msgid "EDIM"
msgstr "EDIM"
-#: sith/settings.py:362
+#: sith/settings.py:361
msgid "Humanities"
msgstr "Humanités"
-#: sith/settings.py:363
+#: sith/settings.py:362
msgid "N/A"
msgstr "N/A"
-#: sith/settings.py:367 sith/settings.py:374 sith/settings.py:395
+#: sith/settings.py:366 sith/settings.py:373 sith/settings.py:390
msgid "Check"
msgstr "Chèque"
-#: sith/settings.py:368 sith/settings.py:376 sith/settings.py:396
+#: sith/settings.py:367 sith/settings.py:375 sith/settings.py:391
msgid "Cash"
msgstr "Espèces"
-#: sith/settings.py:369
+#: sith/settings.py:368
msgid "Transfert"
msgstr "Virement"
-#: sith/settings.py:382
+#: sith/settings.py:381
msgid "Belfort"
msgstr "Belfort"
-#: sith/settings.py:383
+#: sith/settings.py:382
msgid "Sevenans"
msgstr "Sevenans"
-#: sith/settings.py:384
+#: sith/settings.py:383
msgid "Montbéliard"
msgstr "Montbéliard"
-#: sith/settings.py:442
+#: sith/settings.py:434
msgid "One semester"
msgstr "Un semestre, 15 €"
-#: sith/settings.py:447
+#: sith/settings.py:435
msgid "Two semesters"
msgstr "Deux semestres, 28 €"
-#: sith/settings.py:452
+#: sith/settings.py:437
msgid "Common core cursus"
msgstr "Cursus tronc commun, 45 €"
-#: sith/settings.py:457
+#: sith/settings.py:441
msgid "Branch cursus"
msgstr "Cursus branche, 45 €"
-#: sith/settings.py:462
+#: sith/settings.py:442
msgid "Alternating cursus"
msgstr "Cursus alternant, 30 €"
-#: sith/settings.py:467
+#: sith/settings.py:443
msgid "Honorary member"
msgstr "Membre honoraire, 0 €"
-#: sith/settings.py:472
+#: sith/settings.py:444
msgid "Assidu member"
msgstr "Membre d'Assidu, 0 €"
-#: sith/settings.py:477
+#: sith/settings.py:445
msgid "Amicale/DOCEO member"
msgstr "Membre de l'Amicale/DOCEO, 0 €"
-#: sith/settings.py:482
+#: sith/settings.py:446
msgid "UT network member"
msgstr "Cotisant du réseau UT, 0 €"
-#: sith/settings.py:487
+#: sith/settings.py:447
msgid "CROUS member"
msgstr "Membres du CROUS, 0 €"
-#: sith/settings.py:492
+#: sith/settings.py:448
msgid "Sbarro/ESTA member"
msgstr "Membre de Sbarro ou de l'ESTA, 15 €"
-#: sith/settings.py:497
+#: sith/settings.py:450
msgid "One semester Welcome Week"
msgstr "Un semestre Welcome Week"
-#: sith/settings.py:502
+#: sith/settings.py:454
msgid "Two months for free"
msgstr "Deux mois gratuits"
-#: sith/settings.py:507
+#: sith/settings.py:455
msgid "Eurok's volunteer"
msgstr "Bénévole Eurockéennes"
-#: sith/settings.py:512
+#: sith/settings.py:457
msgid "Six weeks for free"
msgstr "6 semaines gratuites"
-#: sith/settings.py:517
+#: sith/settings.py:461
msgid "One day"
msgstr "Un jour"
-#: sith/settings.py:539
+#: sith/settings.py:480
msgid "President"
msgstr "Président"
-#: sith/settings.py:540
+#: sith/settings.py:481
msgid "Vice-President"
msgstr "Vice-Président"
-#: sith/settings.py:541
+#: sith/settings.py:482
msgid "Treasurer"
msgstr "Trésorier"
-#: sith/settings.py:542
+#: sith/settings.py:483
msgid "Communication supervisor"
msgstr "Responsable communication"
-#: sith/settings.py:543
+#: sith/settings.py:484
msgid "Secretary"
msgstr "Secrétaire"
-#: sith/settings.py:544
+#: sith/settings.py:485
msgid "IT supervisor"
msgstr "Responsable info"
-#: sith/settings.py:545
+#: sith/settings.py:486
msgid "Board member"
msgstr "Membre du bureau"
-#: sith/settings.py:546
+#: sith/settings.py:487
msgid "Active member"
msgstr "Membre actif"
-#: sith/settings.py:547
+#: sith/settings.py:488
msgid "Curious"
msgstr "Curieux"
-#: sith/settings.py:582
+#: sith/settings.py:524
msgid "A new poster needs to be moderated"
msgstr "Une nouvelle affiche a besoin d'être modérée"
-#: sith/settings.py:583
+#: sith/settings.py:525
msgid "A new mailing list needs to be moderated"
msgstr "Une nouvelle mailing list a besoin d'être modérée"
-#: sith/settings.py:584
+#: sith/settings.py:526
#, python-format
msgid "There are %s fresh news to be moderated"
msgstr "Il y a %s nouvelles toutes fraîches à modérer"
-#: sith/settings.py:585
+#: sith/settings.py:527
msgid "New files to be moderated"
msgstr "Nouveaux fichiers à modérer"
-#: sith/settings.py:586
+#: sith/settings.py:528
#, python-format
msgid "There are %s pictures to be moderated in the SAS"
msgstr "Il y a %s photos à modérer dans le SAS"
-#: sith/settings.py:587
+#: sith/settings.py:529
msgid "You've been identified on some pictures"
msgstr "Vous avez été identifié sur des photos"
-#: sith/settings.py:588
+#: sith/settings.py:530
#, python-format
msgid "You just refilled of %s €"
msgstr "Vous avez rechargé votre compte de %s€"
-#: sith/settings.py:589
+#: sith/settings.py:531
#, python-format
msgid "You just bought %s"
msgstr "Vous avez acheté %s"
-#: sith/settings.py:590
+#: sith/settings.py:532
msgid "You have a notification"
msgstr "Vous avez une notification"
-#: sith/settings.py:602
+#: sith/settings.py:544
msgid "Success!"
msgstr "Succès !"
-#: sith/settings.py:603
+#: sith/settings.py:545
msgid "Fail!"
msgstr "Échec !"
-#: sith/settings.py:604
+#: sith/settings.py:546
msgid "You successfully posted an article in the Weekmail"
msgstr "Article posté avec succès dans le Weekmail"
-#: sith/settings.py:605
+#: sith/settings.py:547
msgid "You successfully edited an article in the Weekmail"
msgstr "Article édité avec succès dans le Weekmail"
-#: sith/settings.py:606
+#: sith/settings.py:548
msgid "You successfully sent the Weekmail"
msgstr "Weekmail envoyé avec succès"
-#: sith/settings.py:615
+#: sith/settings.py:556
msgid "AE tee-shirt"
msgstr "Tee-shirt AE"
-#: stock/models.py:55
+#: stock/models.py:62
msgid "unit quantity"
msgstr "quantité unitaire"
-#: stock/models.py:55
+#: stock/models.py:62
msgid "number of element in one box"
msgstr "nombre d'éléments par boîte"
-#: stock/models.py:56
+#: stock/models.py:65
msgid "effective quantity"
msgstr "quantité effective"
-#: stock/models.py:56
+#: stock/models.py:65
msgid "number of box"
msgstr "nombre de boîtes"
-#: stock/models.py:57
+#: stock/models.py:68
msgid "minimal quantity"
msgstr "quantité minimale"
-#: stock/models.py:58
+#: stock/models.py:71
msgid ""
"if the effective quantity is less than the minimal, item is added to the "
"shopping list"
@@ -4868,27 +4873,27 @@ msgstr ""
"si la quantité effective est en dessous du minima, l'item est ajouté àla "
"liste de courses"
-#: stock/models.py:78
+#: stock/models.py:101
msgid "todo"
msgstr "à faire"
-#: stock/models.py:95
+#: stock/models.py:121
msgid "shopping lists"
msgstr "listes de courses"
-#: stock/models.py:100
+#: stock/models.py:137
msgid "quantity to buy"
msgstr "quantité à acheter"
-#: stock/models.py:100
+#: stock/models.py:139
msgid "quantity to buy during the next shopping session"
msgstr "quantité à acheter pendant les prochaines courses"
-#: stock/models.py:101
+#: stock/models.py:142
msgid "quantity bought"
msgstr "quantité achetée"
-#: stock/models.py:101
+#: stock/models.py:144
msgid "quantity bought during the last shopping session"
msgstr "quantité achetée pendant les dernières courses"
@@ -4905,7 +4910,7 @@ msgstr "Quantité demandée"
msgid "Quantity bought"
msgstr "Quantité achetée"
-#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:206
+#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:278
#: trombi/templates/trombi/export.jinja:70
msgid "Comments"
msgstr "Commentaires"
@@ -5014,15 +5019,15 @@ msgstr "Mettre à jour les quantités de %(s)s après les courses"
msgid "Update stock quantities"
msgstr "Mettre à jour les quantités en stock"
-#: stock/views.py:198
+#: stock/views.py:257
msgid "Shopping list name"
msgstr "Nom de la liste de courses"
-#: stock/views.py:204
+#: stock/views.py:267
msgid " left"
msgstr " restant"
-#: stock/views.py:205
+#: stock/views.py:273
msgid ""
"Add here, items to buy that are not reference as a stock item (example : "
"sponge, knife, mugs ...)"
@@ -5030,11 +5035,11 @@ msgstr ""
"Ajouter ici les éléments non référencé comme élément de stock (example : "
"éponge, couteau, mugs ...)"
-#: stock/views.py:334
+#: stock/views.py:457
msgid " asked"
msgstr " demandé"
-#: stock/views.py:401
+#: stock/views.py:549
#, python-format
msgid "%(effective_quantity)s left"
msgstr "%(effective_quantity)s restant"
@@ -5047,27 +5052,27 @@ msgstr "Mauvais type de cotisation"
msgid "Bad payment method"
msgstr "Mauvais type de paiement"
-#: subscription/models.py:54
+#: subscription/models.py:55
msgid "subscription type"
msgstr "type d'inscription"
-#: subscription/models.py:57
+#: subscription/models.py:61
msgid "subscription start"
msgstr "début de la cotisation"
-#: subscription/models.py:58
+#: subscription/models.py:62
msgid "subscription end"
msgstr "fin de la cotisation"
-#: subscription/models.py:63
+#: subscription/models.py:71
msgid "location"
msgstr "lieu"
-#: subscription/models.py:72
+#: subscription/models.py:91
msgid "You can not subscribe many time for the same period"
msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période"
-#: subscription/models.py:76
+#: subscription/models.py:96
msgid "Subscription error"
msgstr "Erreur de cotisation"
@@ -5088,20 +5093,20 @@ msgid "Eboutic is reserved to specific users. In doubt, don't use it."
msgstr ""
"Eboutic est réservé à des cas particuliers. Dans le doute, ne l'utilisez pas."
-#: subscription/views.py:83
+#: subscription/views.py:98
msgid "A user with that email address already exists"
msgstr "Un utilisateur avec cette adresse email existe déjà"
-#: subscription/views.py:99
+#: subscription/views.py:119
msgid "You must either choose an existing user or create a new one properly"
msgstr ""
"Vous devez soit choisir un utilisateur existant, soit en créer un proprement"
-#: trombi/models.py:55
+#: trombi/models.py:60
msgid "subscription deadline"
msgstr "fin des inscriptions"
-#: trombi/models.py:56
+#: trombi/models.py:63
msgid ""
"Before this date, users are allowed to subscribe to this Trombi. After this "
"date, users subscribed will be allowed to comment on each other."
@@ -5110,46 +5115,46 @@ msgstr ""
"Après cette date, les utilisateurs inscrits peuvent se soumettre des "
"commentaires entre eux."
-#: trombi/models.py:59
+#: trombi/models.py:69
msgid "comments deadline"
msgstr "fin des commentaires"
-#: trombi/models.py:60
+#: trombi/models.py:72
msgid "After this date, users won't be able to make comments anymore."
msgstr ""
"Après cette date, les utilisateurs ne peuvent plus faire de commentaires."
-#: trombi/models.py:62
+#: trombi/models.py:76
msgid "maximum characters"
msgstr "nombre de caractères max"
-#: trombi/models.py:63
+#: trombi/models.py:78
msgid "Maximum number of characters allowed in a comment."
msgstr "Nombre maximum de caractères autorisés dans un commentaire."
-#: trombi/models.py:64
+#: trombi/models.py:81
msgid "show users profiles to each other"
msgstr "montrer les profils aux inscrits"
-#: trombi/models.py:75
+#: trombi/models.py:95
msgid ""
"Closing the subscriptions after the comments is definitively not a good idea."
msgstr ""
"Fermer les inscriptions après les commentaires est vraiment une idée pourrie."
-#: trombi/models.py:96
+#: trombi/models.py:120
msgid "trombi user"
msgstr "utilisateur trombi"
-#: trombi/models.py:97
+#: trombi/models.py:124
msgid "trombi"
msgstr "trombi"
-#: trombi/models.py:98
+#: trombi/models.py:132
msgid "profile pict"
msgstr "photo de profil"
-#: trombi/models.py:99
+#: trombi/models.py:136
msgid ""
"The profile picture you want in the trombi (warning: this picture may be "
"published)"
@@ -5157,11 +5162,11 @@ msgstr ""
"La photo de profil que vous souhaitez voir dans le Trombi (attention: cette "
"photo risque d'être publiée)"
-#: trombi/models.py:100
+#: trombi/models.py:141
msgid "scrub pict"
msgstr "photo de blouse"
-#: trombi/models.py:101
+#: trombi/models.py:145
msgid ""
"The scrub picture you want in the trombi (warning: this picture may be "
"published)"
@@ -5169,19 +5174,19 @@ msgstr ""
"La photo de blouse que vous souhaitez voir dans le Trombi (attention: cette "
"photo risque d'être publiée)"
-#: trombi/models.py:134
+#: trombi/models.py:186
msgid "target"
msgstr "cible"
-#: trombi/models.py:136
+#: trombi/models.py:189
msgid "is the comment moderated"
msgstr "le commentaire est modéré"
-#: trombi/models.py:151
+#: trombi/models.py:207
msgid "start"
msgstr "début"
-#: trombi/models.py:152
+#: trombi/models.py:208
msgid "end"
msgstr "fin"
@@ -5312,27 +5317,27 @@ msgstr ""
msgid "Edit comment"
msgstr "Éditer le commentaire"
-#: trombi/views.py:60
+#: trombi/views.py:66
msgid "My profile"
msgstr "Mon profil"
-#: trombi/views.py:65
+#: trombi/views.py:73
msgid "My pictures"
msgstr "Mes photos"
-#: trombi/views.py:73
+#: trombi/views.py:85
msgid "Admin tools"
msgstr "Admin Trombi"
-#: trombi/views.py:178
+#: trombi/views.py:205
msgid "Explain why you rejected the comment"
msgstr "Expliquez pourquoi vous refusez le commentaire"
-#: trombi/views.py:203
+#: trombi/views.py:238
msgid "Rejected comment"
msgstr "Commentaire rejeté"
-#: trombi/views.py:204
+#: trombi/views.py:240
#, python-format
msgid ""
"Your comment to %(target)s on the Trombi \"%(trombi)s\" was rejected for the "
@@ -5349,16 +5354,16 @@ msgstr ""
"\n"
"%(content)s"
-#: trombi/views.py:228
+#: trombi/views.py:272
#, python-format
msgid "%(name)s (deadline: %(date)s)"
msgstr "%(name)s (date limite: %(date)s)"
-#: trombi/views.py:232
+#: trombi/views.py:282
msgid "Select trombi"
msgstr "Choisir un trombi"
-#: trombi/views.py:233
+#: trombi/views.py:284
msgid ""
"This allows you to subscribe to a Trombi. Be aware that you can subscribe "
"only once, so don't play with that, or you will expose yourself to the "
@@ -5368,19 +5373,19 @@ msgstr ""
"pouvez vous inscrire qu'à un seul Trombi, donc ne jouez pas avec cet option "
"ou vous encourerez la colère des admins!"
-#: trombi/views.py:284
+#: trombi/views.py:346
msgid "Personal email (not UTBM)"
msgstr "Email personnel (pas UTBM)"
-#: trombi/views.py:285
+#: trombi/views.py:347
msgid "Phone"
msgstr "Téléphone"
-#: trombi/views.py:286
+#: trombi/views.py:348
msgid "Native town"
msgstr "Ville d'origine"
-#: trombi/views.py:359
+#: trombi/views.py:432
msgid ""
"You can not yet write comment, you must wait for the subscription deadline "
"to be passed."
@@ -5388,11 +5393,11 @@ msgstr ""
"Vous ne pouvez pas encore écrire de commentaires, vous devez attendre la fin "
"des inscriptions"
-#: trombi/views.py:362
+#: trombi/views.py:439
msgid "You can not write comment anymore, the deadline is already passed."
msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée."
-#: trombi/views.py:369
+#: trombi/views.py:452
#, python-format
msgid "Maximum characters: %(max_length)s"
msgstr "Nombre de caractères max: %(max_length)s"
diff --git a/sith/urls.py b/sith/urls.py
index 9b85e64e..179724b8 100644
--- a/sith/urls.py
+++ b/sith/urls.py
@@ -48,6 +48,7 @@ js_info_dict = {"packages": ("sith",)}
handler403 = "core.views.forbidden"
handler404 = "core.views.not_found"
+handler500 = "core.views.internal_servor_error"
urlpatterns = [
url(r"^", include("core.urls", namespace="core", app_name="core")),