From 96afe9253474a7d542f3e5a467276993b7dc43ce Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Thu, 23 Oct 2025 17:25:45 +0000
Subject: [PATCH] GS-2375
---
lib/db.js | 127 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 125 insertions(+), 2 deletions(-)
diff --git a/lib/db.js b/lib/db.js
index 6f9922c..a9a41a7 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")
@@ -42,6 +43,9 @@
getKursTeilnehmer,
getSingleKursTeilnehmer,
getKursTeilnehmerCount,
+
+ getKursLp,
+ getKursUnterobjektLp,
getKursOffline,
setKursOffline,
@@ -402,10 +406,129 @@
return results
}
+async function getKursLp(obj_id, raw = false) {
+ const {ref_id} = await getRefIdFromObjId(obj_id)
+ const tnUnter = await getKursUnterobjektLp(obj_id)
+
+ if (raw) {
+ return tnUnter
+ } else { // LP aller Unterobjekte zusammenfassen
+ const libLp = require("../lib/libLp")
+ const data = libLp.alleAuswerten(tnUnter)
+ return data
+ }
+
+ // const teilnehmer = await getKursTeilnehmer(ref_id)
+ // const tnUnter = await getKursUnterobjektLp(obj_id)
+ // console.table(teilnehmer)
+ // console.table(tnUnter)
+ //
+ // /**
+ // * Die beiden Datensätze mergen
+ // * NEIN - es reicht der
+ // *
+ // */
+ //
+ // 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) {
+ const pool = await poolP
+ const q = `SELECT ud.usr_id,
+ ud.login,
+ ud.firstname,
+ ud.lastname,
+ ulc.obj_id,
+ ulc.item_id,
+ ulc.lpmode,
+ t.obj_id as item_obj_id,
+ od.type,
+ ulm.status,
+ ulm.status_changed,
+ ulm.percentage,
+ ulm.completed
+ FROM ${database}.ut_lp_collections ulc
+ INNER JOIN ${database}.object_reference t ON t.ref_id = ulc.item_id
+ INNER JOIN ${database}.ut_lp_marks ulm ON ulm.obj_id = t.obj_id
+ INNER JOIN ${database}.usr_data ud ON ud.usr_id = ulm.usr_id
+ INNER JOIN ${database}.object_data od ON od.obj_id = t.obj_id
+ WHERE ulc.obj_id = ${obj_id} # obj_id Kurs
+ AND ulc.active = 1
+ AND ulc.lpmode = 5 # nur mode 5
+ ORDER BY ud.usr_id, ulc.item_id
+ `
+ const [results] = await pool.query(q)
+ return results
+}
+
+
async function getKursOffline(obj_id) {
const pool = await poolP
- const q = `SELECT offline
- FROM ${database}.object_data
+ const q = `SELECT offline
+ FROM ${database}.object_data
WHERE obj_id = ${obj_id}
`
const [results] = await pool.query(q)
--
Gitblit v1.8.0