1- from flask import Blueprint , flash , render_template , redirect
2- from flask_app import admin_required , db , set_route
1+ from flask import Blueprint , flash , render_template , redirect , url_for , request , session
2+ from flask_app import admin_required , db , set_route , socketio
33from flask_app .admin .editions .forms import Edition_form
44from flask_login import login_required , current_user
5- from flask_app .models import Event , Parcours , Edition
5+ from flask_app .models import Event , Parcours , Edition , Inscription
66from datetime import datetime
7+ from flask_socketio import join_room , leave_room
78
89dossard = Blueprint ('dossard' , __name__ , template_folder = 'templates' )
910
10- @set_route (dossard , '/event/<event_name>/editions/<edition_name>/dossard ' , methods = ['POST' , 'GET' ])
11+ @set_route (dossard , '/event/<event_name>/editions/<edition_name>/modify_dossard ' , methods = ['POST' , 'GET' ])
1112@login_required
1213@admin_required
1314def dossard_page (event_name , edition_name ):
1415 user = current_user
15- return render_template ('dossard.html' , user_data = user , pyscript = True )
16+ return render_template ('dossard.html' , user_data = user , pyscript = True )
17+
18+
19+ @set_route (dossard , '/event/<event_name>/editions/<edition_name>/dossard' , methods = ['POST' , 'GET' ])
20+ @login_required
21+ @admin_required
22+ def generate_dossard (event_name , edition_name ):
23+ event : Event = Event .query .filter_by (name = event_name ).first_or_404 ()
24+ edition : Edition = event .editions .filter_by (name = edition_name ).first_or_404 ()
25+ user = current_user
26+
27+
28+ return render_template ('generate_dossard.html' , user_data = user , event_data = event , edition_data = edition , now = datetime .now (), inscriptions = edition .inscriptions , event_modif = True , edition_sidebar = True )
29+
30+ @socketio .on ('connect' , namespace = '/dossard' )
31+ def dossard_connect (auth ):
32+ ic (current_user , auth , request .sid )
33+ if current_user .is_authenticated and auth .get ('event_id' ) and auth .get ('edition_id' ):
34+ event :Event = Event .query .get (auth ['event_id' ])
35+ if not event or event .createur != current_user :
36+ return False # connection not allowed
37+ edition = event .editions .filter_by (id = auth ['edition_id' ]).first ()
38+ if not edition :
39+ return False # connection not allowed
40+ else :
41+ False # connection not allowed
42+
43+ @socketio .on ('disconnect' , namespace = '/dossard' )
44+ def dossard_disconnect ():
45+ pass
46+
47+ @socketio .on ('change_dossard' , namespace = '/dossard' )
48+ def change_dossard (data ):
49+ inscription = Inscription .query .get (data ['inscription_id' ])
50+ ic (data )
51+ if (not inscription and isinstance (data ['new_dossard' ], int ) and not current_user .is_authenticated and inscription .event .createur == current_user ):
52+ return False
53+ if Inscription .query .filter (Inscription .dossard == data ['new_dossard' ], Inscription .edition == inscription .edition , Inscription .id != inscription .id ).first ():
54+ return {'erreur' :'dossard déjà utilisé' }
55+ inscription .dossard = data ['new_dossard' ]
56+ db .session .commit ()
57+ return True
58+
59+ @set_route (dossard , '/event/<event_name>/editions/<edition_name>/dossard/generate' , methods = ['POST' , 'GET' ])
60+ @login_required
61+ @admin_required
62+ def generate_all_dossard (event_name , edition_name ):
63+ event : Event = Event .query .filter_by (name = event_name ).first_or_404 ()
64+ edition : Edition = event .editions .filter_by (name = edition_name ).first_or_404 ()
65+ user = current_user
66+
67+ ic (edition .inscriptions .count ())
68+ dossard_nb = [inscription .dossard for inscription in edition .inscriptions .filter (Inscription .dossard != None ).all ()]
69+ last_dossard = 1
70+ for inscription in edition .inscriptions .filter (Inscription .dossard == None ).all ():
71+ while last_dossard in dossard_nb :
72+ last_dossard += 1
73+ inscription .dossard = last_dossard
74+ last_dossard += 1
75+ db .session .commit ()
76+
77+ return redirect (url_for ("admin.editions.dossard.generate_dossard" , event_name = event .name , edition_name = edition .name ))
0 commit comments