diff --git a/apps/member/filters.py b/apps/member/filters.py new file mode 100644 index 0000000000000000000000000000000000000000..fb1a212871254cb3717b044184f5334d20009b18 --- /dev/null +++ b/apps/member/filters.py @@ -0,0 +1,31 @@ +# -*- mode: python; coding: utf-8 -*- +# Copyright (C) 2018-2019 by BDE ENS Paris-Saclay +# SPDX-License-Identifier: GPL-3.0-or-later + +from django_filters import FilterSet, CharFilter,NumberFilter +from django.contrib.auth.models import User +from django.db.models import CharField +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Layout, Submit + +from .models import Club + +class UserFilter(FilterSet): + class Meta: + model = User + fields = ['last_name','first_name','username','profile__section'] + filter_overrides={ + CharField:{ + 'filter_class':CharFilter, + 'extra': lambda f:{ + 'lookup_expr':'icontains' + } + } + } + +class UserFilterFormHelper(FormHelper): + form_method = 'GET' + layout = Layout( + 'last_name','first_name','username','profile__section', + Submit('Submit','Apply Filter'), + ) diff --git a/apps/member/tables.py b/apps/member/tables.py index 5213a3d4c64577e2a0021716c754af8f1a23f714..4218948c11aa5e516a12057e12594cde95bb5abd 100644 --- a/apps/member/tables.py +++ b/apps/member/tables.py @@ -2,12 +2,26 @@ import django_tables2 as tables from .models import Club +from django.conf import settings +from django.contrib.auth.models import User class ClubTable(tables.Table): class Meta: attrs = {'class':'table table-bordered table-condensed table-striped table-hover'} model = Club template_name = 'django_tables2/bootstrap.html' - fields= ('id','name','email') + fields = ('id','name','email') row_attrs = {'class':'table-row', 'data-href': lambda record: record.pk } + + + +class UserTable(tables.Table): + section = tables.Column(accessor='profile.section') + solde = tables.Column(accessor='note.balance') + + class Meta: + attrs = {'class':'table table-bordered table-condensed table-striped table-hover'} + template_name = 'django_tables2/bootstrap.html' + fields = ('last_name','first_name','username','email') + model = User diff --git a/apps/member/urls.py b/apps/member/urls.py index 39d3d8967ef099a65b7ddd06fdbb5a826b7e67f5..8d3aa40a3b7cf34d4488c11029ba36f3eba5a056 100644 --- a/apps/member/urls.py +++ b/apps/member/urls.py @@ -15,5 +15,6 @@ urlpatterns = [ path('club/<int:pk>/',views.ClubDetailView.as_view(),name="club_detail"), path('club/<int:pk>/add_member/',views.ClubAddMemberView.as_view(),name="club_add_member"), path('club/create/',views.ClubCreateView.as_view(),name="club_create"), + path('user/',views.UserListView.as_view(),name="user_list"), path('user/<int:pk>',views.UserDetailView.as_view(),name="user_detail") ] diff --git a/apps/member/views.py b/apps/member/views.py index fed0c30bc0abe7cd3f3c4f1f64b15f41d88e58cf..c5c3d7886ac3277828b33a8bacd7d5b7231b2d85 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -8,6 +8,7 @@ from django.utils.translation import gettext_lazy as _ from django.views.generic import CreateView, ListView, DetailView from django.http import HttpResponseRedirect from django.contrib.auth.forms import UserCreationForm +from django.contrib.auth.models import User from django.urls import reverse_lazy from django.db.models import Q @@ -16,9 +17,13 @@ from django_tables2.views import SingleTableView from .models import Profile, Club, Membership from .forms import ProfileForm, ClubForm,MembershipForm, MemberFormSet,FormSetHelper -from .tables import ClubTable +from .tables import ClubTable,UserTable +from .filters import UserFilter, UserFilterFormHelper + + from note.models.transactions import Transaction from note.tables import HistoryTable + class UserCreateView(CreateView): """ Une vue pour inscrire un utilisateur et lui créer un profile @@ -60,6 +65,28 @@ class UserDetailView(LoginRequiredMixin,DetailView): context['club_list'] = ClubTable(club_list) return context +class UserListView(LoginRequiredMixin,SingleTableView): + model = User + table_class = UserTable + template_name = 'member/user_list.html' + filter_class = UserFilter + formhelper_class = UserFilterFormHelper + + def get_queryset(self,**kwargs): + qs = super().get_queryset() + self.filter = self.filter_class(self.request.GET,queryset=qs) + self.filter.form.helper = self.formhelper_class() + return self.filter.qs + + def get_context_data(self,**kwargs): + context = super().get_context_data(**kwargs) + context["filter"] = self.filter + return context + + +################################### +############## CLUB ############### +################################### class ClubCreateView(LoginRequiredMixin,CreateView): """ diff --git a/requirements.txt b/requirements.txt index 39c20738e1fff7ca0643eea09d143a9f28bffa23..51b9ae4a4cffafc8002865756def41c9809f68dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,7 @@ Django==2.2.3 django-allauth==0.39.1 django-crispy-forms==1.7.2 django-extensions==2.1.9 +django-filter==2.2.0 django-polymorphic==2.0.3 django-reversion==3.0.3 django-tables2==2.1.0 diff --git a/templates/member/user_list.html b/templates/member/user_list.html new file mode 100644 index 0000000000000000000000000000000000000000..821ea6190097b7ce3d2016aac3df427b8f8dcd3c --- /dev/null +++ b/templates/member/user_list.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} +{% load render_table from django_tables2 %} +{% load crispy_forms_tags%} +{% block content %} + +<a class="btn btn-primary" href="{% url 'member:signup' %}">New User</a> + +<div class="row"> +{% crispy filter.form filter.form.helper %} +</div> +<div class="row"> + <div id="replaceable-content" class="col-6"> + {% render_table table %} + </div> +</div> + +{% endblock %} + +{% block extrajavascript %} +<script type="text/javascript"> + +$(document).ready(function($) { + $(".table-row").click(function() { + window.document.location = $(this).data("href"); + }); +}); + +</script> +{% endblock %}