Process subjects with the correct categories

Fixed some issues with the input data
This commit is contained in:
Norbi Peti 2021-01-04 16:35:17 +01:00
parent e92c0b1a4f
commit ab898d2344
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56
5 changed files with 149 additions and 26 deletions

View file

@ -69,7 +69,8 @@ Programtervező informatikus BSc_N (2017) [BSZKPTI-N1] mintatanterv,,,,,,,,,,,,,
◼◼◼,IBK507E00001,Bonyolultságelmélet (tehetséggondozó program),5,Kötelezően választható,Előadás,2,,2,,,,,,,,,,,,,,, ◼◼◼,IBK507E00001,Bonyolultságelmélet (tehetséggondozó program),5,Kötelezően választható,Előadás,2,,2,,,,,,,,,,,,,,,
◼◼,TEIBK507G,Bonyolultságelmélet,5,Kötelező,,,,2,2,,1,,,,,,,,,,,, ◼◼,TEIBK507G,Bonyolultságelmélet,5,Kötelező,,,,2,2,,1,,,,,,,,,,,,
◼◼◼,IBK507G,Bonyolultságelmélet gyakorlat,5,Kötelezően választható,Gyakorlat,1,,2,,,,,,,,,,,,,,, ◼◼◼,IBK507G,Bonyolultságelmélet gyakorlat,5,Kötelezően választható,Gyakorlat,1,,2,,,,,,,,,,,,,,,
◼◼◼,IBK507G00001,Bonyolultságelmélet gyakorlat (tehetséggondozó program),5,Kötelezően választható,Gyakorlat,1,,2,,,,,MKSZT,Szakmai törzsanyag,,Kötelező,,,,52,52,, ◼◼◼,IBK507G00001,Bonyolultságelmélet gyakorlat (tehetséggondozó program),5,Kötelezően választható,Gyakorlat,1,,2,,,,
,MKSZT,Szakmai törzsanyag,,Kötelező,,,,52,52,,
◼,TTIB402,Operációs rendszerek,,Kötelező,,,,4,4,2,,,,,,,,,,,,, ◼,TTIB402,Operációs rendszerek,,Kötelező,,,,4,4,2,,,,,,,,,,,,,
◼◼,TEIB402e,Operációs rendszerek,2,Kötelező,,,,2,2,,1,,,,,,,,,,,, ◼◼,TEIB402e,Operációs rendszerek,2,Kötelező,,,,2,2,,1,,,,,,,,,,,,
◼◼◼,IB402e00001,Operációs rendszerek (tehetséggondozó program),2,Kötelezően választható,Előadás,2,,2,,,,,,,,,,,,,,, ◼◼◼,IB402e00001,Operációs rendszerek (tehetséggondozó program),2,Kötelezően választható,Előadás,2,,2,,,,,,,,,,,,,,,
@ -133,7 +134,8 @@ Programtervező informatikus BSc_N (2017) [BSZKPTI-N1] mintatanterv,,,,,,,,,,,,,
◼◼◼,IB042e00001,Digitális képfeldolgozás (tehetséggondozó program),6,Kötelezően választható,Előadás,2,,2,,,,,,,,,,,,,,, ◼◼◼,IB042e00001,Digitális képfeldolgozás (tehetséggondozó program),6,Kötelezően választható,Előadás,2,,2,,,,,,,,,,,,,,,
◼◼,TEIB042g,Digitális képfeldolgozás,6,Kötelező,,,,2,2,,1,,,,,,,,,,,, ◼◼,TEIB042g,Digitális képfeldolgozás,6,Kötelező,,,,2,2,,1,,,,,,,,,,,,
◼◼◼,IB042g00002,Digitális képfeldolgozás gyakorlat (tehetséggondozó program),6,Kötelezően választható,Labor,1,,2,,,,,,,,,,,,,,, ◼◼◼,IB042g00002,Digitális képfeldolgozás gyakorlat (tehetséggondozó program),6,Kötelezően választható,Labor,1,,2,,,,,,,,,,,,,,,
◼◼◼,IB042g,Digitális képfeldolgozás gyakorlat,6,Kötelezően választható,Labor,1,,2,,,,,MKDSZ,Differenciált szakmai ismeretek,,Kötelező,,,,52,52,, ◼◼◼,IB042g,Digitális képfeldolgozás gyakorlat,6,Kötelezően választható,Labor,1,,2,,,,
,MKDSZ,Differenciált szakmai ismeretek,,Kötelező,,,,52,52,,
◼,MKDIFMATSZT,Differenciált matematikai és számítástudományi ismeretek,,Kötelező,,,,,14,,,,,,,,,,,,,, ◼,MKDIFMATSZT,Differenciált matematikai és számítástudományi ismeretek,,Kötelező,,,,,14,,,,,,,,,,,,,,
◼◼,TTMBNXK112,Diszkrét matematika II.,2,Kötelezően választható,,,,,5,2,,,,,,,,,,,,, ◼◼,TTMBNXK112,Diszkrét matematika II.,2,Kötelezően választható,,,,,5,2,,,,,,,,,,,,,
◼◼◼,TEMBNXK112E,Diszkrét matematika II. előadás,2,Kötelezően választható,,,,,2,,1,,,,,,,,,,,, ◼◼◼,TEMBNXK112E,Diszkrét matematika II. előadás,2,Kötelezően választható,,,,,2,,1,,,,,,,,,,,,
@ -832,7 +834,8 @@ Programtervező informatikus BSc_N (2017) [BSZKPTI-N1] mintatanterv,,,,,,,,,,,,,
◼◼◼◼◼,IB470G,Mobil alkalmazásfejlesztés,3,Kötelezően választható,Gyakorlat,2,,2,,,,,,,,,,,,,,, ◼◼◼◼◼,IB470G,Mobil alkalmazásfejlesztés,3,Kötelezően választható,Gyakorlat,2,,2,,,,,,,,,,,,,,,
◼◼◼◼,TEIB472E,Multiplatform alkalmazásfejlesztés C++-ban,,Kötelezően választható,,,,,3,,1,,,,,,,,,,,, ◼◼◼◼,TEIB472E,Multiplatform alkalmazásfejlesztés C++-ban,,Kötelezően választható,,,,,3,,1,,,,,,,,,,,,
◼◼◼◼◼,IB472E,Multiplatform alkalmazásfejlesztés C++-ban,4,Kötelezően választható,Előadás,2,,3,,,,,,,,,,,,,,, ◼◼◼◼◼,IB472E,Multiplatform alkalmazásfejlesztés C++-ban,4,Kötelezően választható,Előadás,2,,3,,,,,,,,,,,,,,,
◼◼◼◼,IB001e00055,Képfeldolgozó Nyári Iskola,,Kötelezően választható,Előadás,2,,3,,,,,MKSZV,Szabadon választott,,Szabadon választható,,,,10,10,, ◼◼◼◼,IB001e00055,Képfeldolgozó Nyári Iskola,,Kötelezően választható,Előadás,2,,3,,,,
,MKSZV,Szabadon választott,,Szabadon választható,,,,10,10,,
◼,TTBSZV00,Biológia SZV,,Nincs megadva,,,,0,0,,,,,,,,,,,,,, ◼,TTBSZV00,Biológia SZV,,Nincs megadva,,,,0,0,,,,,,,,,,,,,,
◼◼,TEBSZV00,Biológia SZV,,Szabadon választható,,,,2,2,,1,,,,,,,,,,,, ◼◼,TEBSZV00,Biológia SZV,,Szabadon választható,,,,2,2,,1,,,,,,,,,,,,
◼◼◼,BSZV0000325,molekuláris biológia 2 BSc szeminárium,,Szabadon választható,Előadás,2,,2,,,,,,,,,,,,,,, ◼◼◼,BSZV0000325,molekuláris biológia 2 BSc szeminárium,,Szabadon választható,Előadás,2,,2,,,,,,,,,,,,,,,
@ -1509,9 +1512,11 @@ Programtervező informatikus BSc_N (2017) [BSZKPTI-N1] mintatanterv,,,,,,,,,,,,,
◼◼◼,XN021102631,Német B2 gazdasági szaknyelv 1x2,,Szabadon választható,Gyakorlat,2,,2,,,,,,,,,,,,,,, ◼◼◼,XN021102631,Német B2 gazdasági szaknyelv 1x2,,Szabadon választható,Gyakorlat,2,,2,,,,,,,,,,,,,,,
◼◼◼,XN014102637,Német idegenforgalmi szaknyelv B2 1. szint 2x2,,Szabadon választható,Gyakorlat,4,,4,,,,,,,,,,,,,,, ◼◼◼,XN014102637,Német idegenforgalmi szaknyelv B2 1. szint 2x2,,Szabadon választható,Gyakorlat,4,,4,,,,,,,,,,,,,,,
◼◼◼,XN014102642,Angol idegenforgalmi szaknyelv B2 1. szint 2x2,,Szabadon választható,Gyakorlat,4,,4,,,,,,,,,,,,,,, ◼◼◼,XN014102642,Angol idegenforgalmi szaknyelv B2 1. szint 2x2,,Szabadon választható,Gyakorlat,4,,4,,,,,,,,,,,,,,,
◼◼◼,XN014102646,Angol idegenforgalmi szaknyelv B2 2. szint 2x2,,Szabadon választható,Gyakorlat,4,,4,,,,,MKSZD,Szakdolgozat,,Kötelező,,,,20,20,, ◼◼◼,XN014102646,Angol idegenforgalmi szaknyelv B2 2. szint 2x2,,Szabadon választható,Gyakorlat,4,,4,,,,
,MKSZD,Szakdolgozat,,Kötelező,,,,20,20,,
◼,TEIB3000G,Szakdolgozat készítése,5,Kötelező,,,,10,10,,1,,,,,,,,,,,, ◼,TEIB3000G,Szakdolgozat készítése,5,Kötelező,,,,10,10,,1,,,,,,,,,,,,
◼◼,IB3000G,Szakdolgozat készítése 1.,5,Kötelező,Gyakorlat,2,,10,,,,,,,,,,,,,,, ◼◼,IB3000G,Szakdolgozat készítése 1.,5,Kötelező,Gyakorlat,2,,10,,,,,,,,,,,,,,,
◼,TEIB3001G,Szakdolgozat készítése,6,Kötelező,,,,10,10,,1,,,,,,,,,,,, ◼,TEIB3001G,Szakdolgozat készítése,6,Kötelező,,,,10,10,,1,,,,,,,,,,,,
◼◼,IB3001G,Szakdolgozat készítése 2.,6,Kötelező,Gyakorlat,4,,10,,,,,MKSZG,Szakmai gyakorlat,,Kötelező,,,,,,,1 ◼◼,IB3001G,Szakdolgozat készítése 2.,6,Kötelező,Gyakorlat,4,,10,,,,
,MKSZG,Szakmai gyakorlat,,Kötelező,,,,,,,1
◼,IB000pi17G,Szakmai gyakorlat (2017-től felvettek részére),0,Kötelező,Gyakorlat,,320,0,,,,,,,,,,,,,,, ◼,IB000pi17G,Szakmai gyakorlat (2017-től felvettek részére),0,Kötelező,Gyakorlat,,320,0,,,,,,,,,,,,,,,

Can't render this file because it has a wrong number of fields in line 72.

89
spec.js
View file

@ -1,36 +1,91 @@
const szak = document.getElementById("szak"); const szak = document.getElementById("szak");
const lk = document.getElementById("leckekonyv"); const lk = document.getElementById("leckekonyv");
parseExcel = function (file) { promiseOnLoad = async loadable => new Promise(((resolve, reject) => (loadable.onload = ev => resolve(ev)) && (loadable.onerror = ev => reject(ev))));
parseExcel = async function (file) {
try {
const reader = new FileReader(); const reader = new FileReader();
const evpr = promiseOnLoad(reader);
reader.readAsBinaryString(file);
const ev = await evpr;
const data = ev.target.result;
reader.onload = function (e) {
const data = e.target.result;
const workbook = XLSX.read(data, { const workbook = XLSX.read(data, {
type: 'binary' type: 'binary'
}); });
workbook.SheetNames.forEach(function (sheetName) { workbook.SheetNames.forEach(function (sheetName) {
const XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); const XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
const json_object = JSON.stringify(XL_row_object); const json_object = JSON.stringify(XL_row_object);
console.log(json_object); console.log(json_object);
console.log(XL_row_object[0]["Tárgykód"]); console.log(XL_row_object[0]["Tárgykód"]);
});
}) } catch
(ex) {
};
reader.onerror = function (ex) {
console.log(ex); console.log(ex);
}; }
}
reader.readAsBinaryString(file); lk.onchange = async () => await parseExcel(lk.files[0]);
}; szak.onchange = async () => {
lk.onchange = ev => parseExcel(lk.files[0]);
szak.onchange = async ev => {
if (szak.value === "nope") return; if (szak.value === "nope") return;
let response = await fetch(document.URL.substr(0, document.URL.lastIndexOf('/')) + '/data/' + szak.value + "_bsc.csv"); let response = await fetch(document.URL.substr(0, document.URL.lastIndexOf('/')) + '/data/' + szak.value + "_bsc.csv");
let data = await response.text(); let data = await response.text();
let obj = Papa.parse(data); let obj = Papa.parse(data);
console.log(obj); const szakError = document.getElementById("szakError");
szakError.innerText = "";
if (obj.errors.length > 0) {
for (const error of obj.errors)
szakError.innerHTML += error.type + " - " + error.code + ": " + error.message + "<br />";
return;
}
console.log(obj.data);
let cat;
for (let i = 2; i < obj.data.length; i++) { //2: Skip header
const sdata = obj.data[i];
if (sdata.length < 10)
continue;
if (sdata[5].length === 0) { //Course type, only present at leaf nodes
let tempcat = tryGetCat(sdata[1]);
if (tempcat !== undefined)
cat = tempcat;
if (sdata[2].indexOf("specializáció") === -1)
continue;
const spec = new Specialization(sdata[1], sdata[2],
new SubjectCategory(sdata[1] + "MATSZTA", sdata[2] + " matekos tárgyak"),
new SubjectCategory(sdata[1] + "INFA", sdata[2] + " infós tárgyak"));
specs.push(spec);
continue;
}
if (cat === undefined) {
console.warn("No category found!");
continue;
}
subjects.push(new SubjectData(sdata[1], sdata[2], sdata[8], cat));
}
const specsSpan = document.getElementById("specs");
specsSpan.innerHTML = "";
for (const spec of specs) {
const count = subjects.reduce((pv, cv) => cv.category.spec === spec ? pv + 1 : pv, 0);
specsSpan.innerHTML += spec.name + ": " + count + "<br />";
}
}; };
function tryGetCat(categoryID) {
const spec = specs.find(spec => spec.matcat.id === categoryID || spec.infcat.id === categoryID)
return (spec && (spec.matcat.id === categoryID ? spec.matcat : spec.infcat)) || [
kotvalEgyebCat,
szakdogaCat,
szakmaiCat,
szabvalCat
].find(cat => cat.id === categoryID);
}
let subjects = [];
let specs = [
kotSpec,
kotvalSpec
];
(async () => {
await szak.onchange(undefined);
await lk.onchange(undefined);
}
)();

View file

@ -11,6 +11,7 @@ Az adatok tájékoztató jellegűek, a kiírt eredményekért felelősséget nem
## 1. Válaszd ki a képzést ## 1. Válaszd ki a képzést
<label> <label>
Képzés:
<select style="color: black" id="szak"> <select style="color: black" id="szak">
<option selected value="nope">---- Szakok ----</option> <option selected value="nope">---- Szakok ----</option>
<option value="gi">gazdaságinformatikus</option> <option value="gi">gazdaságinformatikus</option>
@ -18,6 +19,7 @@ Az adatok tájékoztató jellegűek, a kiírt eredményekért felelősséget nem
<option value="mi">mérnökinformatikus</option> <option value="mi">mérnökinformatikus</option>
</select> </select>
</label> </label>
<span id="szakError" style="color: red"></span>
## 2. Neptun leckekönyv export ## 2. Neptun leckekönyv export
Szükség lesz a Neptunban a Tanulmányok -> Leckekönyv -> Minden félév -> XLS export (ikon jobb oldalt) eredményére. Szükség lesz a Neptunban a Tanulmányok -> Leckekönyv -> Minden félév -> XLS export (ikon jobb oldalt) eredményére.
@ -27,7 +29,7 @@ Szükség lesz a Neptunban a Tanulmányok -> Leckekönyv -> Minden félév -> XL
## 3. Teljesítések: ## 3. Teljesítések:
<span id="specs"></span> <span id="specs"></span>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.6/jszip.js"></script> <script src="xlsx.full.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.6/xlsx.js"></script>
<script src="papaparse.min.js"></script> <script src="papaparse.min.js"></script>
<script src="specdata.js"></script>
<script src="spec.js"></script> <script src="spec.js"></script>

