trombi: add custom club memberships

Signed-off-by: Skia <skia@libskia.so>
This commit is contained in:
Skia 2017-06-12 23:52:59 +02:00
parent 5df9be9188
commit f26f2f4229
8 changed files with 276 additions and 59 deletions

View File

@ -59,6 +59,13 @@ def get_start_of_semester(d=date.today()):
else: else:
return start2 return start2
def get_semester(d=date.today()):
start = get_start_of_semester(d)
if start.month <= 6:
return "P" + str(start.year)[-2:]
else:
return "A" + str(start.year)[-2:]
def scale_dimension(width, height, long_edge): def scale_dimension(width, height, long_edge):
if width > height: if width > height:
ratio = long_edge * 1. / width ratio = long_edge * 1. / width

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-12 08:12+0200\n" "POT-Creation-Date: 2017-06-12 23:48+0200\n"
"PO-Revision-Date: 2016-07-18\n" "PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia <skia@libskia.so>\n" "Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n" "Language-Team: AE info <ae.info@utbm.fr>\n"
@ -67,7 +67,7 @@ msgstr "numero de compte"
#: accounting/models.py:111 accounting/models.py:136 club/models.py:183 #: accounting/models.py:111 accounting/models.py:136 club/models.py:183
#: com/models.py:64 com/models.py:152 counter/models.py:134 #: com/models.py:64 com/models.py:152 counter/models.py:134
#: counter/models.py:161 #: counter/models.py:161 trombi/models.py:140
msgid "club" msgid "club"
msgstr "club" msgstr "club"
@ -139,7 +139,7 @@ msgid "comment"
msgstr "commentaire" msgstr "commentaire"
#: accounting/models.py:256 counter/models.py:277 counter/models.py:325 #: accounting/models.py:256 counter/models.py:277 counter/models.py:325
#: subscription/models.py:53 #: subscription/models.py:54
msgid "payment method" msgid "payment method"
msgstr "méthode de paiement" msgstr "méthode de paiement"
@ -174,8 +174,6 @@ msgstr "type de cible"
#: accounting/models.py:267 club/templates/club/club_members.jinja:8 #: accounting/models.py:267 club/templates/club/club_members.jinja:8
#: club/templates/club/club_old_members.jinja:8 #: club/templates/club/club_old_members.jinja:8
#: core/templates/core/user_clubs.jinja:15
#: core/templates/core/user_clubs.jinja:41
#: counter/templates/counter/cash_summary_list.jinja:32 #: counter/templates/counter/cash_summary_list.jinja:32
#: counter/templates/counter/stats.jinja:15 #: counter/templates/counter/stats.jinja:15
#: counter/templates/counter/stats.jinja:52 #: counter/templates/counter/stats.jinja:52
@ -188,7 +186,13 @@ msgstr "Utilisateur"
#: com/templates/com/news_admin_list.jinja:17 #: com/templates/com/news_admin_list.jinja:17
#: com/templates/com/news_admin_list.jinja:52 #: com/templates/com/news_admin_list.jinja:52
#: com/templates/com/weekmail.jinja:18 com/templates/com/weekmail.jinja:47 #: com/templates/com/weekmail.jinja:18 com/templates/com/weekmail.jinja:47
#: core/templates/core/user_clubs.jinja:15
#: core/templates/core/user_clubs.jinja:41
#: counter/templates/counter/invoices_call.jinja:23 #: counter/templates/counter/invoices_call.jinja:23
#: trombi/templates/trombi/edit_profile.jinja:15
#: trombi/templates/trombi/edit_profile.jinja:22
#: trombi/templates/trombi/user_profile.jinja:34
#: trombi/templates/trombi/user_profile.jinja:38
msgid "Club" msgid "Club"
msgstr "Club" msgstr "Club"
@ -341,14 +345,16 @@ msgstr "Compte en banque : "
#: election/templates/election/election_detail.jinja:280 #: election/templates/election/election_detail.jinja:280
#: election/templates/election/election_detail.jinja:330 #: election/templates/election/election_detail.jinja:330
#: election/templates/election/election_detail.jinja:378 #: election/templates/election/election_detail.jinja:378
#: forum/templates/forum/macros.jinja:21 forum/templates/forum/macros.jinja:123 #: forum/templates/forum/macros.jinja:21
#: forum/templates/forum/macros.jinja:123
#: launderette/templates/launderette/launderette_admin.jinja:16 #: launderette/templates/launderette/launderette_admin.jinja:16
#: launderette/views.py:178 sas/templates/sas/album.jinja:26 #: launderette/views.py:178 sas/templates/sas/album.jinja:26
#: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74 #: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74
#: sas/templates/sas/picture.jinja.py:124 #: sas/templates/sas/picture.jinja:124
#: stock/templates/stock/stock_shopping_list.jinja:43 #: stock/templates/stock/stock_shopping_list.jinja:43
#: stock/templates/stock/stock_shopping_list.jinja:69 #: stock/templates/stock/stock_shopping_list.jinja:69
#: trombi/templates/trombi/detail.jinja:28 #: trombi/templates/trombi/detail.jinja:28
#: trombi/templates/trombi/edit_profile.jinja:35
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
@ -390,6 +396,7 @@ msgstr "Nouveau compte club"
#: launderette/templates/launderette/launderette_list.jinja:16 #: launderette/templates/launderette/launderette_list.jinja:16
#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:100 #: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:100
#: trombi/templates/trombi/detail.jinja:9 #: trombi/templates/trombi/detail.jinja:9
#: trombi/templates/trombi/edit_profile.jinja:34
msgid "Edit" msgid "Edit"
msgstr "Éditer" msgstr "Éditer"
@ -496,8 +503,8 @@ msgstr "Non"
#: accounting/templates/accounting/club_account_details.jinja:56 #: accounting/templates/accounting/club_account_details.jinja:56
#: com/templates/com/news_admin_list.jinja:38 #: com/templates/com/news_admin_list.jinja:38
#: com/templates/com/news_admin_list.jinja:71 core/templates/core/file.jinja:36 #: com/templates/com/news_admin_list.jinja:71
#: core/templates/core/page.jinja:28 #: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28
msgid "View" msgid "View"
msgstr "Voir" msgstr "Voir"
@ -561,6 +568,7 @@ msgstr "No"
#: counter/templates/counter/last_ops.jinja:39 sas/views.py:281 #: counter/templates/counter/last_ops.jinja:39 sas/views.py:281
#: stock/templates/stock/stock_shopping_list.jinja:25 #: stock/templates/stock/stock_shopping_list.jinja:25
#: stock/templates/stock/stock_shopping_list.jinja:54 #: stock/templates/stock/stock_shopping_list.jinja:54
#: trombi/templates/trombi/user_profile.jinja:40
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
@ -704,6 +712,7 @@ msgstr "Opération liée : "
#: forum/templates/forum/reply.jinja:33 #: forum/templates/forum/reply.jinja:33
#: subscription/templates/subscription/subscription.jinja:24 #: subscription/templates/subscription/subscription.jinja:24
#: trombi/templates/trombi/comment.jinja:26 #: trombi/templates/trombi/comment.jinja:26
#: trombi/templates/trombi/edit_profile.jinja:13
#: trombi/templates/trombi/user_tools.jinja:13 #: trombi/templates/trombi/user_tools.jinja:13
msgid "Save" msgid "Save"
msgstr "Sauver" msgstr "Sauver"
@ -846,11 +855,12 @@ msgstr "Un club avec ce nom UNIX existe déjà."
#: club/models.py:182 counter/models.py:431 counter/models.py:448 #: club/models.py:182 counter/models.py:431 counter/models.py:448
#: eboutic/models.py:38 eboutic/models.py:71 election/models.py:140 #: eboutic/models.py:38 eboutic/models.py:71 election/models.py:140
#: launderette/models.py:111 launderette/models.py:148 sas/models.py:156 #: launderette/models.py:111 launderette/models.py:148 sas/models.py:156
#: trombi/models.py:139
msgid "user" msgid "user"
msgstr "nom d'utilisateur" msgstr "nom d'utilisateur"
#: club/models.py:186 core/models.py:169 election/models.py:139 #: club/models.py:186 core/models.py:169 election/models.py:139
#: election/models.py:155 #: election/models.py:155 trombi/models.py:141
msgid "role" msgid "role"
msgstr "rôle" msgstr "rôle"
@ -872,7 +882,8 @@ msgstr "L'utilisateur est déjà membre de ce club"
msgid "past member" msgid "past member"
msgstr "Anciens membres" msgstr "Anciens membres"
#: club/templates/club/club_list.jinja:4 club/templates/club/club_list.jinja:24 #: club/templates/club/club_list.jinja:4
#: club/templates/club/club_list.jinja:24
msgid "Club list" msgid "Club list"
msgstr "Liste des clubs" msgstr "Liste des clubs"
@ -893,6 +904,8 @@ msgstr "Membres du club"
#: club/templates/club/club_old_members.jinja:9 #: club/templates/club/club_old_members.jinja:9
#: core/templates/core/user_clubs.jinja:16 #: core/templates/core/user_clubs.jinja:16
#: core/templates/core/user_clubs.jinja:42 #: core/templates/core/user_clubs.jinja:42
#: trombi/templates/trombi/edit_profile.jinja:23
#: trombi/templates/trombi/user_profile.jinja:39
msgid "Role" msgid "Role"
msgstr "Rôle" msgstr "Rôle"
@ -934,13 +947,14 @@ msgstr "Du"
msgid "To" msgid "To"
msgstr "Au" msgstr "Au"
#: club/templates/club/club_sellings.jinja:5 club/views.py:84 club/views.py:247 #: club/templates/club/club_sellings.jinja:5 club/views.py:84
#: counter/templates/counter/counter_main.jinja:19 #: club/views.py:247 counter/templates/counter/counter_main.jinja:19
#: counter/templates/counter/last_ops.jinja:35 #: counter/templates/counter/last_ops.jinja:35
msgid "Sellings" msgid "Sellings"
msgstr "Ventes" msgstr "Ventes"
#: club/templates/club/club_sellings.jinja:9 club/templates/club/stats.jinja:19 #: club/templates/club/club_sellings.jinja:9
#: club/templates/club/stats.jinja:19
#: counter/templates/counter/cash_summary_list.jinja:15 #: counter/templates/counter/cash_summary_list.jinja:15
msgid "Show" msgid "Show"
msgstr "Montrer" msgstr "Montrer"
@ -1133,7 +1147,7 @@ msgstr "titre"
msgid "summary" msgid "summary"
msgstr "résumé" msgstr "résumé"
#: com/models.py:62 com/models.py:150 trombi/models.py:108 #: com/models.py:62 com/models.py:150 trombi/models.py:127
msgid "content" msgid "content"
msgstr "contenu" msgstr "contenu"
@ -1143,7 +1157,7 @@ msgstr "contenu"
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: com/models.py:65 com/models.py:151 trombi/models.py:106 #: com/models.py:65 com/models.py:151 trombi/models.py:125
msgid "author" msgid "author"
msgstr "auteur" msgstr "auteur"
@ -1200,8 +1214,9 @@ msgid "News admin"
msgstr "Administration des nouvelles" msgstr "Administration des nouvelles"
#: com/templates/com/news_admin_list.jinja:9 #: com/templates/com/news_admin_list.jinja:9
#: com/templates/com/news_detail.jinja:5 com/templates/com/news_detail.jinja:11 #: com/templates/com/news_detail.jinja:5
#: com/templates/com/news_list.jinja:4 com/templates/com/news_list.jinja:28 #: com/templates/com/news_detail.jinja:11 com/templates/com/news_list.jinja:4
#: com/templates/com/news_list.jinja:28
msgid "News" msgid "News"
msgstr "Nouvelles" msgstr "Nouvelles"
@ -1888,7 +1903,8 @@ msgstr "S'enregister"
msgid "View more" msgid "View more"
msgstr "Voir plus" msgstr "Voir plus"
#: core/templates/core/base.jinja:62 forum/templates/forum/last_unread.jinja:16 #: core/templates/core/base.jinja:62
#: forum/templates/forum/last_unread.jinja:16
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Marquer tout commme lu" msgstr "Marquer tout commme lu"
@ -1920,7 +1936,7 @@ msgstr "SAS"
#: core/templates/core/base.jinja:94 forum/templates/forum/forum.jinja:10 #: core/templates/core/base.jinja:94 forum/templates/forum/forum.jinja:10
#: forum/templates/forum/last_unread.jinja:13 #: forum/templates/forum/last_unread.jinja:13
#: forum/templates/forum/main.jinja:6 forum/templates/forum/main.jinja.py:11 #: forum/templates/forum/main.jinja:6 forum/templates/forum/main.jinja:11
#: forum/templates/forum/main.jinja:14 forum/templates/forum/reply.jinja:15 #: forum/templates/forum/main.jinja:14 forum/templates/forum/reply.jinja:15
#: forum/templates/forum/topic.jinja:30 #: forum/templates/forum/topic.jinja:30
msgid "Forum" msgid "Forum"
@ -2170,11 +2186,13 @@ msgstr "login"
msgid "Lost password?" msgid "Lost password?"
msgstr "Mot de passe perdu ?" msgstr "Mot de passe perdu ?"
#: core/templates/core/macros.jinja:31 core/templates/core/user_detail.jinja:27 #: core/templates/core/macros.jinja:31
#: core/templates/core/user_detail.jinja:27
msgid "Born: " msgid "Born: "
msgstr "Né le : " msgstr "Né le : "
#: core/templates/core/macros.jinja:35 core/templates/core/user_detail.jinja:48 #: core/templates/core/macros.jinja:35
#: core/templates/core/user_detail.jinja:48
msgid "Promo: " msgid "Promo: "
msgstr "Promo : " msgstr "Promo : "
@ -2844,7 +2862,7 @@ msgstr "Parrain"
msgid "Godchild" msgid "Godchild"
msgstr "Fillot" msgstr "Fillot"
#: core/views/user.py:165 #: core/views/user.py:165 trombi/templates/trombi/user_profile.jinja:11
msgid "Pictures" msgid "Pictures"
msgstr "Photos" msgstr "Photos"
@ -4394,35 +4412,35 @@ msgstr " demandé"
msgid "%(effective_quantity)s left" msgid "%(effective_quantity)s left"
msgstr "%(effective_quantity)s restant" msgstr "%(effective_quantity)s restant"
#: subscription/models.py:40 #: subscription/models.py:41
msgid "Bad subscription type" msgid "Bad subscription type"
msgstr "Mauvais type de cotisation" msgstr "Mauvais type de cotisation"
#: subscription/models.py:44 #: subscription/models.py:45
msgid "Bad payment method" msgid "Bad payment method"
msgstr "Mauvais type de paiement" msgstr "Mauvais type de paiement"
#: subscription/models.py:48 #: subscription/models.py:49
msgid "subscription type" msgid "subscription type"
msgstr "type d'inscription" msgstr "type d'inscription"
#: subscription/models.py:51 #: subscription/models.py:52
msgid "subscription start" msgid "subscription start"
msgstr "début de la cotisation" msgstr "début de la cotisation"
#: subscription/models.py:52 #: subscription/models.py:53
msgid "subscription end" msgid "subscription end"
msgstr "fin de la cotisation" msgstr "fin de la cotisation"
#: subscription/models.py:57 #: subscription/models.py:58
msgid "location" msgid "location"
msgstr "lieu" msgstr "lieu"
#: subscription/models.py:66 #: subscription/models.py:67
msgid "You can not subscribe many time for the same period" 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" msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période"
#: subscription/models.py:70 #: subscription/models.py:71
msgid "Subscription error" msgid "Subscription error"
msgstr "Erreur de cotisation" msgstr "Erreur de cotisation"
@ -4452,11 +4470,11 @@ msgid "You must either choose an existing user or create a new one properly"
msgstr "" msgstr ""
"Vous devez soit choisir un utilisateur existant, soit en créer un proprement" "Vous devez soit choisir un utilisateur existant, soit en créer un proprement"
#: trombi/models.py:51 #: trombi/models.py:52
msgid "subscription deadline" msgid "subscription deadline"
msgstr "fin des inscriptions" msgstr "fin des inscriptions"
#: trombi/models.py:52 #: trombi/models.py:53
msgid "" msgid ""
"Before this date, users are allowed to subscribe to this Trombi. After this " "Before this date, users are allowed to subscribe to this Trombi. After this "
"date, users subscribed will be allowed to comment on each other." "date, users subscribed will be allowed to comment on each other."
@ -4465,46 +4483,46 @@ msgstr ""
"Après cette date, les utilisateurs inscrits peuvent se soumettre des " "Après cette date, les utilisateurs inscrits peuvent se soumettre des "
"commentaires entre eux." "commentaires entre eux."
#: trombi/models.py:55 #: trombi/models.py:56
msgid "comments deadline" msgid "comments deadline"
msgstr "fin des commentaires" msgstr "fin des commentaires"
#: trombi/models.py:56 #: trombi/models.py:57
msgid "After this date, users won't be able to make comments anymore." msgid "After this date, users won't be able to make comments anymore."
msgstr "" msgstr ""
"Après cette date, les utilisateurs ne peuvent plus faire de commentaires." "Après cette date, les utilisateurs ne peuvent plus faire de commentaires."
#: trombi/models.py:58 #: trombi/models.py:59
msgid "maximum characters" msgid "maximum characters"
msgstr "nombre de caractères max" msgstr "nombre de caractères max"
#: trombi/models.py:59 #: trombi/models.py:60
msgid "Maximum number of characters allowed in a comment." msgid "Maximum number of characters allowed in a comment."
msgstr "Nombre maximum de caractères autorisés dans un commentaire." msgstr "Nombre maximum de caractères autorisés dans un commentaire."
#: trombi/models.py:60 #: trombi/models.py:61
msgid "show users profiles to each other" msgid "show users profiles to each other"
msgstr "montrer les profils aux inscrits" msgstr "montrer les profils aux inscrits"
#: trombi/models.py:71 #: trombi/models.py:72
msgid "" msgid ""
"Closing the subscriptions after the comments is definitively not a good idea." "Closing the subscriptions after the comments is definitively not a good idea."
msgstr "" msgstr ""
"Fermer les inscriptions après les commentaires est vraiment une idée pourrie." "Fermer les inscriptions après les commentaires est vraiment une idée pourrie."
#: trombi/models.py:91 #: trombi/models.py:92
msgid "trombi user" msgid "trombi user"
msgstr "utilisateur trombi" msgstr "utilisateur trombi"
#: trombi/models.py:92 #: trombi/models.py:93
msgid "trombi" msgid "trombi"
msgstr "trombi" msgstr "trombi"
#: trombi/models.py:93 #: trombi/models.py:94
msgid "profile pict" msgid "profile pict"
msgstr "photo de profil" msgstr "photo de profil"
#: trombi/models.py:94 #: trombi/models.py:95
msgid "" msgid ""
"The profile picture you want in the trombi (warning: this picture may be " "The profile picture you want in the trombi (warning: this picture may be "
"published)" "published)"
@ -4512,11 +4530,11 @@ msgstr ""
"La photo de profil que vous souhaitez voir dans le Trombi (attention: cette " "La photo de profil que vous souhaitez voir dans le Trombi (attention: cette "
"photo risque d'être publiée)" "photo risque d'être publiée)"
#: trombi/models.py:95 #: trombi/models.py:96
msgid "scrub pict" msgid "scrub pict"
msgstr "photo de blouse" msgstr "photo de blouse"
#: trombi/models.py:96 #: trombi/models.py:97
msgid "" msgid ""
"The scrub picture you want in the trombi (warning: this picture may be " "The scrub picture you want in the trombi (warning: this picture may be "
"published)" "published)"
@ -4524,14 +4542,22 @@ msgstr ""
"La photo de blouse que vous souhaitez voir dans le Trombi (attention: cette " "La photo de blouse que vous souhaitez voir dans le Trombi (attention: cette "
"photo risque d'être publiée)" "photo risque d'être publiée)"
#: trombi/models.py:107 #: trombi/models.py:126
msgid "target" msgid "target"
msgstr "cible" msgstr "cible"
#: trombi/models.py:109 #: trombi/models.py:128
msgid "is the comment moderated" msgid "is the comment moderated"
msgstr "le commentaire est modéré" msgstr "le commentaire est modéré"
#: trombi/models.py:142
msgid "start"
msgstr "début"
#: trombi/models.py:143
msgid "end"
msgstr "fin"
#: trombi/templates/trombi/comment_moderation.jinja:4 #: trombi/templates/trombi/comment_moderation.jinja:4
#: trombi/templates/trombi/comment_moderation.jinja:8 #: trombi/templates/trombi/comment_moderation.jinja:8
msgid "Moderate Trombi comments" msgid "Moderate Trombi comments"
@ -4563,16 +4589,34 @@ msgstr "Fin des inscriptions : "
msgid "Comment deadline: " msgid "Comment deadline: "
msgstr "Fin des commentaires : " msgstr "Fin des commentaires : "
#: trombi/templates/trombi/edit_profile.jinja:4
#: trombi/templates/trombi/edit_profile.jinja:8
msgid "Edit profile"
msgstr "Éditer mon profil"
#: trombi/templates/trombi/edit_profile.jinja:9
#: trombi/templates/trombi/user_profile.jinja:9
msgid "Back to tools"
msgstr "Retour aux outils"
#: trombi/templates/trombi/edit_profile.jinja:17
msgid ""
"Reset club memberships in Trombi (delete exising ones, does not impact real "
"club memberships)"
msgstr ""
"Réinitialiser les participations aux clubs dans le Trombi (supprime les existantes, n'impacte "
"pas les vraies appartenances du site)"
#: trombi/templates/trombi/edit_profile.jinja:24
msgid "Dates"
msgstr "Dates"
#: trombi/templates/trombi/user_profile.jinja:4 #: trombi/templates/trombi/user_profile.jinja:4
#: trombi/templates/trombi/user_profile.jinja:8 #: trombi/templates/trombi/user_profile.jinja:8
#, python-format #, python-format
msgid "%(user_name)s's Trombi profile" msgid "%(user_name)s's Trombi profile"
msgstr "Profil Trombi de %(user_name)s" msgstr "Profil Trombi de %(user_name)s"
#: trombi/templates/trombi/user_profile.jinja:9
msgid "Back to tools"
msgstr "Retour aux outils"
#: trombi/templates/trombi/user_tools.jinja:4 #: trombi/templates/trombi/user_tools.jinja:4
#, python-format #, python-format
msgid "%(user_name)s's Trombi" msgid "%(user_name)s's Trombi"
@ -4667,7 +4711,7 @@ msgstr "Téléphone"
msgid "Native town" msgid "Native town"
msgstr "Ville d'origine" msgstr "Ville d'origine"
#: trombi/views.py:246 #: trombi/views.py:269
msgid "" msgid ""
"You can not yet write comment, you must wait for the subscription deadline " "You can not yet write comment, you must wait for the subscription deadline "
"to be passed." "to be passed."
@ -4675,11 +4719,11 @@ msgstr ""
"Vous ne pouvez pas encore écrire de commentaires, vous devez attendre la fin " "Vous ne pouvez pas encore écrire de commentaires, vous devez attendre la fin "
"des inscriptions" "des inscriptions"
#: trombi/views.py:249 #: trombi/views.py:272
msgid "You can not write comment anymore, the deadline is already passed." 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." msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée."
#: trombi/views.py:256 #: trombi/views.py:279
#, python-format #, python-format
msgid "Maximum characters: %(max_length)s" msgid "Maximum characters: %(max_length)s"
msgstr "Nombre de caractères max: %(max_length)s" msgstr "Nombre de caractères max: %(max_length)s"

