mirror of
https://gitlab.crans.org/bde/nk20
synced 2024-11-26 18:37:12 +00:00
Compare commits
3 Commits
0e096ce7cc
...
4234383621
Author | SHA1 | Date | |
---|---|---|---|
|
4234383621 | ||
|
c7c6f0350f | ||
|
9d1024024b |
@ -23,19 +23,19 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
|||||||
<script>
|
<script>
|
||||||
var date_end = document.getElementById("id_date_end");
|
var date_end = document.getElementById("id_date_end");
|
||||||
var date_start = document.getElementById("id_date_start");
|
var date_start = document.getElementById("id_date_start");
|
||||||
|
|
||||||
function update_date_end (){
|
function update_date_end (){
|
||||||
if(date_end.value=="" || date_end.value<date_start.value){
|
if(date_end.value=="" || date_end.value<date_start.value){
|
||||||
date_end.value = date_start.value;
|
date_end.value = date_start.value;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function update_date_start (){
|
function update_date_start (){
|
||||||
if(date_start.value=="" || date_end.value<date_start.value){
|
if(date_start.value=="" || date_end.value<date_start.value){
|
||||||
date_start.value = date_end.value;
|
date_start.value = date_end.value;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
date_start.addEventListener('focusout', update_date_end);
|
date_start.addEventListener('focusout', update_date_end);
|
||||||
date_end.addEventListener('focusout', update_date_start);
|
date_end.addEventListener('focusout', update_date_start);
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ from django.views import View
|
|||||||
from django.views.decorators.cache import cache_page
|
from django.views.decorators.cache import cache_page
|
||||||
from django.views.generic import DetailView, TemplateView, UpdateView
|
from django.views.generic import DetailView, TemplateView, UpdateView
|
||||||
from django.views.generic.list import ListView
|
from django.views.generic.list import ListView
|
||||||
from django_tables2.views import MultiTableMixin
|
from django_tables2.views import MultiTableMixin, SingleTableMixin
|
||||||
from note.models import Alias, NoteSpecial, NoteUser
|
from note.models import Alias, NoteSpecial, NoteUser
|
||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
from permission.views import ProtectQuerysetMixin, ProtectedCreateView
|
from permission.views import ProtectQuerysetMixin, ProtectedCreateView
|
||||||
@ -63,19 +63,15 @@ class ActivityListView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin
|
|||||||
Displays all Activities, and classify if they are on-going or upcoming ones.
|
Displays all Activities, and classify if they are on-going or upcoming ones.
|
||||||
"""
|
"""
|
||||||
model = Activity
|
model = Activity
|
||||||
tables = [ActivityTable, ActivityTable]
|
tables = [
|
||||||
|
lambda data: ActivityTable(data, prefix="all-"),
|
||||||
|
lambda data: ActivityTable(data, prefix="upcoming-"),
|
||||||
|
]
|
||||||
extra_context = {"title": _("Activities")}
|
extra_context = {"title": _("Activities")}
|
||||||
|
|
||||||
def get_queryset(self, **kwargs):
|
def get_queryset(self, **kwargs):
|
||||||
return super().get_queryset(**kwargs).distinct()
|
return super().get_queryset(**kwargs).distinct()
|
||||||
|
|
||||||
def get_tables(self):
|
|
||||||
tables = super().get_tables()
|
|
||||||
|
|
||||||
tables[0].prefix = "all-"
|
|
||||||
tables[1].prefix = "upcoming-"
|
|
||||||
return tables
|
|
||||||
|
|
||||||
def get_tables_data(self):
|
def get_tables_data(self):
|
||||||
# first table = all activities, second table = upcoming
|
# first table = all activities, second table = upcoming
|
||||||
return [
|
return [
|
||||||
@ -99,7 +95,7 @@ class ActivityListView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class ActivityDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
class ActivityDetailView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableMixin, DetailView):
|
||||||
"""
|
"""
|
||||||
Shows details about one activity. Add guest to context
|
Shows details about one activity. Add guest to context
|
||||||
"""
|
"""
|
||||||
@ -107,13 +103,16 @@ class ActivityDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
context_object_name = "activity"
|
context_object_name = "activity"
|
||||||
extra_context = {"title": _("Activity detail")}
|
extra_context = {"title": _("Activity detail")}
|
||||||
|
|
||||||
|
table_class = GuestTable
|
||||||
|
context_table_name = "guests"
|
||||||
|
|
||||||
|
def get_table_data(self):
|
||||||
|
return Guest.objects.filter(activity=self.object) \
|
||||||
|
.filter(PermissionBackend.filter_queryset(self.request, Guest, "view"))
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data()
|
context = super().get_context_data()
|
||||||
|
|
||||||
table = GuestTable(data=Guest.objects.filter(activity=self.object)
|
|
||||||
.filter(PermissionBackend.filter_queryset(self.request, Guest, "view")))
|
|
||||||
context["guests"] = table
|
|
||||||
|
|
||||||
context["activity_started"] = timezone.now() > timezone.localtime(self.object.date_start)
|
context["activity_started"] = timezone.now() > timezone.localtime(self.object.date_start)
|
||||||
|
|
||||||
return context
|
return context
|
||||||
@ -172,12 +171,14 @@ class ActivityInviteView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||||||
return reverse_lazy('activity:activity_detail', kwargs={"pk": self.kwargs["pk"]})
|
return reverse_lazy('activity:activity_detail', kwargs={"pk": self.kwargs["pk"]})
|
||||||
|
|
||||||
|
|
||||||
class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
class ActivityEntryView(LoginRequiredMixin, SingleTableMixin, TemplateView):
|
||||||
"""
|
"""
|
||||||
Manages entry to an activity
|
Manages entry to an activity
|
||||||
"""
|
"""
|
||||||
template_name = "activity/activity_entry.html"
|
template_name = "activity/activity_entry.html"
|
||||||
|
|
||||||
|
table_class = EntryTable
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Don't display the entry interface if the user has no right to see it (no right to add an entry for itself),
|
Don't display the entry interface if the user has no right to see it (no right to add an entry for itself),
|
||||||
@ -266,15 +267,9 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
|||||||
if settings.DATABASES[note_qs.db]["ENGINE"] == 'django.db.backends.postgresql' else note_qs.distinct()[:20]
|
if settings.DATABASES[note_qs.db]["ENGINE"] == 'django.db.backends.postgresql' else note_qs.distinct()[:20]
|
||||||
return note_qs
|
return note_qs
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_table_data(self):
|
||||||
"""
|
|
||||||
Query the list of Guest and Note to the activity and add information to makes entry with JS.
|
|
||||||
"""
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
|
|
||||||
activity = Activity.objects.filter(PermissionBackend.filter_queryset(self.request, Activity, "view"))\
|
activity = Activity.objects.filter(PermissionBackend.filter_queryset(self.request, Activity, "view"))\
|
||||||
.distinct().get(pk=self.kwargs["pk"])
|
.distinct().get(pk=self.kwargs["pk"])
|
||||||
context["activity"] = activity
|
|
||||||
|
|
||||||
matched = []
|
matched = []
|
||||||
|
|
||||||
@ -287,8 +282,17 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView):
|
|||||||
note.activity = activity
|
note.activity = activity
|
||||||
matched.append(note)
|
matched.append(note)
|
||||||
|
|
||||||
table = EntryTable(data=matched)
|
return matched
|
||||||
context["table"] = table
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
"""
|
||||||
|
Query the list of Guest and Note to the activity and add information to makes entry with JS.
|
||||||
|
"""
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
activity = Activity.objects.filter(PermissionBackend.filter_queryset(self.request, Activity, "view"))\
|
||||||
|
.distinct().get(pk=self.kwargs["pk"])
|
||||||
|
context["activity"] = activity
|
||||||
|
|
||||||
context["entries"] = Entry.objects.filter(activity=activity)
|
context["entries"] = Entry.objects.filter(activity=activity)
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ from django.utils import timezone
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import DetailView, UpdateView, TemplateView
|
from django.views.generic import DetailView, UpdateView, TemplateView
|
||||||
from django.views.generic.edit import FormMixin
|
from django.views.generic.edit import FormMixin
|
||||||
from django_tables2.views import SingleTableView
|
from django_tables2.views import MultiTableMixin, SingleTableMixin, SingleTableView
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
from note.models import Alias, NoteClub, NoteUser, Trust
|
from note.models import Alias, NoteClub, NoteUser, Trust
|
||||||
from note.models.transactions import Transaction, SpecialTransaction
|
from note.models.transactions import Transaction, SpecialTransaction
|
||||||
@ -165,7 +165,8 @@ class UserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
# Display only the most recent membership
|
# Display only the most recent membership
|
||||||
club_list = club_list.distinct("club__name")\
|
club_list = club_list.distinct("club__name")\
|
||||||
if settings.DATABASES["default"]["ENGINE"] == 'django.db.backends.postgresql' else club_list
|
if settings.DATABASES["default"]["ENGINE"] == 'django.db.backends.postgresql' else club_list
|
||||||
membership_table = MembershipTable(data=club_list, prefix='membership-')
|
club_list_order_by = self.request.GET.getlist("membership-sort", ("club__name", "-date_start"))
|
||||||
|
membership_table = MembershipTable(data=club_list, prefix='membership-', order_by=club_list_order_by)
|
||||||
membership_table.paginate(per_page=10, page=self.request.GET.get("membership-page", 1))
|
membership_table.paginate(per_page=10, page=self.request.GET.get("membership-page", 1))
|
||||||
context['club_list'] = membership_table
|
context['club_list'] = membership_table
|
||||||
|
|
||||||
@ -243,7 +244,7 @@ class UserListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class ProfileTrustView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
class ProfileTrustView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin, DetailView):
|
||||||
"""
|
"""
|
||||||
View and manage user trust relationships
|
View and manage user trust relationships
|
||||||
"""
|
"""
|
||||||
@ -252,13 +253,25 @@ class ProfileTrustView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
context_object_name = 'user_object'
|
context_object_name = 'user_object'
|
||||||
extra_context = {"title": _("Note friendships")}
|
extra_context = {"title": _("Note friendships")}
|
||||||
|
|
||||||
|
tables = [
|
||||||
|
lambda data: TrustTable(data, prefix="trust-"),
|
||||||
|
lambda data: TrustedTable(data, prefix="trusted-"),
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_tables_data(self):
|
||||||
|
note = self.object.note
|
||||||
|
return [
|
||||||
|
note.trusting.filter(PermissionBackend.filter_queryset(self.request, Trust, "view")).distinct(),
|
||||||
|
note.trusted.filter(PermissionBackend.filter_queryset(self.request, Trust, "view")).distinct(),
|
||||||
|
]
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
note = context['object'].note
|
|
||||||
context["trusting"] = TrustTable(
|
tables = context["tables"]
|
||||||
note.trusting.filter(PermissionBackend.filter_queryset(self.request, Trust, "view")).distinct().all())
|
for name, table in zip(["trusting", "trusted_by"], tables):
|
||||||
context["trusted_by"] = TrustedTable(
|
context[name] = table
|
||||||
note.trusted.filter(PermissionBackend.filter_queryset(self.request, Trust, "view")).distinct().all())
|
|
||||||
context["can_create"] = PermissionBackend.check_perm(self.request, "note.add_trust", Trust(
|
context["can_create"] = PermissionBackend.check_perm(self.request, "note.add_trust", Trust(
|
||||||
trusting=context["object"].note,
|
trusting=context["object"].note,
|
||||||
trusted=context["object"].note
|
trusted=context["object"].note
|
||||||
@ -277,7 +290,7 @@ class ProfileTrustView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class ProfileAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
class ProfileAliasView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableMixin, DetailView):
|
||||||
"""
|
"""
|
||||||
View and manage user aliases.
|
View and manage user aliases.
|
||||||
"""
|
"""
|
||||||
@ -286,12 +299,15 @@ class ProfileAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
context_object_name = 'user_object'
|
context_object_name = 'user_object'
|
||||||
extra_context = {"title": _("Note aliases")}
|
extra_context = {"title": _("Note aliases")}
|
||||||
|
|
||||||
|
table_class = AliasTable
|
||||||
|
context_table_name = "aliases"
|
||||||
|
|
||||||
|
def get_table_data(self):
|
||||||
|
return self.object.note.alias.filter(PermissionBackend.filter_queryset(self.request, Alias, "view")).distinct() \
|
||||||
|
.order_by('normalized_name')
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
note = context['object'].note
|
|
||||||
context["aliases"] = AliasTable(
|
|
||||||
note.alias.filter(PermissionBackend.filter_queryset(self.request, Alias, "view")).distinct()
|
|
||||||
.order_by('normalized_name').all())
|
|
||||||
context["can_create"] = PermissionBackend.check_perm(self.request, "note.add_alias", Alias(
|
context["can_create"] = PermissionBackend.check_perm(self.request, "note.add_alias", Alias(
|
||||||
note=context["object"].note,
|
note=context["object"].note,
|
||||||
name="",
|
name="",
|
||||||
@ -451,7 +467,8 @@ class ClubDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
managers = Membership.objects.filter(club=self.object, roles__name="Bureau de club",
|
managers = Membership.objects.filter(club=self.object, roles__name="Bureau de club",
|
||||||
date_start__lte=date.today(), date_end__gte=date.today())\
|
date_start__lte=date.today(), date_end__gte=date.today())\
|
||||||
.order_by('user__last_name').all()
|
.order_by('user__last_name').all()
|
||||||
context["managers"] = ClubManagerTable(data=managers, prefix="managers-")
|
managers_order_by = self.request.GET.getlist("managers-sort", ('user__last_name'))
|
||||||
|
context["managers"] = ClubManagerTable(data=managers, prefix="managers-", order_by=managers_order_by)
|
||||||
# transaction history
|
# transaction history
|
||||||
club_transactions = Transaction.objects.all().filter(Q(source=club.note) | Q(destination=club.note))\
|
club_transactions = Transaction.objects.all().filter(Q(source=club.note) | Q(destination=club.note))\
|
||||||
.filter(PermissionBackend.filter_queryset(self.request, Transaction, "view"))\
|
.filter(PermissionBackend.filter_queryset(self.request, Transaction, "view"))\
|
||||||
@ -469,7 +486,8 @@ class ClubDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
club_member = club_member.distinct("user__username")\
|
club_member = club_member.distinct("user__username")\
|
||||||
if settings.DATABASES["default"]["ENGINE"] == 'django.db.backends.postgresql' else club_member
|
if settings.DATABASES["default"]["ENGINE"] == 'django.db.backends.postgresql' else club_member
|
||||||
|
|
||||||
membership_table = MembershipTable(data=club_member, prefix="membership-")
|
membership_order_by = self.request.GET.getlist("membership-sort", ("user__username", "-date_start"))
|
||||||
|
membership_table = MembershipTable(data=club_member, prefix="membership-", order_by=membership_order_by)
|
||||||
membership_table.paginate(per_page=5, page=self.request.GET.get('membership-page', 1))
|
membership_table.paginate(per_page=5, page=self.request.GET.get('membership-page', 1))
|
||||||
context['member_list'] = membership_table
|
context['member_list'] = membership_table
|
||||||
|
|
||||||
@ -510,7 +528,7 @@ class ClubDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class ClubAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
class ClubAliasView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableMixin, DetailView):
|
||||||
"""
|
"""
|
||||||
Manage aliases of a club.
|
Manage aliases of a club.
|
||||||
"""
|
"""
|
||||||
@ -519,11 +537,16 @@ class ClubAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
context_object_name = 'club'
|
context_object_name = 'club'
|
||||||
extra_context = {"title": _("Note aliases")}
|
extra_context = {"title": _("Note aliases")}
|
||||||
|
|
||||||
|
table_class = AliasTable
|
||||||
|
context_table_name = "aliases"
|
||||||
|
|
||||||
|
def get_table_data(self):
|
||||||
|
return self.object.note.alias.filter(
|
||||||
|
PermissionBackend.filter_queryset(self.request, Alias, "view")).distinct()
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
note = context['object'].note
|
|
||||||
context["aliases"] = AliasTable(note.alias.filter(
|
|
||||||
PermissionBackend.filter_queryset(self.request, Alias, "view")).distinct().all())
|
|
||||||
context["can_create"] = PermissionBackend.check_perm(self.request, "note.add_alias", Alias(
|
context["can_create"] = PermissionBackend.check_perm(self.request, "note.add_alias", Alias(
|
||||||
note=context["object"].note,
|
note=context["object"].note,
|
||||||
name="",
|
name="",
|
||||||
|
@ -12,6 +12,7 @@ from django.forms import HiddenInput
|
|||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import UpdateView, TemplateView, CreateView
|
from django.views.generic import UpdateView, TemplateView, CreateView
|
||||||
|
from django_tables2 import MultiTableMixin
|
||||||
from member.models import Membership
|
from member.models import Membership
|
||||||
|
|
||||||
from .backends import PermissionBackend
|
from .backends import PermissionBackend
|
||||||
@ -107,10 +108,31 @@ class ProtectedCreateView(LoginRequiredMixin, CreateView):
|
|||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class RightsView(TemplateView):
|
class RightsView(MultiTableMixin, TemplateView):
|
||||||
template_name = "permission/all_rights.html"
|
template_name = "permission/all_rights.html"
|
||||||
extra_context = {"title": _("Rights")}
|
extra_context = {"title": _("Rights")}
|
||||||
|
|
||||||
|
tables = [
|
||||||
|
lambda data: RightsTable(data, prefix="clubs-"),
|
||||||
|
lambda data: SuperuserTable(data, prefix="superusers-"),
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_tables_data(self):
|
||||||
|
special_memberships = Membership.objects.filter(
|
||||||
|
date_start__lte=date.today(),
|
||||||
|
date_end__gte=date.today(),
|
||||||
|
).filter(roles__in=Role.objects.filter((~(Q(name="Adhérent BDE")
|
||||||
|
| Q(name="Adhérent Kfet")
|
||||||
|
| Q(name="Membre de club")
|
||||||
|
| Q(name="Bureau de club"))
|
||||||
|
& Q(weirole__isnull=True))))\
|
||||||
|
.order_by("club__name", "user__last_name")\
|
||||||
|
.distinct().all()
|
||||||
|
return [
|
||||||
|
special_memberships,
|
||||||
|
User.objects.filter(is_superuser=True).order_by("last_name"),
|
||||||
|
]
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
@ -128,19 +150,9 @@ class RightsView(TemplateView):
|
|||||||
role.clubs = [membership.club for membership in active_memberships if role in membership.roles.all()]
|
role.clubs = [membership.club for membership in active_memberships if role in membership.roles.all()]
|
||||||
|
|
||||||
if self.request.user.is_authenticated:
|
if self.request.user.is_authenticated:
|
||||||
special_memberships = Membership.objects.filter(
|
tables = context["tables"]
|
||||||
date_start__lte=date.today(),
|
for name, table in zip(["special_memberships_table", "superusers"], tables):
|
||||||
date_end__gte=date.today(),
|
context[name] = table
|
||||||
).filter(roles__in=Role.objects.filter((~(Q(name="Adhérent BDE")
|
|
||||||
| Q(name="Adhérent Kfet")
|
|
||||||
| Q(name="Membre de club")
|
|
||||||
| Q(name="Bureau de club"))
|
|
||||||
& Q(weirole__isnull=True))))\
|
|
||||||
.order_by("club__name", "user__last_name")\
|
|
||||||
.distinct().all()
|
|
||||||
context["special_memberships_table"] = RightsTable(special_memberships, prefix="clubs-")
|
|
||||||
context["superusers"] = SuperuserTable(User.objects.filter(is_superuser=True).order_by("last_name").all(),
|
|
||||||
prefix="superusers-")
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
from django.views.generic import UpdateView, DetailView
|
from django.views.generic import UpdateView, DetailView
|
||||||
from django.views.generic.base import View, TemplateView
|
from django.views.generic.base import View, TemplateView
|
||||||
from django.views.generic.edit import BaseFormView, DeleteView
|
from django.views.generic.edit import BaseFormView, DeleteView
|
||||||
from django_tables2 import SingleTableView
|
from django_tables2 import MultiTableMixin, SingleTableMixin, SingleTableView
|
||||||
from note.models import SpecialTransaction, NoteSpecial, Alias
|
from note.models import SpecialTransaction, NoteSpecial, Alias
|
||||||
from note_kfet.settings.base import BASE_DIR
|
from note_kfet.settings.base import BASE_DIR
|
||||||
from permission.backends import PermissionBackend
|
from permission.backends import PermissionBackend
|
||||||
@ -251,21 +251,26 @@ class RemittanceCreateView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
context["table"] = RemittanceTable(
|
|
||||||
data=Remittance.objects.filter(
|
|
||||||
PermissionBackend.filter_queryset(self.request, Remittance, "view")).all())
|
|
||||||
context["special_transactions"] = SpecialTransactionTable(data=SpecialTransaction.objects.none())
|
context["special_transactions"] = SpecialTransactionTable(data=SpecialTransaction.objects.none())
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class RemittanceListView(LoginRequiredMixin, TemplateView):
|
class RemittanceListView(LoginRequiredMixin, MultiTableMixin, TemplateView):
|
||||||
"""
|
"""
|
||||||
List existing Remittances
|
List existing Remittances
|
||||||
"""
|
"""
|
||||||
template_name = "treasury/remittance_list.html"
|
template_name = "treasury/remittance_list.html"
|
||||||
extra_context = {"title": _("Remittances list")}
|
extra_context = {"title": _("Remittances list")}
|
||||||
|
|
||||||
|
tables = [
|
||||||
|
lambda data: RemittanceTable(data, prefix="opened-remittances-"),
|
||||||
|
lambda data: RemittanceTable(data, prefix="closed-remittances-"),
|
||||||
|
lambda data: SpecialTransactionTable(data, prefix="no-remittance-", exclude=('remittance_remove', )),
|
||||||
|
lambda data: SpecialTransactionTable(data, prefix="with-remittance-", exclude=('remittance_add', )),
|
||||||
|
]
|
||||||
|
paginate_by = 10 # number of rows in tables
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
# Check that the user is authenticated
|
# Check that the user is authenticated
|
||||||
if not request.user.is_authenticated:
|
if not request.user.is_authenticated:
|
||||||
@ -275,49 +280,37 @@ class RemittanceListView(LoginRequiredMixin, TemplateView):
|
|||||||
raise PermissionDenied(_("You are not able to see the treasury interface."))
|
raise PermissionDenied(_("You are not able to see the treasury interface."))
|
||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def get_tables_data(self):
|
||||||
|
return [
|
||||||
|
Remittance.objects.filter(closed=False).filter(
|
||||||
|
PermissionBackend.filter_queryset(self.request, Remittance, "view")),
|
||||||
|
Remittance.objects.filter(closed=True).filter(
|
||||||
|
PermissionBackend.filter_queryset(self.request, Remittance, "view")),
|
||||||
|
SpecialTransaction.objects.filter(source__in=NoteSpecial.objects.filter(~Q(remittancetype=None)),
|
||||||
|
specialtransactionproxy__remittance=None).filter(
|
||||||
|
PermissionBackend.filter_queryset(self.request, Remittance, "view")),
|
||||||
|
SpecialTransaction.objects.filter(source__in=NoteSpecial.objects.filter(~Q(remittancetype=None)),
|
||||||
|
specialtransactionproxy__remittance__closed=False).filter(
|
||||||
|
PermissionBackend.filter_queryset(self.request, Remittance, "view")),
|
||||||
|
]
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
opened_remittances = RemittanceTable(
|
tables = context["tables"]
|
||||||
data=Remittance.objects.filter(closed=False).filter(
|
names = [
|
||||||
PermissionBackend.filter_queryset(self.request, Remittance, "view")).all(),
|
"opened_remittances",
|
||||||
prefix="opened-remittances-",
|
"closed_remittances",
|
||||||
)
|
"special_transactions_no_remittance",
|
||||||
opened_remittances.paginate(page=self.request.GET.get("opened-remittances-page", 1), per_page=10)
|
"special_transactions_with_remittance",
|
||||||
context["opened_remittances"] = opened_remittances
|
]
|
||||||
|
for name, table in zip(names, tables):
|
||||||
closed_remittances = RemittanceTable(
|
context[name] = table
|
||||||
data=Remittance.objects.filter(closed=True).filter(
|
|
||||||
PermissionBackend.filter_queryset(self.request, Remittance, "view")).all(),
|
|
||||||
prefix="closed-remittances-",
|
|
||||||
)
|
|
||||||
closed_remittances.paginate(page=self.request.GET.get("closed-remittances-page", 1), per_page=10)
|
|
||||||
context["closed_remittances"] = closed_remittances
|
|
||||||
|
|
||||||
no_remittance_tr = SpecialTransactionTable(
|
|
||||||
data=SpecialTransaction.objects.filter(source__in=NoteSpecial.objects.filter(~Q(remittancetype=None)),
|
|
||||||
specialtransactionproxy__remittance=None).filter(
|
|
||||||
PermissionBackend.filter_queryset(self.request, Remittance, "view")).all(),
|
|
||||||
exclude=('remittance_remove', ),
|
|
||||||
prefix="no-remittance-",
|
|
||||||
)
|
|
||||||
no_remittance_tr.paginate(page=self.request.GET.get("no-remittance-page", 1), per_page=10)
|
|
||||||
context["special_transactions_no_remittance"] = no_remittance_tr
|
|
||||||
|
|
||||||
with_remittance_tr = SpecialTransactionTable(
|
|
||||||
data=SpecialTransaction.objects.filter(source__in=NoteSpecial.objects.filter(~Q(remittancetype=None)),
|
|
||||||
specialtransactionproxy__remittance__closed=False).filter(
|
|
||||||
PermissionBackend.filter_queryset(self.request, Remittance, "view")).all(),
|
|
||||||
exclude=('remittance_add', ),
|
|
||||||
prefix="with-remittance-",
|
|
||||||
)
|
|
||||||
with_remittance_tr.paginate(page=self.request.GET.get("with-remittance-page", 1), per_page=10)
|
|
||||||
context["special_transactions_with_remittance"] = with_remittance_tr
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class RemittanceUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
class RemittanceUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableMixin, UpdateView):
|
||||||
"""
|
"""
|
||||||
Update Remittance
|
Update Remittance
|
||||||
"""
|
"""
|
||||||
@ -325,19 +318,18 @@ class RemittanceUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView)
|
|||||||
form_class = RemittanceForm
|
form_class = RemittanceForm
|
||||||
extra_context = {"title": _("Update a remittance")}
|
extra_context = {"title": _("Update a remittance")}
|
||||||
|
|
||||||
|
table_class = SpecialTransactionTable
|
||||||
|
context_table_name = "special_transactions"
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse_lazy('treasury:remittance_list')
|
return reverse_lazy('treasury:remittance_list')
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_table_data(self):
|
||||||
context = super().get_context_data(**kwargs)
|
return SpecialTransaction.objects.filter(specialtransactionproxy__remittance=self.object).filter(
|
||||||
|
PermissionBackend.filter_queryset(self.request, Remittance, "view"))
|
||||||
|
|
||||||
data = SpecialTransaction.objects.filter(specialtransactionproxy__remittance=self.object).filter(
|
def get_table_kwargs(self):
|
||||||
PermissionBackend.filter_queryset(self.request, Remittance, "view")).all()
|
return {"exclude": ('remittance_add', 'remittance_remove', ) if self.object.closed else ('remittance_add', )}
|
||||||
context["special_transactions"] = SpecialTransactionTable(
|
|
||||||
data=data,
|
|
||||||
exclude=('remittance_add', 'remittance_remove', ) if self.object.closed else ('remittance_add', ))
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
class LinkTransactionToRemittanceView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
class LinkTransactionToRemittanceView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
||||||
|
@ -22,7 +22,7 @@ from django.views import View
|
|||||||
from django.views.generic import DetailView, UpdateView, RedirectView, TemplateView
|
from django.views.generic import DetailView, UpdateView, RedirectView, TemplateView
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic.edit import BaseFormView, DeleteView
|
from django.views.generic.edit import BaseFormView, DeleteView
|
||||||
from django_tables2 import SingleTableView
|
from django_tables2 import SingleTableView, MultiTableMixin
|
||||||
from member.models import Membership, Club
|
from member.models import Membership, Club
|
||||||
from note.models import Transaction, NoteClub, Alias, SpecialTransaction, NoteSpecial
|
from note.models import Transaction, NoteClub, Alias, SpecialTransaction, NoteSpecial
|
||||||
from note.tables import HistoryTable
|
from note.tables import HistoryTable
|
||||||
@ -100,7 +100,7 @@ class WEICreateView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||||||
return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.pk})
|
return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.pk})
|
||||||
|
|
||||||
|
|
||||||
class WEIDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
class WEIDetailView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin, DetailView):
|
||||||
"""
|
"""
|
||||||
View WEI information
|
View WEI information
|
||||||
"""
|
"""
|
||||||
@ -108,34 +108,40 @@ class WEIDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
context_object_name = "club"
|
context_object_name = "club"
|
||||||
extra_context = {"title": _("WEI Detail")}
|
extra_context = {"title": _("WEI Detail")}
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
tables = [
|
||||||
context = super().get_context_data(**kwargs)
|
lambda data: HistoryTable(data, prefix="history-"),
|
||||||
|
lambda data: WEIMembershipTable(data, prefix="membership-"),
|
||||||
club = context["club"]
|
lambda data: WEIRegistrationTable(data, prefix="pre-registration-"),
|
||||||
|
lambda data: BusTable(data, prefix="bus-"),
|
||||||
|
]
|
||||||
|
paginate_by = 20 # number of rows in tables
|
||||||
|
|
||||||
|
def get_tables_data(self):
|
||||||
|
club = self.object
|
||||||
club_transactions = Transaction.objects.all().filter(Q(source=club.note) | Q(destination=club.note)) \
|
club_transactions = Transaction.objects.all().filter(Q(source=club.note) | Q(destination=club.note)) \
|
||||||
.filter(PermissionBackend.filter_queryset(self.request, Transaction, "view")) \
|
.filter(PermissionBackend.filter_queryset(self.request, Transaction, "view")) \
|
||||||
.order_by('-created_at', '-id')
|
.order_by('-created_at', '-id')
|
||||||
history_table = HistoryTable(club_transactions, prefix="history-")
|
|
||||||
history_table.paginate(per_page=20, page=self.request.GET.get('history-page', 1))
|
|
||||||
context['history_list'] = history_table
|
|
||||||
|
|
||||||
club_member = WEIMembership.objects.filter(
|
club_member = WEIMembership.objects.filter(
|
||||||
club=club,
|
club=club,
|
||||||
date_end__gte=date.today(),
|
date_end__gte=date.today(),
|
||||||
).filter(PermissionBackend.filter_queryset(self.request, WEIMembership, "view"))
|
).filter(PermissionBackend.filter_queryset(self.request, WEIMembership, "view"))
|
||||||
membership_table = WEIMembershipTable(data=club_member, prefix="membership-")
|
|
||||||
membership_table.paginate(per_page=20, page=self.request.GET.get('membership-page', 1))
|
|
||||||
context['member_list'] = membership_table
|
|
||||||
|
|
||||||
pre_registrations = WEIRegistration.objects.filter(
|
pre_registrations = WEIRegistration.objects.filter(
|
||||||
PermissionBackend.filter_queryset(self.request, WEIRegistration, "view")).filter(
|
PermissionBackend.filter_queryset(self.request, WEIRegistration, "view")).filter(
|
||||||
membership=None,
|
membership=None,
|
||||||
wei=club
|
wei=club
|
||||||
)
|
)
|
||||||
pre_registrations_table = WEIRegistrationTable(data=pre_registrations, prefix="pre-registration-")
|
buses = Bus.objects.filter(PermissionBackend.filter_queryset(self.request, Bus, "view")) \
|
||||||
pre_registrations_table.paginate(per_page=20, page=self.request.GET.get('pre-registration-page', 1))
|
.filter(wei=self.object).annotate(count=Count("memberships")).order_by("name")
|
||||||
context['pre_registrations'] = pre_registrations_table
|
return [club_transactions, club_member, pre_registrations, buses, ]
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
|
club = context["club"]
|
||||||
|
|
||||||
|
tables = context["tables"]
|
||||||
|
for name, table in zip(["history_list", "member_list", "pre_registrations", "buses"], tables):
|
||||||
|
context[name] = table
|
||||||
|
|
||||||
my_registration = WEIRegistration.objects.filter(wei=club, user=self.request.user)
|
my_registration = WEIRegistration.objects.filter(wei=club, user=self.request.user)
|
||||||
if my_registration.exists():
|
if my_registration.exists():
|
||||||
@ -144,11 +150,6 @@ class WEIDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
|
|||||||
my_registration = None
|
my_registration = None
|
||||||
context["my_registration"] = my_registration
|
context["my_registration"] = my_registration
|
||||||
|
|
||||||
buses = Bus.objects.filter(PermissionBackend.filter_queryset(self.request, Bus, "view")) \
|
|
||||||
.filter(wei=self.object).annotate(count=Count("memberships")).order_by("name")
|
|
||||||
bus_table = BusTable(data=buses, prefix="bus-")
|
|
||||||
context['buses'] = bus_table
|
|
||||||
|
|
||||||
random_user = User.objects.filter(~Q(wei__wei__in=[club])).first()
|
random_user = User.objects.filter(~Q(wei__wei__in=[club])).first()
|
||||||
|
|
||||||
if random_user is None:
|
if random_user is None:
|
||||||
|
Loading…
Reference in New Issue
Block a user