diff --git a/participation/admin.py b/participation/admin.py index 86ad076..bca9d07 100644 --- a/participation/admin.py +++ b/participation/admin.py @@ -1,7 +1,9 @@ # Copyright (C) 2020 by Animath # SPDX-License-Identifier: GPL-3.0-or-later +from django.conf import settings from django.contrib import admin +from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ from .models import Note, Participation, Passage, Pool, Solution, Team, Tournament, Tweak, WrittenReview @@ -51,9 +53,14 @@ class PassageInline(admin.TabularInline): model = Passage extra = 0 ordering = ('position',) - autocomplete_fields = ('reporter', 'opponent', 'reviewer', 'observer',) show_change_link = True + def get_autocomplete_fields(self, request: HttpRequest) -> tuple[str]: + fields = ('reporter', 'opponent', 'reviewer',) + if settings.HAS_OBSERVER: + fields += ('observer',) + return fields + class NoteInline(admin.TabularInline): model = Note @@ -113,12 +120,9 @@ class PoolAdmin(admin.ModelAdmin): @admin.register(Passage) class PassageAdmin(admin.ModelAdmin): - list_display = ('__str__', 'reporter_trigram', 'solution_number', 'opponent_trigram', 'reviewer_trigram', - 'observer_trigram', 'pool_abbr', 'position', 'tournament') list_filter = ('pool__tournament', 'pool__round', 'pool__letter', 'solution_number',) search_fields = ('pool__participations__team__name', 'pool__participations__team__trigram',) ordering = ('pool__tournament', 'pool__round', 'pool__letter', 'position',) - autocomplete_fields = ('pool', 'reporter', 'opponent', 'reviewer', 'observer',) inlines = (NoteInline,) @admin.display(description=_("reporter"), ordering='reporter__team__trigram') @@ -135,7 +139,7 @@ class PassageAdmin(admin.ModelAdmin): @admin.display(description=_("observer"), ordering='observer__team__trigram') def observer_trigram(self, record: Passage): - return record.observer.team.trigram + return record.observer.team.trigram if record.observer else None @admin.display(description=_("pool"), ordering='pool__letter') def pool_abbr(self, record): @@ -145,15 +149,23 @@ class PassageAdmin(admin.ModelAdmin): def tournament(self, record: Passage): return record.pool.tournament + def get_list_display(self, request: HttpRequest) -> tuple[str]: + if settings.HAS_OBSERVER: + return ('__str__', 'reporter_trigram', 'solution_number', 'opponent_trigram', + 'reviewer_trigram', 'observer_trigram', 'pool_abbr', 'position', 'tournament') + else: + return ('__str__', 'reporter_trigram', 'solution_number', 'opponent_trigram', + 'reviewer_trigram', 'pool_abbr', 'position', 'tournament') + + def get_autocomplete_fields(self, request: HttpRequest) -> tuple[str]: + fields = ('pool', 'reporter', 'opponent', 'reviewer',) + if settings.HAS_OBSERVER: + fields += ('observer',) + return fields + @admin.register(Note) class NoteAdmin(admin.ModelAdmin): - list_display = ('passage', 'pool', 'jury', 'reporter_writing', 'reporter_oral', - 'opponent_writing', 'opponent_oral', 'reviewer_writing', 'reviewer_oral', - 'observer_writing', 'observer_oral',) - list_filter = ('passage__pool__letter', 'passage__solution_number', 'jury', - 'reporter_writing', 'reporter_oral', 'opponent_writing', 'opponent_oral', - 'reviewer_writing', 'reviewer_oral', 'observer_writing', 'observer_oral') search_fields = ('jury__user__last_name', 'jury__user__first_name', 'passage__reporter__team__trigram',) autocomplete_fields = ('jury', 'passage',) @@ -161,6 +173,21 @@ class NoteAdmin(admin.ModelAdmin): def pool(self, record): return record.passage.pool.short_name + def get_list_display(self, request: HttpRequest) -> tuple[str]: + fields = ('passage', 'pool', 'jury', 'reporter_writing', 'reporter_oral', + 'opponent_writing', 'opponent_oral', 'reviewer_writing', 'reviewer_oral',) + if settings.HAS_OBSERVER: + fields += ('observer_writing', 'observer_oral',) + return fields + + def get_list_filter(self, request: HttpRequest) -> tuple[str]: + fields = ('passage__pool__letter', 'passage__solution_number', 'jury', + 'reporter_writing', 'reporter_oral', 'opponent_writing', 'opponent_oral', + 'reviewer_writing', 'reviewer_oral',) + if settings.HAS_OBSERVER: + fields += ('observer_writing', 'observer_oral',) + return fields + @admin.register(Solution) class SolutionAdmin(admin.ModelAdmin): diff --git a/participation/forms.py b/participation/forms.py index 75c60a3..c677db9 100644 --- a/participation/forms.py +++ b/participation/forms.py @@ -7,6 +7,7 @@ import re from crispy_forms.helper import FormHelper from crispy_forms.layout import Div, Field, HTML, Layout, Submit from django import forms +from django.conf import settings from django.contrib.auth.models import User from django.core.exceptions import ValidationError from django.core.validators import FileExtensionValidator @@ -14,7 +15,6 @@ from django.utils.translation import gettext_lazy as _ import pandas from pypdf import PdfReader from registration.models import VolunteerRegistration -from tfjm import settings from .models import Note, Participation, Passage, Pool, Solution, Team, Tournament, WrittenReview @@ -405,6 +405,12 @@ class WrittenReviewForm(forms.ModelForm): class NoteForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not settings.HAS_OBSERVER: + del self.fields['observer_writing'] + del self.fields['observer_oral'] + class Meta: model = Note fields = ('reporter_writing', 'reporter_oral', 'opponent_writing', diff --git a/participation/tables.py b/participation/tables.py index a535d50..fd5f655 100644 --- a/participation/tables.py +++ b/participation/tables.py @@ -1,6 +1,7 @@ # Copyright (C) 2020 by Animath # SPDX-License-Identifier: GPL-3.0-or-later +from django.conf import settings from django.utils import formats from django.utils.safestring import mark_safe from django.utils.text import format_lazy @@ -106,7 +107,10 @@ class PoolTable(tables.Table): class PassageTable(tables.Table): - # FIXME Ne pas afficher l'équipe observatrice si non nécessaire + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not settings.HAS_OBSERVER: + del self.columns['observer'] reporter = tables.LinkColumn( "participation:passage_detail", @@ -135,6 +139,12 @@ class PassageTable(tables.Table): class NoteTable(tables.Table): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not settings.HAS_OBSERVER: + del self.columns['observer_writing'] + del self.columns['observer_oral'] + jury = tables.Column( attrs={ "td": {