From 777e653a6a01cfcd771746c637dd2227f39a516a Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 4 Jan 2021 22:24:52 +0100 Subject: [PATCH] Merging variations of subjects, earned credit calc --- spec.js | 54 ++++++++++++++++++++++++++++++++++++++++++++--------- spec.md | 8 ++++---- specdata.js | 21 +++++++++++---------- 3 files changed, 60 insertions(+), 23 deletions(-) diff --git a/spec.js b/spec.js index f75fc62..0debfce 100644 --- a/spec.js +++ b/spec.js @@ -15,12 +15,37 @@ parseExcel = async function (file) { workbook.SheetNames.forEach(function (sheetName) { const rows = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); - console.log(rows); - console.log(rows[0]["Tárgykód"]); for (const row of rows) { - //grades[rows[0]["Tárgykód"]] = new SubjectGrades(rows[0]["Tárgykód"], rows[0]["Tárgy címe, előadó neve"], ""); + let id = row["Tárgykód"].replaceAll(/[‑-]\d{5}/g, "").replaceAll(/‑/g, "-"); + id = row["Tárgy címe, előadó neve"].indexOf("tehetséggondozó") !== -1 ? id + "-TG" : id; + const subject = subjects[id]; + if (!subject) { + console.warn("Subject not found: " + id + " " + row["Tárgy címe, előadó neve"]); + continue; + } + let grade = /\((\d)\)(?!.*\(\d\))/.exec(row["Jegyek"]); + if (grade == null) + continue; + subject.grade = +grade[1]; + subject.credit = +row["Kr."]; + grades[id] = subject; } const specsSpan = document.getElementById("specs"); + const total = {}; + for (const sub of Object.values(grades)) { + for (const category of sub.categories) { + if (sub.grade <= 1) continue; + if (total[category.id] === undefined) + total[category.id] = sub.credit; + else + total[category.id] += sub.credit; + } + } + specsSpan.innerHTML = ""; + for (const tk of Object.keys(total)) { + const cat = tryGetCat(tk); + specsSpan.innerHTML += cat.name + ": " + total[tk] + "/" + cat.neededCredit + "
"; + } }); } catch (ex) { @@ -48,13 +73,16 @@ szak.onchange = async () => { continue; if (sdata[5].length === 0) { //Course type, only present at leaf nodes let tempcat = tryGetCat(sdata[1]); - if (tempcat !== undefined) + if (tempcat !== undefined) { cat = tempcat; + if (cat.spec && cat.spec !== kotSpec && cat.spec !== kotvalSpec) + cat.neededCredit = +sdata[9]; + } if (sdata[2].indexOf("specializáció") === -1) continue; const spec = new Specialization(sdata[1], sdata[2], - new SubjectCategory(sdata[1] + "‑MATSZT‑A", sdata[2] + " matekos tárgyak"), - new SubjectCategory(sdata[1] + "‑INF‑A", sdata[2] + " infós tárgyak")); + new SubjectCategory(sdata[1] + "‑MATSZT", sdata[2] + " matekos tárgyak", 0), + new SubjectCategory(sdata[1] + "‑INF", sdata[2] + " infós tárgyak"), 0); specs.push(spec); continue; } @@ -62,13 +90,21 @@ szak.onchange = async () => { console.warn("No category found!"); continue; } - subjects[sdata[1]] = new SubjectData(sdata[1], sdata[2], sdata[8], cat); + let id = sdata[1].replaceAll(/[‑-]\d{5}/g, "").replaceAll(/‑/g, "-"); + id = sdata[2].indexOf("tehetséggondozó") !== -1 ? id + "-TG" : id; + if (!subjects[id]) + subjects[id] = new SubjectData(id, sdata[2], sdata[8], [cat]); + else { + subjects[id].categories.push(cat); + /*if (subjects[id].credit !== sdata[8]) - Több különböző kredit-eloszlású verzió is lehet egy tárgyból + console.warn("Credit amount differs for " + sdata[2] + ": " + subjects[id].credit + " " + sdata[8]);*/ + } } for (const spec of specs) { - const count = Object.values(subjects).reduce((pv, cv) => cv.category.spec === spec ? pv + 1 : pv, 0); + const count = Object.values(subjects).reduce((pv, cv) => cv.categories.reduce((pcv, ccv) => pcv || ccv.spec === spec, false) ? pv + 1 : pv, 0); console.log(spec.name + ": " + count); } - const count = Object.values(subjects).reduce((pv, cv) => cv.category.spec === null ? pv + 1 : pv, 0); + const count = Object.values(subjects).reduce((pv, cv) => cv.categories.reduce((pcv, ccv) => pcv || ccv.spec === null, false) ? pv + 1 : pv, 0); console.log("Egyéb tárgyak: " + count); }; diff --git a/spec.md b/spec.md index 42e0d85..cf196d7 100644 --- a/spec.md +++ b/spec.md @@ -1,12 +1,12 @@ --- -title: SZTE specializációk -ptitle: Specializációk követelményei +title: SZTE infós kreditszámoló +ptitle: Kreditszámoló --- -Ez az oldal segít kiszámítani az egyes specializációkhoz már megszerzett krediteket, és egyéb feltételeket. +Ez az oldal segít kiszámítani (az egyes specializációkhoz is) már megszerzett krediteket, és egyéb feltételeket. *A megadott adatok a gépeden maradnak, azokat nem kapom meg. -Az adatok tájékoztató jellegűek, a kiírt eredményekért felelősséget nem vállalok.* +Az eredmények pontosságáért felelősséget nem vállalok, hiteles tájékoztatásért fordulj a TO-hoz.* ## 1. Válaszd ki a képzést diff --git a/specdata.js b/specdata.js index 73a5537..4564864 100644 --- a/specdata.js +++ b/specdata.js @@ -1,18 +1,19 @@ class SubjectData { - constructor(id, name, credit, category) { + constructor(id, name, credit, categories) { this.id = id; this.name = name; this.credit = credit; - this.category = category; + this.categories = categories; this.grade = 0; } } class SubjectCategory { - constructor(id, name) { + constructor(id, name, neededCredit) { this.id = id; this.name = name; this.spec = null; + this.neededCredit = neededCredit; } } @@ -27,13 +28,13 @@ class Specialization { } } -const kotMatCat = new SubjectCategory("MK‑ALA", "Kötelező matekos tárgyak"); -const kotInfCat = new SubjectCategory("MK‑SZT", "Kötelező infós tárgyak") +const kotMatCat = new SubjectCategory("MK‑ALA", "Kötelező matekos tárgyak", 46); +const kotInfCat = new SubjectCategory("MK‑SZT", "Kötelező infós tárgyak", 52) kotSpec = new Specialization("KOT", "Kötelező tárgyak", kotMatCat, kotInfCat); -const kotvalMatCat = new SubjectCategory("MK‑DIF‑MATSZT", "Kötvál matekos tárgyak"); -const kotvalInfCat = new SubjectCategory("MK‑DIF‑INF", "Kötvál infós tárgyak"); +const kotvalMatCat = new SubjectCategory("MK‑DIF‑MATSZT", "Kötvál matekos tárgyak", 14); +const kotvalInfCat = new SubjectCategory("MK‑DIF‑INF", "Kötvál infós tárgyak", 23); kotvalSpec = new Specialization("MK-DIF", "Specializáció nélkül", kotvalMatCat, kotvalInfCat); kotvalEgyebCat = new SubjectCategory("MK‑DIFF‑EGYEB", "Kötvál egyéb tárgyak"); -szakdogaCat = new SubjectCategory("MK‑SZD", "Szakdolgozat"); -szakmaiCat = new SubjectCategory("MK‑SZG", "Szakmai gyakorlat"); -szabvalCat = new SubjectCategory("MK‑SZV", "Szabadon választható tárgyak"); +szakdogaCat = new SubjectCategory("MK‑SZD", "Szakdolgozat", 20); +szakmaiCat = new SubjectCategory("MK‑SZG", "Szakmai gyakorlat", 0); +szabvalCat = new SubjectCategory("MK‑SZV", "Szabadon választható tárgyak", 10);