Page d'agenda

This commit is contained in:
Claude Paroz 2025-08-16 18:44:58 +02:00
parent 6c3a1e6ddc
commit b58d85198a
10 changed files with 64 additions and 8 deletions

View file

@ -37,6 +37,7 @@ class Migration(migrations.Migration):
), ),
), ),
], ],
options={'verbose_name': 'Agenda', 'verbose_name_plural': 'Agenda'},
), ),
migrations.CreateModel( migrations.CreateModel(
name="Document", name="Document",

View file

@ -50,6 +50,10 @@ class Agenda(models.Model):
) )
) )
class Meta:
verbose_name = "Agenda"
verbose_name_plural = "Agenda"
def __str__(self): def __str__(self):
return f"{self.titre} {self.date_heure}" return f"{self.titre} {self.date_heure}"

View file

@ -73,3 +73,8 @@ nav {
.left-red { .left-red {
border-left: 2px solid red; border-left: 2px solid red;
} }
.prive {
background-image: linear-gradient(45deg, #333333 41.67%, #6b0c0c 41.67%, #6b0c0c 50%, #333333 50%, #333333 91.67%, #6b0c0c 91.67%, #6b0c0c 100%);
background-size: 33.94px 33.94px;
}

View file

@ -1,7 +1,21 @@
from datetime import date, timedelta
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView, TemplateView from django.views.generic import ListView, TemplateView
from .models import Membre from .models import Agenda, Membre
class AgendaView(ListView):
model = Agenda
template_name = "agenda.html"
def get_queryset(self):
qs = Agenda.objects.filter(
date_heure__gt=date.today() - timedelta(days=3),
).order_by("date_heure")
if not self.request.user.is_authenticated:
qs = qs.filter(prive=False)
return qs
class EspaceMembresView(LoginRequiredMixin, TemplateView): class EspaceMembresView(LoginRequiredMixin, TemplateView):

View file

@ -96,11 +96,11 @@ AUTH_USER_MODEL = "beesgospel.User"
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/5.2/topics/i18n/ # https://docs.djangoproject.com/en/5.2/topics/i18n/
LANGUAGE_CODE = "fr" LANGUAGE_CODE = "fr-ch"
TIME_ZONE = "UTC" TIME_ZONE = "Europe/Zurich"
USE_I18N = False USE_I18N = True
USE_TZ = True USE_TZ = True

View file

@ -13,4 +13,5 @@ urlpatterns = [
path("contact/", TemplateView.as_view(template_name="contact.html"), name="contact"), path("contact/", TemplateView.as_view(template_name="contact.html"), name="contact"),
path("membres/", views.EspaceMembresView.as_view(), name="membres"), path("membres/", views.EspaceMembresView.as_view(), name="membres"),
path("membres/liste/", views.ListeMembresView.as_view(), name="liste-membres"), path("membres/liste/", views.ListeMembresView.as_view(), name="liste-membres"),
path("agenda/", views.AgendaView.as_view(), name="agenda"),
] ]

View file

@ -0,0 +1,5 @@
{% extends 'admin/base.html' %}
{% block branding %}
<div id="site-name"><a href="{% url 'admin:index' %}">Administration du site beesgospel.ch</a></div>
{% endblock %}

20
templates/agenda.html Normal file
View file

@ -0,0 +1,20 @@
{% extends "base.html" %}
{% block page_title %} - Agenda{% endblock %}
{% block content %}
<h2 class="mb-5">Agenda des prochaines prestations de la chorale</h2>
{% for item in object_list %}
<div class="border-bottom border-danger mt-3{% if item.prive %} prive{% endif %}">
<div class="row">
<div class="col col-12 col-sm-4 col-lg-2 bg-white text-black rounded align-self-center text-center fw-bold pt-2 pb-2">
{{ item.date_heure|date:'D d F à H:i' }}
</div>
<div class="col col-12 col-sm-8 col-lg-10 fs-4">{{ item.titre }}</div>
</div>
<div class="mt-2 mb-2">{{ item.lieu }}</div>
<div class="pb-3">{{ item.infos }}</div>
</div>
{% endfor %}
{% endblock %}

View file

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Le Gospel de lAbeille - Bee's Gospel</title> <title>Le Gospel de lAbeille - Bee's Gospel{% block page_title %}{% endblock %}</title>
<link href="{% static 'vendor/bootstrap.min.css' %}" rel="stylesheet"> <link href="{% static 'vendor/bootstrap.min.css' %}" rel="stylesheet">
<link href="{% static 'css/main.css' %}" rel="stylesheet"> <link href="{% static 'css/main.css' %}" rel="stylesheet">
<script src="{% static 'vendor/bootstrap.bundle.min.js' %}"></script> <script src="{% static 'vendor/bootstrap.bundle.min.js' %}"></script>
@ -26,7 +26,7 @@
<li class="nav-sep"></li> <li class="nav-sep"></li>
<li class="nav-item"><a class="nav-link{% if request.path == "/contact/" %} active{% endif %}" href="{% url 'contact' %}">Contact</a></li> <li class="nav-item"><a class="nav-link{% if request.path == "/contact/" %} active{% endif %}" href="{% url 'contact' %}">Contact</a></li>
<li class="nav-sep"></li> <li class="nav-sep"></li>
<li class="nav-item"><a class="nav-link" href="#">Agenda</a></li> <li class="nav-item"><a class="nav-link" href="{% url 'agenda' %}">Agenda</a></li>
<li class="nav-sep"></li> <li class="nav-sep"></li>
<li class="nav-item"><a class="nav-link" href="#">Médias</a></li> <li class="nav-item"><a class="nav-link" href="#">Médias</a></li>
<li class="nav-sep"></li> <li class="nav-sep"></li>

View file

@ -5,7 +5,13 @@
<form action="{% url 'logout' %}" method="post">{% csrf_token %}<button class="btn btn-sm btn-light" type="submit">Déconnexion</button></form> <form action="{% url 'logout' %}" method="post">{% csrf_token %}<button class="btn btn-sm btn-light" type="submit">Déconnexion</button></form>
</div> </div>
<h2>Espace membres</h2> <h2>Espace membres</h2>
<div class="row"> <div class="row mt-4">
<a href="{% url 'liste-membres' %}">Liste des membres</a> <div class="col col-4"><a href="{% url 'liste-membres' %}">Liste des membres</a></div>
{% if perms.beesgospel.change_agenda %}
<div class="col col-4"><a href="{% url 'admin:beesgospel_agenda_changelist' %}">Gestion de lagenda</a></div>
{% endif %}
{% if perms.beesgospel.change_document %}
<div class="col col-4"><a href="{% url 'admin:beesgospel_document_changelist' %}">Gestion des documents</a></div>
{% endif %}
</div> </div>
{% endblock %} {% endblock %}