From 277a28e70a8c61633a6c1dbde7be1f4309136093 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 16 May 2020 16:57:45 +0200 Subject: [PATCH] add a view to list members --- panikdb/aa/models.py | 13 +++++++++++-- panikdb/aa/views.py | 19 ++++++++++++++++++ panikdb/templates/aa/user_list.html | 30 +++++++++++++++++++++++++++++ panikdb/urls.py | 1 + 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 panikdb/templates/aa/user_list.html diff --git a/panikdb/aa/models.py b/panikdb/aa/models.py index dd65e5a..9b996d0 100644 --- a/panikdb/aa/models.py +++ b/panikdb/aa/models.py @@ -32,8 +32,17 @@ class User(AbstractUser): return self.has_perm('emissions.change_newsitem') or object.emission in self.emissions.all() return False - def __unicode__(self): - s = super(User, self).__unicode__() + def active_emissions(self): + return self.emissions.exclude(archived=True) + + def is_ca(self): + return self.groups.filter(name='CA').exists() + + def is_cp(self): + return self.groups.filter(name='CP').exists() + + def __str__(self): + s = super().__str__() parts = [] if self.first_name: parts.append(self.first_name) diff --git a/panikdb/aa/views.py b/panikdb/aa/views.py index 90d8513..6368353 100644 --- a/panikdb/aa/views.py +++ b/panikdb/aa/views.py @@ -1,6 +1,8 @@ from django.contrib.auth.decorators import login_required +from django.db.models import Q from django.views.generic.base import TemplateView from django.views.generic.edit import UpdateView +from django.views.generic.list import ListView from django.core.urlresolvers import reverse_lazy from .models import User @@ -23,3 +25,20 @@ class ProfileContactEditView(UpdateView): profile_contact_edit = login_required(ProfileContactEditView.as_view()) + + +class MembersListView(ListView): + paginate_by = 10 + + def get_queryset(self): + qs = User.objects.filter(is_active=True) + if self.request.GET.get('q'): + for part in self.request.GET.get('q').split(): + part = part.strip() + if not part: + continue + qs = qs.filter(Q(first_name__icontains=part) | Q(last_name__icontains=part)) + return qs + + +members_list_view = login_required(MembersListView.as_view()) diff --git a/panikdb/templates/aa/user_list.html b/panikdb/templates/aa/user_list.html new file mode 100644 index 0000000..bad3ba3 --- /dev/null +++ b/panikdb/templates/aa/user_list.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block appbar %} +

{% trans "Members" %}

+{% endblock %} + +{% block content %} +
+
+ +
+
+ + +{% for user in object_list %} + + + + + + + +{% endfor %} +
{{ user }}{% if user.is_ca %}CA{% endif %} + {% if user.is_cp %}CP{% endif %}{{ user.active_emissions|join:", " }}{% if user.share_contact_details and user.email %}{{ user.email }}{% endif %}{% if user.share_contact_details %}{{ user.phone|default:"" }} {{ user.mobile|default:"" }}{% endif %}
+ +{% include "gadjo/pagination.html" %} + +{% endblock %} diff --git a/panikdb/urls.py b/panikdb/urls.py index b87a04b..6c38a98 100644 --- a/panikdb/urls.py +++ b/panikdb/urls.py @@ -79,6 +79,7 @@ urlpatterns = [ url(r'^combok/soundfiles/', panikombo.views.soundfiles), url(r'^combok/episodes/', panikombo.views.episodes), + url(r'^members/$', aa_views.members_list_view, name='members-list-view'), url(r'^profile/$', aa_views.profile_view, name='profile-view'), url(r'^profile/edit/$', aa_views.profile_contact_edit, name='profile-contact-edit'), -- 2.39.2