Cover Template for Bootstrap
+ Escape Game
@@ -36,10 +36,8 @@
{% endfor %}{% block 'contenu' %}{% endblock %}
-
-
diff --git a/app/apps.py b/app/apps.py
index efdbf2e..c58fd57 100644
--- a/app/apps.py
+++ b/app/apps.py
@@ -3,4 +3,4 @@ from django.apps import AppConfig
class AppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app'
- nb_challenges = 5
+ nb_challenges = 3
diff --git a/app/forms.py b/app/forms.py
index db8f373..62df739 100644
--- a/app/forms.py
+++ b/app/forms.py
@@ -12,7 +12,6 @@ def validateEquipe(value):
class LoginForm(forms.Form):
equipe = forms.DecimalField(label="Code équipe", min_value=1000, max_value=9999, decimal_places=0, validators=[validateEquipe])
-
-class CreateGameForm(forms.Form):
- nb_equipes = forms.DecimalField(label="Nombre d'équipes", min_value=0, max_value=10, decimal_places=0)
- nb_challenges = forms.DecimalField(label="Nombre de challenges", min_value=0, max_value=10, decimal_places=0)
+
+class ZoneForm(forms.Form):
+ code = forms.DecimalField(label="Code", min_value=1000, max_value=9999, decimal_places=0)
diff --git a/app/functions.py b/app/functions.py
index a49b11e..35b0560 100644
--- a/app/functions.py
+++ b/app/functions.py
@@ -5,6 +5,8 @@ from datetime import datetime
def getMaxChallenge(equipe):
max_rank = Challenge.objects.filter(equipe=equipe).aggregate(max_rank=Max("rank"))['max_rank']
+ if max_rank is None:
+ return None
try:
challenge = Challenge.objects.filter(equipe=equipe, rank=max_rank)[0]
return challenge
@@ -16,25 +18,30 @@ 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.
+La fonction retourne None si le nombre total de challenges a déjà été atteint
"""
-def createChallenge(equipe,prevZone=None):
+def createChallenge(equipe):
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 == 0:
+ challenge = Challenge(equipe=equipe,zone=attributeZone(),rank=1)
+ challenge.save()
+ return challenge
if max_rank < apps.get_app_config('app').nb_challenges:
- challenge = Challenge(equipe=equipe,zone=attributeZone(prevZone))
+ challenge = Challenge(equipe=equipe,zone=attributeZone(equipe),rank=max_rank+1)
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:
+def attributeZone(equipe=None):
+ if equipe 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
@@ -45,7 +52,20 @@ def attributeZone(zone=None):
zone.save()
return zone
else:
- return None#todo
+ current_challenge = getMaxChallenge(equipe)#challenge en cours
+ current_zone = current_challenge.zone#zone du dernier challenge en cours
+
+ zone_id_list = Distance.objects.filter(zone1=current_zone).order_by('-distance').values_list('zone2', flat=True)#liste des zones des plus éloignées à la plus proche de la dernière zone
+ for zone_id in zone_id_list:
+ zone = Zone.objects.filter(pk=zone_id)[0]
+ if zone.etat == 'L' and not Challenge.objects.filter(equipe=equipe, zone=zone):
+ zone.etat = 'A'
+ zone.save()
+ return zone
+ return None
+
+def getZonesHistory(equipe):
+ zones = Challenge.objects.filter(equipe=equipe)
def startEquipeTime(equipe):
if equipe.start_time is None:
@@ -62,7 +82,7 @@ def startChallengeTime(challenge):
challenge.start_time = datetime.now()
challenge.save()
-def stopChallengeTime(equipe):
+def stopChallengeTime(challenge):
if challenge.end_time is None:
challenge.end_time = datetime.now()
challenge.save()
diff --git a/app/models.py b/app/models.py
index 9163a04..6656639 100644
--- a/app/models.py
+++ b/app/models.py
@@ -44,4 +44,4 @@ class Challenge(models.Model):
start_time = models.TimeField(null=True, blank=True)
end_time = models.TimeField(null=True, blank=True)
def __str__(self):
- return self.equipe.nom+" ("+str(self.code)+") -> rang : "+str(self.rank)
+ return self.equipe.nom+" -> salle : "+self.zone.nom+" rang : "+str(self.rank)
diff --git a/app/templates/app/setEquipe.html b/app/templates/app/setEquipe.html
index 85eb6ae..6a6773d 100644
--- a/app/templates/app/setEquipe.html
+++ b/app/templates/app/setEquipe.html
@@ -8,5 +8,8 @@
{% elif zone %}
Bienvenue équipe {{equipe_nom}} ! Pour votre prochain challenge, rendez-vous dans la zone {{zone}}
et flashez le QR code pour connaître votre prochaine mission !
+ {% elif formated_total_time %}
+
Félicitations, vous avez terminé cet Escape Game en {{formated_total_time}} !