# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later import json from django.contrib.auth.mixins import LoginRequiredMixin from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView from django.views.generic.list import ListView from django_tables2.views import MultiTableMixin from permission.backends import PermissionBackend from permission.views import ProtectQuerysetMixin from .models import Wrapped from .tables import WrappedTable class WrappedListView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin, ListView): """ Display all Wrapped, and classify by year """ model = Wrapped tables =[ lambda data: WrappedTable(data, prefix="public-"), lambda data: WrappedTable(data, prefix="personnal-"), ] template_name = 'wrapped/wrapped_list.html' extra_context = {'title': _("List of wrapped")} def get_queryset(self, **kwargs): return super().get_queryset(**kwargs).distinct() def get_tables_data(self): return [ Wrapped.objects.filter(public=True), Wrapped.objects .filter(PermissionBackend.filter_queryset(self.request, Wrapped, "change", field='public')) .distinct() .order_by("-bde__date_start") ] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) w = self.object_list.filter(note__noteclub__club__pk__gte=-1, public=False) if w: context['club_not_public'] = 'true' else: context['club_not_public'] = 'false' return context class WrappedDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): """ View a wrapped """ model = Wrapped template_name = 'wrapped/0/wrapped_view.html' # by default def get(self, *args, **kwargs): bde_id = Wrapped.objects.get(pk=kwargs['pk']).bde.id note_type = 'user' if 'user' in Wrapped.objects.get(pk=kwargs['pk']).note.__dir__() else 'club' self.template_name = 'wrapped/' + str(bde_id) + '/wrapped_view_' + note_type + '.html' return super().get(*args, **kwargs) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) d = json.loads(self.object.data_json) for key in d: context[key] = d[key] context['title'] = str(self.object) return context