mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-25 18:44:23 +00:00
trombi: add custom club memberships
Signed-off-by: Skia <skia@libskia.so>
This commit is contained in:
parent
5df9be9188
commit
f26f2f4229
@ -59,6 +59,13 @@ def get_start_of_semester(d=date.today()):
|
||||
else:
|
||||
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):
|
||||
if width > height:
|
||||
ratio = long_edge * 1. / width
|
||||
|
@ -6,7 +6,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"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"
|
||||
"Last-Translator: Skia <skia@libskia.so>\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
|
||||
#: 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"
|
||||
msgstr "club"
|
||||
|
||||
@ -139,7 +139,7 @@ msgid "comment"
|
||||
msgstr "commentaire"
|
||||
|
||||
#: accounting/models.py:256 counter/models.py:277 counter/models.py:325
|
||||
#: subscription/models.py:53
|
||||
#: subscription/models.py:54
|
||||
msgid "payment method"
|
||||
msgstr "méthode de paiement"
|
||||
|
||||
@ -174,8 +174,6 @@ msgstr "type de cible"
|
||||
|
||||
#: accounting/models.py:267 club/templates/club/club_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/stats.jinja:15
|
||||
#: 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:52
|
||||
#: 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
|
||||
#: 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"
|
||||
msgstr "Club"
|
||||
|
||||
@ -341,14 +345,16 @@ msgstr "Compte en banque : "
|
||||
#: election/templates/election/election_detail.jinja:280
|
||||
#: election/templates/election/election_detail.jinja:330
|
||||
#: 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/views.py:178 sas/templates/sas/album.jinja:26
|
||||
#: 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:69
|
||||
#: trombi/templates/trombi/detail.jinja:28
|
||||
#: trombi/templates/trombi/edit_profile.jinja:35
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
@ -390,6 +396,7 @@ msgstr "Nouveau compte club"
|
||||
#: launderette/templates/launderette/launderette_list.jinja:16
|
||||
#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:100
|
||||
#: trombi/templates/trombi/detail.jinja:9
|
||||
#: trombi/templates/trombi/edit_profile.jinja:34
|
||||
msgid "Edit"
|
||||
msgstr "Éditer"
|
||||
|
||||
@ -496,8 +503,8 @@ msgstr "Non"
|
||||
|
||||
#: accounting/templates/accounting/club_account_details.jinja:56
|
||||
#: com/templates/com/news_admin_list.jinja:38
|
||||
#: com/templates/com/news_admin_list.jinja:71 core/templates/core/file.jinja:36
|
||||
#: core/templates/core/page.jinja:28
|
||||
#: com/templates/com/news_admin_list.jinja:71
|
||||
#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28
|
||||
msgid "View"
|
||||
msgstr "Voir"
|
||||
|
||||
@ -561,6 +568,7 @@ msgstr "No"
|
||||
#: 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:54
|
||||
#: trombi/templates/trombi/user_profile.jinja:40
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
@ -704,6 +712,7 @@ msgstr "Opération liée : "
|
||||
#: forum/templates/forum/reply.jinja:33
|
||||
#: subscription/templates/subscription/subscription.jinja:24
|
||||
#: trombi/templates/trombi/comment.jinja:26
|
||||
#: trombi/templates/trombi/edit_profile.jinja:13
|
||||
#: trombi/templates/trombi/user_tools.jinja:13
|
||||
msgid "Save"
|
||||
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
|
||||
#: eboutic/models.py:38 eboutic/models.py:71 election/models.py:140
|
||||
#: launderette/models.py:111 launderette/models.py:148 sas/models.py:156
|
||||
#: trombi/models.py:139
|
||||
msgid "user"
|
||||
msgstr "nom d'utilisateur"
|
||||
|
||||
#: 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"
|
||||
msgstr "rôle"
|
||||
|
||||
@ -872,7 +882,8 @@ msgstr "L'utilisateur est déjà membre de ce club"
|
||||
msgid "past member"
|
||||
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"
|
||||
msgstr "Liste des clubs"
|
||||
|
||||
@ -893,6 +904,8 @@ msgstr "Membres du club"
|
||||
#: club/templates/club/club_old_members.jinja:9
|
||||
#: core/templates/core/user_clubs.jinja:16
|
||||
#: core/templates/core/user_clubs.jinja:42
|
||||
#: trombi/templates/trombi/edit_profile.jinja:23
|
||||
#: trombi/templates/trombi/user_profile.jinja:39
|
||||
msgid "Role"
|
||||
msgstr "Rôle"
|
||||
|
||||
@ -934,13 +947,14 @@ msgstr "Du"
|
||||
msgid "To"
|
||||
msgstr "Au"
|
||||
|
||||
#: club/templates/club/club_sellings.jinja:5 club/views.py:84 club/views.py:247
|
||||
#: counter/templates/counter/counter_main.jinja:19
|
||||
#: club/templates/club/club_sellings.jinja:5 club/views.py:84
|
||||
#: club/views.py:247 counter/templates/counter/counter_main.jinja:19
|
||||
#: counter/templates/counter/last_ops.jinja:35
|
||||
msgid "Sellings"
|
||||
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
|
||||
msgid "Show"
|
||||
msgstr "Montrer"
|
||||
@ -1133,7 +1147,7 @@ msgstr "titre"
|
||||
msgid "summary"
|
||||
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"
|
||||
msgstr "contenu"
|
||||
|
||||
@ -1143,7 +1157,7 @@ msgstr "contenu"
|
||||
msgid "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"
|
||||
msgstr "auteur"
|
||||
|
||||
@ -1200,8 +1214,9 @@ msgid "News admin"
|
||||
msgstr "Administration des nouvelles"
|
||||
|
||||
#: 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_list.jinja:4 com/templates/com/news_list.jinja:28
|
||||
#: com/templates/com/news_detail.jinja:5
|
||||
#: com/templates/com/news_detail.jinja:11 com/templates/com/news_list.jinja:4
|
||||
#: com/templates/com/news_list.jinja:28
|
||||
msgid "News"
|
||||
msgstr "Nouvelles"
|
||||
|
||||
@ -1888,7 +1903,8 @@ msgstr "S'enregister"
|
||||
msgid "View more"
|
||||
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"
|
||||
msgstr "Marquer tout commme lu"
|
||||
|
||||
@ -1920,7 +1936,7 @@ msgstr "SAS"
|
||||
|
||||
#: core/templates/core/base.jinja:94 forum/templates/forum/forum.jinja:10
|
||||
#: 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/topic.jinja:30
|
||||
msgid "Forum"
|
||||
@ -2170,11 +2186,13 @@ msgstr "login"
|
||||
msgid "Lost password?"
|
||||
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: "
|
||||
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: "
|
||||
msgstr "Promo : "
|
||||
|
||||
@ -2844,7 +2862,7 @@ msgstr "Parrain"
|
||||
msgid "Godchild"
|
||||
msgstr "Fillot"
|
||||
|
||||
#: core/views/user.py:165
|
||||
#: core/views/user.py:165 trombi/templates/trombi/user_profile.jinja:11
|
||||
msgid "Pictures"
|
||||
msgstr "Photos"
|
||||
|
||||
@ -4394,35 +4412,35 @@ msgstr " demandé"
|
||||
msgid "%(effective_quantity)s left"
|
||||
msgstr "%(effective_quantity)s restant"
|
||||
|
||||
#: subscription/models.py:40
|
||||
#: subscription/models.py:41
|
||||
msgid "Bad subscription type"
|
||||
msgstr "Mauvais type de cotisation"
|
||||
|
||||
#: subscription/models.py:44
|
||||
#: subscription/models.py:45
|
||||
msgid "Bad payment method"
|
||||
msgstr "Mauvais type de paiement"
|
||||
|
||||
#: subscription/models.py:48
|
||||
#: subscription/models.py:49
|
||||
msgid "subscription type"
|
||||
msgstr "type d'inscription"
|
||||
|
||||
#: subscription/models.py:51
|
||||
#: subscription/models.py:52
|
||||
msgid "subscription start"
|
||||
msgstr "début de la cotisation"
|
||||
|
||||
#: subscription/models.py:52
|
||||
#: subscription/models.py:53
|
||||
msgid "subscription end"
|
||||
msgstr "fin de la cotisation"
|
||||
|
||||
#: subscription/models.py:57
|
||||
#: subscription/models.py:58
|
||||
msgid "location"
|
||||
msgstr "lieu"
|
||||
|
||||
#: subscription/models.py:66
|
||||
#: subscription/models.py:67
|
||||
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:70
|
||||
#: subscription/models.py:71
|
||||
msgid "Subscription error"
|
||||
msgstr "Erreur de cotisation"
|
||||
|
||||
@ -4452,11 +4470,11 @@ 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:51
|
||||
#: trombi/models.py:52
|
||||
msgid "subscription deadline"
|
||||
msgstr "fin des inscriptions"
|
||||
|
||||
#: trombi/models.py:52
|
||||
#: trombi/models.py:53
|
||||
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."
|
||||
@ -4465,46 +4483,46 @@ msgstr ""
|
||||
"Après cette date, les utilisateurs inscrits peuvent se soumettre des "
|
||||
"commentaires entre eux."
|
||||
|
||||
#: trombi/models.py:55
|
||||
#: trombi/models.py:56
|
||||
msgid "comments deadline"
|
||||
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."
|
||||
msgstr ""
|
||||
"Après cette date, les utilisateurs ne peuvent plus faire de commentaires."
|
||||
|
||||
#: trombi/models.py:58
|
||||
#: trombi/models.py:59
|
||||
msgid "maximum characters"
|
||||
msgstr "nombre de caractères max"
|
||||
|
||||
#: trombi/models.py:59
|
||||
#: trombi/models.py:60
|
||||
msgid "Maximum number of characters allowed in a comment."
|
||||
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"
|
||||
msgstr "montrer les profils aux inscrits"
|
||||
|
||||
#: trombi/models.py:71
|
||||
#: trombi/models.py:72
|
||||
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:91
|
||||
#: trombi/models.py:92
|
||||
msgid "trombi user"
|
||||
msgstr "utilisateur trombi"
|
||||
|
||||
#: trombi/models.py:92
|
||||
#: trombi/models.py:93
|
||||
msgid "trombi"
|
||||
msgstr "trombi"
|
||||
|
||||
#: trombi/models.py:93
|
||||
#: trombi/models.py:94
|
||||
msgid "profile pict"
|
||||
msgstr "photo de profil"
|
||||
|
||||
#: trombi/models.py:94
|
||||
#: trombi/models.py:95
|
||||
msgid ""
|
||||
"The profile picture you want in the trombi (warning: this picture may be "
|
||||
"published)"
|
||||
@ -4512,11 +4530,11 @@ msgstr ""
|
||||
"La photo de profil que vous souhaitez voir dans le Trombi (attention: cette "
|
||||
"photo risque d'être publiée)"
|
||||
|
||||
#: trombi/models.py:95
|
||||
#: trombi/models.py:96
|
||||
msgid "scrub pict"
|
||||
msgstr "photo de blouse"
|
||||
|
||||
#: trombi/models.py:96
|
||||
#: trombi/models.py:97
|
||||
msgid ""
|
||||
"The scrub picture you want in the trombi (warning: this picture may be "
|
||||
"published)"
|
||||
@ -4524,14 +4542,22 @@ msgstr ""
|
||||
"La photo de blouse que vous souhaitez voir dans le Trombi (attention: cette "
|
||||
"photo risque d'être publiée)"
|
||||
|
||||
#: trombi/models.py:107
|
||||
#: trombi/models.py:126
|
||||
msgid "target"
|
||||
msgstr "cible"
|
||||
|
||||
#: trombi/models.py:109
|
||||
#: trombi/models.py:128
|
||||
msgid "is the comment moderated"
|
||||
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:8
|
||||
msgid "Moderate Trombi comments"
|
||||
@ -4563,16 +4589,34 @@ msgstr "Fin des inscriptions : "
|
||||
msgid "Comment deadline: "
|
||||
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:8
|
||||
#, python-format
|
||||
msgid "%(user_name)s's Trombi profile"
|
||||
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
|
||||
#, python-format
|
||||
msgid "%(user_name)s's Trombi"
|
||||
@ -4667,7 +4711,7 @@ msgstr "Téléphone"
|
||||
msgid "Native town"
|
||||
msgstr "Ville d'origine"
|
||||
|
||||
#: trombi/views.py:246
|
||||
#: trombi/views.py:269
|
||||
msgid ""
|
||||
"You can not yet write comment, you must wait for the subscription deadline "
|
||||
"to be passed."
|
||||
@ -4675,11 +4719,11 @@ msgstr ""
|
||||
"Vous ne pouvez pas encore écrire de commentaires, vous devez attendre la fin "
|
||||
"des inscriptions"
|
||||
|
||||
#: trombi/views.py:249
|
||||
#: trombi/views.py:272
|
||||
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:256
|
||||
#: trombi/views.py:279
|
||||
#, python-format
|
||||
msgid "Maximum characters: %(max_length)s"
|
||||
msgstr "Nombre de caractères max: %(max_length)s"
|
||||
|
28
trombi/migrations/0004_trombiclubmembership.py
Normal file
28
trombi/migrations/0004_trombiclubmembership.py
Normal 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'],
|
||||
},
|
||||
),
|
||||
]
|
@ -31,6 +31,7 @@ from django.core.exceptions import ValidationError
|
||||
from datetime import timedelta, date
|
||||
|
||||
from core.models import User
|
||||
from core.utils import get_start_of_semester, get_semester
|
||||
from club.models import Club
|
||||
|
||||
class TrombiManager(models.Manager):
|
||||
@ -98,6 +99,24 @@ class TrombiUser(models.Model):
|
||||
def __str__(self):
|
||||
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):
|
||||
"""
|
||||
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 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')
|
||||
|
||||
|
44
trombi/templates/trombi/edit_profile.jinja
Normal file
44
trombi/templates/trombi/edit_profile.jinja
Normal 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 %}
|
||||
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
<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>
|
||||
<div>
|
||||
<h4>{% trans %}Pictures{% endtrans %}</h4>
|
||||
{% set profile_file = None %}
|
||||
{% set scrub_file = None %}
|
||||
{% if trombi_user.profile_pict %}
|
||||
@ -20,10 +21,36 @@
|
||||
{% else %}
|
||||
{% set scrub_file = static('core/img/na.gif') %}
|
||||
{% endif %}
|
||||
<div style="max-width: 410px; margin: auto;">
|
||||
<div style="max-width: 410px; margin: auto; text-align: center;">
|
||||
<div>
|
||||
<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>
|
||||
{% 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>
|
||||
{% 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>
|
||||
|
@ -39,5 +39,8 @@ urlpatterns = [
|
||||
url(r'^tools$', UserTrombiToolsView.as_view(), name='user_tools'),
|
||||
url(r'^profile$', UserTrombiEditProfileView.as_view(), name='profile'),
|
||||
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'),
|
||||
]
|
||||
|
||||
|
@ -34,7 +34,7 @@ from django.forms.models import modelform_factory
|
||||
|
||||
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 import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin, CanCreateMixin, QuickNotifMixin
|
||||
from core.models import User
|
||||
@ -210,7 +210,7 @@ class UserTrombiEditProfileView(UpdateView):
|
||||
'phone': _("Phone"),
|
||||
'parent_address': _("Native town"),
|
||||
})
|
||||
template_name = "core/edit.jinja"
|
||||
template_name = "trombi/edit_profile.jinja"
|
||||
|
||||
def get_object(self):
|
||||
return self.request.user
|
||||
@ -218,6 +218,29 @@ class UserTrombiEditProfileView(UpdateView):
|
||||
def get_success_url(self):
|
||||
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):
|
||||
model = TrombiUser
|
||||
pk_url_kwarg = "user_id"
|
||||
|
Loading…
Reference in New Issue
Block a user