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