-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsailingHelpers.gs
More file actions
150 lines (129 loc) · 4.83 KB
/
sailingHelpers.gs
File metadata and controls
150 lines (129 loc) · 4.83 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
class SailorResult {
constructor(sailor,total,results){
this.sailor = sailor
this.total = total
this.results = results
}
}
class SailingConstants {
constructor(){
//General
this.searchRange = 40
this.backgroundColor = '#cfe2f3'
this.borderColor = '#4a86e8'
// Race Day
this.raceDaySailorsColumn = 1
this.raceDayAddOrEditRaceColumn = 4
this.raceDayEditResultColumn = 9
this.raceDayResultsColumn = 15
this.raceDayPursuitDrillColumn = 2
this.raceDayPursuitDrillCheckboxRow = 9
this.raceDayHeaders = ['Sailors','','','Results','Race Number','Starting Order','','','Sailor','Race','Result','','','','Sailors','Total']
// Leaderboard
this.leaderboardSailorsColumn = 1
this.leaderboardAddRaceDayColumn = 4
this.leaderboardEditResultColumn = 7
this.leaderboardResultsColumn = 13
this.leaderboardHeaders = ['Sailors','','','Day','','','Sailor','Day','Result','','','','Sailors','Total']
}
}
function setVariables(searchRange = 40, leaderboard = false){
constants = new SailingConstants
backgroundColor = constants.backgroundColor
borderColor = constants.borderColor
if (leaderboard){
correctHeaders = constants.leaderboardHeaders
sailors = getData(2,constants.leaderboardSailorsColumn,searchRange)
numSailors = sailors.length
races = getData(1,constants.leaderboardResultsColumn+2,searchRange,false)
numRaces = races.length
if(numRaces){races = getRange(1,constants.leaderboardResultsColumn+2,1,numRaces)[0]}
races = races.map(function(value){
if (value instanceof Date){
value = Utilities.formatDate(value,'GMT','MMM dd')
if (value[4] == '0'){return value.slice(0,4) + value.slice(5)}
}
return value
})
racesColumn = constants.leaderboardResultsColumn+2
resultsColumn = constants.leaderboardResultsColumn
raceDay = getCell(2,constants.leaderboardAddRaceDayColumn)
inputs = getRange(2,constants.leaderboardEditResultColumn,1,3)[0]
inputNames = ['Sailor','Day','Result']
} else{
correctHeaders = constants.raceDayHeaders
sailors = getData(2,constants.raceDaySailorsColumn,searchRange)
numSailors = sailors.length
races = getData(1,constants.raceDayResultsColumn+2,searchRange,false)
numRaces = races.length
if (numRaces){races = getRange(1,constants.raceDayResultsColumn+2,1,numRaces)[0]}
racesColumn = constants.raceDayResultsColumn+2
resultsColumn = constants.raceDayResultsColumn
newResults = getData(2,constants.raceDayAddOrEditRaceColumn,numSailors)
raceNumber = getCell(2,constants.raceDayAddOrEditRaceColumn+1)
startingOrder = flattenArray(getRange(2,6,constants.raceDayAddOrEditRaceColumn+2,1))
inputs = getRange(2,constants.raceDayEditResultColumn,1,3)[0]
inputNames = ['Sailor','Race','Result']
}
}
function indexOfSailorInResults(sailor,results){
for (j = 0; j < results.length; j++){
if (compareValues(results[j].sailor,sailor)){
return j
}
}
return -1
}
function ifPursuitDrill(){
constants = new SailingConstants
return SpreadsheetApp.getActiveSheet().getRange(constants.raceDayPursuitDrillCheckboxRow,constants.raceDayPursuitDrillColumn).isChecked()
}
function getResults(){
// Needs setVariables() to have been called
// Inital results
results = []
for (i = 0; i < numSailors; i++){
result = getRange(2+i,resultsColumn,1,2+numRaces)[0]
results.push(new SailorResult(result[0],result[1],result.slice(2)))
}
// Processing sailors in results
results = results.filter(function(value){
if (value.sailor == ''){
return false
}
if (!valueInArray(value.sailor,sailors)){
return false
}
return true
})
// Adding sailors that aren't listed in results
sailorsInResults = results.map(function(value){return value.sailor})
for (i = 0; i < numSailors; i++){
if (!valueInArray(sailors[i],sailorsInResults)){
results.push(new SailorResult(sailors[i],(numSailors+1)*numRaces,new Array(numRaces).fill(`${numSailors+1} (DNF)`)))
}
}
// Processing individual results and calculating totals
for (i = 0; i < results.length; i++){
results[i].results = results[i].results.map(function(value){
if (typeof(value) == 'string' && (value.slice(0,-6) == '' || isNaN(Number(value.slice(0,-6))))){
return `${numSailors+1} (DNF)`
}
return value
})
}
results = score(results)
return results
}
function insertResults(results){
// Building input
input = [['','Sailors','Total'].concat(races)]
for (i = 0; i < numSailors; i++){
input.push([i+1].concat([results[i].sailor],[results[i].total],results[i].results))
}
// Clear area
sheet = SpreadsheetApp.getActiveSheet()
sheet.getRange(2,resultsColumn-1,sheet.getMaxRows()-(resultsColumn-1),sheet.getMaxColumns()-2).clear()
// Set results
setRange(1,resultsColumn-1,1+numSailors,3+numRaces,input)
}