@@ -101,6 +101,76 @@ def parcours_chrono_list_dist(parcours:Parcours, dist_stand:list[int]):
101101 else :
102102 break
103103
104+ def get_passage_data (passage :Passage )-> dict :
105+ data = {'dossard' :passage .inscription .dossard ,
106+ 'name' :passage .inscription .inscrit .name ,
107+ 'time_stamp' :passage .time_stamp ,
108+ 'parcours' :[]}
109+
110+ user_passages :list [Passage ] = Passage .query .filter (Passage .inscription == passage .inscription , Passage .time_stamp <= passage .time_stamp ).all ()
111+ if len (user_passages )> 0 :
112+ first_passage = user_passages [0 ]
113+ for stand , dist in zip (passage .inscription .parcours .iter_chrono_list (), passage .inscription .parcours .get_chrono_dists ()):
114+ if len (user_passages )> 0 and stand == user_passages [0 ].get_stand ():
115+ delta = user_passages [0 ].time_stamp - first_passage .time_stamp
116+ days = delta .days
117+ hours , remainder = divmod (delta .seconds , 3600 )
118+ minutes , seconds = divmod (remainder , 60 )
119+ delta = f"{ f'{ days } days, ' if days > 0 else '' } { hours :02} :{ minutes :02} :{ seconds :02} "
120+ user_passages .pop (0 )
121+ succes = True
122+ elif len (user_passages )> 0 :
123+ delta = None
124+ succes = False
125+ else :
126+ succes = None
127+ delta = None
128+
129+ data ['parcours' ].append ({'stand' :stand , 'dist' :round (dist , 3 ), 'delta' :delta , 'succes' :succes })
130+ for p in user_passages :
131+ succes = None
132+ delta = p .time_stamp - first_passage .time_stamp
133+ days = delta .days
134+ hours , remainder = divmod (delta .seconds , 3600 )
135+ minutes , seconds = divmod (remainder , 60 )
136+ delta = f"{ f'{ days } days, ' if days > 0 else '' } { hours :02} :{ minutes :02} :{ seconds :02} "
137+ data ['parcours' ].append ({'stand' :p .get_stand (), 'dist' :None , 'delta' :delta , 'succes' :succes })
138+
139+ return data
140+
141+ def get_key_passage_data (key :PassageKey ):
142+ passage :Passage
143+ data = []
144+ for passage in Passage .query .filter_by (key = key ).order_by (Passage .time_stamp .asc ()).all ():
145+ data .append (get_passage_data (passage ))
146+
147+ '''passage_user = passage.inscription.inscrit
148+ passage_stand = passage.key.stands.filter_by(parcours=passage.inscription.parcours).first()
149+ passage_chronos_list = list(passage.inscription.parcours.iter_chrono_list())
150+
151+ user_passages = Passage.query.filter(Passage.inscription==passage.inscrit, Passage.time_stamp<=passage.time_stamp).all()
152+ passage_data = [{'stand':stand, 'dist':dist} for stand, dist in zip(passage.inscription.parcours.iter_chrono_list(), passage.inscription.parcours.get_chrono_dists())]
153+ offset = 0
154+ for index, passed_passage in enumerate(user_passages):
155+ index+=offset
156+ if index +1 >= len(passage_chronos_list):
157+ passage_data.append({'user':False})
158+ for stand in passage_chronos_list[index:]:
159+ if passed_stand_id == stand:
160+ ic(user_passages_passage[passage_user.id], Passage.query.get(user_passages_passage[passage_user.id][0]), Passage.query.get(user_passages_passage[passage_user.id][index]))
161+ return_list.append(True)
162+ delta = Passage.query.get(user_passages_passage[passage_user.id][index]).time_stamp-Passage.query.get(user_passages_passage[passage_user.id][0]).time_stamp
163+ days = delta.days
164+ hours, remainder = divmod(delta.seconds, 3600)
165+ minutes, seconds = divmod(remainder, 60)
166+ delta_list.append(f"{f'{days} days, 'if days>0 else ''}{hours:02}:{minutes:02}:{seconds:02}")
167+ break
168+ else:
169+ return_list.append(None)
170+ delta_list.append(None)
171+ offset+=1'''
172+
173+ return data
104174
105175@set_route (passages , '/chrono/<key_code>' )
106176def chrono_page (key_code ):
@@ -111,7 +181,8 @@ def chrono_page(key_code):
111181 flash('l\' edition n\' est pas aujourd\' hui', 'warning')
112182 return redirect(url_for("admin.editions.passages.chrono_home")) """
113183
114- key_passages = []
184+ key_passages = get_key_passage_data (key )
185+ '''key_passages = []
115186 user_passages_stand = {}
116187 user_passages_passage = {}
117188 passage:Passage
@@ -161,7 +232,7 @@ def chrono_page(key_code):
161232 dist += element.get_dist()
162233
163234 key_passages.append((passage, passage_chronos_list, return_list, delta_list, dist_list))
164-
235+ '''
165236 ic (key_passages )
166237 return render_template ('chrono.html' , user_data = user , key = key , passages = reversed (key_passages ))
167238
0 commit comments