1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2024-11-30 04:13:01 +00:00
nk20/apps/wei/tables.py

245 lines
7.1 KiB
Python
Raw Normal View History

# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
2020-04-11 21:02:12 +00:00
# SPDX-License-Identifier: GPL-3.0-or-later
from datetime import date
2020-04-11 21:02:12 +00:00
import django_tables2 as tables
from django.urls import reverse_lazy
from django.utils.html import format_html
2020-04-12 02:29:44 +00:00
from django.utils.translation import gettext_lazy as _
from django_tables2 import A
from note_kfet.middlewares import get_current_authenticated_user
from permission.backends import PermissionBackend
2020-08-06 10:50:24 +00:00
2020-04-13 19:16:52 +00:00
from .models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership
2020-04-11 21:02:12 +00:00
class WEITable(tables.Table):
"""
2020-04-12 02:29:44 +00:00
List all WEI.
2020-04-11 21:02:12 +00:00
"""
class Meta:
attrs = {
'class': 'table table-condensed table-striped table-hover'
}
model = WEIClub
template_name = 'django_tables2/bootstrap4.html'
fields = ('name', 'year', 'date_start', 'date_end',)
row_attrs = {
'class': 'table-row',
'id': lambda record: "row-" + str(record.pk),
2020-04-11 22:06:20 +00:00
'data-href': lambda record: reverse_lazy('wei:wei_detail', args=(record.pk,))
2020-04-11 21:02:12 +00:00
}
2020-04-12 02:29:44 +00:00
class WEIRegistrationTable(tables.Table):
"""
List all WEI registrations.
"""
user = tables.LinkColumn(
'member:user_detail',
args=[A('user__pk')],
2020-04-12 02:29:44 +00:00
)
edit = tables.LinkColumn(
2020-04-12 02:39:57 +00:00
'wei:wei_update_registration',
orderable=False,
2020-04-12 02:29:44 +00:00
args=[A('pk')],
verbose_name=_("Edit"),
text=_("Edit"),
attrs={
'a': {
'class': 'btn btn-warning',
'data-turbolinks': 'false',
2020-04-12 02:29:44 +00:00
}
}
)
validate = tables.Column(
2020-04-12 02:29:44 +00:00
verbose_name=_("Validate"),
orderable=False,
accessor=A('pk'),
2020-04-12 02:29:44 +00:00
attrs={
'th': {
'id': 'validate-membership-header'
2020-04-12 02:29:44 +00:00
}
}
)
delete = tables.LinkColumn(
2020-04-20 23:06:54 +00:00
'wei:wei_delete_registration',
2020-04-12 02:29:44 +00:00
args=[A('pk')],
orderable=False,
2020-04-12 02:29:44 +00:00
verbose_name=_("delete"),
text=_("Delete"),
attrs={
'th': {
'id': 'delete-membership-header'
},
2020-04-12 02:29:44 +00:00
'a': {
'class': 'btn btn-danger',
'data-type': 'delete-membership'
2020-04-12 02:29:44 +00:00
}
},
)
def render_validate(self, record):
2020-08-11 11:30:44 +00:00
hasperm = PermissionBackend.check_perm(
get_current_authenticated_user(), "wei.add_weimembership", WEIMembership(
club=record.wei,
user=record.user,
date_start=date.today(),
date_end=date.today(),
fee=0,
registration=record,
2020-08-11 11:30:44 +00:00
)
)
if not hasperm:
return format_html("<span class='no-perm'></span>")
url = reverse_lazy('wei:validate_registration', args=(record.pk,))
text = _('Validate')
if record.fee > record.user.note.balance:
btn_class = 'btn-secondary'
tooltip = _("The user does not have enough money.")
else:
btn_class = 'btn-success'
tooltip = _("The user has enough money, you can validate the registration.")
return format_html(f"<a class=\"btn {btn_class}\" data-type='validate-membership' data-toggle=\"tooltip\" "
f"title=\"{tooltip}\" href=\"{url}\">{text}</a>")
def render_delete(self, record):
2020-08-11 11:30:44 +00:00
hasperm = PermissionBackend.check_perm(get_current_authenticated_user(), "wei.delete_weimembership", record)
return _("Delete") if hasperm else format_html("<span class='no-perm'></span>")
2020-04-12 02:29:44 +00:00
class Meta:
attrs = {
'class': 'table table-condensed table-striped table-hover'
}
model = WEIRegistration
template_name = 'django_tables2/bootstrap4.html'
fields = ('user', 'user__first_name', 'user__last_name', 'first_year', 'caution_check',
'edit', 'validate', 'delete',)
2020-04-13 03:02:16 +00:00
row_attrs = {
'class': 'table-row',
'id': lambda record: "row-" + str(record.pk),
'data-href': lambda record: record.pk
}
2020-04-13 19:16:52 +00:00
class WEIMembershipTable(tables.Table):
2020-04-21 15:49:06 +00:00
user = tables.LinkColumn(
'wei:wei_update_registration',
args=[A('registration__pk')],
2020-04-21 15:49:06 +00:00
)
2020-04-23 16:28:16 +00:00
year = tables.Column(
accessor=A("pk"),
verbose_name=_("Year"),
)
2020-04-21 15:49:06 +00:00
bus = tables.LinkColumn(
'wei:manage_bus',
args=[A('bus__pk')],
2020-04-21 15:49:06 +00:00
)
team = tables.LinkColumn(
'wei:manage_bus_team',
args=[A('team__pk')],
2020-04-21 15:49:06 +00:00
)
2020-04-23 16:28:16 +00:00
def render_year(self, record):
return str(record.user.profile.ens_year) + "A"
2020-04-13 19:16:52 +00:00
class Meta:
attrs = {
'class': 'table table-condensed table-striped table-hover'
}
model = WEIMembership
template_name = 'django_tables2/bootstrap4.html'
fields = ('user', 'user__last_name', 'user__first_name', 'registration__gender', 'user__profile__department',
'year', 'bus', 'team', 'registration__caution_check', )
2020-04-13 19:16:52 +00:00
row_attrs = {
'class': 'table-row',
'id': lambda record: "row-" + str(record.pk),
}
2020-04-13 03:02:16 +00:00
class BusTable(tables.Table):
2020-04-13 19:16:52 +00:00
name = tables.LinkColumn(
'wei:manage_bus',
args=[A('pk')],
)
teams = tables.Column(
accessor=A("teams"),
verbose_name=_("Teams"),
attrs={
"td": {
"class": "text-truncate",
}
}
)
2020-04-23 16:28:16 +00:00
count = tables.Column(
verbose_name=_("Members count"),
)
2020-04-13 19:16:52 +00:00
def render_teams(self, value):
2020-07-25 16:18:53 +00:00
return ", ".join(team.name for team in value.order_by('name').all())
2020-04-13 19:16:52 +00:00
2020-04-23 16:28:16 +00:00
def render_count(self, value):
2020-07-25 16:26:18 +00:00
return str(value) + " " + (str(_("members")) if value > 1 else str(_("member")))
2020-04-23 16:28:16 +00:00
2020-04-13 03:02:16 +00:00
class Meta:
attrs = {
'class': 'table table-condensed table-striped table-hover'
}
model = Bus
template_name = 'django_tables2/bootstrap4.html'
2020-04-13 19:16:52 +00:00
fields = ('name', 'teams', )
2020-04-13 03:02:16 +00:00
row_attrs = {
'class': 'table-row',
'id': lambda record: "row-" + str(record.pk),
}
class BusTeamTable(tables.Table):
2020-04-13 19:16:52 +00:00
name = tables.LinkColumn(
'wei:manage_bus_team',
args=[A('pk')],
)
2020-04-13 03:02:16 +00:00
color = tables.Column(
attrs={
"td": {
2020-04-13 04:01:27 +00:00
"style": lambda record: "background-color: #{:06X}; color: #{:06X};"
.format(record.color, 0xFFFFFF - record.color, )
2020-04-13 03:02:16 +00:00
}
}
)
2020-04-23 16:28:16 +00:00
def render_count(self, value):
2020-07-25 16:26:18 +00:00
return str(value) + " " + (str(_("members")) if value > 1 else str(_("member")))
2020-04-23 16:28:16 +00:00
count = tables.Column(
verbose_name=_("Members count"),
)
2020-04-13 04:01:27 +00:00
def render_color(self, value):
return "#{:06X}".format(value)
2020-04-13 03:02:16 +00:00
class Meta:
attrs = {
'class': 'table table-condensed table-striped table-hover'
}
model = BusTeam
template_name = 'django_tables2/bootstrap4.html'
2020-04-13 04:01:27 +00:00
fields = ('name', 'color',)
2020-04-12 02:29:44 +00:00
row_attrs = {
'class': 'table-row',
'id': lambda record: "row-" + str(record.pk),
2020-04-13 19:16:52 +00:00
'data-href': lambda record: reverse_lazy('wei:manage_bus_team', args=(record.pk, ))
2020-04-12 02:29:44 +00:00
}