Allow BDS staff members to update a user's account
This commit is contained in:
parent
f6e1f39cff
commit
8191d72d7c
30
bds/forms.py
Normal file
30
bds/forms.py
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
from django import forms
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
|
from bds.models import BDSProfile
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
|
class BDSUserForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = User
|
||||||
|
fields = ["first_name", "last_name", "email"]
|
||||||
|
|
||||||
|
|
||||||
|
class BDSProfileForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = BDSProfile
|
||||||
|
fields = [
|
||||||
|
"phone",
|
||||||
|
"occupation",
|
||||||
|
"departement",
|
||||||
|
"birthdate",
|
||||||
|
"mails_bds",
|
||||||
|
"has_certificate",
|
||||||
|
"ASPSL_number",
|
||||||
|
"FFSU_number",
|
||||||
|
"is_member",
|
||||||
|
"cotisation_period",
|
||||||
|
"cotisation_type",
|
||||||
|
]
|
|
@ -5,6 +5,12 @@ html, body {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
font-size: 18px;
|
||||||
|
border: 0;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #a82305;
|
color: #a82305;
|
||||||
|
@ -26,16 +32,9 @@ nav a, nav a img {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="text"] {
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#search_autocomplete {
|
#search_autocomplete {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
width: 480px;
|
width: 480px;
|
||||||
margin: 0;
|
|
||||||
border: 0;
|
|
||||||
padding: 10px 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight {
|
.highlight {
|
||||||
|
@ -80,3 +79,43 @@ input[type="text"] {
|
||||||
.autocomplete-value, .autocomplete-new, .autocomplete-more {
|
.autocomplete-value, .autocomplete-new, .autocomplete-more {
|
||||||
background: white;
|
background: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Forms */
|
||||||
|
|
||||||
|
form {
|
||||||
|
width: 50%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-field {
|
||||||
|
width: 90%;
|
||||||
|
margin: auto;
|
||||||
|
padding-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-field label {
|
||||||
|
display: inline-block;
|
||||||
|
padding 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-field input {
|
||||||
|
display: inline-block;
|
||||||
|
width: 99%;
|
||||||
|
padding: 1% 0.5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-field input[type="checkbox"] {
|
||||||
|
width: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
form input[type="submit"] {
|
||||||
|
display: block;
|
||||||
|
width: 30%;
|
||||||
|
margin: auto;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
form input[type="submit"]:hover {
|
||||||
|
background: #e8554e;
|
||||||
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
{# CSS #}
|
{# CSS #}
|
||||||
<link rel="stylesheet" href="{% static "bds/css/bds.css" %}">
|
<link rel="stylesheet" href="{% static "bds/css/bds.css" %}">
|
||||||
|
<link rel="stylesheet" href="{% static "shared/css/messages.css" %}">
|
||||||
|
|
||||||
{# Javascript #}
|
{# Javascript #}
|
||||||
<script src="{% static 'vendor/jquery/jquery-3.3.1.min.js' %}"></script>
|
<script src="{% static 'vendor/jquery/jquery-3.3.1.min.js' %}"></script>
|
||||||
|
@ -17,6 +18,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
{% include "bds/nav.html" %}
|
{% include "bds/nav.html" %}
|
||||||
|
{% include "bds/messages.html" %}
|
||||||
|
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
|
|
9
bds/templates/bds/messages.html
Normal file
9
bds/templates/bds/messages.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{% if messages %}
|
||||||
|
{% for message in messages %}
|
||||||
|
<div class="messages">
|
||||||
|
<div class="alert alert-{{ message.level_tag }} alert-dismissible fade in{% if message.tags %} {{ message.tags }}{% endif %}">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
|
@ -9,7 +9,7 @@
|
||||||
{% for user in members %}
|
{% for user in members %}
|
||||||
{% if forloop.counter < 5 %}
|
{% if forloop.counter < 5 %}
|
||||||
<li class="autocomplete-value">
|
<li class="autocomplete-value">
|
||||||
<a class="autocomplete-item" href="#TODO">
|
<a class="autocomplete-item" href="{% url "bds:user.update" user.id %}">
|
||||||
{{ user|highlight_user:q }}
|
{{ user|highlight_user:q }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
{% for user in others %}
|
{% for user in others %}
|
||||||
{% if forloop.counter < 5 %}
|
{% if forloop.counter < 5 %}
|
||||||
<li class="autocomplete-value">
|
<li class="autocomplete-value">
|
||||||
<a class="autocomplete-item" href="#TODO">
|
<a class="autocomplete-item" href="{% url "bds:user.update" user.id %}">
|
||||||
{{ user|highlight_user:q }}
|
{{ user|highlight_user:q }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
31
bds/templates/bds/user_update.html
Normal file
31
bds/templates/bds/user_update.html
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{% extends "bds/base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form action="" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
{% for field in user_form %}
|
||||||
|
<div class="form-field">
|
||||||
|
{{ field.errors }}
|
||||||
|
{{ field.label_tag }}
|
||||||
|
{{ field }}
|
||||||
|
{% if field.help_text %}
|
||||||
|
<p class="help">{{ field.help_text|safe }}</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for field in profile_form %}
|
||||||
|
<div class="form-field">
|
||||||
|
{{ field.errors }}
|
||||||
|
{{ field.label_tag }} {{ field }}
|
||||||
|
{% if field.help_text %}
|
||||||
|
<p class="help">{{ field.help_text|safe }}</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<input type="submit" value="{% trans "Enregistrer" %}">
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
|
@ -6,4 +6,5 @@ app_name = "bds"
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", views.Home.as_view(), name="home"),
|
path("", views.Home.as_view(), name="home"),
|
||||||
path("autocomplete", views.AutocompleteView.as_view(), name="autocomplete"),
|
path("autocomplete", views.AutocompleteView.as_view(), name="autocomplete"),
|
||||||
|
path("user/update/<pk>", views.UserUpdateView.as_view(), name="user.update"),
|
||||||
]
|
]
|
||||||
|
|
50
bds/views.py
50
bds/views.py
|
@ -1,9 +1,16 @@
|
||||||
from django.http import Http404
|
from django.contrib import messages
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.http import Http404, HttpResponseRedirect
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from bds.autocomplete import bds_search
|
from bds.autocomplete import bds_search
|
||||||
|
from bds.forms import BDSProfileForm, BDSUserForm
|
||||||
from bds.mixins import StaffRequiredMixin
|
from bds.mixins import StaffRequiredMixin
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
class AutocompleteView(StaffRequiredMixin, TemplateView):
|
class AutocompleteView(StaffRequiredMixin, TemplateView):
|
||||||
template_name = "bds/search_results.html"
|
template_name = "bds/search_results.html"
|
||||||
|
@ -22,3 +29,44 @@ class AutocompleteView(StaffRequiredMixin, TemplateView):
|
||||||
|
|
||||||
class Home(StaffRequiredMixin, TemplateView):
|
class Home(StaffRequiredMixin, TemplateView):
|
||||||
template_name = "bds/home.html"
|
template_name = "bds/home.html"
|
||||||
|
|
||||||
|
|
||||||
|
class UserUpdateView(StaffRequiredMixin, TemplateView):
|
||||||
|
template_name = "bds/user_update.html"
|
||||||
|
|
||||||
|
def setup(self, *args, **kwargs):
|
||||||
|
super().setup(*args, **kwargs)
|
||||||
|
self.user = get_object_or_404(User, pk=self.kwargs["pk"])
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
ctx = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
form_data = self.request.POST if self.request.method == "POST" else None
|
||||||
|
profile = getattr(self.user, "bds", None)
|
||||||
|
ctx["user_form"] = BDSUserForm(prefix="user", intance=self.user, data=form_data)
|
||||||
|
ctx["profile_form"] = BDSProfileForm(
|
||||||
|
prefix="profile", instance=profile, data=form_data
|
||||||
|
)
|
||||||
|
|
||||||
|
return ctx
|
||||||
|
|
||||||
|
def post(self, *args, **kwargs):
|
||||||
|
ctx = self.get_context_data()
|
||||||
|
user_form = ctx["user_form"]
|
||||||
|
profile_form = ctx["profile_form"]
|
||||||
|
|
||||||
|
if user_form.is_valid() and profile_form.is_valid():
|
||||||
|
user_form.save()
|
||||||
|
profile_form.save()
|
||||||
|
messages.add_message(
|
||||||
|
self.request, messages.SUCCESS, _("Compte mis à jour avec succès !")
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
messages.add_message(
|
||||||
|
self.request,
|
||||||
|
messages.ERROR,
|
||||||
|
_("Le formulaire de mise à jour du compte contient des erreurs."),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Redirect here.
|
||||||
|
return HttpResponseRedirect("")
|
||||||
|
|
Loading…
Reference in a new issue