2020-04-11 21:02:12 +00:00
|
|
|
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
|
|
|
import django_tables2 as tables
|
|
|
|
from django.urls import reverse_lazy
|
2020-08-04 18:04:41 +00:00
|
|
|
from django.utils import timezone
|
|
|
|
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
|
2020-08-04 18:04:41 +00:00
|
|
|
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')],
|
|
|
|
)
|
|
|
|
|
|
|
|
edit = tables.LinkColumn(
|
2020-04-12 02:39:57 +00:00
|
|
|
'wei:wei_update_registration',
|
2020-04-12 02:29:44 +00:00
|
|
|
args=[A('pk')],
|
|
|
|
verbose_name=_("Edit"),
|
|
|
|
text=_("Edit"),
|
|
|
|
attrs={
|
|
|
|
'a': {
|
2020-08-09 13:31:38 +00:00
|
|
|
'class': 'btn btn-warning',
|
|
|
|
'data-turbolinks': 'false',
|
2020-04-12 02:29:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
validate = tables.LinkColumn(
|
2020-04-14 01:41:26 +00:00
|
|
|
'wei:validate_registration',
|
2020-04-12 02:29:44 +00:00
|
|
|
args=[A('pk')],
|
|
|
|
verbose_name=_("Validate"),
|
|
|
|
text=_("Validate"),
|
|
|
|
attrs={
|
2020-08-04 18:04:41 +00:00
|
|
|
'th': {
|
|
|
|
'id': 'validate-membership-header'
|
|
|
|
},
|
2020-04-12 02:29:44 +00:00
|
|
|
'a': {
|
2020-08-04 18:04:41 +00:00
|
|
|
'class': 'btn btn-success',
|
|
|
|
'data-type': 'validate-membership'
|
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')],
|
|
|
|
verbose_name=_("delete"),
|
|
|
|
text=_("Delete"),
|
|
|
|
attrs={
|
2020-08-04 18:04:41 +00:00
|
|
|
'th': {
|
|
|
|
'id': 'delete-membership-header'
|
|
|
|
},
|
2020-04-12 02:29:44 +00:00
|
|
|
'a': {
|
2020-08-04 18:04:41 +00:00
|
|
|
'class': 'btn btn-danger',
|
|
|
|
'data-type': 'delete-membership'
|
2020-04-12 02:29:44 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
2020-08-04 18:04:41 +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(
|
2020-08-04 18:04:41 +00:00
|
|
|
club=record.wei,
|
|
|
|
user=record.user,
|
|
|
|
date_start=timezone.now().date(),
|
|
|
|
date_end=timezone.now().date(),
|
|
|
|
fee=0,
|
|
|
|
registration=record,
|
2020-08-11 11:30:44 +00:00
|
|
|
)
|
|
|
|
)
|
|
|
|
return _("Validate") if hasperm else format_html("<span class='no-perm'></span>")
|
2020-08-04 18:04:41 +00:00
|
|
|
|
|
|
|
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-08-04 18:04:41 +00:00
|
|
|
|
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'
|
2020-04-21 15:49:06 +00:00
|
|
|
fields = ('user', 'user.first_name', 'user.last_name', 'first_year',)
|
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-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')],
|
|
|
|
)
|
|
|
|
|
|
|
|
team = tables.LinkColumn(
|
|
|
|
'wei:manage_bus_team',
|
2020-08-01 13:59:39 +00:00
|
|
|
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'
|
2020-04-23 16:28:16 +00:00
|
|
|
fields = ('user', 'user.last_name', 'user.first_name', 'registration.gender', 'user.profile.department',
|
|
|
|
'year', 'bus', 'team', )
|
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
|
|
|
}
|