diff --git a/admin_pages/views.py b/admin_pages/views.py index 051e7a364438bbd5705633039606bcb70c73182e..7ba8c0e1bf8210132ade4451e6c316f24bcca35c 100644 --- a/admin_pages/views.py +++ b/admin_pages/views.py @@ -9,7 +9,7 @@ from django.views.generic import RedirectView, TemplateView from accounts.models import EmailUser from home import models from home.views import get_planning_context -from site_settings.models import SiteSettings +from site_settings.models import Colors, SiteSettings from shared.views import CSVWriteView, SuperuserRequiredMixin # ============================== @@ -229,7 +229,7 @@ class ExportSlots(SuperuserRequiredMixin, CSVWriteView): rows.append([ str(slot), slot.start, slot.room, slot.subscribing_open, slot.on_planning, - models.InterludesSlot.Colors(slot.color).name, slot.duration, slot.activity.duration , + Colors(slot.color).name, slot.duration, slot.activity.duration , ]) return rows @@ -316,7 +316,7 @@ class SendUserEmail(SendEmailBase): "my_choices": my_choices.filter(accepted=True), }) emails.append(( - "Information interludes", # subject + "[interludes] Vos activités", # subject message, self.from_address, # From: [participant.user.email], # To: @@ -360,7 +360,7 @@ class SendOrgaEmail(SendEmailBase): "slots": slots, }) emails.append(( - "[interludes] Liste d'inscrit à votre activité {}".format(activity.title), # subject + "[interludes] Liste d'inscrits à votre activité {}".format(activity.title), # subject message, self.from_address, # From: [activity.host_email] # To: diff --git a/home/migrations/0007_auto_20210911_1733.py b/home/migrations/0007_auto_20210911_1733.py new file mode 100644 index 0000000000000000000000000000000000000000..57246056bcd25e3183b2042c4acc0dcd697ed01e --- /dev/null +++ b/home/migrations/0007_auto_20210911_1733.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.14 on 2021-09-11 15:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0006_interludesslot_duration'), + ] + + operations = [ + migrations.AlterField( + model_name='interludesslot', + name='color', + field=models.CharField(choices=[('a', 'Rouge'), ('b', 'Orange'), ('c', 'Jaune'), ('d', 'Vert'), ('e', 'Bleu'), ('f', 'Bleu foncé'), ('g', 'Noir')], default='f', help_text='La légende des couleurs est modifiable dans les paramètres', max_length=1, verbose_name='Couleur'), + ), + ] diff --git a/home/models.py b/home/models.py index c66746f66bb36863905bc5fc2e2f88fd5006eda9..12feeb61ba9387e629ac95e506bdc9e2ae1de96f 100644 --- a/home/models.py +++ b/home/models.py @@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _ from django.utils import timezone from accounts.models import EmailUser -from site_settings.models import SiteSettings +from site_settings.models import Colors, SiteSettings class InterludesActivity(models.Model): """une activité des interludes (i.e. JDR, murder)...""" @@ -123,17 +123,6 @@ class InterludesSlot(models.Model): Dans une table à part car un activité peut avoir plusieurs créneaux. Les inscriptions se font à des créneaux et non des activités""" - class Colors(models.TextChoices): - """Couleur d'affichage dans le planning - Leur code HTML est hardcodé dans la template "_planning.html".""" - DARK_BLUE = "a", "Bleu foncé" - RED = "b", "Rouge" - YELLOW = "c", "Jaune" - BLUE = "d", "Bleu" - GREEN = "e", "Vert" - BLACK = "f", "Noir" - ORANGE = "g", "Orange" - TITLE_SPECIFIER = "{act_title}" activity = models.ForeignKey(InterludesActivity, on_delete=models.CASCADE, verbose_name="Activité") @@ -156,7 +145,8 @@ class InterludesSlot(models.Model): help_text="Si vrai, apparaît dans la liste du formulaire d'inscription" ) color = models.CharField( - "Couleur", choices=Colors.choices, max_length=1, default=Colors.DARK_BLUE + "Couleur", choices=Colors.choices, max_length=1, default=Colors.DARK_BLUE, + help_text="La légende des couleurs est modifiable dans les paramètres" ) @property diff --git a/home/templates/_planning.html b/home/templates/_planning.html index 829d4a1e88c70b3a1e5a5c08ee3fd4d3e8c050a0..3f1662f0fd26b1b26bd3c7ba03c60f98e2ab1378 100644 --- a/home/templates/_planning.html +++ b/home/templates/_planning.html @@ -99,27 +99,41 @@ I.E we set all dates to the first day (Friday) and set groups allowing vertical /* Color specific things */ :root { - --color_1: var(--color_bg_1); - --color_1_hover: var(--color_bg_2); + /* red */ + --color_1: #e84855; + --color_1_hover: #da1b2b; --color_1_fg: white; - --color_2: #e84855; - --color_2_hover: #da1b2b; + + /* orange */ + --color_2: #dd7230; + --color_2_hover: #c15d1f; --color_2_fg: white; + + /* yellow */ --color_3: #f9dc5c; --color_3_hover: #f7d126; --color_3_fg: black; - --color_4: #3185fc; - --color_4_hover: #0467f1; + + /* green */ + --color_4: #7cae7a; + --color_4_hover: #5f8b55; --color_4_fg: white; - --color_5: #7cae7a; - --color_5_hover: #5f8b55; + + /* blue */ + --color_5: #3185fc; + --color_5_hover: #0467f1; --color_5_fg: white; - --color_6: #483D3F; - --color_6_hover: #2c2627; + + /* dark blue */ + --color_6: #4c4c7c; + --color_6_hover: #26263c; --color_6_fg: white; - --color_7: #dd7230; - --color_7_hover: #c15d1f; + + /* black */ + --color_7: #483D3F; + --color_7_hover: #2c2627; --color_7_fg: white; + } .vis-item.color-a { background-color: var(--color_1); @@ -195,19 +209,20 @@ I.E we set all dates to the first day (Friday) and set groups allowing vertical } </style> - +{% if settings.has_caption %} <div class="caption"> <p><strong>Légende :</strong></p> <ul style="list-style-type: none; margin-left:-20px"> - <li><span style="background-color: var(--color_2);"> </span> Jeux de rôle grandeur nature</li> - <li><span style="background-color: var(--color_7);"> </span> Jeux de rôle sur table</li> - <li><span style="background-color: var(--color_3);"> </span> Activités libres</li> - <li><span style="background-color: var(--color_5);"> </span> Tournois</li> - <li><span style="background-color: var(--color_4);"> </span> Événements de début et fin</li> - <li><span style="background-color: var(--color_1);"> </span> Jeux vidéos</li> - <li><span style="background-color: var(--color_6);"> </span> Autre</li> + {% if settings.caption_red %}<li><span style="background-color: var(--color_1);"> </span> {{ settings.caption_red }}</li>{% endif %} + {% if settings.caption_orange %}<li><span style="background-color: var(--color_2);"> </span> {{ settings.caption_orange }}</li>{% endif %} + {% if settings.caption_yellow %}<li><span style="background-color: var(--color_3);"> </span> {{ settings.caption_yellow }}</li>{% endif %} + {% if settings.caption_green %}<li><span style="background-color: var(--color_4);"> </span> {{ settings.caption_green }}</li>{% endif %} + {% if settings.caption_blue %}<li><span style="background-color: var(--color_5);"> </span> {{ settings.caption_blue }}</li>{% endif %} + {% if settings.caption_dark_blue %}<li><span style="background-color: var(--color_6);"> </span> {{ settings.caption_dark_blue }}</li>{% endif %} + {% if settings.caption_black %}<li><span style="background-color: var(--color_7);"> </span> {{ settings.caption_black }}</li>{% endif %} </ul> </div> +{% endif %} {% if settings.planning_file %} - <div></div><a class="button" href="{{ settings.planning_file.url }}"><i class="fa fa-download"></i> Télécharger le planning</a></div> + <div><p><a class="button" href="{{ settings.planning_file.url }}"><i class="fa fa-download"></i> Télécharger le planning</a></p></div> {% endif %} diff --git a/site_settings/migrations/0007_auto_20210911_1732.py b/site_settings/migrations/0007_auto_20210911_1732.py new file mode 100644 index 0000000000000000000000000000000000000000..7aa65d17d9ea19089b867a28cde269bd7b6162d8 --- /dev/null +++ b/site_settings/migrations/0007_auto_20210911_1732.py @@ -0,0 +1,48 @@ +# Generated by Django 3.0.14 on 2021-09-11 15:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('site_settings', '0006_auto_20210428_1446'), + ] + + operations = [ + migrations.AddField( + model_name='sitesettings', + name='caption_black', + field=models.CharField(blank=True, default='Autre', max_length=200, null=True, verbose_name='Légende planning (noir)'), + ), + migrations.AddField( + model_name='sitesettings', + name='caption_blue', + field=models.CharField(blank=True, default='Événements de début et fin', max_length=200, null=True, verbose_name='Légende planning (bleu)'), + ), + migrations.AddField( + model_name='sitesettings', + name='caption_dark_blue', + field=models.CharField(blank=True, default='Jeux vidéos', max_length=200, null=True, verbose_name='Légende planning (bleu foncé)'), + ), + migrations.AddField( + model_name='sitesettings', + name='caption_green', + field=models.CharField(blank=True, default='Tournois', max_length=200, null=True, verbose_name='Légende planning (vert)'), + ), + migrations.AddField( + model_name='sitesettings', + name='caption_orange', + field=models.CharField(blank=True, default='Jeux de rôle sur table', max_length=200, null=True, verbose_name='Légende planning (orange)'), + ), + migrations.AddField( + model_name='sitesettings', + name='caption_red', + field=models.CharField(blank=True, default='Jeux de rôle grandeur nature', max_length=200, null=True, verbose_name='Légende planning (rouge)'), + ), + migrations.AddField( + model_name='sitesettings', + name='caption_yellow', + field=models.CharField(blank=True, default='Activités libres', max_length=200, null=True, verbose_name='Légende planning (jaune)'), + ), + ] diff --git a/site_settings/models.py b/site_settings/models.py index fe37ead5aa1c584cfe592ad608cc36d82daed837..339854187d32b32887386fa4fb023f3228ac7d8e 100644 --- a/site_settings/models.py +++ b/site_settings/models.py @@ -7,6 +7,18 @@ from django.core.files.storage import FileSystemStorage from django.utils.timezone import now +class Colors(models.TextChoices): + """Couleur d'affichage dans le planning + Leur code HTML est hardcodé dans la template "_planning.html".""" + RED = "a", "Rouge" + ORANGE = "b", "Orange" + YELLOW = "c", "Jaune" + GREEN = "d", "Vert" + BLUE = "e", "Bleu" + DARK_BLUE = "f", "Bleu foncé" + BLACK = "g", "Noir" + + class OverwriteStorage(FileSystemStorage): """used to enforcing a fixed filename to upload file This allow for a constant link to a changeable file""" @@ -112,6 +124,37 @@ class SiteSettings(SingletonModel): help_text="Assurez vous que le message est bien formaté, cela peut casser toutes les pages du site", ) + # Légende du planning modifiable + caption_red = models.CharField( + "Légende planning (rouge)", default="Jeux de rôle grandeur nature", + blank=True, null=True, max_length=200, + ) + caption_orange = models.CharField( + "Légende planning (orange)", default="Jeux de rôle sur table", + blank=True, null=True, max_length=200, + ) + caption_yellow = models.CharField( + "Légende planning (jaune)", default="Activités libres", + blank=True, null=True, max_length=200, + ) + caption_green = models.CharField( + "Légende planning (vert)", default="Tournois", + blank=True, null=True, max_length=200, + ) + caption_blue = models.CharField( + "Légende planning (bleu)", default="Événements de début et fin", + blank=True, null=True, max_length=200, + ) + caption_dark_blue = models.CharField( + "Légende planning (bleu foncé)", default="Jeux vidéos", + blank=True, null=True, max_length=200, + ) + caption_black = models.CharField( + "Légende planning (noir)", default="Autre", + blank=True, null=True, max_length=200, + ) + + @property def contact_email_reversed(self) -> str: return self.contact_email[::-1] @@ -134,6 +177,17 @@ class SiteSettings(SingletonModel): if self.date_start: return self.date_start + timedelta(days=1) + @property + def has_caption(self) -> bool: + """Vérifie si l'une des légende est non-nulle""" + return self.caption_red \ + or self.caption_orange \ + or self.caption_yellow \ + or self.caption_green \ + or self.caption_blue \ + or self.caption_dark_blue \ + or self.caption_black + class Meta: verbose_name = "paramètres" verbose_name_plural = "paramètres"