mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 04:22:14 +01:00 
			
		
		
		
	Support penalties
This commit is contained in:
		@@ -0,0 +1,18 @@
 | 
			
		||||
# Generated by Django 3.1.7 on 2021-04-03 19:57
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('participation', '0003_tournament_remote'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='passage',
 | 
			
		||||
            name='defender_penalties',
 | 
			
		||||
            field=models.PositiveSmallIntegerField(default=0, help_text='Number of penalties for the defender. The defender will loose a 0.5 coefficient per penalty.', verbose_name='penalties'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
@@ -432,6 +432,13 @@ class Passage(models.Model):
 | 
			
		||||
        related_name="+",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    defender_penalties = models.PositiveSmallIntegerField(
 | 
			
		||||
        verbose_name=_("penalties"),
 | 
			
		||||
        default=0,
 | 
			
		||||
        help_text=_("Number of penalties for the defender. "
 | 
			
		||||
                    "The defender will loose a 0.5 coefficient per penalty."),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def defended_solution(self) -> "Solution":
 | 
			
		||||
        return Solution.objects.get(
 | 
			
		||||
@@ -439,44 +446,44 @@ class Passage(models.Model):
 | 
			
		||||
            problem=self.solution_number,
 | 
			
		||||
            final_solution=self.pool.tournament.final)
 | 
			
		||||
 | 
			
		||||
    def avg(self, iterator) -> int:
 | 
			
		||||
    def avg(self, iterator) -> float:
 | 
			
		||||
        items = [i for i in iterator if i]
 | 
			
		||||
        return sum(items) / len(items) if items else 0
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_defender_writing(self) -> int:
 | 
			
		||||
    def average_defender_writing(self) -> float:
 | 
			
		||||
        return self.avg(note.defender_writing for note in self.notes.all())
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_defender_oral(self) -> int:
 | 
			
		||||
    def average_defender_oral(self) -> float:
 | 
			
		||||
        return self.avg(note.defender_oral for note in self.notes.all())
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_defender(self) -> int:
 | 
			
		||||
        return self.average_defender_writing + 2 * self.average_defender_oral
 | 
			
		||||
    def average_defender(self) -> float:
 | 
			
		||||
        return self.average_defender_writing + (2 - 0.5 * self.defender_penalties) * self.average_defender_oral
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_opponent_writing(self) -> int:
 | 
			
		||||
    def average_opponent_writing(self) -> float:
 | 
			
		||||
        return self.avg(note.opponent_writing for note in self.notes.all())
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_opponent_oral(self) -> int:
 | 
			
		||||
    def average_opponent_oral(self) -> float:
 | 
			
		||||
        return self.avg(note.opponent_oral for note in self.notes.all())
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_opponent(self) -> int:
 | 
			
		||||
    def average_opponent(self) -> float:
 | 
			
		||||
        return self.average_opponent_writing + 2 * self.average_opponent_oral
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_reporter_writing(self) -> int:
 | 
			
		||||
    def average_reporter_writing(self) -> float:
 | 
			
		||||
        return self.avg(note.reporter_writing for note in self.notes.all())
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_reporter_oral(self) -> int:
 | 
			
		||||
    def average_reporter_oral(self) -> float:
 | 
			
		||||
        return self.avg(note.reporter_oral for note in self.notes.all())
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def average_reporter(self) -> int:
 | 
			
		||||
    def average_reporter(self) -> float:
 | 
			
		||||
        return self.average_reporter_writing + self.average_reporter_oral
 | 
			
		||||
 | 
			
		||||
    def average(self, participation):
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,9 @@
 | 
			
		||||
                <dt class="col-sm-3">{% trans "Place:" %}</dt>
 | 
			
		||||
                <dd class="col-sm-9">{{ passage.place }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-sm-3">{% trans "Defender penalties count:" %}</dt>
 | 
			
		||||
                <dd class="col-sm-9">{{ passage.defender_penalties }}</dd>
 | 
			
		||||
 | 
			
		||||
                <dt class="col-sm-3">{% trans "Syntheses:" %}</dt>
 | 
			
		||||
                <dd class="col-sm-9">
 | 
			
		||||
                    {% for synthesis in passage.syntheses.all %}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user