1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2025-02-24 09:41:19 +00:00

Compare commits

..

No commits in common. "7073f64aa62d36f4e3b4d784a28b3c9803abf6a7" and "7a004596ca8680e772c1b602e2e10673eace909d" have entirely different histories.

6 changed files with 202 additions and 293 deletions

File diff suppressed because it is too large Load Diff

View File

@ -718,59 +718,34 @@ class Participation(models.Model):
'content': content, 'content': content,
}) })
if self.tournament: if timezone.now() <= self.tournament.solution_limit + timedelta(hours=2):
informations.extend(self.informations_for_tournament(self.tournament)) text = _("<p>The solutions for the tournament of {tournament} are due on the {date:%Y-%m-%d %H:%M}.</p>"
if self.final: "<p>You have currently sent <strong>{nb_solutions}</strong> solutions. "
informations.extend(self.informations_for_tournament(Tournament.final_tournament())) "We suggest to send at least <strong>{min_solutions}</strong> different solutions.</p>"
"<p>You can upload your solutions on <a href='{url}'>your participation page</a>.</p>")
return informations url = reverse_lazy("participation:participation_detail", args=(self.pk,))
content = format_lazy(text, tournament=self.tournament.name, date=localtime(self.tournament.solution_limit),
def informations_for_tournament(self, tournament) -> list[dict]: nb_solutions=self.solutions.count(), min_solutions=len(settings.PROBLEMS) - 3,
informations = [] url=url)
if timezone.now() <= tournament.solution_limit + timedelta(hours=2): informations.append({
if not tournament.final: 'title': _("Solutions due"),
text = _("<p>The solutions for the tournament of {tournament} are due on the {date:%Y-%m-%d %H:%M}.</p>" 'type': "info",
"<p>You have currently sent <strong>{nb_solutions}</strong> solutions. " 'priority': 1,
"We suggest to send at least <strong>{min_solutions}</strong> different solutions.</p>" 'content': content,
"<p>You can upload your solutions on <a href='{url}'>your participation page</a>.</p>") })
url = reverse_lazy("participation:participation_detail", args=(self.pk,)) elif timezone.now() <= self.tournament.solutions_draw + timedelta(hours=2):
content = format_lazy(text, tournament=tournament.name, date=localtime(tournament.solution_limit),
nb_solutions=self.solutions.filter(final_solution=False).count(),
min_solutions=len(settings.PROBLEMS) - 3,
url=url)
informations.append({
'title': _("Solutions due"),
'type': "info",
'priority': 1,
'content': content,
})
else:
text = _("<p>The solutions for the tournament of {tournament} are due on the {date:%Y-%m-%d %H:%M}.</p>"
"<p>Remember that you can only fix minor changes to your solutions "
"without adding new parts.</p>"
"<p>You can upload your solutions on <a href='{url}'>your participation page</a>.</p>")
url = reverse_lazy("participation:participation_detail", args=(self.pk,))
content = format_lazy(text, tournament=tournament.name, date=localtime(tournament.solution_limit),
url=url)
informations.append({
'title': _("Solutions due"),
'type': "info",
'priority': 1,
'content': content,
})
elif timezone.now() <= tournament.solutions_draw + timedelta(hours=2):
text = _("<p>The draw of the solutions for the tournament {tournament} is planned on the " text = _("<p>The draw of the solutions for the tournament {tournament} is planned on the "
"{date:%Y-%m-%d %H:%M}. You can join it on <a href='{url}'>this link</a>.</p>") "{date:%Y-%m-%d %H:%M}. You can join it on <a href='{url}'>this link</a>.</p>")
url = reverse_lazy("draw:index") url = reverse_lazy("draw:index")
content = format_lazy(text, tournament=tournament.name, content = format_lazy(text, tournament=self.tournament.name,
date=localtime(tournament.solutions_draw), url=url) date=localtime(self.tournament.solutions_draw), url=url)
informations.append({ informations.append({
'title': _("Draw of solutions"), 'title': _("Draw of solutions"),
'type': "info", 'type': "info",
'priority': 1, 'priority': 1,
'content': content, 'content': content,
}) })
elif timezone.now() <= tournament.syntheses_first_phase_limit + timedelta(hours=2): elif timezone.now() <= self.tournament.syntheses_first_phase_limit + timedelta(hours=2):
pool = self.pools.get(round=1, tournament=self.tournament) pool = self.pools.get(round=1, tournament=self.tournament)
defender_passage = pool.passages.get(defender=self) defender_passage = pool.passages.get(defender=self)
opponent_passage = pool.passages.get(opponent=self) opponent_passage = pool.passages.get(opponent=self)
@ -815,8 +790,8 @@ class Participation(models.Model):
'priority': 1, 'priority': 1,
'content': content, 'content': content,
}) })
elif timezone.now() <= tournament.syntheses_second_phase_limit + timedelta(hours=2): elif timezone.now() <= self.tournament.syntheses_second_phase_limit + timedelta(hours=2):
pool = self.pools.get(round=2, tournament=tournament) pool = self.pools.get(round=2, tournament=self.tournament)
defender_passage = pool.passages.get(defender=self) defender_passage = pool.passages.get(defender=self)
opponent_passage = pool.passages.get(opponent=self) opponent_passage = pool.passages.get(opponent=self)
reporter_passage = pool.passages.get(reporter=self) reporter_passage = pool.passages.get(reporter=self)
@ -858,11 +833,11 @@ class Participation(models.Model):
'priority': 1, 'priority': 1,
'content': content, 'content': content,
}) })
elif not self.final or tournament.final: elif not self.final:
text = _("<p>The tournament {tournament} is ended. You can check the results on the " text = _("<p>The tournament {tournament} is ended. You can check the results on the "
"<a href='{url}'>tournament page</a>.</p>") "<a href='{url}'>tournament page</a>.</p>")
url = reverse_lazy("participation:tournament_detail", args=(tournament.pk,)) url = reverse_lazy("participation:tournament_detail", args=(self.tournament.pk,))
content = format_lazy(text, tournament=tournament.name, url=url) content = format_lazy(text, tournament=self.tournament.name, url=url)
informations.append({ informations.append({
'title': _("Tournament ended"), 'title': _("Tournament ended"),
'type': "info", 'type': "info",
@ -1561,7 +1536,7 @@ class Tweak(models.Model):
def get_solution_filename(instance, filename): def get_solution_filename(instance, filename):
return f"solutions/{instance.participation.team.trigram}_{instance.problem}" \ return f"solutions/{instance.participation.team.trigram}_{instance.problem}" \
+ ("_final" if instance.final_solution else "") + ("final" if instance.final_solution else "")
def get_synthesis_filename(instance, filename): def get_synthesis_filename(instance, filename):

View File

@ -850,12 +850,6 @@ class SelectTeamFinalView(VolunteerMixin, DetailView):
tournament = self.get_object() tournament = self.get_object()
self.participation.final = True self.participation.final = True
self.participation.save() self.participation.save()
for regional_sol in self.participation.solutions.filter(final_solution=False).all():
final_sol, _created = Solution.objects.get_or_create(participation=self.participation, final_solution=True,
problem=regional_sol.problem)
final_sol: Solution
with open(regional_sol.file.path, 'rb') as f:
final_sol.file.save(regional_sol.file.name, f)
return redirect(reverse_lazy("participation:tournament_detail", args=(tournament.pk,))) return redirect(reverse_lazy("participation:tournament_detail", args=(tournament.pk,)))

View File

@ -129,7 +129,7 @@ class VolunteerRegistrationAdmin(PolymorphicChildModelAdmin):
@admin.register(Payment) @admin.register(Payment)
class PaymentAdmin(ModelAdmin): class PaymentAdmin(ModelAdmin):
list_display = ('concerned_people', 'tournament', 'team', 'grouped', 'type', 'amount', 'final', 'valid', ) list_display = ('concerned_people', 'tournament', 'team', 'grouped', 'type', 'amount', 'valid', )
search_fields = ('registrations__user__last_name', 'registrations__user__first_name', 'registrations__user__email', search_fields = ('registrations__user__last_name', 'registrations__user__first_name', 'registrations__user__email',
'registrations__team__name', 'registrations__team__participation__team__trigram',) 'registrations__team__name', 'registrations__team__participation__team__trigram',)
list_filter = ('registrations__team__participation__valid', 'type', list_filter = ('registrations__team__participation__valid', 'type',

View File

@ -272,19 +272,6 @@ class ParticipantRegistration(Registration):
'content': content, 'content': content,
}) })
if self.team.participation.final:
if not self.photo_authorization_final:
text = _("You have not uploaded your photo authorization for the final tournament. "
"You can do it by clicking on <a href=\"{photo_url}\">this link</a>.")
photo_url = reverse_lazy("registration:upload_user_photo_authorization_final", args=(self.id,))
content = format_lazy(text, photo_url=photo_url)
informations.append({
'title': _("Photo authorization"),
'type': "danger",
'priority': 5,
'content': content,
})
informations.extend(self.team.important_informations()) informations.extend(self.team.important_informations())
return informations return informations
@ -432,20 +419,6 @@ class StudentRegistration(ParticipantRegistration):
'content': content, 'content': content,
}) })
if self.team.participation.final:
if self.under_18_final and not self.parental_authorization_final:
text = _("You have not uploaded your parental authorization for the final tournament. "
"You can do it by clicking on <a href=\"{parental_url}\">this link</a>.")
parental_url = reverse_lazy("registration:upload_user_parental_authorization_final",
args=(self.id,))
content = format_lazy(text, parental_url=parental_url)
informations.append({
'title': _("Parental authorization"),
'type': "danger",
'priority': 5,
'content': content,
})
return informations return informations
class Meta: class Meta:

View File

@ -31,8 +31,8 @@ from tfjm.tokens import email_validation_token
from tfjm.views import UserMixin, UserRegistrationMixin, VolunteerMixin from tfjm.views import UserMixin, UserRegistrationMixin, VolunteerMixin
from .forms import AddOrganizerForm, CoachRegistrationForm, HealthSheetForm, \ from .forms import AddOrganizerForm, CoachRegistrationForm, HealthSheetForm, \
ParentalAuthorizationFinalForm, ParentalAuthorizationForm, PaymentAdminForm, PaymentForm, \ PhotoAuthorizationFinalForm, ParentalAuthorizationForm, PaymentAdminForm, PaymentForm, \
PhotoAuthorizationFinalForm, PhotoAuthorizationForm, SignupForm, StudentRegistrationForm, UserForm, \ ParentalAuthorizationFinalForm, PhotoAuthorizationForm, SignupForm, StudentRegistrationForm, UserForm, \
VaccineSheetForm, VolunteerRegistrationForm VaccineSheetForm, VolunteerRegistrationForm
from .models import ParticipantRegistration, Payment, Registration, StudentRegistration from .models import ParticipantRegistration, Payment, Registration, StudentRegistration
from .tables import RegistrationTable from .tables import RegistrationTable