-
Notifications
You must be signed in to change notification settings - Fork 21
/
JPResultsExport.py
86 lines (70 loc) · 2.76 KB
/
JPResultsExport.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from math import floor
import Model
from GetResults import GetResults
from FitSheetWrapper import FitSheetWrapperXLSX
from ReadSignOnSheet import SyncExcelLink
from UCIExcel import formatUciId
JPResultFields = '''
body_number racer_code family_name first_name team uci_id gender birth_date entry_status rank result_status lap goal_time category_code
'''.split()
def toInt( n ):
try:
return int(n.split()[0])
except Exception:
return n
def getStatusName( s ):
if s == Model.Rider.Finisher:
return 'FIN'
if s == Model.Rider.DQ:
return 'DSQ'
return Model.Rider.statusNames[s]
def JPResultsExport( workbook, sheet ):
race = Model.race
if not race:
return
SyncExcelLink( race )
sheetFit = FitSheetWrapperXLSX( sheet )
titleStyle = workbook.add_format({'bold':True})
leftAlignStyle = workbook.add_format()
rightAlignStyle = workbook.add_format({'align':'right'})
timeStyle = workbook.add_format({'num_format':'hh:mm:ss', 'align':'right'})
Finisher = Model.Rider.Finisher
row = 0
for cat in race.getCategories( startWaveOnly = False, uploadOnly = True ):
results = GetResults( cat )
if not results:
continue
gender = None
for rr in results:
if row == 0:
for col, field in enumerate(JPResultFields):
sheetFit.write( row, col, field, titleStyle, bold=True )
row += 1
try:
finishTime = (rr.lastTime - rr.raceTimes[0]) if rr.status == Finisher else None
if race.roadRaceFinishTimes:
finishTime = floor(finishTime)[0] # Truncate decimal seconds.
finishTime /= (24.0*60.0*60.0) # Convert to fraction of a day.
except Exception as e:
finishTime = None
valueStyle = {
'body_number': ( rr.num, rightAlignStyle ),
'racer_code': ( getattr(rr, 'License', None), leftAlignStyle ),
'family_name': ( getattr(rr, 'LastName', None), leftAlignStyle ),
'first_name': ( getattr(rr, 'FirstName', None), leftAlignStyle ),
'team': ( getattr(rr, 'Team', None), leftAlignStyle ),
'uci_id': ( formatUciId(getattr(rr, 'UCIID', None)) if hasattr(rr, 'UCIID') else None, leftAlignStyle ),
'gender': ( gender, leftAlignStyle ),
'birth_date': ( getattr(rr, 'DateOfBirth', None), leftAlignStyle ),
'entry_status': ( getattr(rr, 'EntryStatus', None), leftAlignStyle ),
'rank': ( rr.pos if rr.status == Finisher else None, rightAlignStyle ),
'result_status': ( getStatusName(rr.status), leftAlignStyle ),
'lap': ( rr.laps if rr.status == Finisher else None, rightAlignStyle ),
'goal_time': ( finishTime if rr.status == Finisher else None, timeStyle ),
'category_code': ( cat.name, leftAlignStyle ),
}
for col, field in enumerate(JPResultFields):
value, style = valueStyle[field]
if value is not None:
sheetFit.write( row, col, value, style )
row += 1