From 951966febb19bad7a8581393fe09ee34909cc621 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Thu, 23 Oct 2025 11:55:44 +0000
Subject: [PATCH] GS-2375
---
lib/db.js | 77 ++++++++++++++++++++++++++++++++++++++
test/testKursLp.js | 8 +++
2 files changed, 84 insertions(+), 1 deletions(-)
diff --git a/lib/db.js b/lib/db.js
index d02f06c..591b25f 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -1,5 +1,6 @@
const mysql = require("mysql2/promise")
const dayjs = require("dayjs")
+const _ = require("lodash")
const log = require("../logger")
const searchLib = require("./search")
@@ -406,7 +407,83 @@
}
async function getKursLp(obj_id) {
+ const {ref_id} = await getRefIdFromObjId(obj_id)
+ console.log(ref_id)
+ const teilnehmer = await getKursTeilnehmer(ref_id)
+ const tnUnter = await getKursUnterobjektLp(obj_id)
+ console.table(teilnehmer)
+ console.table(tnUnter)
+ /**
+ * Die beiden Datensätze mergen
+ *
+ *
+ */
+
+ const idx = _.groupBy(tnUnter, "usr_id")
+ for (const tn of teilnehmer) {
+ delete tn.parent_id
+ delete tn.type
+ delete tn.active
+
+ /** @type Array */
+ const unter = idx[tn.usr_id]
+ if (!unter) continue
+
+ /**
+ * wenn unter.status_changed neuer, wird unter tn.status_changed vorgezogen
+ * wenn unter.status neuer, überscheibt es tn.status
+ * tn.passed muss zurückgesetzt werden wenn tn.status überschrieben wird
+ */
+ tn.status_overwrite = false
+
+ // max unter status_changed finden
+ const unterStatusChanged = _.max(unter.map(u => u.status_changed))
+
+ // es muss nur überschrieben werden wenn das Unterdatum größer ist
+ if (unterStatusChanged > tn.status_changed) {
+ // unter Status auswerten
+ // 0 = noch nicht bearbeitet
+ // 1 = in Bearbeitung
+ // 2 = bestanden
+ // 3 = nicht bestanden
+
+ /** @type Array */
+ const unterStatusse = unter.map(u => u.status)
+ let newStatus = tn.status
+ const allSame = function () {
+ if (!unterStatusse.length) return false
+ const first = unterStatusse[0]
+ return unterStatusse.every(it => it === first)
+ }()
+ console.log({unterStatusse})
+ // Fall 1: keine Unterstatussse vorhanden -> status vom Kurs
+ if (!unterStatusse.length) {
+ newStatus = tn.status
+ }
+ // Fall 2: eines nicht bestanden -> nicht bestanden // 0,1,2,3 -> 3
+ if (unterStatusse.some(u => u === 3)) {
+ newStatus = 3
+ }
+ // Fall 3: alle statusse gleich -> status // 0,0,0 1,1,1 2,2,2 3,3,3
+ else if (allSame) {
+ newStatus = unterStatusse[0]
+ }
+ // Fall 4: wenn eines in Bearbeitung -> in Bearbeitung // 0,1,0 2,1,2
+ else if (unterStatusse.some(u => u === 1)) {
+ newStatus = 1
+ }
+ // Fall 5: sonst in Bearbeitung
+ else {
+ // newStatus = Math.max.apply(this, unterStatusse)
+ newStatus = 1
+ }
+ tn.status_changed = unterStatusChanged
+ tn.status = newStatus
+ tn.status_overwrite = true
+ }
+ }
+ return teilnehmer
}
async function getKursUnterobjektLp(obj_id) {
diff --git a/test/testKursLp.js b/test/testKursLp.js
index 7bcf6a2..4f37ab0 100644
--- a/test/testKursLp.js
+++ b/test/testKursLp.js
@@ -21,7 +21,7 @@
describe("the function getKursUnterobjektLp", function () {
it("should deliver the LP for the Kurs Unterobjekte", async function () {
const res = await db.getKursUnterobjektLp(kursId)
- console.table(res)
+ // console.table(res)
expect(res).to.be.a("array")
for(const item of res) {
expect(item).to.have.property("obj_id").and.to.be.a("number")
@@ -35,6 +35,12 @@
})
})
+ describe("the function getKursLp", function () {
+ it("should return the unified LP of a Kurs", async function () {
+ const res = await db.getKursLp(kursId)
+ console.table(res)
+ })
+ })
})
--
Gitblit v1.8.0