mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2024-12-25 17:02:28 +00:00
Remove "Add passage" and "Udate pool teams" forms since they can lead to unwanted states. Pool teams and passages are managed by the draw system. If needed, use the admin interface
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
parent
412ff4e067
commit
e53575d31d
@ -192,24 +192,6 @@ class PoolForm(forms.ModelForm):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class PoolTeamsForm(forms.ModelForm):
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.fields["participations"].queryset = self.instance.tournament.participations.all()
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Pool
|
|
||||||
fields = ('participations',)
|
|
||||||
widgets = {
|
|
||||||
"participations": forms.SelectMultiple(attrs={
|
|
||||||
'class': 'selectpicker',
|
|
||||||
'data-live-search': 'true',
|
|
||||||
'data-live-search-normalize': 'true',
|
|
||||||
'data-width': 'fit',
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class AddJuryForm(forms.ModelForm):
|
class AddJuryForm(forms.ModelForm):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
@ -125,9 +125,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% if user.registration.is_volunteer %}
|
{% if user.registration.is_volunteer %}
|
||||||
<div class="card-footer text-center">
|
<div class="card-footer text-center">
|
||||||
<button class="btn btn-success" data-bs-toggle="modal" data-bs-target="#addPassageModal">{% trans "Add passage" %}</button>
|
|
||||||
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#updatePoolModal">{% trans "Update" %}</button>
|
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#updatePoolModal">{% trans "Update" %}</button>
|
||||||
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#updateTeamsModal">{% trans "Update teams" %}</button>
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@ -138,21 +136,11 @@
|
|||||||
|
|
||||||
{% render_table passages %}
|
{% render_table passages %}
|
||||||
|
|
||||||
{% trans "Add passage" as modal_title %}
|
|
||||||
{% trans "Add" as modal_button %}
|
|
||||||
{% url "participation:passage_create" pk=pool.pk as modal_action %}
|
|
||||||
{% include "base_modal.html" with modal_id="addPassage" modal_button_type="success" %}
|
|
||||||
|
|
||||||
{% trans "Update pool" as modal_title %}
|
{% trans "Update pool" as modal_title %}
|
||||||
{% trans "Update" as modal_button %}
|
{% trans "Update" as modal_button %}
|
||||||
{% url "participation:pool_update" pk=pool.pk as modal_action %}
|
{% url "participation:pool_update" pk=pool.pk as modal_action %}
|
||||||
{% include "base_modal.html" with modal_id="updatePool" %}
|
{% include "base_modal.html" with modal_id="updatePool" %}
|
||||||
|
|
||||||
{% trans "Update teams" as modal_title %}
|
|
||||||
{% trans "Update" as modal_button %}
|
|
||||||
{% url "participation:pool_update_teams" pk=pool.pk as modal_action %}
|
|
||||||
{% include "base_modal.html" with modal_id="updateTeams" %}
|
|
||||||
|
|
||||||
{% trans "Upload notes" as modal_title %}
|
{% trans "Upload notes" as modal_title %}
|
||||||
{% trans "Upload" as modal_button %}
|
{% trans "Upload" as modal_button %}
|
||||||
{% url "participation:pool_upload_notes" pk=pool.pk as modal_action %}
|
{% url "participation:pool_upload_notes" pk=pool.pk as modal_action %}
|
||||||
@ -163,8 +151,6 @@
|
|||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
initModal("updatePool", "{% url "participation:pool_update" pk=pool.pk %}")
|
initModal("updatePool", "{% url "participation:pool_update" pk=pool.pk %}")
|
||||||
initModal("updateTeams", "{% url "participation:pool_update_teams" pk=pool.pk %}")
|
|
||||||
initModal("addPassage", "{% url "participation:passage_create" pk=pool.pk %}")
|
|
||||||
initModal("uploadNotes", "{% url "participation:pool_upload_notes" pk=pool.pk %}")
|
initModal("uploadNotes", "{% url "participation:pool_upload_notes" pk=pool.pk %}")
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -5,9 +5,9 @@ from django.urls import path
|
|||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from .views import CreateTeamView, FinalNotationSheetTemplateView, JoinTeamView, MyParticipationDetailView, \
|
from .views import CreateTeamView, FinalNotationSheetTemplateView, JoinTeamView, MyParticipationDetailView, \
|
||||||
MyTeamDetailView, NotationSheetsArchiveView, NoteUpdateView, ParticipationDetailView, PassageCreateView, \
|
MyTeamDetailView, NotationSheetsArchiveView, NoteUpdateView, ParticipationDetailView, \
|
||||||
PassageDetailView, PassageUpdateView, PoolCreateView, PoolDetailView, PoolJuryView, PoolNotesTemplateView, \
|
PassageDetailView, PassageUpdateView, PoolCreateView, PoolDetailView, PoolJuryView, PoolNotesTemplateView, \
|
||||||
PoolPresideJuryView, PoolRemoveJuryView, PoolUpdateTeamsView, PoolUpdateView, PoolUploadNotesView, \
|
PoolPresideJuryView, PoolRemoveJuryView, PoolUpdateView, PoolUploadNotesView, \
|
||||||
ScaleNotationSheetTemplateView, SolutionsDownloadView, SolutionUploadView, SynthesisUploadView, \
|
ScaleNotationSheetTemplateView, SolutionsDownloadView, SolutionUploadView, SynthesisUploadView, \
|
||||||
TeamAuthorizationsView, TeamDetailView, TeamLeaveView, TeamListView, TeamUpdateView, \
|
TeamAuthorizationsView, TeamDetailView, TeamLeaveView, TeamListView, TeamUpdateView, \
|
||||||
TeamUploadMotivationLetterView, TournamentCreateView, TournamentDetailView, TournamentExportCSVView, \
|
TeamUploadMotivationLetterView, TournamentCreateView, TournamentDetailView, TournamentExportCSVView, \
|
||||||
@ -60,13 +60,11 @@ urlpatterns = [
|
|||||||
path("pools/<int:pk>/notation/scale/", ScaleNotationSheetTemplateView.as_view(), name="pool_scale_note_sheet"),
|
path("pools/<int:pk>/notation/scale/", ScaleNotationSheetTemplateView.as_view(), name="pool_scale_note_sheet"),
|
||||||
path("pools/<int:pk>/notation/final/", FinalNotationSheetTemplateView.as_view(), name="pool_final_note_sheet"),
|
path("pools/<int:pk>/notation/final/", FinalNotationSheetTemplateView.as_view(), name="pool_final_note_sheet"),
|
||||||
path("pools/<int:pool_id>/notation/sheets/", NotationSheetsArchiveView.as_view(), name="pool_notation_sheets"),
|
path("pools/<int:pool_id>/notation/sheets/", NotationSheetsArchiveView.as_view(), name="pool_notation_sheets"),
|
||||||
path("pools/<int:pk>/update-teams/", PoolUpdateTeamsView.as_view(), name="pool_update_teams"),
|
|
||||||
path("pools/<int:pk>/jury/", PoolJuryView.as_view(), name="pool_jury"),
|
path("pools/<int:pk>/jury/", PoolJuryView.as_view(), name="pool_jury"),
|
||||||
path("pools/<int:pk>/jury/remove/<int:jury_id>/", PoolRemoveJuryView.as_view(), name="pool_remove_jury"),
|
path("pools/<int:pk>/jury/remove/<int:jury_id>/", PoolRemoveJuryView.as_view(), name="pool_remove_jury"),
|
||||||
path("pools/<int:pk>/jury/preside/<int:jury_id>/", PoolPresideJuryView.as_view(), name="pool_preside"),
|
path("pools/<int:pk>/jury/preside/<int:jury_id>/", PoolPresideJuryView.as_view(), name="pool_preside"),
|
||||||
path("pools/<int:pk>/upload-notes/", PoolUploadNotesView.as_view(), name="pool_upload_notes"),
|
path("pools/<int:pk>/upload-notes/", PoolUploadNotesView.as_view(), name="pool_upload_notes"),
|
||||||
path("pools/<int:pk>/upload-notes/template/", PoolNotesTemplateView.as_view(), name="pool_notes_template"),
|
path("pools/<int:pk>/upload-notes/template/", PoolNotesTemplateView.as_view(), name="pool_notes_template"),
|
||||||
path("pools/passages/add/<int:pk>/", PassageCreateView.as_view(), name="passage_create"),
|
|
||||||
path("pools/passages/<int:pk>/", PassageDetailView.as_view(), name="passage_detail"),
|
path("pools/passages/<int:pk>/", PassageDetailView.as_view(), name="passage_detail"),
|
||||||
path("pools/passages/<int:pk>/update/", PassageUpdateView.as_view(), name="passage_update"),
|
path("pools/passages/<int:pk>/update/", PassageUpdateView.as_view(), name="passage_update"),
|
||||||
path("pools/passages/<int:pk>/solution/", SynthesisUploadView.as_view(), name="upload_synthesis"),
|
path("pools/passages/<int:pk>/solution/", SynthesisUploadView.as_view(), name="upload_synthesis"),
|
||||||
|
@ -40,7 +40,7 @@ from tfjm.lists import get_sympa_client
|
|||||||
from tfjm.views import AdminMixin, VolunteerMixin
|
from tfjm.views import AdminMixin, VolunteerMixin
|
||||||
|
|
||||||
from .forms import AddJuryForm, JoinTeamForm, MotivationLetterForm, NoteForm, ParticipationForm, PassageForm, \
|
from .forms import AddJuryForm, JoinTeamForm, MotivationLetterForm, NoteForm, ParticipationForm, PassageForm, \
|
||||||
PoolForm, PoolTeamsForm, RequestValidationForm, SolutionForm, SynthesisForm, TeamForm, TournamentForm, \
|
PoolForm, RequestValidationForm, SolutionForm, SynthesisForm, TeamForm, TournamentForm, \
|
||||||
UploadNotesForm, ValidateParticipationForm
|
UploadNotesForm, ValidateParticipationForm
|
||||||
from .models import Note, Participation, Passage, Pool, Solution, Synthesis, Team, Tournament, Tweak
|
from .models import Note, Participation, Passage, Pool, Solution, Synthesis, Team, Tournament, Tweak
|
||||||
from .tables import NoteTable, ParticipationTable, PassageTable, PoolTable, TeamTable, TournamentTable
|
from .tables import NoteTable, ParticipationTable, PassageTable, PoolTable, TeamTable, TournamentTable
|
||||||
@ -888,20 +888,6 @@ class PoolUpdateView(VolunteerMixin, UpdateView):
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
class PoolUpdateTeamsView(VolunteerMixin, UpdateView):
|
|
||||||
model = Pool
|
|
||||||
form_class = PoolTeamsForm
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
|
||||||
if not request.user.is_authenticated:
|
|
||||||
return self.handle_no_permission()
|
|
||||||
if request.user.registration.is_admin or request.user.registration.is_volunteer \
|
|
||||||
and (self.get_object().tournament in request.user.registration.organized_tournaments.all()
|
|
||||||
or request.user.registration in self.get_object().juries.all()):
|
|
||||||
return super().dispatch(request, *args, **kwargs)
|
|
||||||
return self.handle_no_permission()
|
|
||||||
|
|
||||||
|
|
||||||
class SolutionsDownloadView(VolunteerMixin, View):
|
class SolutionsDownloadView(VolunteerMixin, View):
|
||||||
"""
|
"""
|
||||||
Download all solutions or syntheses as a ZIP archive.
|
Download all solutions or syntheses as a ZIP archive.
|
||||||
@ -1881,35 +1867,6 @@ class NotationSheetsArchiveView(VolunteerMixin, DetailView):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
class PassageCreateView(VolunteerMixin, CreateView):
|
|
||||||
model = Passage
|
|
||||||
form_class = PassageForm
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
|
||||||
if not request.user.is_authenticated:
|
|
||||||
return self.handle_no_permission()
|
|
||||||
|
|
||||||
qs = Pool.objects.filter(pk=self.kwargs["pk"])
|
|
||||||
if not qs.exists():
|
|
||||||
raise Http404
|
|
||||||
self.pool = qs.get()
|
|
||||||
|
|
||||||
if request.user.registration.is_admin or request.user.registration.is_volunteer \
|
|
||||||
and (self.pool.tournament in request.user.registration.organized_tournaments.all()
|
|
||||||
or request.user.registration in self.pool.juries.all()):
|
|
||||||
return super().dispatch(request, *args, **kwargs)
|
|
||||||
|
|
||||||
return self.handle_no_permission()
|
|
||||||
|
|
||||||
def get_form(self, form_class=None):
|
|
||||||
form = super().get_form(form_class)
|
|
||||||
form.instance.pool = self.pool
|
|
||||||
form.fields["defender"].queryset = self.pool.participations.all()
|
|
||||||
form.fields["opponent"].queryset = self.pool.participations.all()
|
|
||||||
form.fields["reporter"].queryset = self.pool.participations.all()
|
|
||||||
return form
|
|
||||||
|
|
||||||
|
|
||||||
class PassageDetailView(LoginRequiredMixin, DetailView):
|
class PassageDetailView(LoginRequiredMixin, DetailView):
|
||||||
model = Passage
|
model = Passage
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user