mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-09-29 12:53:31 +02:00
Export club members
This commit is contained in:
@@ -92,6 +92,20 @@ class MembershipTable(tables.Table):
|
||||
}
|
||||
)
|
||||
|
||||
user_email = tables.Column(
|
||||
verbose_name="Email",
|
||||
accessor="user.email",
|
||||
orderable=False,
|
||||
visible=False,
|
||||
)
|
||||
|
||||
user_full_name = tables.Column(
|
||||
verbose_name=_("Full name"),
|
||||
accessor="user.get_full_name",
|
||||
orderable=False,
|
||||
visible=False,
|
||||
)
|
||||
|
||||
def render_user(self, value):
|
||||
# If the user has the right, link the displayed user with the page of its detail.
|
||||
s = value.username
|
||||
@@ -149,6 +163,16 @@ class MembershipTable(tables.Table):
|
||||
+ "'>" + s + "</a>")
|
||||
return s
|
||||
|
||||
def value_user(self, record):
|
||||
return record.user.username if record.user else ""
|
||||
|
||||
def value_club(self, record):
|
||||
return record.club.name if record.club else ""
|
||||
|
||||
def value_roles(self, record):
|
||||
roles = record.roles.all()
|
||||
return ", ".join(str(role) for role in roles)
|
||||
|
||||
class Meta:
|
||||
attrs = {
|
||||
'class': 'table table-condensed table-striped',
|
||||
|
@@ -36,7 +36,13 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
{% trans "There is no membership found with this pattern." %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="card-footer text-center">
|
||||
<button class="btn btn-block btn-primary mb-3" onclick="window.location.href='?_export=csv'">
|
||||
{% trans "Export to CSV" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
@@ -17,6 +17,7 @@ from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import DetailView, UpdateView, TemplateView
|
||||
from django.views.generic.edit import FormMixin
|
||||
from django_tables2.views import MultiTableMixin, SingleTableMixin, SingleTableView
|
||||
from django_tables2.export.views import ExportMixin
|
||||
from rest_framework.authtoken.models import Token
|
||||
from api.viewsets import is_regex
|
||||
from note.models import Alias, NoteClub, NoteUser, Trust
|
||||
@@ -950,11 +951,12 @@ class ClubManageRolesView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
||||
return reverse_lazy('member:user_detail', kwargs={'pk': self.object.user.id})
|
||||
|
||||
|
||||
class ClubMembersListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
||||
class ClubMembersListView(ExportMixin, ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
||||
model = Membership
|
||||
table_class = MembershipTable
|
||||
template_name = "member/club_members.html"
|
||||
extra_context = {"title": _("Members of the club")}
|
||||
export_formats = ["csv"]
|
||||
|
||||
def get_queryset(self, **kwargs):
|
||||
qs = super().get_queryset().filter(club_id=self.kwargs["pk"])
|
||||
@@ -986,6 +988,14 @@ class ClubMembersListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableV
|
||||
|
||||
return qs.distinct()
|
||||
|
||||
def get_export_filename(self, export_format):
|
||||
return "members.csv"
|
||||
|
||||
def get_export_content_type(self, export_format):
|
||||
if export_format == "csv":
|
||||
return "text/csv"
|
||||
return super().get_export_content_type(export_format)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
club = Club.objects.filter(
|
||||
|
@@ -4702,6 +4702,22 @@
|
||||
"description": "Supprimer un succès"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "permission.permission",
|
||||
"pk": 330,
|
||||
"fields": {
|
||||
"model": [
|
||||
"auth",
|
||||
"user"
|
||||
],
|
||||
"query": "{\"memberships__club\": [\"club\"]}",
|
||||
"type": "view",
|
||||
"mask": 2,
|
||||
"field": "email",
|
||||
"permanent": false,
|
||||
"description": "Voir l'adresse mail des membres de son club"
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "permission.role",
|
||||
"pk": 1,
|
||||
@@ -4852,7 +4868,8 @@
|
||||
259,
|
||||
260,
|
||||
263,
|
||||
265
|
||||
265,
|
||||
330
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@@ -18,4 +18,5 @@ django-rest-polymorphic~=0.1.10
|
||||
django-tables2~=2.7.5
|
||||
python-memcached~=1.62
|
||||
phonenumbers~=9.0.8
|
||||
tablib~=3.8.0
|
||||
Pillow>=11.3.0
|
||||
|
Reference in New Issue
Block a user