-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSMEs.gs
122 lines (105 loc) · 3.6 KB
/
SMEs.gs
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
const SMES_SHEET = 'SMEs';
const SMES_RANGE_WITHOUT_EXTRA_START = 'B2:D';
const SMES_RANGE_START = 'B2:F';
const SME_SPECIALIZATION_RANGE = 'E2:E';
const SME_SCRUBS_RANGE = 'F2:F';
const SME_HEADER = [['Name', 'Ldap', 'Shift', 'Specialization', 'Scrubs']];
const SME_HEADER_RANGE = 'B1:F1';
const SME_SCHEMA = ['name', 'ldap', 'shift', 'specialization', 'scrubs'];
/**
*
const SHIFT_NO_SCRUBS = 'no_scrub';
const SHIFT_NEVER_SCRUBS = 'never_scrub';
const SHIFT_NORMAL_SCRUBS = 'normal';
*/
const COLOUR_NO_SCRUBS = '#ff3333';
const COLOUR_NORMAL_SCRUBS = '#33ff33';
const COLOUR_NEVER_SCRUBS = '#3333ff';
function generateSMEs() {
exportSMEs_();
generateSMEHeaderAndRules_();
}
function exportSMEs_() {
preMap = cachePreSMESetting_();
Utils.clear(SMES_SHEET, Utils.makeRangeWithoutLastRow(SMES_SHEET, SMES_RANGE_START));
// Logger.log(" key = " + SHIFT_MAP.keys().next().value);
smes = SchedulesProvider.getSMEs(SITE, SHARD);
raws = [];
smes.forEach(
sme => {
raw = [];
raw.push(sme.name);
raw.push(sme.ldap);
raw.push(sme.shift);
raw.push(getSpecialization_(sme, preMap));
raw.push(getScrubsStates_(sme, preMap));
raws.push(raw);
}
);
Utils.exportRawDataToSheet(SMES_SHEET, SMES_RANGE_START + (raws.length + 1), raws);
}
function generateSMEHeaderAndRules_() {
generateSMEHeader_();
if (SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SMES_SHEET).getLastRow() > 0) {
generateSMESpecializationRules_();
generateSMEScrubsRules_();
addShiftColour_();
}
}
function generateSMEHeader_() {
Utils.exportRawDataToSheet(SMES_SHEET, SME_HEADER_RANGE, SME_HEADER);
}
function generateSMESpecializationRules_() {
Utils.generateRules(SMES_SHEET, SME_SPECIALIZATION_RANGE + SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SMES_SHEET).getLastRow(), SPECIALIZATION_LIST);
}
function generateSMEScrubsRules_() {
Utils.generateRules(SMES_SHEET, Utils.makeRangeWithoutLastRow(SMES_SHEET, SME_SCRUBS_RANGE), SHIFT_SCRUBS_LIST);
}
function addShiftColour_() {
Utils.setBGBasedOnText(SMES_SHEET, Utils.makeRangeWithoutLastRow(SMES_SHEET, SME_SCRUBS_RANGE), SHIFT_NO_SCRUBS, COLOUR_NO_SCRUBS);
Utils.setBGBasedOnText(SMES_SHEET, Utils.makeRangeWithoutLastRow(SMES_SHEET, SME_SCRUBS_RANGE), SHIFT_NORMAL_SCRUBS, COLOUR_NORMAL_SCRUBS);
Utils.setBGBasedOnText(SMES_SHEET, Utils.makeRangeWithoutLastRow(SMES_SHEET, SME_SCRUBS_RANGE), SHIFT_NEVER_SCRUBS, COLOUR_NEVER_SCRUBS);
}
function getSpecialization_(sme, preMap) {
if (preMap.has(sme.ldap)) {
return preMap.get(sme.ldap).specialization;
} else {
return SEPCIALIZATION_ALL;
}
}
function getScrubsStates_(sme, preMap) {
let state = SHIFT_NORMAL_SCRUBS;
if (preMap.has(sme.ldap) && preMap.get(sme.ldap).no_scrubs == SHIFT_NEVER_SCRUBS) {
state = SHIFT_NEVER_SCRUBS;
} else if (SHIFT_MAP.get(sme.shift) == SHIFT_NO_SCRUBS) {
state = SHIFT_NO_SCRUBS;
} else {
state = SHIFT_NORMAL_SCRUBS;
}
return state;
}
function cachePreSMESetting_() {
preraws = Utils.getValues(SMES_SHEET, SMES_RANGE_START);
map = new Map();
preraws.forEach(
raw => {
// Logger.log(raw[1] + " " + raw[3] + " " + raw[4]);
map.set(raw[1], {
specialization: raw[3],
no_scrubs: raw[4]
});
}
);
// Logger.log(map);
return map;
}
function getSMEs_() {
return Utils.convertRawsToJsons(Utils.getValues(SMES_SHEET, Utils.makeRangeWithoutLastRow(SMES_SHEET, SMES_RANGE_START)), SME_SCHEMA);
}
function getScrubsSMEs_() {
return getSMEs_().filter(
function (element, index, array) {
return Utils.compareStrIgnoreCases(element.scrubs, SHIFT_NORMAL_SCRUBS);
}
);
}