Skip to content

Instantly share code, notes, and snippets.

@developerfromjokela
Created June 27, 2021 23:15
Show Gist options
  • Save developerfromjokela/5c359b1d23d70103cd9cc02a95a2b3f1 to your computer and use it in GitHub Desktop.
Save developerfromjokela/5c359b1d23d70103cd9cc02a95a2b3f1 to your computer and use it in GitHub Desktop.
Parse Wilma Course Tray schedule generator
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");
}
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