aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-10-02 15:51:02 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-10-02 15:51:02 +0200
commit52e7efb5faf070ed02f159895d63ffb0c757f756 (patch)
tree5e7c4f2c1c85aaa9eee263f4652fab07806a17e2 /src
parent349262b8c82c96ad8c4237d2a191d4b7ba208b13 (diff)
downloadbycs-sol-52e7efb5faf070ed02f159895d63ffb0c757f756.tar.gz
bycs-sol-52e7efb5faf070ed02f159895d63ffb0c757f756.zip
mass-graduation: fix list of changes
Fix the code copied from cockpit to list all changes made by a coach. Fixes: 1f458004ee2a018cff176c9939a9e8b03425dbfa
Diffstat (limited to 'src')
-rw-r--r--src/mass-graduation.js28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/mass-graduation.js b/src/mass-graduation.js
index ff30675..7ff8f1d 100644
--- a/src/mass-graduation.js
+++ b/src/mass-graduation.js
@@ -1,10 +1,11 @@
import {
GraduationChange,
+ LEVEL_NAMES,
fetchGraduationChanges,
submitGraduationChange,
deleteGraduationChange,
} from "./graduation-ENV.ts";
-import { fetchStudents } from "./student-ENV.ts";
+import { fetchStudent, fetchStudents } from "./student-ENV.ts";
import { CourseLocalStorage, DATETIME_FMT, getName, splitmix32 } from "./utils-ENV.js";
let name;
@@ -150,6 +151,7 @@ function submitMassGraduation() {
state.innerHTML = "";
state.classList.add("submit-mass-graduation-inprogress");
state.style.display = "unset";
+ document.getElementById("submit-mass-graduation").disabled = true;
// TODO(muhq): await graduation promises
@@ -205,11 +207,19 @@ function submitMassGraduation() {
async function loadChanges() {
// TODO(muhq): deduplicate code with cockpit
const changesTbl = document.getElementById("graduation-changes");
- const changes = await fetchGraduationChanges();
- for (const change of changes) {
- if (change.coach !== name) continue;
+ // TODO(muhq): include universal changes
+ const [studentChanges, _] = await fetchGraduationChanges();
+ const changes = [];
+ studentChanges.forEach((chngs, s) => {
+ for (const c of chngs) {
+ if (c.coach !== name) continue;
+ c.student = s;
+ changes.push(c);
+ }
+ });
+ for (const change of changes) {
const changeTr = document.createElement("tr");
switch (change.change) {
@@ -232,13 +242,16 @@ async function loadChanges() {
tds.push(changeTd);
};
+ const student = await fetchStudent(change.student);
+ addTd(student.name);
+ addTd(change.student);
addTd(change.change);
addTd(DATETIME_FMT.format(change.date));
addTd(change.reason);
let ctxFmt = "";
switch (change.change) {
case "CoachZuweisung":
- ctxFmt = change.context.zuweisungen[student.id];
+ ctxFmt = change.context.zuweisungen[change.student];
break;
case "LevelÄnderung":
ctxFmt = LEVEL_NAMES[change.context.level];
@@ -257,7 +270,7 @@ async function loadChanges() {
const delBtn = document.createElement("button");
delBtn.innerHTML = "Löschen";
- delBtn.addEventListener("click", () => {
+ delBtn.addEventListener("click", async function () {
const state = document.createElement("span");
state.classList.add("graduation-delete-state");
@@ -266,9 +279,8 @@ async function loadChanges() {
state.appendChild(inprogress);
delBtn.replaceWith(state);
- deleteGraduationChange(graduation, change)
+ deleteGraduationChange(await student.getGraduation(), change)
.then(() => {
- updateStudentInfo();
state.style.display = "inline";
state.innerHTML = "✓";
for (const td of tds) {