38
specdata.js Normal file
View file

@ -0,0 +1,38 @@
class SubjectData {
constructor(id, name, credit, category) {
this.id = id;
this.name = name;
this.credit = credit;
this.category = category;
}
}
class SubjectCategory {
constructor(id, name) {
this.id = id;
this.name = name;
this.spec = null;
}
}
class Specialization {
constructor(id, name, matcat, infcat) {
this.id = id;
this.name = name;
this.matcat = matcat;
matcat.spec = this;
this.infcat = infcat;
infcat.spec = this;
}
}
const kotMatCat = new SubjectCategory("MKALA", "Kötelező matekos tárgyak");
const kotInfCat = new SubjectCategory("MKSZT", "Kötelező infós tárgyak")
kotSpec = new Specialization("KOT", "Kötelező tárgyak", kotMatCat, kotInfCat);
const kotvalMatCat = new SubjectCategory("MKDIFMATSZT", "Kötvál matekos tárgyak");
const kotvalInfCat = new SubjectCategory("MKDIFINF", "Kötvál infós tárgyak");
kotvalSpec = new Specialization("MK-DIF", "Specializáció nélkül", kotvalMatCat, kotvalInfCat);
kotvalEgyebCat = new SubjectCategory("MKDIFFEGYEB", "Kötvál egyéb tárgyak");
szakdogaCat = new SubjectCategory("MKSZD", "Szakdolgozat");
szakmaiCat = new SubjectCategory("MKSZG", "Szakmai gyakorlat");
szabvalCat = new SubjectCategory("MKSZV", "Szabadon választható tárgyak");

23
xlsx.full.min.js vendored Normal file

File diff suppressed because one or more lines are too long