View File

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('trombi', '0003_trombicomment_is_moderated'),
]
operations = [
migrations.CreateModel(
name='TrombiClubMembership',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('club', models.CharField(default='', max_length=32, verbose_name='club')),
('role', models.CharField(default='', max_length=64, verbose_name='role')),
('start', models.CharField(default='', max_length=16, verbose_name='start')),
('end', models.CharField(default='', max_length=16, verbose_name='end')),
('user', models.ForeignKey(verbose_name='user', related_name='memberships', to='trombi.TrombiUser')),
],
options={
'ordering': ['id'],
},
),
]

View File

@ -31,6 +31,7 @@ from django.core.exceptions import ValidationError
from datetime import timedelta, date from datetime import timedelta, date
from core.models import User from core.models import User
from core.utils import get_start_of_semester, get_semester
from club.models import Club from club.models import Club
class TrombiManager(models.Manager): class TrombiManager(models.Manager):
@ -98,6 +99,24 @@ class TrombiUser(models.Model):
def __str__(self): def __str__(self):
return str(self.user) return str(self.user)
def make_memberships(self):
self.memberships.all().delete()
for m in self.user.memberships.filter(role__gt=settings.SITH_MAXIMUM_FREE_ROLE).order_by('end_date'):
role = str(settings.SITH_CLUB_ROLES[m.role])
if m.description:
role += " (%s)" % m.description
if m.end_date:
end_date = get_semester(m.end_date)
else:
end_date = ""
TrombiClubMembership(
user=self,
club=str(m.club),
role=role[:64],
start=get_semester(m.start_date),
end=end_date,
).save()
class TrombiComment(models.Model): class TrombiComment(models.Model):
""" """
This represent a comment given by someone to someone else in the same Trombi This represent a comment given by someone to someone else in the same Trombi
@ -113,3 +132,25 @@ class TrombiComment(models.Model):
return False return False
return user.id == self.author.user.id or user.can_edit(self.author.trombi) return user.id == self.author.user.id or user.can_edit(self.author.trombi)
class TrombiClubMembership(models.Model):
"""
This represent a membership to a club
"""
user = models.ForeignKey(TrombiUser, verbose_name=_("user"), related_name='memberships')
club = models.CharField(_("club"), max_length=32, default="")
role = models.CharField(_("role"), max_length=64, default="")
start = models.CharField(_("start"), max_length=16, default="")
end = models.CharField(_("end"), max_length=16, default="")
class Meta:
ordering = ['id']
def __str__(self):
return "%s - %s - %s (%s)" % (self.user, self.club, self.role, self.start)
def can_be_edited_by(self, user):
return user.id == self.user.user.id or user.can_edit(self.user.trombi)
def get_absolute_url(self):
return reverse('trombi:profile')

