diff --git a/beesgospel/admin.py b/beesgospel/admin.py index 7ab96b6..a8bc102 100644 --- a/beesgospel/admin.py +++ b/beesgospel/admin.py @@ -4,7 +4,9 @@ from zoneinfo import ZoneInfo from django.contrib import admin from django.contrib.auth.admin import UserAdmin -from beesgospel.models import Agenda, Chant, ChantDoc, Document, Membre, User +from beesgospel.models import ( + Agenda, Chant, ChantDoc, ConcertItem, Document, Membre, User +) @admin.action(description="Générer répétition des 3 prochains mois") @@ -26,6 +28,11 @@ def gen_repets(modeladmin, request, queryset): next_wedn += datetime.timedelta(days=7) +class ConcertItemInline(admin.TabularInline): + model = ConcertItem + extra = 0 + + @admin.register(Agenda) class AgendaAdmin(admin.ModelAdmin): list_display = ["titre", "lieu", "date_heure", "statut"] @@ -33,6 +40,7 @@ class AgendaAdmin(admin.ModelAdmin): search_fields = ["titre", "lieu"] date_hierarchy = "date_heure" actions = [gen_repets] + inlines = [ConcertItemInline] @admin.register(Document) diff --git a/beesgospel/migrations/0012_concertitem.py b/beesgospel/migrations/0012_concertitem.py new file mode 100644 index 0000000..9270c43 --- /dev/null +++ b/beesgospel/migrations/0012_concertitem.py @@ -0,0 +1,23 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('beesgospel', '0011_remove_agenda_prive'), + ] + + operations = [ + migrations.CreateModel( + name='ConcertItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('item', models.CharField(blank=True, max_length=250)), + ('ordre', models.SmallIntegerField(default=0)), + ('remarque', models.TextField(blank=True, verbose_name='Remarque')), + ('chant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='beesgospel.chant')), + ('concert', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='programme', to='beesgospel.agenda')), + ], + ), + ] diff --git a/beesgospel/models.py b/beesgospel/models.py index f20f35a..ac46db8 100644 --- a/beesgospel/models.py +++ b/beesgospel/models.py @@ -129,3 +129,19 @@ class ChantDoc(models.Model): @property def fichier_son(self): return self.fichier and self.fichier.name.endswith((".m4a", ".mp3", ".wav")) + + +class ConcertItem(models.Model): + concert = models.ForeignKey(Agenda, on_delete=models.CASCADE, related_name="programme") + chant = models.ForeignKey(Chant, on_delete=models.CASCADE, blank=True, null=True) + item = models.CharField(max_length=250, blank=True) + ordre = models.SmallIntegerField(default=0) + remarque = models.TextField("Remarque", blank=True) + + class Meta: + ordering = ["ordre"] + + def __str__(self): + if self.chant: + return f"Chant {self.chant} pour le concert {self.concert}" + return f"{self.item} pour le concert {self.concert}" diff --git a/beesgospel/static/css/main.css b/beesgospel/static/css/main.css index 71cd688..fa4d4c6 100644 --- a/beesgospel/static/css/main.css +++ b/beesgospel/static/css/main.css @@ -3,6 +3,8 @@ src: url("../fonts/harlow-solid-regular.ttf"); } +html { scroll-padding-top: 8rem; } + body { color: #fff; background: #333; diff --git a/beesgospel/views.py b/beesgospel/views.py index 665e24d..7f08a45 100644 --- a/beesgospel/views.py +++ b/beesgospel/views.py @@ -67,7 +67,9 @@ class AgendaView(ListView): qs = Agenda.objects.filter( date_heure__gt=date.today() - timedelta(days=3), ).order_by("date_heure") - if not self.request.user.is_authenticated: + if self.request.user.is_authenticated: + qs = qs.prefetch_related("programme") + else: qs = qs.filter(statut=Agenda.Statuts.PUBLIC) return qs diff --git a/templates/agenda.html b/templates/agenda.html index f6ffc67..665f9e1 100644 --- a/templates/agenda.html +++ b/templates/agenda.html @@ -5,18 +5,34 @@ {% block content %}

Agenda des prochaines prestations de la chorale

-{% for item in object_list %} -
+{% for even in object_list %} +
- {{ item.date_heure|date:'D d F à H:i' }} + {{ even.date_heure|date:'D d F à H:i' }}
-
{{ item.titre }}{% if item.statut == 'repet' %} - {{ item.lieu }}{% endif %}
+
{{ even.titre }}{% if even.statut == 'repet' %} - {{ even.lieu }}{% endif %}
- {% if item.statut != 'repet' %}
{{ item.lieu }}
{% endif %} - {% if item.infos %}
{{ item.infos }}
{% endif %} - {% if item.infos_internes and user.is_authenticated %} -
{{ item.infos_internes }}
+ {% if even.statut != 'repet' %}
{{ even.lieu }}
{% endif %} + {% if even.infos %}
{{ even.infos }}
{% endif %} + {% if user.is_authenticated %} + {% if even.infos_internes %}
{{ even.infos_internes }}
{% endif %} + {% if even.programme.all %} +
+
+ pour membres uniquement +
+
    + {% for item in even.programme.all %} +
  1. {% if item.chant %}{{ item.chant }}{% else %}{{ item.item }}{% endif %} + {% if item.remarque %} ({{ item.remarque }}){% endif %} +
  2. + {% endfor %} +
+
+
+
+ {% endif %} {% endif %}
{% endfor %} diff --git a/templates/membres/liste_chants.html b/templates/membres/liste_chants.html index a343173..7e6c608 100644 --- a/templates/membres/liste_chants.html +++ b/templates/membres/liste_chants.html @@ -7,7 +7,7 @@ Titre {% if perms.beesgospel.change_chant %}{% endif %} {% for chant in object_list %} - + {{ chant.titre }} {% for doc in chant.chantdoc_set.all %} {% if doc.fichier_son %}