Repository navigation
Expand file tree
/
Copy pathowlie_erasmusGuessGroups.js
More file actions
78 lines (64 loc) · 2.56 KB
/
Copy pathowlie_erasmusGuessGroups.js
File metadata and controls
78 lines (64 loc) · 2.56 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
/** function for purpose of debugging */
function owlie_erasmusGuessGroups_run(){
owlie_erasmusGuessGroups.run();
}
/**
* @package Owlie
* @author Michal Mikolas <nanuqcz@gmail.com>
* @license MIT
*/
var owlie_erasmusGuessGroups = {
/**
* Main function of this command
*/
run: function () {
// 1) PREPARE
var settings = Model.getPairs('Erasmus: Guess groups');
var groupByColumns = settings['Group by'].split(',').map(c => c.trim()
.split('`').join('')
.split('[').join('')
.split(']').join('')
);
var resultColumn = settings['Result column'];
Model.createTables({
'Erasmus': Model.getData('Erasmus'),
'Buddy': Model.getData('Buddy'),
});
// 2) GUESS GROUPS
var groupCounter = 0;
var erasmusRows = Model.sql('SELECT * FROM Erasmus WHERE ' + settings['Condition'] + ' ORDER BY ' + settings['Group by'])
for (let i in erasmusRows) {
if (owlie_erasmusGuessGroups.isPreviousSameGroup(erasmusRows, i, groupByColumns)) {
if ((i == 0) || !erasmusRows[i-1][resultColumn]) {
groupCounter++;
}
erasmusRows[i-1][resultColumn] = owlie_erasmusGuessGroups.createGroupName(groupCounter);
erasmusRows[i][resultColumn] = owlie_erasmusGuessGroups.createGroupName(groupCounter);
}
}
// 3) WRITE INTO SHEET
Model.saveData(erasmusRows);
},
/**
*
*/
isPreviousSameGroup: function(erasmusRows, i, groupByColumns) {
if (!erasmusRows[i-1]) {
return false;
}
for (let j in groupByColumns) {
var column = groupByColumns[j];
if (JSON.stringify(erasmusRows[i-1][column]) != JSON.stringify(erasmusRows[i][column])) {
return false;
}
}
return true;
},
/**
*
*/
createGroupName: function(i) {
var names = ['', 'Aurora', 'Nebula', 'Velocity', 'Equinox', 'Cosmos', 'Eclipse', 'Voltage', 'Zenith', 'Solstice', 'Nova', 'Supernova', 'Quasar', 'Pulsar', 'Galaxy', 'Comet', 'Asteroid', 'Meteor', 'Jupiter', 'Saturn', 'Pluto', 'Sunspot', 'Starburst', 'Moonbeam', 'Satellite', 'Gravity', 'Orbit', 'Apollo', 'Atlas', 'Titan', 'Gemini', 'Libra', 'Leo', 'Taurus', 'Aries', 'Aquarius', 'Capricorn', 'Sagittarius', 'Scorpio', 'Virgo', 'Cancer', 'Polaris', 'Andromeda', 'Cassiopeia', 'Cepheus', 'Lyra', 'Cygnus', 'Perseus', 'Pegasus', 'Orion', 'Carina', 'Canis', 'Centaurus', 'Cetus', 'Draco', 'Hydra', 'Lepus', 'Lupus', 'Lynx', 'Ophiuchus', 'Pisces', 'Triangulum', 'Eridanus', 'Fornax', 'Horologium', 'Mensa', 'Norma', 'Telescopium', 'Vela', 'Constellation', 'Starlight'];
return names[i] ? names[i] : i;
}
}