Created
June 27, 2021 23:15
-
-
Save developerfromjokela/5c359b1d23d70103cd9cc02a95a2b3f1 to your computer and use it in GitHub Desktop.
Parse Wilma Course Tray schedule generator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const {parseData} = require('./utils'); | |
let jsonConf = "{\"others\":[{\"data\":\"1,585,75\",\"text\":\"vENA11.1, tukikurssi\"},{\"data\":\"1,670,105\",\"text\":\"vSAA05.1\"},{\"data\":\"1,785,75\",\"text\":\"vMAA05.3\"},{\"data\":\"1,870,75\",\"text\":\"vYH02.3\"},{\"data\":\"2,585,75\",\"text\":\"vSAA05.1\"},{\"data\":\"2,670,105\",\"text\":\"vÄI04.2\"},{\"data\":\"2,870,75\",\"text\":\"vOP06.3, HYK20C, klo 13.05-13.20\"},{\"data\":\"3,495,75\",\"text\":\"vYH02.3\"},{\"data\":\"3,585,75\",\"text\":\"vÄI04.2\"},{\"data\":\"3,670,105\",\"text\":\"vENA11.1, tukikurssi\"},{\"data\":\"4,585,75\",\"text\":\"vMAA05.3\"},{\"data\":\"4,670,105\",\"text\":\"vSAA05.1\"},{\"data\":\"4,785,75\",\"text\":\"vYH02.3\"},{\"data\":\"5,585,75\",\"text\":\"vENA11.1, tukikurssi\"},{\"data\":\"5,670,105\",\"text\":\"vMAA05.3\"},{\"data\":\"5,785,75\",\"text\":\"vÄI04.2\"}],\"checksum\":\"CE2089E\"}"; | |
jsonConf = JSON.parse(jsonConf); | |
let multiplier = 1; | |
let globalItems = []; | |
jsonConf.others.forEach(item => { | |
let items = parseData(item.data, item.text, multiplier, 5); | |
items.forEach(item => {globalItems.push(item)}); | |
}); | |
for (let i = 1; i < 6; i++) { | |
let day = ""; | |
switch (i) { | |
case 1: | |
day = "maanantai"; | |
break; | |
case 2: | |
day = "tiistai" | |
break; | |
case 3: | |
day = "keskiviikko" | |
break; | |
case 4: | |
day = "torstai" | |
break; | |
case 5: | |
day = "perjantai" | |
break; | |
} | |
console.log(day, ":"); | |
let dayItems = globalItems.filter(day => {return i === day.day}); | |
dayItems.forEach(item => { | |
console.log(""); | |
console.log(" ", item.name); | |
console.log(" ", item.start, " - ", item.end); | |
console.log(""); | |
}); | |
console.log("-------------\n"); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const seed = 480; | |
/** | |
* Get multiplier number | |
* @param item all items in tray | |
* @returns {number|number} | |
*/ | |
function getMultiplier(item) { | |
let grValue = 0; | |
item.forEach(item => { | |
if (item.tableValue) { | |
let rows = item.tableValue.split(";"); | |
rows.forEach(row => { | |
let cols = row.split(',').map(i => {return parseInt(i)}); | |
if (cols.length >= 2 && cols[1] > seed) { | |
let dividingParam = cols.length === 2 ? 20 : cols[2] / 6; | |
let grValResult = (cols[1] - seed) / 6 + dividingParam; | |
grValue = Math.max(grValue, grValResult); | |
} | |
}); | |
} | |
}) | |
// If over 100, divide. Otherwise return 1; | |
return grValue > 100 ? 100 / grValue : 1 | |
} | |
function parseData(data, text, multiplier = 1, days = 5) { | |
let items = []; | |
let dataRows = data.split(';'); | |
dataRows.forEach(dataRow => { | |
let dataColumns = dataRow.split(',').map(i => {return parseInt(i)}); | |
if (dataColumns.length >= 2) { | |
let currentDay = dataColumns[0]-1; | |
if (currentDay < days) { | |
let css = {}; | |
if (dataColumns[1] <= seed) { | |
css.top = "-1px"; | |
css.paddingBottom = "0px"; | |
} else { | |
css.top = multiplier * (dataColumns[1]/6)+'%'; | |
} | |
css.paddingTop = '4px'; | |
css.height = dataColumns.length === 2 ? 20 * multiplier+'%' : multiplier * (dataColumns[2]/6)+'%' | |
let timeValues = {start: dataColumns[1], end: dataColumns[1]+(dataColumns.length === 2 ? 20 : dataColumns[2])}; | |
let num, start = `${Math.floor(timeValues.start/60)}:${num=timeValues.start % 60,num<10?'0'+num:num}`; | |
let end = `${Math.floor(timeValues.end/60)}:${num=timeValues.end % 60,num<10?'0'+num:num}`; | |
items.push({css, start, end, name: text, day: currentDay+1}); | |
} | |
} | |
}); | |
return items; | |
} | |
module.exports = { | |
parseData, | |
getMultiplier | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment