From 5a865efd183be662edf827575b3b2c2f49b9b9cb Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Tue, 19 Jan 2021 00:11:52 +0100 Subject: [PATCH] Don't upload solutions or syntheses after the deadline, if an existing file was previously sent --- apps/participation/views.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/apps/participation/views.py b/apps/participation/views.py index db962cb..1b41dc2 100644 --- a/apps/participation/views.py +++ b/apps/participation/views.py @@ -13,6 +13,7 @@ from django.http import Http404, HttpResponse from django.shortcuts import redirect from django.template.loader import render_to_string from django.urls import reverse_lazy +from django.utils import timezone from django.utils.translation import gettext_lazy as _ from django.views.generic import CreateView, DetailView, FormView, RedirectView, TemplateView, UpdateView from django.views.generic.edit import FormMixin, ProcessFormView @@ -505,10 +506,17 @@ class SolutionUploadView(LoginRequiredMixin, FormView): It is discriminating whenever the team is selected for the final tournament or not. """ form_sol = form.instance + sol_qs = Solution.objects.filter(participation=self.participation, + problem=form_sol.problem, + final_solution=self.participation.final) + + tournament = Tournament.final_tournament() if self.participation.final else self.participation.final + if timezone.now() > tournament.solution_limit and sol_qs.exists(): + form.add_error(None, _("You can't upload a solution after the deadline.")) + return self.form_invalid(form) + # Drop previous solution if existing - for sol in Solution.objects.filter(participation=self.participation, - problem=form_sol.problem, - final_solution=self.participation.final).all(): + for sol in sol_qs.all(): sol.file.delete() sol.delete() form_sol.participation = self.participation @@ -605,7 +613,7 @@ class PassageCreateView(VolunteerMixin, CreateView): 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() + fSynthesisorm.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 @@ -677,10 +685,18 @@ class SynthesisUploadView(LoginRequiredMixin, FormView): It is discriminating whenever the team is selected for the final tournament or not. """ form_syn = form.instance + syn_qs = Synthesis.objects.filter(participation=self.participation, + passage=self.passage, + type=form_syn.type).all() + + deadline = self.passage.pool.tournament.syntheses_first_phase_limit if self.passage.pool.round == 1 \ + else self.passage.pool.tournament.syntheses_second_phase_limit + if syn_qs.exists() and timezone.now() > deadline: + form.add_error(None, _("You can't upload a synthesis after the deadline.")) + return self.form_invalid(form) + # Drop previous solution if existing - for syn in Synthesis.objects.filter(participation=self.participation, - passage=self.passage, - type=form_syn.type).all(): + for syn in syn_qs.all(): syn.file.delete() syn.delete() form_syn.participation = self.participation