You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

68 lines
2.1 KiB

from .models import *
from django.db.models import Max;
from django.apps import apps
from datetime import datetime
def getMaxChallenge(equipe):
max_rank = Challenge.objects.filter(equipe=equipe).aggregate(max_rank=Max("rank"))['max_rank']
try:
challenge = Challenge.objects.filter(equipe=equipe, rank=max_rank)[0]
return challenge
except Challenge.DoesNotExist:
return None
"""
Fonction createChallenge
Ajoute un challenge à l'équipe fournie et le retourne. Si le nombre max de challenges est déjà atteint,
la fonction retourne None.
Si prevZone est fournie, la zone du nouveau challenge sera la plus éloignée possible.
"""
def createChallenge(equipe,prevZone=None):
max_rank = Challenge.objects.filter(equipe=equipe).aggregate(max_rank=Max("rank"))['max_rank']
if max_rank is None:
max_rank = 0
if max_rank < apps.get_app_config('app').nb_challenges:
challenge = Challenge(equipe=equipe,zone=attributeZone(prevZone))
challenge.save()
return challenge
else:
return None
"""
Fonction attributeZone
Cette fonction recherche une zone avec l'attribut libre et lui donne l'attribut A
Si une zone est donnée en paramètre, le zone recherchée sera la zone libre la plus éloignée de celle fournie en paramètre.
"""
def attributeZone(zone=None):
if zone is None:
max_id = Zone.objects.filter(etat='L').aggregate(max_id=Max("id"))['max_id']
if max_id is None:#aucune zone libre disponible
return None
print("max_id "+str(max_id))
pk = random.randint(1, max_id)
zone = Zone.objects.get(pk=pk)
zone.etat = 'A'
zone.save()
return zone
else:
return None#todo
def startEquipeTime(equipe):
if equipe.start_time is None:
equipe.start_time = datetime.now()
equipe.save()
def stopEquipeTime(equipe):
if equipe.end_time is None:
equipe.end_time = datetime.now()
equipe.save()
def startChallengeTime(challenge):
if challenge.start_time is None:
challenge.start_time = datetime.now()
challenge.save()
def stopChallengeTime(equipe):
if challenge.end_time is None:
challenge.end_time = datetime.now()
challenge.save()