mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 08:22:10 +01:00 
			
		
		
		
	Select teams for final
This commit is contained in:
		@@ -158,6 +158,26 @@ class TeamDetailView(LoginRequiredMixin, DetailView):
 | 
			
		||||
        elif "delete" in request.POST and request.user.organizes:
 | 
			
		||||
            team.delete()
 | 
			
		||||
            return redirect('tournament:detail', pk=team.tournament.pk)
 | 
			
		||||
        elif "select_final" in request.POST and request.user.admin and not team.selected_for_final and team.pools:
 | 
			
		||||
            for solution in team.solutions.all():
 | 
			
		||||
                alphabet = "0123456789abcdefghijklmnopqrstuvwxyz0123456789"
 | 
			
		||||
                id = ""
 | 
			
		||||
                for i in range(64):
 | 
			
		||||
                    id += random.choice(alphabet)
 | 
			
		||||
                with solution.file.open("rb") as source:
 | 
			
		||||
                    with open("/code/media/" + id, "wb") as dest:
 | 
			
		||||
                        for chunk in source.chunks():
 | 
			
		||||
                            dest.write(chunk)
 | 
			
		||||
                new_sol = Solution(
 | 
			
		||||
                    file=id,
 | 
			
		||||
                    team=team,
 | 
			
		||||
                    problem=solution.problem,
 | 
			
		||||
                    final=True,
 | 
			
		||||
                )
 | 
			
		||||
                new_sol.save()
 | 
			
		||||
            team.selected_for_final = True
 | 
			
		||||
            team.save()
 | 
			
		||||
            return redirect('tournament:team_detail', pk=team.pk)
 | 
			
		||||
 | 
			
		||||
        return self.get(request, *args, **kwargs)
 | 
			
		||||
 | 
			
		||||
@@ -238,7 +258,8 @@ class SolutionsView(TeamMixin, BaseFormView, SingleTableView):
 | 
			
		||||
        qs = super().get_queryset()
 | 
			
		||||
        if not self.request.user.admin:
 | 
			
		||||
            qs = qs.filter(team=self.request.user.team)
 | 
			
		||||
        return qs.order_by('team__tournament__date_start', 'team__tournament__name', 'team__trigram', 'problem',)
 | 
			
		||||
        return qs.order_by('final', 'team__tournament__date_start', 'team__tournament__name', 'team__trigram',
 | 
			
		||||
                           'problem',)
 | 
			
		||||
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        solution = form.instance
 | 
			
		||||
@@ -274,7 +295,7 @@ class SolutionsOrgaListView(OrgaMixin, SingleTableView):
 | 
			
		||||
 | 
			
		||||
    def post(self, request, *args, **kwargs):
 | 
			
		||||
        if "tournament_zip" in request.POST:
 | 
			
		||||
            tournament = Tournament.objects.get(pk=request.POST["tournament_zip"][0])
 | 
			
		||||
            tournament = Tournament.objects.get(pk=int(request.POST["tournament_zip"]))
 | 
			
		||||
            solutions = tournament.solutions
 | 
			
		||||
            if not request.user.admin and request.user not in tournament.organizers.all():
 | 
			
		||||
                raise PermissionDenied
 | 
			
		||||
@@ -307,7 +328,8 @@ class SolutionsOrgaListView(OrgaMixin, SingleTableView):
 | 
			
		||||
        qs = super().get_queryset()
 | 
			
		||||
        if not self.request.user.admin:
 | 
			
		||||
            qs = qs.filter(team__tournament__organizers=self.request.user)
 | 
			
		||||
        return qs.order_by('team__tournament__date_start', 'team__tournament__name', 'team__trigram', 'problem',)
 | 
			
		||||
        return qs.order_by('final', 'team__tournament__date_start', 'team__tournament__name', 'team__trigram',
 | 
			
		||||
                           'problem',)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SynthesesView(TeamMixin, BaseFormView, SingleTableView):
 | 
			
		||||
@@ -341,8 +363,8 @@ class SynthesesView(TeamMixin, BaseFormView, SingleTableView):
 | 
			
		||||
        qs = super().get_queryset()
 | 
			
		||||
        if not self.request.user.admin:
 | 
			
		||||
            qs = qs.filter(team=self.request.user.team)
 | 
			
		||||
        return qs.order_by('team__tournament__date_start', 'team__tournament__name', 'team__trigram', 'round',
 | 
			
		||||
                           'source',)
 | 
			
		||||
        return qs.order_by('final', 'team__tournament__date_start', 'team__tournament__name', 'team__trigram',
 | 
			
		||||
                           'round', 'source',)
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        self.object_list = self.get_queryset()
 | 
			
		||||
@@ -392,7 +414,7 @@ class SynthesesOrgaListView(OrgaMixin, SingleTableView):
 | 
			
		||||
 | 
			
		||||
    def post(self, request, *args, **kwargs):
 | 
			
		||||
        if "tournament_zip" in request.POST:
 | 
			
		||||
            tournament = Tournament.objects.get(pk=request.POST["tournament_zip"][0])
 | 
			
		||||
            tournament = Tournament.objects.get(pk=request.POST["tournament_zip"])
 | 
			
		||||
            syntheses = tournament.syntheses
 | 
			
		||||
            if not request.user.admin and request.user not in tournament.organizers.all():
 | 
			
		||||
                raise PermissionDenied
 | 
			
		||||
@@ -425,8 +447,8 @@ class SynthesesOrgaListView(OrgaMixin, SingleTableView):
 | 
			
		||||
        qs = super().get_queryset()
 | 
			
		||||
        if not self.request.user.admin:
 | 
			
		||||
            qs = qs.filter(team__tournament__organizers=self.request.user)
 | 
			
		||||
        return qs.order_by('team__tournament__date_start', 'team__tournament__name', 'team__trigram', 'round',
 | 
			
		||||
                           'source',)
 | 
			
		||||
        return qs.order_by('final', 'team__tournament__date_start', 'team__tournament__name', 'team__trigram',
 | 
			
		||||
                           'round', 'source',)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PoolListView(LoginRequiredMixin, SingleTableView):
 | 
			
		||||
@@ -441,7 +463,8 @@ class PoolListView(LoginRequiredMixin, SingleTableView):
 | 
			
		||||
            qs = qs.filter(Q(juries=user) | Q(teams__tournament__organizers=user))
 | 
			
		||||
        elif user.participates:
 | 
			
		||||
            qs = qs.filter(teams=user.team)
 | 
			
		||||
        qs = qs.distinct().order_by('teams__tournament__date_start', 'teams__tournament__name', 'round',)
 | 
			
		||||
        qs = qs.distinct().order_by('solutions__final', 'teams__tournament__date_start', 'teams__tournament__name',
 | 
			
		||||
                                    'round',)
 | 
			
		||||
        return qs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user