Ajout/édition de membre
This commit is contained in:
parent
6172fb8fec
commit
dc792aa009
|
@ -1,5 +1,10 @@
|
|||
from dajngo import forms
|
||||
from secrets import token_hex
|
||||
|
||||
from django import forms
|
||||
from django.contrib.auth import forms as auth_forms
|
||||
from django.db import transaction
|
||||
|
||||
from .models import Membre, User
|
||||
|
||||
|
||||
class BootstrapMixin:
|
||||
|
@ -29,3 +34,22 @@ class LoginForm(BootstrapMixin, auth_forms.AuthenticationForm):
|
|||
username = forms.EmailField(
|
||||
widget=forms.EmailInput(attrs={"autofocus": True}),
|
||||
)
|
||||
|
||||
|
||||
class UserEditForm(BootstrapMixin, forms.ModelForm):
|
||||
class Meta:
|
||||
model = Membre
|
||||
fields = [
|
||||
"nom", "prenom", "fonction", "rue", "npa", "localite",
|
||||
"tel1", "tel2", "courriel", "date_naissance", "annee_entree",
|
||||
]
|
||||
|
||||
@transaction.atomic()
|
||||
def save(self, **kwargs):
|
||||
is_new = self.instance.pk is None
|
||||
if is_new:
|
||||
self.instance.user = User.objects.create_user("foo", self.instance.courriel, password=token_hex(10))
|
||||
elif "courriel" in self.changed_data:
|
||||
self.instance.user.email = self.cleaned_data["courriel"]
|
||||
self.instance.user.save()
|
||||
return super().save(**kwargs)
|
||||
|
|
|
@ -11,12 +11,12 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='membre',
|
||||
name='annee_entree',
|
||||
field=models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='Année entrée'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='membre',
|
||||
name='date_naissance',
|
||||
field=models.DateField(blank=True, null=True),
|
||||
field=models.DateField(blank=True, null=True, verbose_name='Date de naissance'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='membre',
|
||||
|
|
|
@ -35,8 +35,8 @@ class Membre(models.Model):
|
|||
tel1 = models.CharField("Tél. 1", max_length=20, blank=True)
|
||||
tel2 = models.CharField("Tél. 2", max_length=20, blank=True)
|
||||
courriel = models.EmailField("Courriel", blank=True)
|
||||
date_naissance = models.DateField(null=True, blank=True)
|
||||
annee_entree = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
date_naissance = models.DateField("Date de naissance", null=True, blank=True)
|
||||
annee_entree = models.PositiveSmallIntegerField("Année entrée", null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.nom} {self.prenom}"
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
from datetime import date, timedelta
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.views.generic import ListView, TemplateView
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import (
|
||||
CreateView, DeleteView, ListView, TemplateView, UpdateView
|
||||
)
|
||||
|
||||
from .forms import UserEditForm
|
||||
from .models import Agenda, Document, Membre
|
||||
|
||||
|
||||
|
@ -67,3 +71,26 @@ class EspaceMembresView(LoginRequiredMixin, TemplateView):
|
|||
class ListeMembresView(LoginRequiredMixin, ListView):
|
||||
model = Membre
|
||||
template_name = "membres/liste.html"
|
||||
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().order_by("nom")
|
||||
|
||||
|
||||
class MembreAddView(PermissionRequiredMixin, CreateView):
|
||||
model = Membre
|
||||
form_class = UserEditForm
|
||||
permission_required = "beesgospel.add_user"
|
||||
template_name = "membres/edit.html"
|
||||
success_url = reverse_lazy("liste-membres")
|
||||
|
||||
|
||||
class MembreEditView(PermissionRequiredMixin, UpdateView):
|
||||
model = Membre
|
||||
form_class = UserEditForm
|
||||
permission_required = "beesgospel.change_user"
|
||||
template_name = "membres/edit.html"
|
||||
success_url = reverse_lazy("liste-membres")
|
||||
|
||||
|
||||
class MembreDeleteView(PermissionRequiredMixin, DeleteView):
|
||||
permission_required = "beesgospel.delete_user"
|
||||
|
|
|
@ -14,6 +14,9 @@ urlpatterns = [
|
|||
path("agenda/", views.AgendaView.as_view(), name="agenda"),
|
||||
path("medias/", views.MediaView.as_view(prive=False), name="medias"),
|
||||
path("membres/", views.EspaceMembresView.as_view(), name="membres"),
|
||||
path("membres/nouveau/", views.MembreAddView.as_view(), name="membre-add"),
|
||||
path("membres/<int:pk>/edit/", views.MembreEditView.as_view(), name="membre-edit"),
|
||||
path("membres/<int:pk>/delete/", views.MembreDeleteView.as_view(), name="membre-delete"),
|
||||
path("membres/liste/", views.ListeMembresView.as_view(), name="liste-membres"),
|
||||
path("membres/documents/", views.MediaView.as_view(prive=True), name="docs-membres"),
|
||||
]
|
||||
|
|
10
templates/membres/edit.html
Normal file
10
templates/membres/edit.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h2>Édition/ajout de membres</h2>
|
||||
|
||||
<form method="post">{% csrf_token %}
|
||||
{{ form.as_div }}
|
||||
<div class="mt-3"><button type="submit" class="btn btn-primary">Enregistrer</button></div>
|
||||
</form>
|
||||
{% endblock content %}
|
|
@ -3,7 +3,7 @@
|
|||
{% block content %}
|
||||
<h2>Liste des membres</h2>
|
||||
<table class="table table-responsive">
|
||||
<tr><th>Nom/prénom</th><th>Fonction</th><th>Adresse</th><th>Téls.</th><th>Courriel</th><th>Date de naissance</th><th>Année d’entrée</th></tr>
|
||||
<tr><th>Nom/prénom</th><th>Fonction</th><th>Adresse</th><th>Téls.</th><th>Courriel</th><th>Date de naissance</th><th>Année d’entrée</th><th></th></tr>
|
||||
{% for membre in object_list %}
|
||||
<tr><td>{{ membre.nom }} {{ membre.prenom }}</td>
|
||||
<td>{{ membre.fonction }}</td>
|
||||
|
@ -11,8 +11,15 @@
|
|||
<td>{{ membre.tel1 }}<br>{{ membre.tel2 }}</td>
|
||||
<td>{{ membre.courriel }}</td>
|
||||
<td>{{ membre.date_naissance|date:"d.m.Y" }}</td>
|
||||
<td>{{ membre.annee_entree }}</td>
|
||||
<td>{{ membre.annee_entree|default_if_none:"" }}</td>
|
||||
<td>{% if perms.beesgospel.change_user %}
|
||||
<a href="{% url 'membre-edit' membre.pk %}"><img src="{% static 'admin/img/icon-changelink.svg' %}"></a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% if perms.beesgospel.add_user %}
|
||||
<div class="mt-3"><a class="btn btn-outline-primary" href="{% url 'membre-add' %}">Ajouter un membre</a></div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in a new issue