Private
Public Access
1
0

Basic functionality is there

This commit is contained in:
Sander Roosendaal
2022-06-24 16:17:18 +02:00
parent f55e5a2fef
commit f606a7aa09
12 changed files with 366 additions and 19 deletions

View File

@@ -52,6 +52,9 @@ class Crew(models.Model):
def save(self, *args, **kwargs):
super(Crew, self).save(*args, **kwargs)
def size(self):
return self.athletes.all().count()
class crewForm(forms.ModelForm):
class Meta:
model = Crew
@@ -59,12 +62,13 @@ class crewForm(forms.ModelForm):
class Race(models.Model):
name = models.CharField(max_length=200)
resulturl = models.URLField(null=True)
date = models.DateField(default=current_day)
resultlist = models.ManyToManyField(Crew,through='Result')
crew_size = models.IntegerField(default=1,verbose_name='Nr of rowers per crew (1, 2, 4, 8)')
resulturl = models.URLField(null=True, verbose_name='URL Link to results')
date = models.DateField(default=current_day, verbose_name='Race Date')
#resultlist = models.ManyToManyField(Result,through='Result')
crew_size = models.IntegerField(default=1,verbose_name='Nr of rowers per crew (1, 2, 4, 8)',
choices=((1,1),(2,2),(4,4),(8,8)))
verified = models.BooleanField(default=False)
processed = models.BooleanField(default=True)
processed = models.BooleanField(default=False)
class Meta:
unique_together = ('date','name')
@@ -93,10 +97,87 @@ class Race(models.Model):
super(Race, self).save(*args, **kwargs)
def validate(self):
if len(self.results.all()) < 2:
self.verified = False
self.save()
return False
l = self.results.all()[0].crew.size()
for result in self.results.all():
if result.crew.size() != l:
self.verified = False
self.save()
return False
if l not in [1,2,4,8]:
self.verified = False
self.save()
return False
results = self.results.all()
crews = []
athletes = []
for result in results:
crews.append(result.crew.id)
for athlete in result.crew.athletes.all():
athletes.append(athlete.id)
if len(crews) != len(set(crews)):
self.verified = False
self.save()
return False
if len(athletes) != len(set(athletes)):
self.verified = False
self.save()
return False
self.verified = True
self.save()
def process(self):
if not self.verified:
if not self.validate():
return False
if self.processed:
return True
# validate the race
results = self.results.all().order_by('order')
crews = []
ranks = []
for result in results:
crew = result.crew
crewdict = {}
for athlete in crew.athletes.all():
crewdict[athlete.id] = trueskill.Rating(
athlete.trueskill_mu, athlete.trueskill_sigma)
crews.append(crewdict)
ranks.append(result.order)
rated_crews = trueskill.rate(crews, ranks)
for crew in rated_crews:
for id, rating in crew.items():
athlete = Athlete.objects.get(id=id)
athlete.trueskill_mu = rating.mu
athlete.trueskill_sigma = rating.sigma
athlete.save()
self.processed = True
self.save()
return True
class raceForm(forms.ModelForm):
class Meta:
model = Race
fields = ['name','date','resulturl','crew_size','resultlist']
fields = ['name','date','resulturl','crew_size']
class Result(models.Model):
@@ -107,7 +188,14 @@ class Result(models.Model):
order = models.PositiveIntegerField()
class Meta:
unique_together = ('crew','race','order')
unique_together = ('crew','order')
def __str__(self):
return u'{r}: {o} - {c}'.format(
r=self.race,
o=self.order,
c=self.crew,
)
def save(self, *args, **kwargs):
allresults = self.race.results.all()