View File

@ -0,0 +1,44 @@
{% extends "core/base.jinja" %}
{% block title %}
{% trans %}Edit profile{% endtrans %}
{% endblock %}
{% block content %}
<h2>{% trans %}Edit profile{% endtrans %}</h2>
<p> <a href="{{ url('trombi:user_tools') }}">{% trans %}Back to tools{% endtrans %}</a></p>
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p() }}
<p><input type="submit" value="{% trans %}Save{% endtrans %}" /></p>
</form>
<h4>{% trans %}Club{% endtrans %}</h4>
<a href="{{ url('trombi:reset_memberships') }}">
{% trans %}Reset club memberships in Trombi (delete exising ones, does not impact real club memberships){% endtrans %}
</a>
<table style="max-width: 80%; margin: auto;">
<thead>
<tr>
<td>{% trans %}Club{% endtrans %}</td>
<td>{% trans %}Role{% endtrans %}</td>
<td>{% trans %}Dates{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for m in user.trombi_user.memberships.all() %}
<tr>
<td>{{ m.club }}</td>
<td>{{ m.role }}</td>
<td>{{ m.start }} - {{ m.end }}</td>
<td>
<a href="{{ url('trombi:edit_membership', membership_id=m.id) }}">{% trans %}Edit{% endtrans %}</a>
<a href="{{ url('trombi:delete_membership', membership_id=m.id) }}">{% trans %}Delete{% endtrans %}</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@ -8,6 +8,7 @@
<h3>{% trans user_name=trombi_user.user.get_display_name() %}{{ user_name }}'s Trombi profile{% endtrans %}</h3> <h3>{% trans user_name=trombi_user.user.get_display_name() %}{{ user_name }}'s Trombi profile{% endtrans %}</h3>
<p> <a href="{{ url('trombi:user_tools') }}">{% trans %}Back to tools{% endtrans %}</a></p> <p> <a href="{{ url('trombi:user_tools') }}">{% trans %}Back to tools{% endtrans %}</a></p>
<div> <div>
<h4>{% trans %}Pictures{% endtrans %}</h4>
{% set profile_file = None %} {% set profile_file = None %}
{% set scrub_file = None %} {% set scrub_file = None %}
{% if trombi_user.profile_pict %} {% if trombi_user.profile_pict %}
@ -20,10 +21,36 @@
{% else %} {% else %}
{% set scrub_file = static('core/img/na.gif') %} {% set scrub_file = static('core/img/na.gif') %}
{% endif %} {% endif %}
<div style="max-width: 410px; margin: auto;"> <div style="max-width: 410px; margin: auto; text-align: center;">
<img src="{{ profile_file }}" alt="" style="max-width: 200px"> <div>
<img src="{{ scrub_file }}" alt="" style="max-width: 200px"> <img src="{{ profile_file }}" alt="" style="max-width: 200px">
<img src="{{ scrub_file }}" alt="" style="max-width: 200px">
</div>
<div>
<em>{{ trombi_user.user.get_short_name() }}</em>
</div>
</div> </div>
{% if trombi_user.memberships.exists() %}
<h4>{% trans %}Club{% endtrans %}</h4>
<table style="max-width: 70%; margin: auto;">
<thead>
<tr>
<td>{% trans %}Club{% endtrans %}</td>
<td>{% trans %}Role{% endtrans %}</td>
<td>{% trans %}Date{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for m in trombi_user.memberships.all() %}
<tr>
<td>{{ m.club }}</td>
<td>{{ m.role }}</td>
<td>{{ m.start }} - {{ m.end }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
<dl> <dl>
{% for c in trombi_user.received_comments.filter(is_moderated=True) %} {% for c in trombi_user.received_comments.filter(is_moderated=True) %}
<dt style="font-weight: bold; font-size: 110%">{{ c.author.user.get_display_name() }}</dt> <dt style="font-weight: bold; font-size: 110%">{{ c.author.user.get_display_name() }}</dt>

View File

@ -39,5 +39,8 @@ urlpatterns = [
url(r'^tools$', UserTrombiToolsView.as_view(), name='user_tools'), url(r'^tools$', UserTrombiToolsView.as_view(), name='user_tools'),
url(r'^profile$', UserTrombiEditProfileView.as_view(), name='profile'), url(r'^profile$', UserTrombiEditProfileView.as_view(), name='profile'),
url(r'^pictures$', UserTrombiEditPicturesView.as_view(), name='pictures'), url(r'^pictures$', UserTrombiEditPicturesView.as_view(), name='pictures'),
url(r'^reset_memberships$', UserTrombiResetClubMembershipsView.as_view(), name='reset_memberships'),
url(r'^membership/(?P<membership_id>[0-9]+)/edit$', UserTrombiEditMembershipView.as_view(), name='edit_membership'),
url(r'^membership/(?P<membership_id>[0-9]+)/delete$', UserTrombiDeleteMembershipView.as_view(), name='delete_membership'),
] ]

