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
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()
|
|
|