Skip to content

Commit efb6473

Browse files
30.11.2024_mise en place de la ggeneration des resultats et ajouts mp pour choisir la localisation du point de rdv
1 parent a251108 commit efb6473

21 files changed

Lines changed: 582 additions & 213 deletions

File tree

create_db.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
connection = pymysql.connect(host='localhost',
88
user='root',
9-
password=os.environ.get('db_password'))
9+
password=os.environ['db_password'])
1010

1111
with connection:
1212
'''with connection.cursor() as cursor:

flask_app/admin/editions/__init__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
from flask_app.admin.editions.dossard import dossard
88
from flask_app.admin.editions.passages import passages
99
from flask_app.admin.editions.parcours import parcours
10+
from flask_app.admin.editions.result import result
1011
from sqlalchemy import or_
1112

1213
editions = Blueprint('editions', __name__, template_folder='templates')
1314
editions.register_blueprint(dossard)
1415
editions.register_blueprint(passages)
1516
editions.register_blueprint(parcours)
17+
editions.register_blueprint(result)
1618

1719
@set_route(editions, '/event/<event_name>/editions', methods=['POST', 'GET'])
1820
@login_required
@@ -73,7 +75,6 @@ def modify_edition_page(event_name, edition_name):
7375
'rdv_lng':edition.rdv_lng,
7476
'parcours':[str((p.name, p.description)) for p in edition.parcours]})
7577
form.parcours.choices=[str((p.name, p.description)) for p in event.parcours.filter(or_(Parcours.archived==False, Parcours.editions.any(Edition.id==edition.id))).all()]
76-
ic(dir(form.parcours)) # type: ignore
7778

7879
#? desactiver le champs si dates deja passé
7980
form.edition_date.render_kw.pop("disabled", None)
@@ -95,8 +96,6 @@ def modify_edition_page(event_name, edition_name):
9596
if edition.last_inscription <= datetime.now():
9697
form.last_inscription.render_kw["disabled"]= "disabled"
9798
#? fin desactivation des champs
98-
ic(form.parcours.data)
99-
ic([str((p.name, p.description)) for p in edition.parcours])
10099

101100
if form.validate_on_submit():
102101
print(form.parcours.data)

flask_app/admin/editions/dossard/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ def generate_dossard(event_name, edition_name):
2929

3030
@socketio.on('connect', namespace='/dossard')
3131
def dossard_connect(auth):
32-
ic(current_user, auth, request.sid)
3332
if current_user.is_authenticated and auth.get('event_id') and auth.get('edition_id'):
3433
event:Event = Event.query.get(auth['event_id'])
3534
if not event or event.createur != current_user:
@@ -47,7 +46,6 @@ def dossard_disconnect():
4746
@socketio.on('change_dossard', namespace='/dossard')
4847
def change_dossard(data):
4948
inscription = Inscription.query.get(data['inscription_id'])
50-
ic(data)
5149
if (not inscription and isinstance(data['new_dossard'], int) and not current_user.is_authenticated and inscription.event.createur == current_user):
5250
return False
5351
if Inscription.query.filter(Inscription.dossard == data['new_dossard'], Inscription.edition==inscription.edition, Inscription.id!=inscription.id).first():
@@ -79,7 +77,6 @@ def generate_all_dossard(event_name, edition_name):
7977
edition : Edition= event.editions.filter_by(name=edition_name).first_or_404()
8078
user = current_user
8179

82-
ic(edition.inscriptions.count())
8380
dossard_nb = [inscription.dossard for inscription in edition.inscriptions.filter(Inscription.dossard!=None).all()]
8481
last_dossard = 1
8582
for inscription in edition.inscriptions.filter(Inscription.dossard==None).all():

flask_app/admin/editions/parcours/__init__.py

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,28 @@ def get_parcours_passages(parcours):
3535
inscriptions:list[Inscription] = Inscription.query.filter_by(edition=edition, parcours=parcours).all()
3636
data = []
3737
for coureur in inscriptions:
38-
passage = coureur.passages.order_by(Passage.time_stamp.desc()).first()
38+
passage = coureur.get_last_passage()
3939
first_passage:Passage = coureur.passages.order_by(Passage.time_stamp.asc()).first()
4040
if coureur.has_started():
4141
pass_data = get_passage_data(passage, json=True)
4242
pass_data.update({'started':True, 'start_time':first_passage.time_stamp.timestamp(), 'id':coureur.id, 'finish':coureur.has_finish(), 'all_right':coureur.has_all_right(), 'end':coureur.end})
4343
data.append(pass_data)
4444
else:
45-
data.append({'started':False, 'id':coureur.id, 'dossard':coureur.dossard, 'name':coureur.inscrit.name})
45+
pass_data = {'parcours':[], 'started':False, 'id':coureur.id, 'dossard':coureur.dossard, 'name':coureur.inscrit.name}
46+
for stand, dist in zip(coureur.parcours.iter_chrono_list(), coureur.parcours.get_chrono_dists()):
47+
pass_data['parcours'].append({'stand':{'name':stand.name}, 'dist':round(dist, 3), 'delta':'', 'succes':None})
48+
data.append(pass_data)
4649
return data
4750

4851
@socketio.on('launch_parcours', namespace='/edition/parcours')
4952
def launch_parcours(data):
50-
parcours = Parcours.query.get(data['parcours_id'])
53+
parcours = Parcours.query.get(data.get('parcours_id'))
5154
edition = Edition.query.get(session['room'].split('-')[3])
5255
if parcours is not None and data.get('start_time'):
5356
start_time =datetime.fromtimestamp(data['start_time']/1000)
57+
inscription:Inscription
5458
for inscription in edition.inscriptions.filter(Inscription.parcours==parcours).all():
55-
if inscription.passages.count()==0:
59+
if inscription.has_started() and inscription.present:
5660
passage = Passage(time_stamp=start_time, inscription_id = inscription.id)
5761
db.session.add(passage)
5862
db.session.commit()
@@ -64,7 +68,55 @@ def launch_parcours(data):
6468
pass_data.update({'started':True, 'parcours_id':inscription.parcours.id, 'start_time':first_passage.time_stamp.timestamp() , 'id':inscription.id, 'finish':inscription.has_finish(), 'all_right':inscription.has_all_right(), 'end':inscription.end})
6569
emit('new_passage', pass_data, namespace='/edition/parcours', to=f'edition-parcours-{inscription.event.id}-{inscription.edition.id}')
6670

67-
71+
@socketio.on('launch_parcours', namespace='/edition/parcours')
72+
def stop_parcours(data):
73+
parcours = Parcours.query.get(data.get('parcours_id'))
74+
edition = Edition.query.get(session['room'].split('-')[3])
75+
76+
if parcours is not None:
77+
inscription:Inscription
78+
for inscription in edition.inscriptions.filter(Inscription.parcours==parcours).all():
79+
if inscription.end is None:
80+
if inscription.has_started():
81+
if inscription.has_finish():
82+
if inscription.has_all_right():
83+
end = 'finish'
84+
else:
85+
end = 'disqual'
86+
else:
87+
end='abandon'
88+
else:
89+
end = 'absent'
90+
91+
inscription.end = end
92+
db.session.commit()
93+
emit('stop', {'type':end, 'inscription_id':inscription.id}, namespace='/edition/parcours', to=f'edition-parcours-{inscription.event.id}-{inscription.edition.id}')
94+
95+
@socketio.on('disqualify', namespace='/edition/parcours')
96+
def disqualify(data):
97+
inscription = Inscription.query.get(data.get('inscription_id'))
98+
if inscription:
99+
inscription.end = 'disqual'
100+
db.session.commit()
101+
emit('stop', {'type':'disqual', 'inscription_id':inscription.id}, namespace='/edition/parcours', to=f'edition-parcours-{inscription.event.id}-{inscription.edition.id}')
102+
103+
@socketio.on('abandon', namespace='/edition/parcours')
104+
def abandon(data):
105+
if data.get('inscription_id'):
106+
inscription = Inscription.query.get(data['inscription_id'])
107+
inscription.end = 'abandon'
108+
db.session.commit()
109+
emit('stop', {'type':'abandon', 'inscription_id':inscription.id}, namespace='/edition/parcours', to=f'edition-parcours-{inscription.event.id}-{inscription.edition.id}')
110+
111+
@socketio.on('finish', namespace='/edition/parcours')
112+
def finish(data):
113+
if data.get('inscription_id'):
114+
inscription:Inscription = Inscription.query.get(data['inscription_id'])
115+
if not inscription.has_finish():
116+
return False
117+
inscription.end = 'finish'
118+
db.session.commit()
119+
emit('stop', {'type':'finish', 'inscription_id':inscription.id}, namespace='/edition/parcours', to=f'edition-parcours-{inscription.event.id}-{inscription.edition.id}')
68120

69121
@set_route(parcours, '/event/<event_name>/editions/<edition_name>/parcours')
70122
@login_required
@@ -75,5 +127,9 @@ def view(event_name, edition_name):
75127
edition:Edition = event.editions.filter_by(name=edition_name).first_or_404()
76128
parcours = edition.parcours
77129

78-
return render_template('edition_parcours.html', parcours_data=parcours, edition_data = edition, event_data=event, user_data=user, event_modif=True, edition_sidebar=True)
130+
if 0 and edition.edition_date>datetime.now():
131+
flash('l\'edition n\'as pas encore commencé', 'warning')
132+
return redirect(url_for('admin.editions.modify_edition_page', edition_name=edition.name, event_name=event.name))
133+
134+
return render_template('edition_parcours.html', parcours_data=parcours, edition_data = edition, event_data=event, user_data=user, event_modif=True, edition_sidebar=True, now=datetime.now())
79135

0 commit comments

Comments
 (0)