View File

@ -34,7 +34,7 @@ from django.forms.models import modelform_factory
from datetime import date from datetime import date
from trombi.models import Trombi, TrombiUser, TrombiComment from trombi.models import Trombi, TrombiUser, TrombiComment, TrombiClubMembership
from core.views.forms import SelectFile, SelectDate from core.views.forms import SelectFile, SelectDate
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin, CanCreateMixin, QuickNotifMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin, CanCreateMixin, QuickNotifMixin
from core.models import User from core.models import User
@ -210,7 +210,7 @@ class UserTrombiEditProfileView(UpdateView):
'phone': _("Phone"), 'phone': _("Phone"),
'parent_address': _("Native town"), 'parent_address': _("Native town"),
}) })
template_name = "core/edit.jinja" template_name = "trombi/edit_profile.jinja"
def get_object(self): def get_object(self):
return self.request.user return self.request.user
@ -218,6 +218,29 @@ class UserTrombiEditProfileView(UpdateView):
def get_success_url(self): def get_success_url(self):
return reverse('trombi:user_tools')+"?qn_success" return reverse('trombi:user_tools')+"?qn_success"
class UserTrombiResetClubMembershipsView(RedirectView):
permanent = False
def get(self, request, *args, **kwargs):
user = self.request.user.trombi_user
user.make_memberships()
return redirect(self.get_success_url())
def get_success_url(self):
return reverse('trombi:user_tools')+"?qn_success"
class UserTrombiDeleteMembershipView(DeleteView, CanEditMixin):
model = TrombiClubMembership
pk_url_kwarg = "membership_id"
template_name = "core/delete_confirm.jinja"
success_url = reverse_lazy('trombi:profile')
class UserTrombiEditMembershipView(UpdateView, CanEditMixin):
model = TrombiClubMembership
pk_url_kwarg = "membership_id"
fields = ['role', 'start', 'end']
template_name = "core/edit.jinja"
class UserTrombiProfileView(DetailView): class UserTrombiProfileView(DetailView):
model = TrombiUser model = TrombiUser
pk_url_kwarg = "user_id" pk_url_kwarg = "user_id"